Index: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.php |
— | — | @@ -0,0 +1,41 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 5 | + echo "Not a valid entry point"; |
| 6 | + exit( 1 ); |
| 7 | +} |
| 8 | + |
| 9 | +# |
| 10 | +# This is the path to your installation of SemanticTasks as |
| 11 | +# seen from the web. Change it if required ($wgScriptPath is the |
| 12 | +# path to the base directory of your wiki). No final slash. |
| 13 | +# # |
| 14 | +$stScriptPath = $wgScriptPath . '/extensions/SemanticTasks'; |
| 15 | +# |
| 16 | + |
| 17 | +# Informations |
| 18 | +$wgExtensionCredits['parserhook'][] = array( |
| 19 | + 'path' => __FILE__, |
| 20 | + 'name' => 'SemanticTasks', |
| 21 | + 'author' => 'Steren Giannini, Ryan Lane', |
| 22 | + 'version' => '1.3', |
| 23 | + 'url' => 'http://www.mediawiki.org/wiki/Extension:Semantic_Tasks', |
| 24 | + 'descriptionmsg' => 'semantictasks-desc', |
| 25 | +); |
| 26 | + |
| 27 | +// Do st_SetupExtension after the mediawiki setup, AND after SemanticMediaWiki setup |
| 28 | +// FIXME: only hook added is ArticleSaveComplete. There appears to be no need for this. |
| 29 | +$wgExtensionFunctions[] = 'SemanticTasksSetupExtension'; |
| 30 | + |
| 31 | +// i18n |
| 32 | +$wgExtensionMessagesFiles['SemanticTasks'] = dirname( __FILE__ ) . '/SemanticTasks.i18n.php'; |
| 33 | + |
| 34 | +$dir = dirname( __FILE__ ) . '/'; |
| 35 | +$wgAutoloadClasses['SemanticTasksMailer'] = $dir . 'SemanticTasks.classes.php'; |
| 36 | + |
| 37 | +function SemanticTasksSetupExtension() { |
| 38 | + global $wgHooks; |
| 39 | + $wgHooks['ArticleSaveComplete'][] = 'SemanticTasksMailer::mailAssigneesUpdatedTask'; |
| 40 | + $wgHooks['ArticleSave'][] = 'SemanticTasksMailer::findOldValues'; |
| 41 | + return true; |
| 42 | +} |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 43 | + native |
Index: tags/extensions/SemanticTasks/REL_1_3/INSTALL |
— | — | @@ -0,0 +1,9 @@ |
| 2 | +[[Semantic Tasks 1.2]] |
| 3 | + |
| 4 | +== Installation == |
| 5 | + |
| 6 | +(1) Extract the archive to obtain the directory "SemanticTasks" |
| 7 | + that contains all relevant files. Copy this directory (or |
| 8 | + extract/download it) to "[wikipath]/extensions/". |
| 9 | +(2) Insert the following line into the file "[wikipath]/LocalSettings.php": |
| 10 | + require_once( "$IP/extensions/SemanticTasks/SemanticTasks.php" ); |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/INSTALL |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 11 | + native |
Index: tags/extensions/SemanticTasks/REL_1_3/ST_CheckForReminders.php |
— | — | @@ -0,0 +1,16 @@ |
| 2 | +<?php |
| 3 | +# (C) 2008 Steren Giannini |
| 4 | +# Licensed under the GNU GPLv2 (or later). |
| 5 | + |
| 6 | +$IP = realpath( dirname( __FILE__ ) . "/../.." ); |
| 7 | +require_once( "$IP/maintenance/commandLine.inc" ); |
| 8 | + |
| 9 | +global $smwgIP; |
| 10 | +require_once( $smwgIP . 'includes/SMW_Factbox.php' ); |
| 11 | + |
| 12 | +require_once( dirname( __FILE__ ) . '/SemanticTasks.classes.php' ); |
| 13 | + |
| 14 | +// Let's send reminders |
| 15 | +SemanticTasksMailer::remindAssignees( 'http://teamspace.creativecommons.org/' ); |
| 16 | + |
| 17 | +print( "ST check for reminders\n" ); |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/ST_CheckForReminders.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 18 | + native |
Index: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.classes.php |
— | — | @@ -0,0 +1,426 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +// constants for message type |
| 5 | +define( "NEWTASK", 0 ); |
| 6 | +define( "UPDATE", 1 ); |
| 7 | +define( "ASSIGNED", 2 ); |
| 8 | +define( "CLOSED", 3 ); |
| 9 | + |
| 10 | +/** |
| 11 | + * This class handles the creation and sending of notification emails. |
| 12 | + */ |
| 13 | +class SemanticTasksMailer { |
| 14 | + private static $task_assignees; |
| 15 | + private static $task_status; |
| 16 | + |
| 17 | + function findOldValues( &$article, &$user, &$text, &$summary, $minor, $watch, $sectionanchor, &$flags ) { |
| 18 | + $title = $article->getTitle(); |
| 19 | + $title_text = $title->getText(); |
| 20 | + |
| 21 | + $assignees = self::getAssignees( 'Assigned to', $title_text, $user ); |
| 22 | + $status = self::getStatus( 'Status', $title_text, $user ); |
| 23 | + |
| 24 | + self::printDebug( "Old assignees: ", $assignees ); |
| 25 | + self::printDebug( "Old status: " , $status ); |
| 26 | + |
| 27 | + self::$task_assignees = $assignees; |
| 28 | + |
| 29 | + if ( count( $status ) > 0 ) { |
| 30 | + self::$task_status = $status[0]; |
| 31 | + } else { |
| 32 | + self::$task_status = ""; |
| 33 | + } |
| 34 | + |
| 35 | + return true; |
| 36 | + } |
| 37 | + |
| 38 | + |
| 39 | + function mailAssigneesUpdatedTask( $article, $current_user, $text, $summary, $minoredit, $watchthis, $sectionanchor, $flags, $revision ) { |
| 40 | + if ( !$minoredit ) { |
| 41 | + // Get the revision count to determine if new article |
| 42 | + $rev = $article->estimateRevisionCount(); |
| 43 | + |
| 44 | + if ( $rev == 1 ) { |
| 45 | + $title = $article->getTitle(); |
| 46 | + if ( $title->isTalkPage() ) { |
| 47 | + $status = UPDATE; |
| 48 | + } else { |
| 49 | + $status = NEWTASK; |
| 50 | + } |
| 51 | + } else { |
| 52 | + $status = UPDATE; |
| 53 | + } |
| 54 | + self::mailAssignees( $article, $text, $current_user, $status ); |
| 55 | + } |
| 56 | + return true; |
| 57 | + } |
| 58 | + |
| 59 | + function mailAssignees( $article, $text, $user, $status ) { |
| 60 | + self::printDebug( "Saved assignees:", self::$task_assignees ); |
| 61 | + self::printDebug( "Saved task status: " . self::$task_status ); |
| 62 | + |
| 63 | + $title = $article->getTitle(); |
| 64 | + $title_text = $title->getText(); |
| 65 | + |
| 66 | + $assignees_to_task = array(); |
| 67 | + $current_assignees = self::getAssignees( 'Assigned to', $title_text, $user ); |
| 68 | + |
| 69 | + self::printDebug( "Previous assignees: ", self::$task_assignees ); |
| 70 | + self::printDebug( "New assignees: ", $current_assignees ); |
| 71 | + |
| 72 | + foreach ( $current_assignees as $assignee ) { |
| 73 | + if ( !in_array( $assignee, self::$task_assignees ) ) { |
| 74 | + array_push( $assignees_to_task, $assignee ); |
| 75 | + } |
| 76 | + } |
| 77 | + |
| 78 | + self::printDebug( "Assignees to task: ", $assignees_to_task ); |
| 79 | + |
| 80 | + // Send notification of an assigned task to assignees |
| 81 | + // Treat task as new |
| 82 | + $assignees_to_task = self::getAssigneeAddresses( $assignees_to_task ); |
| 83 | + self::mailNotification( $assignees_to_task, $text, $title, $user, ASSIGNED ); |
| 84 | + |
| 85 | + // Only send group notifications on new tasks |
| 86 | + if ( $status == NEWTASK ) { |
| 87 | + $groups = self::getGroupAssignees( 'Assigned to group', $title_text, $user ); |
| 88 | + } else { |
| 89 | + $groups = array(); |
| 90 | + } |
| 91 | + |
| 92 | + $copies = self::getAssignees( 'Carbon copy', $title_text, $user ); |
| 93 | + |
| 94 | + $current_task_status = self::getStatus( 'Status', $title_text, $user ); |
| 95 | + self::printDebug( "New status: ", $current_task_status ); |
| 96 | + if ( count( $current_task_status ) > 0 ) { |
| 97 | + $current_task_status = $current_task_status[0]; |
| 98 | + if ( $current_task_status == "Closed" && self::$task_status != "Closed" ) { |
| 99 | + $close_mailto = self::getAssigneeAddresses( $copies ); |
| 100 | + self::mailNotification( $close_mailto, $text, $title, $user, CLOSED ); |
| 101 | + } |
| 102 | + } |
| 103 | + |
| 104 | + $mailto = array_merge( $current_assignees, $copies, $groups ); |
| 105 | + $mailto = array_unique( $mailto ); |
| 106 | + $mailto = self::getAssigneeAddresses( $mailto ); |
| 107 | + |
| 108 | + // Send notifications to assignees, ccs, and groups |
| 109 | + self::mailNotification( $mailto, $text, $title, $user, $status ); |
| 110 | + |
| 111 | + return true; |
| 112 | + } |
| 113 | + |
| 114 | + /** |
| 115 | + * Returns an array of properties based on $query_word |
| 116 | + * @param $query_word String: the property that designate the users to notify. |
| 117 | + */ |
| 118 | + function getAssignees( $query_word, $title_text, $user ) { |
| 119 | + // Array of assignees to return |
| 120 | + $assignee_arr = array(); |
| 121 | + |
| 122 | + // get the result of the query "[[$title]][[$query_word::+]]" |
| 123 | + $properties_to_display = array(); |
| 124 | + $properties_to_display[0] = $query_word; |
| 125 | + $results = self::getQueryResults( "[[$title_text]][[$query_word::+]]", $properties_to_display, false ); |
| 126 | + |
| 127 | + // In theory, there is only one row |
| 128 | + while ( $row = $results->getNext() ) { |
| 129 | + $task_assignees = $row[0]; |
| 130 | + } |
| 131 | + |
| 132 | + // If not any row, do nothing |
| 133 | + if ( !empty( $task_assignees ) ) { |
| 134 | + while ( $task_assignee = $task_assignees->getNextObject() ) { |
| 135 | + $assignee_name = $task_assignee->getTitle(); |
| 136 | + $assignee_name = $assignee_name->getText(); |
| 137 | + $assignee_name = explode( ":", $assignee_name ); |
| 138 | + $assignee_name = $assignee_name[0]; |
| 139 | + |
| 140 | + array_push( $assignee_arr, $assignee_name ); |
| 141 | + } |
| 142 | + } |
| 143 | + |
| 144 | + return $assignee_arr; |
| 145 | + } |
| 146 | + |
| 147 | + /** |
| 148 | + * Returns an array of properties based on $query_word |
| 149 | + * @param $query_word String: the property that designate the users to notify. |
| 150 | + */ |
| 151 | + function getStatus( $query_word, $title_text, $user ) { |
| 152 | + // Array of assignees to return |
| 153 | + $assignee_arr = array(); |
| 154 | + |
| 155 | + // get the result of the query "[[$title]][[$query_word::+]]" |
| 156 | + $properties_to_display = array(); |
| 157 | + $properties_to_display[0] = $query_word; |
| 158 | + $results = self::getQueryResults( "[[$title_text]][[$query_word::+]]", $properties_to_display, false ); |
| 159 | + |
| 160 | + // In theory, there is only one row |
| 161 | + while ( $row = $results->getNext() ) { |
| 162 | + $task_assignees = $row[0]; |
| 163 | + } |
| 164 | + |
| 165 | + // If not any row, do nothing |
| 166 | + if ( !empty( $task_assignees ) ) { |
| 167 | + while ( $task_assignee = $task_assignees->getNextObject() ) { |
| 168 | + $assignee_name = $task_assignee->getWikiValue(); |
| 169 | + $assignee_name = $assignee_name; |
| 170 | + |
| 171 | + array_push( $assignee_arr, $assignee_name ); |
| 172 | + } |
| 173 | + } |
| 174 | + |
| 175 | + return $assignee_arr; |
| 176 | + } |
| 177 | + |
| 178 | + /** |
| 179 | + /** |
| 180 | + * Returns an array of assignees based on $query_word |
| 181 | + * @param $query_word String: the property that designate the users to notify. |
| 182 | + */ |
| 183 | + function getGroupAssignees( $query_word, $title_text, $user ) { |
| 184 | + // Array of assignees to return |
| 185 | + $assignee_arr = array(); |
| 186 | + |
| 187 | + // get the result of the query "[[$title]][[$query_word::+]]" |
| 188 | + $properties_to_display = array(); |
| 189 | + $properties_to_display[0] = $query_word; |
| 190 | + $results = self::getQueryResults( "[[$title_text]][[$query_word::+]]", $properties_to_display, false ); |
| 191 | + |
| 192 | + // In theory, there is only one row |
| 193 | + while ( $row = $results->getNext() ) { |
| 194 | + $group_assignees = $row[0]; |
| 195 | + } |
| 196 | + |
| 197 | + // If not any row, do nothing |
| 198 | + if ( !empty( $group_assignees ) ) { |
| 199 | + while ( $group_assignee = $group_assignees->getNextObject() ) { |
| 200 | + $group_assignee = $group_assignee->getTitle(); |
| 201 | + $group_name = $group_assignee->getText(); |
| 202 | + $query_word = "Has assignee"; |
| 203 | + $properties_to_display = array(); |
| 204 | + $properties_to_display[0] = $query_word; |
| 205 | + self::printDebug( $group_name ); |
| 206 | + $results = self::getQueryResults( "[[$group_name]][[$query_word::+]]", $properties_to_display, false ); |
| 207 | + |
| 208 | + // In theory, there is only one row |
| 209 | + while ( $row = $results->getNext() ) { |
| 210 | + $task_assignees = $row[0]; |
| 211 | + } |
| 212 | + |
| 213 | + if ( !empty( $task_assignees ) ) { |
| 214 | + while ( $task_assignee = $task_assignees->getNextObject() ) { |
| 215 | + $assignee_name = $task_assignee->getTitle(); |
| 216 | + $assignee_name = $assignee_name->getText(); |
| 217 | + $assignee_name = explode( ":", $assignee_name ); |
| 218 | + $assignee_name = $assignee_name[0]; |
| 219 | + |
| 220 | + self::printDebug( "Groupadd: " . $assignee_name ); |
| 221 | + array_push( $assignee_arr, $assignee_name ); |
| 222 | + } |
| 223 | + } |
| 224 | + } |
| 225 | + } |
| 226 | + |
| 227 | + return $assignee_arr; |
| 228 | + } |
| 229 | + |
| 230 | + function getAssigneeAddresses( $assignees ) { |
| 231 | + $assignee_arr = array(); |
| 232 | + foreach ( $assignees as $assignee_name ) { |
| 233 | + $assignee = User::newFromName( $assignee_name ); |
| 234 | + // if assignee is the current user, do nothing |
| 235 | + # if ( $assignee->getID() != $user->getID() ) { |
| 236 | + $assignee_mail = new MailAddress( $assignee->getEmail(), $assignee_name ); |
| 237 | + array_push( $assignee_arr, $assignee_mail ); |
| 238 | + self::printDebug( $assignee_name ); |
| 239 | + # } |
| 240 | + } |
| 241 | + |
| 242 | + return $assignee_arr; |
| 243 | + } |
| 244 | + |
| 245 | + /** |
| 246 | + * Sends mail notifications |
| 247 | + */ |
| 248 | + function mailNotification( $assignees, $text, $title, $user, $status ) { |
| 249 | + global $wgSitename; |
| 250 | + |
| 251 | + if ( !empty( $assignees ) ) { |
| 252 | + // i18n |
| 253 | + wfLoadExtensionMessages( 'SemanticTasks' ); |
| 254 | + |
| 255 | + $title_text = $title->getText(); |
| 256 | + $from = new MailAddress( $user->getEmail(), $user->getName() ); |
| 257 | + $link = $title->escapeFullURL(); |
| 258 | + |
| 259 | + if ( $status == NEWTASK ) { |
| 260 | + $subject = '[' . $wgSitename . '] ' . wfMsg( 'semantictasks-newtask' ) . ' ' . $title_text; |
| 261 | + $message = 'semantictasks-newtask-msg'; |
| 262 | + $body = wfMsg( $message , $title_text ) . " " . $link; |
| 263 | + $body .= "\n \n" . wfMsg( 'semantictasks-text-message' ) . "\n" . $text; |
| 264 | + } else if ( $status == UPDATE ) { |
| 265 | + $subject = '[' . $wgSitename . '] ' . wfMsg( 'semantictasks-taskupdated' ) . ' ' . $title_text; |
| 266 | + $message = 'semantictasks-updatedtoyou-msg2'; |
| 267 | + $body = wfMsg( $message , $title_text ) . " " . $link; |
| 268 | + $body .= "\n \n" . wfMsg( 'semantictasks-diff-message' ) . "\n" . self::generateDiffBodyTxt( $title ); |
| 269 | + } else if ( $status == CLOSED ) { |
| 270 | + $subject = '[' . $wgSitename . '] ' . wfMsg( 'semantictasks-taskclosed' ) . ' ' . $title_text; |
| 271 | + $message = 'semantictasks-taskclosed-msg'; |
| 272 | + $body = wfMsg( $message , $title_text ) . " " . $link; |
| 273 | + $body .= "\n \n" . wfMsg( 'semantictasks-text-message' ) . "\n" . $text; |
| 274 | + } else { |
| 275 | + // status == ASSIGNED |
| 276 | + $subject = '[' . $wgSitename . '] ' . wfMsg( 'semantictasks-taskassigned' ) . ' ' . $title_text; |
| 277 | + $message = 'semantictasks-assignedtoyou-msg2'; |
| 278 | + $body = wfMsg( $message , $title_text ) . " " . $link; |
| 279 | + $body .= "\n \n" . wfMsg( 'semantictasks-text-message' ) . "\n" . $text; |
| 280 | + } |
| 281 | + |
| 282 | + $user_mailer = new UserMailer(); |
| 283 | + |
| 284 | + $user_mailer->send( $assignees, $from, $subject, $body ); |
| 285 | + } |
| 286 | + } |
| 287 | + |
| 288 | + /** |
| 289 | + * Generates a diff txt |
| 290 | + * @param Title $title |
| 291 | + * @return string |
| 292 | + */ |
| 293 | + function generateDiffBodyTxt( $title ) { |
| 294 | + $revision = Revision::newFromTitle( $title, 0 ); |
| 295 | + $diff = new DifferenceEngine( $title, $revision->getId(), 'prev' ); |
| 296 | + // The getDiffBody() method generates html, so let's generate the txt diff manualy: |
| 297 | + global $wgContLang; |
| 298 | + $diff->loadText(); |
| 299 | + $otext = str_replace( "\r\n", "\n", $diff->mOldtext ); |
| 300 | + $ntext = str_replace( "\r\n", "\n", $diff->mNewtext ); |
| 301 | + $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) ); |
| 302 | + $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) ); |
| 303 | + // We use here the php diff engine included in MediaWiki |
| 304 | + $diffs = new Diff( $ota, $nta ); |
| 305 | + // And we ask for a txt formatted diff |
| 306 | + $formatter = new UnifiedDiffFormatter(); |
| 307 | + $diff_text = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) ); |
| 308 | + return $diff_text; |
| 309 | + } |
| 310 | + |
| 311 | + /** |
| 312 | + * This function returns to results of a certain query |
| 313 | + * Thank you Yaron Koren for advices concerning this code |
| 314 | + * @param $query_string String : the query |
| 315 | + * @param $properties_to_display array(String): array of property names to display |
| 316 | + * @param $display_title Boolean : add the page title in the result |
| 317 | + * @return TODO |
| 318 | + */ |
| 319 | + function getQueryResults( $query_string, $properties_to_display, $display_title ) { |
| 320 | + // i18n |
| 321 | + wfLoadExtensionMessages( 'SemanticTasks' ); |
| 322 | + |
| 323 | + // We use the Semantic MediaWiki Processor |
| 324 | + global $smwgIP; |
| 325 | + include_once( $smwgIP . "includes/SMW_QueryProcessor.php" ); |
| 326 | + |
| 327 | + $params = array(); |
| 328 | + $inline = true; |
| 329 | + $format = 'auto'; |
| 330 | + $printlabel = ""; |
| 331 | + $printouts = array(); |
| 332 | + |
| 333 | + // add the page name to the printouts |
| 334 | + if ( $display_title ) { |
| 335 | + $to_push = new SMWPrintRequest( SMWPrintRequest::PRINT_THIS, $printlabel ); |
| 336 | + array_push( $printouts, $to_push ); |
| 337 | + } |
| 338 | + |
| 339 | + // Push the properties to display in the printout array. |
| 340 | + foreach ( $properties_to_display as $property ) { |
| 341 | + if ( class_exists( 'SMWPropertyValue' ) ) { // SMW 1.4 |
| 342 | + $to_push = new SMWPrintRequest( SMWPrintRequest::PRINT_PROP, $printlabel, SMWPropertyValue::makeProperty( $property ) ); |
| 343 | + } else { |
| 344 | + $to_push = new SMWPrintRequest( SMWPrintRequest::PRINT_PROP, $printlabel, Title::newFromText( $property, SMW_NS_PROPERTY ) ); |
| 345 | + } |
| 346 | + array_push( $printouts, $to_push ); |
| 347 | + } |
| 348 | + |
| 349 | + $query = SMWQueryProcessor::createQuery( $query_string, $params, $inline, $format, $printouts ); |
| 350 | + $results = smwfGetStore()->getQueryResult( $query ); |
| 351 | + |
| 352 | + return $results; |
| 353 | + } |
| 354 | + |
| 355 | + function remindAssignees( $wiki_url ) { |
| 356 | + global $wgSitename, $wgServer; |
| 357 | + |
| 358 | + $user_mailer = new UserMailer(); |
| 359 | + |
| 360 | + $t = getdate(); |
| 361 | + $today = date( 'F d Y', $t[0] ); |
| 362 | + |
| 363 | + $query_string = "[[Reminder at::+]][[Status::New||In Progress]][[Target date::> $today]]"; |
| 364 | + $properties_to_display = array( 'Reminder at', 'Assigned to', 'Target date' ); |
| 365 | + |
| 366 | + $results = self::getQueryResults( $query_string, $properties_to_display, true ); |
| 367 | + if ( empty( $results ) ) { |
| 368 | + return FALSE; |
| 369 | + } |
| 370 | + |
| 371 | + $sender = new MailAddress( "no-reply@$wgServerName", "$wgSitename" ); |
| 372 | + |
| 373 | + while ( $row = $results->getNext() ) { |
| 374 | + $task_name = $row[0]->getNextObject()->getTitle(); |
| 375 | + $subject = '[' . $wgSitename . '] ' . wfMsg( 'semantictasks-reminder' ) . $task_name; |
| 376 | + // The following doesn't work, maybe because we use a cron job. |
| 377 | + // $link = $task_name->escapeFullURL(); |
| 378 | + // So let's do it manually |
| 379 | + $link = $wiki_url . $task_name->getPartialURL(); |
| 380 | + |
| 381 | + $target_date = $row[3]->getNextObject(); |
| 382 | + $tg_date = new DateTime( $target_date->getShortHTMLText() ); |
| 383 | + |
| 384 | + while ( $reminder = $row[1]->getNextObject() ) { |
| 385 | + $remind_me_in = $reminder->getShortHTMLText(); |
| 386 | + $date = new DateTime( $today ); |
| 387 | + $date->modify( "+$remind_me_in day" ); |
| 388 | + |
| 389 | + if ( $tg_date-> format( 'F d Y' ) == $date-> format( 'F d Y' ) ) { |
| 390 | + global $wgLang; |
| 391 | + while ( $task_assignee = $row[2]->getNextObject() ) { |
| 392 | + $assignee_username = $task_assignee->getTitle(); |
| 393 | + $assignee_user_name = explode( ":", $assignee_username ); |
| 394 | + $assignee_name = $assignee_user_name[1]; |
| 395 | + |
| 396 | + $assignee = User::newFromName( $assignee_name ); |
| 397 | + $assignee_mail = new MailAddress( $assignee->getEmail(), $assignee_name ); |
| 398 | + $body = wfMsgExt( 'semantictasks-reminder-message2', 'parsemag', $task_name, $wgLang->formatNum( $remind_me_in ), $link ); |
| 399 | + $user_mailer->send( $assignee_mail, $sender, $subject, $body ); |
| 400 | + } |
| 401 | + } |
| 402 | + } |
| 403 | + } |
| 404 | + return TRUE; |
| 405 | + } |
| 406 | + |
| 407 | + /** |
| 408 | + * Prints debugging information. $debugText is what you want to print, $debugVal |
| 409 | + * is the level at which you want to print the information. |
| 410 | + * |
| 411 | + * @param string $debugText |
| 412 | + * @param string $debugVal |
| 413 | + * @access private |
| 414 | + */ |
| 415 | + function printDebug( $debugText, $debugArr = null ) { |
| 416 | + global $wgSemanticTasksDebug; |
| 417 | + |
| 418 | + if ( $wgSemanticTasksDebug ) { |
| 419 | + if ( isset( $debugArr ) ) { |
| 420 | + $text = $debugText . " " . implode( "::", $debugArr ); |
| 421 | + wfDebugLog( 'semantic-tasks', $text, false ); |
| 422 | + } else { |
| 423 | + wfDebugLog( 'semantic-tasks', $debugText, false ); |
| 424 | + } |
| 425 | + } |
| 426 | + } |
| 427 | +} |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.classes.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 428 | + native |
Index: tags/extensions/SemanticTasks/REL_1_3/README |
— | — | @@ -0,0 +1,24 @@ |
| 2 | +== About == |
| 3 | + |
| 4 | +Semantic Tasks is an extension to MediaWiki that works in conjunction with another extension, Semantic MediaWiki, to provide email task notifications and reminders. |
| 5 | + |
| 6 | +Notes on installing Semantic tasks can be found in the file INSTALL. |
| 7 | + |
| 8 | +== Credits == |
| 9 | + |
| 10 | +Semantic Tasks was created by Steren Giannini for Creative Commons. |
| 11 | + |
| 12 | +== Manual == |
| 13 | + |
| 14 | +* Notification emails are sent when a page is saved. The system looks for the [[Assigned to::*]] and the [[Carbon copy::*]] property. |
| 15 | + |
| 16 | +* Reminder emails. The system looks for the [[Reminder at::*]] and the [[Target date::*]] property. It then send reminders to the assignees. |
| 17 | +You must run a cron job once a day to execute the reminder script: |
| 18 | + * edit your crontab file: |
| 19 | + $ crontab -e |
| 20 | + * add the following line to execute the script every day at 12: |
| 21 | + 0 12 * * * php extensions/SemanticTasks/ST_CheckForReminders.php |
| 22 | + |
| 23 | +== Contact == |
| 24 | + |
| 25 | +For comments, questions, suggestions or bug reports please contact steren.giannini@gmail.com |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/README |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 26 | + native |
Index: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.i18n.php |
— | — | @@ -0,0 +1,817 @@ |
| 2 | +<?php |
| 3 | +/** |
| 4 | + * Internationalization messages file for SemanticTasks extension |
| 5 | + * |
| 6 | + * @file |
| 7 | + * @ingroup Extensions |
| 8 | + */ |
| 9 | + |
| 10 | +$messages = array(); |
| 11 | + |
| 12 | +/** English (English) |
| 13 | + * @author Steren Giannini |
| 14 | + */ |
| 15 | +$messages['en'] = array( |
| 16 | + 'semantictasks-desc' => 'E-mail notifications for assigned or updated tasks', |
| 17 | + 'semantictasks-newtask' => 'New task:', |
| 18 | + 'semantictasks-taskassigned' => 'Task assigned:', |
| 19 | + 'semantictasks-taskupdated' => 'Task updated:', |
| 20 | + 'semantictasks-taskclosed' => 'Task closed:', |
| 21 | + 'semantictasks-newtask-msg' => 'The task "$1" has just been created.', |
| 22 | + 'semantictasks-taskclosed-msg' => 'The task "$1" has just been closed.', |
| 23 | + 'semantictasks-assignedtoyou-msg2' => 'The task "$1" has just been assigned to you.', |
| 24 | + 'semantictasks-updatedtoyou-msg2' => 'The task "$1" has just been updated.', |
| 25 | + 'semantictasks-reminder' => 'Reminder:', |
| 26 | + 'semantictasks-reminder-message2' => "Just to remind you that the task \"$1\" ends in $2 {{PLURAL:$2|day|days}}. |
| 27 | + |
| 28 | +$3", |
| 29 | + 'semantictasks-text-message' => 'Here is the task description:', |
| 30 | + 'semantictasks-diff-message' => 'Here are the differences:', |
| 31 | +); |
| 32 | + |
| 33 | +/** Message documentation (Message documentation) |
| 34 | + * @author Fryed-peach |
| 35 | + * @author Purodha |
| 36 | + */ |
| 37 | +$messages['qqq'] = array( |
| 38 | + 'semantictasks-desc' => '{{desc}}', |
| 39 | +); |
| 40 | + |
| 41 | +/** Arabic (العربية) |
| 42 | + * @author Meno25 |
| 43 | + * @author OsamaK |
| 44 | + */ |
| 45 | +$messages['ar'] = array( |
| 46 | + 'semantictasks-desc' => 'إخطارات بالبريد الإلكتروني للمهام الموكولة أو المحدثة', |
| 47 | + 'semantictasks-newtask' => 'مهمة جديدة:', |
| 48 | + 'semantictasks-taskupdated' => 'المهمة تم تحديثها:', |
| 49 | + 'semantictasks-assignedtoyou-msg2' => 'المهمة "$1" تم إيكالها حالا إليك', |
| 50 | + 'semantictasks-updatedtoyou-msg2' => 'المهمة "$1" تم تحديثها حالا.', |
| 51 | + 'semantictasks-reminder' => 'تذكرة:', |
| 52 | + 'semantictasks-reminder-message2' => 'فقط أذكرك أن المهمة "$1" تنتهي في غضون {{PLURAL:$2||يوم واحد|يومين|$2 أيام|$2 يومًا|$2 يوم}}. |
| 53 | + |
| 54 | +$3', |
| 55 | + 'semantictasks-text-message' => 'هنا وصف المهمة:', |
| 56 | + 'semantictasks-diff-message' => 'هنا الفروقات:', |
| 57 | +); |
| 58 | + |
| 59 | +/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца)) |
| 60 | + * @author EugeneZelenko |
| 61 | + * @author Jim-by |
| 62 | + */ |
| 63 | +$messages['be-tarask'] = array( |
| 64 | + 'semantictasks-desc' => 'Паведамленьне па электроннай пошце пра даданьне альбо абнаўленьне заданьняў', |
| 65 | + 'semantictasks-newtask' => 'Новае заданьне:', |
| 66 | + 'semantictasks-taskassigned' => 'Прызначанае заданьне:', |
| 67 | + 'semantictasks-taskupdated' => 'Заданьне абноўлена:', |
| 68 | + 'semantictasks-taskclosed' => 'Заданьне скончанае:', |
| 69 | + 'semantictasks-newtask-msg' => 'Заданьне «$1» было толькі што створана.', |
| 70 | + 'semantictasks-taskclosed-msg' => 'Заданьне «$1» было толькі што скончанае.', |
| 71 | + 'semantictasks-assignedtoyou-msg2' => 'Вам толькі што было прызначана заданьне «$1»', |
| 72 | + 'semantictasks-updatedtoyou-msg2' => 'Заданьне «$1» толькі што было абноўлена.', |
| 73 | + 'semantictasks-reminder' => 'Напамін:', |
| 74 | + 'semantictasks-reminder-message2' => 'Нагадваем Вам, што тэрмін выкананьня заданьня «$1» скончыцца праз $2 {{PLURAL:$2|дзень|дні|дзён}}. |
| 75 | + |
| 76 | +$3', |
| 77 | + 'semantictasks-text-message' => 'Апісаньне заданьня:', |
| 78 | + 'semantictasks-diff-message' => 'Розьніца:', |
| 79 | +); |
| 80 | + |
| 81 | +/** Breton (Brezhoneg) |
| 82 | + * @author Fohanno |
| 83 | + * @author Fulup |
| 84 | + * @author Y-M D |
| 85 | + */ |
| 86 | +$messages['br'] = array( |
| 87 | + 'semantictasks-desc' => 'Kemennadenn dre bostel evit an trevelloù deverket pe hizivaet', |
| 88 | + 'semantictasks-newtask' => 'Trevell nevez :', |
| 89 | + 'semantictasks-taskassigned' => 'Trevell roet :', |
| 90 | + 'semantictasks-taskupdated' => 'Hizivaet an trevell :', |
| 91 | + 'semantictasks-taskclosed' => 'Trevell serret :', |
| 92 | + 'semantictasks-newtask-msg' => 'O paouez bezañ krouet eo an trevell "$1".', |
| 93 | + 'semantictasks-taskclosed-msg' => 'O paouez bezañ serret eo an trevell "$1".', |
| 94 | + 'semantictasks-assignedtoyou-msg2' => 'Deverket eo bet an trevell "$1" deoc\'h.', |
| 95 | + 'semantictasks-updatedtoyou-msg2' => 'Hizivaet eo bet an trevell "$1".', |
| 96 | + 'semantictasks-reminder' => "Derc'hel soñj :", |
| 97 | + 'semantictasks-reminder-message2' => 'Un tamm gerig da zegas da soñj deoc\'h e vo echuet an trevell "$1" a-benn $2 {{PLURAL:$2|deiz|deiz}}. |
| 98 | + |
| 99 | + |
| 100 | +$3', |
| 101 | + 'semantictasks-text-message' => 'Setu aze deskrivadenn an trevell :', |
| 102 | + 'semantictasks-diff-message' => "Setu amañ ar c'hemmoù :", |
| 103 | +); |
| 104 | + |
| 105 | +/** Bosnian (Bosanski) |
| 106 | + * @author CERminator |
| 107 | + */ |
| 108 | +$messages['bs'] = array( |
| 109 | + 'semantictasks-desc' => 'E-mail obavještenja za dodijeljene ili ažurirane zadatke', |
| 110 | + 'semantictasks-newtask' => 'Novi zadatak:', |
| 111 | + 'semantictasks-taskupdated' => 'Zadatak ažuriran:', |
| 112 | + 'semantictasks-assignedtoyou-msg2' => 'Zadatak "$1" je upravo dodijeljen Vama', |
| 113 | + 'semantictasks-updatedtoyou-msg2' => 'Zadatak "$1" je upravo ažuriran.', |
| 114 | + 'semantictasks-reminder' => 'Podsjetnik:', |
| 115 | + 'semantictasks-reminder-message2' => 'Da Vas podsjetimo da zadatak "$1" završava za $2 {{PLURAL:$2|dan|dana}}. |
| 116 | + |
| 117 | +$3', |
| 118 | + 'semantictasks-text-message' => 'Ovdje je opis zadatka:', |
| 119 | + 'semantictasks-diff-message' => 'Ovdje su razlike:', |
| 120 | +); |
| 121 | + |
| 122 | +/** Catalan (Català) |
| 123 | + * @author Paucabot |
| 124 | + * @author Toniher |
| 125 | + */ |
| 126 | +$messages['ca'] = array( |
| 127 | + 'semantictasks-desc' => 'Notificacions de correu electrònic de les tasques assignades o actualitzades', |
| 128 | + 'semantictasks-newtask' => 'Nova tasca:', |
| 129 | + 'semantictasks-taskassigned' => 'Tasca assignada:', |
| 130 | + 'semantictasks-taskupdated' => 'Tasca actualitzada:', |
| 131 | + 'semantictasks-taskclosed' => 'Tasca tancada:', |
| 132 | + 'semantictasks-newtask-msg' => "S'acaba de crear la tasca «$1».", |
| 133 | + 'semantictasks-taskclosed-msg' => "S'acaba de tancar la tasca «$1».", |
| 134 | + 'semantictasks-assignedtoyou-msg2' => "Se us acaba d'assignar la tasca «$1».", |
| 135 | + 'semantictasks-updatedtoyou-msg2' => "S'acaba d'actualitzar la tasca «$1».", |
| 136 | + 'semantictasks-reminder' => 'Recordatori:', |
| 137 | + 'semantictasks-reminder-message2' => 'Només recordar-vos que la tasca «$1» acaba en $2 {{PLURAL:$2|dia|dies}}. |
| 138 | + |
| 139 | +$3', |
| 140 | + 'semantictasks-text-message' => 'Aquí hi ha una descripció de la tasca:', |
| 141 | + 'semantictasks-diff-message' => 'Aquí hi ha les diferències:', |
| 142 | +); |
| 143 | + |
| 144 | +/** German (Deutsch) |
| 145 | + * @author Als-Holder |
| 146 | + * @author Purodha |
| 147 | + */ |
| 148 | +$messages['de'] = array( |
| 149 | + 'semantictasks-desc' => 'Benachrichtigungen per E-Mail bei veränderten oder neu zugewiesenen Aufgaben', |
| 150 | + 'semantictasks-newtask' => 'Neue Aufgabe:', |
| 151 | + 'semantictasks-taskassigned' => 'Aufgabe zugewiesen:', |
| 152 | + 'semantictasks-taskupdated' => 'Aufgabe aktualisiert:', |
| 153 | + 'semantictasks-taskclosed' => 'Aufgabe geschlossen:', |
| 154 | + 'semantictasks-newtask-msg' => 'Die Aufgabe „$1“ wurde soeben erstellt.', |
| 155 | + 'semantictasks-taskclosed-msg' => 'Die Aufgabe „$1“ wurde soeben abgeschlossen.', |
| 156 | + 'semantictasks-assignedtoyou-msg2' => 'die Aufgabe „$1“ wurde dir soeben zugewiesen.', |
| 157 | + 'semantictasks-updatedtoyou-msg2' => 'Die Aufgabe „$1“ wurde soeben aktualisiert.', |
| 158 | + 'semantictasks-reminder' => 'Erinnerung:', |
| 159 | + 'semantictasks-reminder-message2' => 'Dies ist nur eine Erinnerung, dass die Aufgabe „$1“ in {{PLURAL:$2|einem Tag|$2 Tagen}} endet. |
| 160 | + |
| 161 | +$3', |
| 162 | + 'semantictasks-text-message' => 'Dies ist die Aufgabenbeschreibung:', |
| 163 | + 'semantictasks-diff-message' => 'Die Unterschiede oder Änderungen sind:', |
| 164 | +); |
| 165 | + |
| 166 | +/** German (formal address) (Deutsch (Sie-Form)) |
| 167 | + * @author Imre |
| 168 | + */ |
| 169 | +$messages['de-formal'] = array( |
| 170 | + 'semantictasks-assignedtoyou-msg2' => 'Die Aufgabe „$1“ wurde Ihnen soeben zugewiesen.', |
| 171 | +); |
| 172 | + |
| 173 | +/** Lower Sorbian (Dolnoserbski) |
| 174 | + * @author Michawiki |
| 175 | + */ |
| 176 | +$messages['dsb'] = array( |
| 177 | + 'semantictasks-desc' => 'E-mailowe zdźělenja za pśipokazane abo zaktualizěrowane nadawki', |
| 178 | + 'semantictasks-newtask' => 'Nowy nadawk:', |
| 179 | + 'semantictasks-taskassigned' => 'Nadawk pśipokazany:', |
| 180 | + 'semantictasks-taskupdated' => 'Nadawk zaktualizěrowany:', |
| 181 | + 'semantictasks-taskclosed' => 'Nadawk dokóńcony:', |
| 182 | + 'semantictasks-newtask-msg' => 'Nadawk "$1" jo se rowno napórał.', |
| 183 | + 'semantictasks-taskclosed-msg' => 'Nadawk "$1" jo se rowno dokóńcył.', |
| 184 | + 'semantictasks-assignedtoyou-msg2' => 'Nadawk "$1" jo se śi rowno pśipokazał', |
| 185 | + 'semantictasks-updatedtoyou-msg2' => 'Nadawk "$1" jo se rowno zaktualizěrował', |
| 186 | + 'semantictasks-reminder' => 'Dopomnjeśe:', |
| 187 | + 'semantictasks-reminder-message2' => 'To jo jano dopomnjeśe, až nadawk "$1" skóńcyjo se za $2 {{PLURAL:$2|źeń|dnja|dny|dnjow}}. |
| 188 | + |
| 189 | +$3', |
| 190 | + 'semantictasks-text-message' => 'How jo wopisanje nadawka:', |
| 191 | + 'semantictasks-diff-message' => 'How su rozdźěle:', |
| 192 | +); |
| 193 | + |
| 194 | +/** Greek (Ελληνικά) |
| 195 | + * @author ZaDiak |
| 196 | + */ |
| 197 | +$messages['el'] = array( |
| 198 | + 'semantictasks-newtask' => 'Νέα εργασία:', |
| 199 | + 'semantictasks-taskupdated' => 'Η εργασία ενημερώθηκε:', |
| 200 | + 'semantictasks-reminder' => 'Υπενθύμιση:', |
| 201 | + 'semantictasks-text-message' => 'Εδώ είναι η περιγραφή της εργασίας:', |
| 202 | + 'semantictasks-diff-message' => 'Εδώ είναι οι διαφορές:', |
| 203 | +); |
| 204 | + |
| 205 | +/** Esperanto (Esperanto) |
| 206 | + * @author Yekrats |
| 207 | + */ |
| 208 | +$messages['eo'] = array( |
| 209 | + 'semantictasks-newtask' => 'Nova tasko:', |
| 210 | + 'semantictasks-taskassigned' => 'Tasko donita al:', |
| 211 | + 'semantictasks-taskupdated' => 'Takso ĝisdatigita:', |
| 212 | + 'semantictasks-reminder' => 'Memorigilo:', |
| 213 | + 'semantictasks-diff-message' => 'Jen la malsamaĵoj:', |
| 214 | +); |
| 215 | + |
| 216 | +/** Spanish (Español) |
| 217 | + * @author Crazymadlover |
| 218 | + * @author Translationista |
| 219 | + */ |
| 220 | +$messages['es'] = array( |
| 221 | + 'semantictasks-desc' => 'Notificaciones por correo electrónico para tareas asignadas o actualizadas', |
| 222 | + 'semantictasks-newtask' => 'Nueva tarea:', |
| 223 | + 'semantictasks-taskassigned' => 'Tarea asignada:', |
| 224 | + 'semantictasks-taskupdated' => 'Tarea actualizada:', |
| 225 | + 'semantictasks-taskclosed' => 'Tarea cerrada:', |
| 226 | + 'semantictasks-newtask-msg' => 'La tarea "$1" acaba de ser creada.', |
| 227 | + 'semantictasks-taskclosed-msg' => 'La tarea "$1" acaba de ser cerrada.', |
| 228 | + 'semantictasks-assignedtoyou-msg2' => 'La tarea "$1" acaba de haberte sido asignada', |
| 229 | + 'semantictasks-updatedtoyou-msg2' => 'La tarea "$1" acaba de haber sido actualizada.', |
| 230 | + 'semantictasks-reminder' => 'Recordador:', |
| 231 | + 'semantictasks-reminder-message2' => 'Sólo para recordarte que la tarea "$1" finaliza en $2 {{PLURAL:$2|día|días}}. |
| 232 | + |
| 233 | +$3', |
| 234 | + 'semantictasks-text-message' => 'Aquí está la descripción de la tarea:', |
| 235 | + 'semantictasks-diff-message' => 'Aquí están las diferencias:', |
| 236 | +); |
| 237 | + |
| 238 | +/** Finnish (Suomi) |
| 239 | + * @author Cimon Avaro |
| 240 | + * @author Crt |
| 241 | + * @author Str4nd |
| 242 | + */ |
| 243 | +$messages['fi'] = array( |
| 244 | + 'semantictasks-desc' => 'Sähköposti-ilmoitukset osoitetuista tai päivitetyistä tehtävistä', |
| 245 | + 'semantictasks-newtask' => 'Uusi tehtävä', |
| 246 | + 'semantictasks-taskupdated' => 'Tehtävä päivitetty:', |
| 247 | + 'semantictasks-assignedtoyou-msg2' => 'Tehtävä ”$1” on juuri osoitettu sinulle.', |
| 248 | + 'semantictasks-updatedtoyou-msg2' => 'Tehtävä ”$1” on juuri päivitetty.', |
| 249 | + 'semantictasks-reminder' => 'Muistutus:', |
| 250 | + 'semantictasks-text-message' => 'Tehtävän kuvaus:', |
| 251 | + 'semantictasks-diff-message' => 'Tässä ovat eroavaisuudet:', |
| 252 | +); |
| 253 | + |
| 254 | +/** French (Français) |
| 255 | + * @author Crochet.david |
| 256 | + * @author IAlex |
| 257 | + * @author Urhixidur |
| 258 | + */ |
| 259 | +$messages['fr'] = array( |
| 260 | + 'semantictasks-desc' => 'Notifications par courriel pour les tâches assignées ou mises à jour', |
| 261 | + 'semantictasks-newtask' => 'Nouvelle tâche :', |
| 262 | + 'semantictasks-taskassigned' => 'Tâche assignée :', |
| 263 | + 'semantictasks-taskupdated' => 'Tâche mise à jour :', |
| 264 | + 'semantictasks-taskclosed' => 'Tâche fermée :', |
| 265 | + 'semantictasks-newtask-msg' => 'La tâche « $1 » vient d’être créée.', |
| 266 | + 'semantictasks-taskclosed-msg' => 'La tâche « $1 » vient d’être fermée.', |
| 267 | + 'semantictasks-assignedtoyou-msg2' => 'La tâche « $1 » vous a été assignée.', |
| 268 | + 'semantictasks-updatedtoyou-msg2' => 'La tâche « $1 » a été mise à jour.', |
| 269 | + 'semantictasks-reminder' => 'Rappel :', |
| 270 | + 'semantictasks-reminder-message2' => 'Nous vous rappelons que la tâche « $1 » se termine dans $2 jour{{PLURAL:$2||s}}. |
| 271 | + |
| 272 | +$3', |
| 273 | + 'semantictasks-text-message' => 'Voici la description de la tâche :', |
| 274 | + 'semantictasks-diff-message' => 'Les différences sont listées ci-dessous :', |
| 275 | +); |
| 276 | + |
| 277 | +/** Galician (Galego) |
| 278 | + * @author Toliño |
| 279 | + */ |
| 280 | +$messages['gl'] = array( |
| 281 | + 'semantictasks-desc' => 'Notificacións por correo electrónico para as tarefas asignadas ou actualizadas', |
| 282 | + 'semantictasks-newtask' => 'Nova tarefa:', |
| 283 | + 'semantictasks-taskassigned' => 'Tarefa asignada:', |
| 284 | + 'semantictasks-taskupdated' => 'Tarefa actualizada:', |
| 285 | + 'semantictasks-taskclosed' => 'Tarefa pechada:', |
| 286 | + 'semantictasks-newtask-msg' => 'A tarefa "$1" acaba de ser creada.', |
| 287 | + 'semantictasks-taskclosed-msg' => 'A tarefa "$1" acaba de ser pechada.', |
| 288 | + 'semantictasks-assignedtoyou-msg2' => 'A tarefa "$1" acaba de serlle asignada.', |
| 289 | + 'semantictasks-updatedtoyou-msg2' => 'A tarefa "$1" acaba de ser actualizada.', |
| 290 | + 'semantictasks-reminder' => 'Recordatorio:', |
| 291 | + 'semantictasks-reminder-message2' => 'Só é para lembrarlle que a tarefa "$1" remata {{PLURAL:$2|nun día|en $2 días}}. |
| 292 | + |
| 293 | +$3', |
| 294 | + 'semantictasks-text-message' => 'Aquí está a descrición da tarefa:', |
| 295 | + 'semantictasks-diff-message' => 'Aquí están as diferenzas:', |
| 296 | +); |
| 297 | + |
| 298 | +/** Swiss German (Alemannisch) |
| 299 | + * @author Als-Holder |
| 300 | + */ |
| 301 | +$messages['gsw'] = array( |
| 302 | + 'semantictasks-desc' => 'Benochrichtigunge per E-Mail bi veränderte oder nej zuegwisene Ufgabe', |
| 303 | + 'semantictasks-newtask' => 'Neji Ufgab:', |
| 304 | + 'semantictasks-taskassigned' => 'Ufgab zuegwise:', |
| 305 | + 'semantictasks-taskupdated' => 'Ufgab aktualisiert:', |
| 306 | + 'semantictasks-taskclosed' => 'Ufgab zuegmacht:', |
| 307 | + 'semantictasks-newtask-msg' => 'D Ufgab „$1“ isch grad erscht aagleit wore.', |
| 308 | + 'semantictasks-taskclosed-msg' => 'D Ufgab „$1“ isch grad zuegmcht woe.', |
| 309 | + 'semantictasks-assignedtoyou-msg2' => 'D Ufgab „$1“ isch Dir grad zuegwise wore.', |
| 310 | + 'semantictasks-updatedtoyou-msg2' => 'D Ufgab „$1“ isch grad aktualisiert wore.', |
| 311 | + 'semantictasks-reminder' => 'Erinnerig:', |
| 312 | + 'semantictasks-reminder-message2' => 'Des isch nume ne Erinnerig, ass d Ufgab „$1“ in {{PLURAL:$2|eim Tag|$2 Täg}} ufhert. |
| 313 | + |
| 314 | +$3', |
| 315 | + 'semantictasks-text-message' => 'Do isch d Ufgabebschryybig:', |
| 316 | + 'semantictasks-diff-message' => 'Do sin d Unterschid:', |
| 317 | +); |
| 318 | + |
| 319 | +/** Hebrew (עברית) |
| 320 | + * @author Rotemliss |
| 321 | + * @author YaronSh |
| 322 | + */ |
| 323 | +$messages['he'] = array( |
| 324 | + 'semantictasks-desc' => 'שליחת הודעות דוא"ל על משימות שהוקצו או שעודכנו', |
| 325 | + 'semantictasks-newtask' => 'משימה חדשה:', |
| 326 | + 'semantictasks-taskupdated' => 'משימה עודכנה:', |
| 327 | + 'semantictasks-assignedtoyou-msg2' => 'המשימה "$1" הוקצתה לך הרגע', |
| 328 | + 'semantictasks-updatedtoyou-msg2' => 'המשימה "$1" עודכנה הרגע.', |
| 329 | + 'semantictasks-reminder' => 'תזכורת:', |
| 330 | + 'semantictasks-reminder-message2' => 'רק רצינו להזכיר לך שהמשימה "$1" מסתיימת בעוד {{PLURAL:$2|יום|$2 ימים|יומיים}}. |
| 331 | + |
| 332 | +$3', |
| 333 | + 'semantictasks-text-message' => 'להלן תיאור המשימה:', |
| 334 | + 'semantictasks-diff-message' => 'להלן ההבדלים:', |
| 335 | +); |
| 336 | + |
| 337 | +/** Upper Sorbian (Hornjoserbsce) |
| 338 | + * @author Michawiki |
| 339 | + */ |
| 340 | +$messages['hsb'] = array( |
| 341 | + 'semantictasks-desc' => 'E-mejlowe zdźělenja za připokazane abo zaktualizowane nadawki', |
| 342 | + 'semantictasks-newtask' => 'Nowy nadawk:', |
| 343 | + 'semantictasks-taskassigned' => 'Nadawk připokazany:', |
| 344 | + 'semantictasks-taskupdated' => 'Nadawk zaktualizowany:', |
| 345 | + 'semantictasks-taskclosed' => 'Nadawk zakónčeny:', |
| 346 | + 'semantictasks-newtask-msg' => 'Nadawk "$1" je so runje wutworił.', |
| 347 | + 'semantictasks-taskclosed-msg' => 'Nadawk "$1" je so runje zakónčił.', |
| 348 | + 'semantictasks-assignedtoyou-msg2' => 'Nadawk "$1" bu ći runje připokazany', |
| 349 | + 'semantictasks-updatedtoyou-msg2' => 'Nadawk "$1" bu runje zaktualizowany', |
| 350 | + 'semantictasks-reminder' => 'Dopomnjeće:', |
| 351 | + 'semantictasks-reminder-message2' => 'Je to jenož dopomnjeće, zo nadawk "$1" so za $2 {{PLURAL:|dźeń|dnjej|dny|dnjow}} skónči. |
| 352 | + |
| 353 | +$3', |
| 354 | + 'semantictasks-text-message' => 'Tu je wopisanje nadawka:', |
| 355 | + 'semantictasks-diff-message' => 'Tu su rozdźěle:', |
| 356 | +); |
| 357 | + |
| 358 | +/** Hungarian (Magyar) |
| 359 | + * @author Glanthor Reviol |
| 360 | + */ |
| 361 | +$messages['hu'] = array( |
| 362 | + 'semantictasks-desc' => 'E-mail figyelmeztetések a kijelölt és frissített feladatokhoz', |
| 363 | + 'semantictasks-newtask' => 'Új feladat:', |
| 364 | + 'semantictasks-taskassigned' => 'Feladat kiosztva:', |
| 365 | + 'semantictasks-taskupdated' => 'Frissített feladat:', |
| 366 | + 'semantictasks-taskclosed' => 'Feladat lezárva:', |
| 367 | + 'semantictasks-newtask-msg' => 'A(z) „$1” feladat éppen létrehozva.', |
| 368 | + 'semantictasks-taskclosed-msg' => 'A(z) „$1” feladat éppen le lett zárva.', |
| 369 | + 'semantictasks-assignedtoyou-msg2' => 'Megkaptad a(z) „$1” feladatot.', |
| 370 | + 'semantictasks-updatedtoyou-msg2' => 'A „$1” feladat frissítve lett.', |
| 371 | + 'semantictasks-reminder' => 'Emlékeztető:', |
| 372 | + 'semantictasks-reminder-message2' => 'Ez egy emlékeztető, hogy a „$1” feladat határideje {{PLURAL:$2|egy|$2}} nap múlva lejár. |
| 373 | + |
| 374 | +$3', |
| 375 | + 'semantictasks-text-message' => 'A feladat leírása:', |
| 376 | + 'semantictasks-diff-message' => 'Ez a felhasználó korábban blokkot kapott, és a naplóbejegyzés el lett rejtve. Az elrejtési napló alább látható tájékoztatásként:', |
| 377 | +); |
| 378 | + |
| 379 | +/** Interlingua (Interlingua) |
| 380 | + * @author McDutchie |
| 381 | + */ |
| 382 | +$messages['ia'] = array( |
| 383 | + 'semantictasks-desc' => 'Notificationes per e-mail pro cargas assignate o actualisate', |
| 384 | + 'semantictasks-newtask' => 'Nove carga:', |
| 385 | + 'semantictasks-taskassigned' => 'Carga assignate:', |
| 386 | + 'semantictasks-taskupdated' => 'Carga actualisate:', |
| 387 | + 'semantictasks-taskclosed' => 'Carga claudite:', |
| 388 | + 'semantictasks-newtask-msg' => 'Le carga "$1" ha justo essite create.', |
| 389 | + 'semantictasks-taskclosed-msg' => 'Le carga "$1" ha justo essite claudite.', |
| 390 | + 'semantictasks-assignedtoyou-msg2' => 'Le carga "$1" ha justo essite assignate a te.', |
| 391 | + 'semantictasks-updatedtoyou-msg2' => 'Le carga "$1" ha justo essite actualisate.', |
| 392 | + 'semantictasks-reminder' => 'Rememoration:', |
| 393 | + 'semantictasks-reminder-message2' => 'Isto es pro rememorar te que le carga "$1" essera terminate in $2 {{PLURAL:$2|die|dies}}. |
| 394 | + |
| 395 | +$3', |
| 396 | + 'semantictasks-text-message' => 'Ecce le description del carga:', |
| 397 | + 'semantictasks-diff-message' => 'Ecce le differentias:', |
| 398 | +); |
| 399 | + |
| 400 | +/** Indonesian (Bahasa Indonesia) |
| 401 | + * @author Bennylin |
| 402 | + */ |
| 403 | +$messages['id'] = array( |
| 404 | + 'semantictasks-desc' => 'Pemberitahuan lewat surel untuk tugas yang diberikan atau yang dimutakhirkan', |
| 405 | + 'semantictasks-newtask' => 'Tugas baru:', |
| 406 | + 'semantictasks-taskupdated' => 'Tugas yang dimutakhirkan:', |
| 407 | + 'semantictasks-assignedtoyou-msg2' => 'Tugas "$1" baru saja diberikan kepada Anda', |
| 408 | + 'semantictasks-updatedtoyou-msg2' => 'Tugas "$1" baru saja dimutakhirkan.', |
| 409 | + 'semantictasks-reminder' => 'Pengingat:', |
| 410 | + 'semantictasks-reminder-message2' => 'Hanya mengingatkan Anda bahwa tugas "$1" berakhir dalam $2 {{PLURAL:$2|hari|hari}}. |
| 411 | + |
| 412 | +$3', |
| 413 | + 'semantictasks-text-message' => 'Berikut ini keterangan tugas tersebut:', |
| 414 | + 'semantictasks-diff-message' => 'Berikut ini adalah perubahannya:', |
| 415 | +); |
| 416 | + |
| 417 | +/** Igbo (Igbo) |
| 418 | + * @author Ukabia |
| 419 | + */ |
| 420 | +$messages['ig'] = array( |
| 421 | + 'semantictasks-assignedtoyou-msg2' => "Ozí ''$1'' a gbakutala gi", |
| 422 | + 'semantictasks-reminder' => 'Ihe eji chetá:', |
| 423 | +); |
| 424 | + |
| 425 | +/** Japanese (日本語) |
| 426 | + * @author Aotake |
| 427 | + * @author Fryed-peach |
| 428 | + * @author Hosiryuhosi |
| 429 | + * @author Naohiro19 |
| 430 | + */ |
| 431 | +$messages['ja'] = array( |
| 432 | + 'semantictasks-desc' => '課題の割り当てや更新を電子メールで通知する', |
| 433 | + 'semantictasks-newtask' => '新規課題:', |
| 434 | + 'semantictasks-taskassigned' => 'タスクを割り当てる', |
| 435 | + 'semantictasks-taskupdated' => '課題の更新:', |
| 436 | + 'semantictasks-taskclosed' => '終了したタスク:', |
| 437 | + 'semantictasks-newtask-msg' => '課題 "$1" が作成されました。', |
| 438 | + 'semantictasks-taskclosed-msg' => '課題「$1」が閉じられました。', |
| 439 | + 'semantictasks-assignedtoyou-msg2' => '課題「$1」があなたに割り当てられました。', |
| 440 | + 'semantictasks-updatedtoyou-msg2' => '課題「$1」が更新されました。', |
| 441 | + 'semantictasks-reminder' => 'リマインダー:', |
| 442 | + 'semantictasks-reminder-message2' => '課題「$1」は $2{{PLURAL:$2|日|日間}}で締め切りを迎えることをお知らせします。 |
| 443 | + |
| 444 | +$3', |
| 445 | + 'semantictasks-text-message' => '課題の説明:', |
| 446 | + 'semantictasks-diff-message' => '変更:', |
| 447 | +); |
| 448 | + |
| 449 | +/** Colognian (Ripoarisch) |
| 450 | + * @author Purodha |
| 451 | + */ |
| 452 | +$messages['ksh'] = array( |
| 453 | + 'semantictasks-desc' => 'Donn <i lang="en">e-mails</i> verschecke för zohjedeilte udder veränderte Aufjabe.', |
| 454 | + 'semantictasks-newtask' => 'Neu Aufjab:', |
| 455 | + 'semantictasks-taskupdated' => 'Aufjab op ene neue Shtand jebraat:', |
| 456 | + 'semantictasks-assignedtoyou-msg2' => 'Do häs äävens de Aufjab „$1“ |
| 457 | +zojedeilt krääje. Et es jez de Dinge, alsu maach jet domet!', |
| 458 | + 'semantictasks-updatedtoyou-msg2' => 'De Aufjab „$1“ es jraad op ene neue Shtand jebraat woode.', |
| 459 | + 'semantictasks-reminder' => 'Äennerung:', |
| 460 | + 'semantictasks-reminder-message2' => 'Bloß ens drop Opjemerk: De Aufjab „$1“ es en {{PLURAL:$2|enem Daach|$2 Dääsh|winnijer wi enem Daach}} eröm. |
| 461 | + |
| 462 | +$3', |
| 463 | + 'semantictasks-text-message' => 'Esu es de Aufjab beschrevve:', |
| 464 | + 'semantictasks-diff-message' => 'Hee sin de Ungerscheide:', |
| 465 | +); |
| 466 | + |
| 467 | +/** Luxembourgish (Lëtzebuergesch) |
| 468 | + * @author Robby |
| 469 | + */ |
| 470 | +$messages['lb'] = array( |
| 471 | + 'semantictasks-desc' => 'E-Mail Message fir geännert oder nei zougedeelten Aufgaben', |
| 472 | + 'semantictasks-newtask' => 'Nei Aufgab:', |
| 473 | + 'semantictasks-taskupdated' => 'Aufgab aktualiséiert:', |
| 474 | + 'semantictasks-reminder' => 'Erënnerung:', |
| 475 | + 'semantictasks-text-message' => "Hei ass d'Beschreiwung vun der Aufgab:", |
| 476 | + 'semantictasks-diff-message' => "Hei sinn d'Ënnerscheeder:", |
| 477 | +); |
| 478 | + |
| 479 | +/** Macedonian (Македонски) |
| 480 | + * @author Bjankuloski06 |
| 481 | + */ |
| 482 | +$messages['mk'] = array( |
| 483 | + 'semantictasks-desc' => 'Известувања по е-пошта за доделени или обновени задачи', |
| 484 | + 'semantictasks-newtask' => 'Нова задача:', |
| 485 | + 'semantictasks-taskassigned' => 'Доделена задача:', |
| 486 | + 'semantictasks-taskupdated' => 'Задачата е обновена:', |
| 487 | + 'semantictasks-taskclosed' => 'Затворена задача:', |
| 488 | + 'semantictasks-newtask-msg' => 'Штотуку е создадена задачата „$1“.', |
| 489 | + 'semantictasks-taskclosed-msg' => 'Задачата „$1“ штотуку се затвори.', |
| 490 | + 'semantictasks-assignedtoyou-msg2' => 'Штотуку ви беше доделена задачата „$1“', |
| 491 | + 'semantictasks-updatedtoyou-msg2' => 'Задачата „$1“ штотуку беше обновена.', |
| 492 | + 'semantictasks-reminder' => 'Потсетување:', |
| 493 | + 'semantictasks-reminder-message2' => 'Би сакале да ве потсетиме дека задачата „$1“ завршува за $2 {{PLURAL:$2|ден|дена}}. |
| 494 | + |
| 495 | +$3', |
| 496 | + 'semantictasks-text-message' => 'Еве опис на задачата:', |
| 497 | + 'semantictasks-diff-message' => 'Еве ги разликите:', |
| 498 | +); |
| 499 | + |
| 500 | +/** Dutch (Nederlands) |
| 501 | + * @author Siebrand |
| 502 | + */ |
| 503 | +$messages['nl'] = array( |
| 504 | + 'semantictasks-desc' => 'E-mailberichten voor toegewezen of bijgewerkte taken', |
| 505 | + 'semantictasks-newtask' => 'Nieuwe taak:', |
| 506 | + 'semantictasks-taskassigned' => 'Taak toegewezen:', |
| 507 | + 'semantictasks-taskupdated' => 'Taak bijgewerkt:', |
| 508 | + 'semantictasks-taskclosed' => 'Taak gesloten:', |
| 509 | + 'semantictasks-newtask-msg' => 'De taak "$1" is aangemaakt.', |
| 510 | + 'semantictasks-taskclosed-msg' => 'De taak "$1" is zojuist gesloten.', |
| 511 | + 'semantictasks-assignedtoyou-msg2' => 'De taak "$1" is aan u toegewezen.', |
| 512 | + 'semantictasks-updatedtoyou-msg2' => 'De taak "$1" is bijgewerkt.', |
| 513 | + 'semantictasks-reminder' => 'Herinnering:', |
| 514 | + 'semantictasks-reminder-message2' => 'Dit is een herinnering aan de taak "$1" die een eindddatum heeft over $2 {{PLURAL:$2|dag|dagen}}. |
| 515 | + |
| 516 | +$3', |
| 517 | + 'semantictasks-text-message' => 'Hieronder staat een beschrijving van de taak:', |
| 518 | + 'semantictasks-diff-message' => 'Hieronder worden de verschillen weergegeven:', |
| 519 | +); |
| 520 | + |
| 521 | +/** Norwegian Nynorsk (Norsk (nynorsk)) |
| 522 | + * @author Gunnernett |
| 523 | + */ |
| 524 | +$messages['nn'] = array( |
| 525 | + 'semantictasks-desc' => 'Meldingar via e-post om tildelte eller oppdaterte oppgåver', |
| 526 | + 'semantictasks-newtask' => 'Ny oppgåve:', |
| 527 | + 'semantictasks-taskupdated' => 'Oppgåva oppdatert:', |
| 528 | + 'semantictasks-assignedtoyou-msg2' => 'Oppgåva «$1» har nett vorten gjeve til deg', |
| 529 | + 'semantictasks-updatedtoyou-msg2' => 'Oppgåva «$1» har nett vorte oppdatert.', |
| 530 | + 'semantictasks-reminder' => 'Påminning:', |
| 531 | + 'semantictasks-text-message' => 'Her er ei skildring av oppgåva:', |
| 532 | + 'semantictasks-diff-message' => 'Her er skilnadane:', |
| 533 | +); |
| 534 | + |
| 535 | +/** Norwegian (bokmål) (Norsk (bokmål)) |
| 536 | + * @author Nghtwlkr |
| 537 | + */ |
| 538 | +$messages['no'] = array( |
| 539 | + 'semantictasks-desc' => 'Meldinger via e-post om tildelte eller oppdaterte oppgaver', |
| 540 | + 'semantictasks-newtask' => 'Ny oppgave:', |
| 541 | + 'semantictasks-taskassigned' => 'Oppgave tildelt:', |
| 542 | + 'semantictasks-taskupdated' => 'Oppgave oppdatert:', |
| 543 | + 'semantictasks-taskclosed' => 'Oppgave lukket:', |
| 544 | + 'semantictasks-newtask-msg' => 'Oppgaven «$1» har nettopp blitt opprettet.', |
| 545 | + 'semantictasks-taskclosed-msg' => 'Oppgaven «$1» har nettopp blitt lukket.', |
| 546 | + 'semantictasks-assignedtoyou-msg2' => 'Oppgaven «$1» har nettopp blitt tildelt deg', |
| 547 | + 'semantictasks-updatedtoyou-msg2' => 'Oppgaven «$1» har nettopp blitt oppdatert.', |
| 548 | + 'semantictasks-reminder' => 'Påminnelse:', |
| 549 | + 'semantictasks-reminder-message2' => 'Minner deg bare på at oppgaven «$1» ender om {{PLURAL:$2|én dag|$2 dager}}. |
| 550 | + |
| 551 | +$3', |
| 552 | + 'semantictasks-text-message' => 'Her er oppgavebeskrivelsen:', |
| 553 | + 'semantictasks-diff-message' => 'Her er forskjellene:', |
| 554 | +); |
| 555 | + |
| 556 | +/** Occitan (Occitan) |
| 557 | + * @author Cedric31 |
| 558 | + */ |
| 559 | +$messages['oc'] = array( |
| 560 | + 'semantictasks-desc' => 'Notificacions per corrièr electronic pels prètzfaches assignats o meses a jorn', |
| 561 | + 'semantictasks-newtask' => 'Prètzfach novèl :', |
| 562 | + 'semantictasks-taskassigned' => 'Prètzfach assignat :', |
| 563 | + 'semantictasks-taskupdated' => 'Prètzfach mes a jorn :', |
| 564 | + 'semantictasks-taskclosed' => 'Prètzfach tampat :', |
| 565 | + 'semantictasks-newtask-msg' => "Lo prètzfach « $1 » ven d'èsser creat.", |
| 566 | + 'semantictasks-taskclosed-msg' => "Lo prètzfach « $1 » ven d'èsser tampat.", |
| 567 | + 'semantictasks-assignedtoyou-msg2' => 'Lo prètzfach "$1" vos es estat assignat.', |
| 568 | + 'semantictasks-updatedtoyou-msg2' => 'Lo prètzfach "$1" es estat mes a jorn.', |
| 569 | + 'semantictasks-reminder' => 'Rampèl :', |
| 570 | + 'semantictasks-reminder-message2' => "Vos rapelam que lo prètzfach « $1 » s'acaba dins $2 {{PLURAL:$2|jorn|jorns}}. |
| 571 | + |
| 572 | +$3", |
| 573 | + 'semantictasks-text-message' => 'Vaquí la descripcion del prètzfach :', |
| 574 | + 'semantictasks-diff-message' => 'Las diferéncias son listadas çaijós :', |
| 575 | +); |
| 576 | + |
| 577 | +/** Polish (Polski) |
| 578 | + * @author Sp5uhe |
| 579 | + */ |
| 580 | +$messages['pl'] = array( |
| 581 | + 'semantictasks-desc' => 'Powiadomienie e‐mailem o przypisaniu lub aktualizacji zadań', |
| 582 | + 'semantictasks-newtask' => 'Nowe zadanie:', |
| 583 | + 'semantictasks-taskupdated' => 'Zadanie zaktualizowane:', |
| 584 | + 'semantictasks-assignedtoyou-msg2' => 'Przydzielono Ci zadanie „$1”', |
| 585 | + 'semantictasks-updatedtoyou-msg2' => 'Zadanie „$1” zostało zaktualizowane.', |
| 586 | + 'semantictasks-reminder' => 'Przypomnienie:', |
| 587 | + 'semantictasks-reminder-message2' => 'Przypominamy, że na realizację zadania „$1” {{PLURAL:$2|pozostał|pozostało}} $2 {{PLURAL:$2|dzień|dni}}. |
| 588 | + |
| 589 | +$3', |
| 590 | + 'semantictasks-text-message' => 'Poniżej znajduje się opis zadania:', |
| 591 | + 'semantictasks-diff-message' => 'Różnice:', |
| 592 | +); |
| 593 | + |
| 594 | +/** Piedmontese (Piemontèis) |
| 595 | + * @author Borichèt |
| 596 | + * @author Dragonòt |
| 597 | + */ |
| 598 | +$messages['pms'] = array( |
| 599 | + 'semantictasks-desc' => 'Notìfiche e-mail për travaj assignà o modificà', |
| 600 | + 'semantictasks-newtask' => 'Neuv travaj:', |
| 601 | + 'semantictasks-taskassigned' => 'Atività assignà:', |
| 602 | + 'semantictasks-taskupdated' => 'Travaj modificà:', |
| 603 | + 'semantictasks-taskclosed' => 'Travaj livrà:', |
| 604 | + 'semantictasks-newtask-msg' => 'L\'atività "$1" a l\'é pen-e stàita creà.', |
| 605 | + 'semantictasks-taskclosed-msg' => 'Ël travaj "$1" a l\'é pen-a stàit livrà.', |
| 606 | + 'semantictasks-assignedtoyou-msg2' => 'Ël travaj "$1" a l\'é stàit pen-e asignà a ti', |
| 607 | + 'semantictasks-updatedtoyou-msg2' => 'Ël travaj "$1" a l\'é pen-e stàit modificà.', |
| 608 | + 'semantictasks-reminder' => 'Da arcordé:', |
| 609 | + 'semantictasks-reminder-message2' => 'Mach për arcordete che ël travaj "$1" a finiss an $2 {{PLURAL:$2|di|di}}. |
| 610 | + |
| 611 | +$3', |
| 612 | + 'semantictasks-text-message' => 'Sì a-i é na descrission dël travaj:', |
| 613 | + 'semantictasks-diff-message' => 'Sì a-i son le diferense:', |
| 614 | +); |
| 615 | + |
| 616 | +/** Pashto (پښتو) |
| 617 | + * @author Ahmed-Najib-Biabani-Ibrahimkhel |
| 618 | + */ |
| 619 | +$messages['ps'] = array( |
| 620 | + 'semantictasks-newtask' => 'نوې دنده:', |
| 621 | +); |
| 622 | + |
| 623 | +/** Portuguese (Português) |
| 624 | + * @author Hamilton Abreu |
| 625 | + * @author Waldir |
| 626 | + */ |
| 627 | +$messages['pt'] = array( |
| 628 | + 'semantictasks-desc' => 'Notificações por correio electrónico das tarefas atribuídas ou actualizadas', |
| 629 | + 'semantictasks-newtask' => 'Nova tarefa:', |
| 630 | + 'semantictasks-taskassigned' => 'Tarefa atribuída:', |
| 631 | + 'semantictasks-taskupdated' => 'Tarefa actualizada:', |
| 632 | + 'semantictasks-taskclosed' => 'Tarefa fechada:', |
| 633 | + 'semantictasks-newtask-msg' => 'A tarefa "$1" acaba de ser criada.', |
| 634 | + 'semantictasks-taskclosed-msg' => 'A tarefa "$1" acaba de ser fechada.', |
| 635 | + 'semantictasks-assignedtoyou-msg2' => 'A tarefa "$1" acaba de lhe ser atribuída', |
| 636 | + 'semantictasks-updatedtoyou-msg2' => 'A tarefa "$1" acaba de ser actualizada.', |
| 637 | + 'semantictasks-reminder' => 'Nota:', |
| 638 | + 'semantictasks-reminder-message2' => 'Só para lembrar que a tarefa "$1" acaba em $2 {{PLURAL:$2|dia|dias}}. |
| 639 | + |
| 640 | +$3', |
| 641 | + 'semantictasks-text-message' => 'Aqui está a descrição da tarefa:', |
| 642 | + 'semantictasks-diff-message' => 'Aqui estão as diferenças:', |
| 643 | +); |
| 644 | + |
| 645 | +/** Brazilian Portuguese (Português do Brasil) |
| 646 | + * @author Waldir |
| 647 | + */ |
| 648 | +$messages['pt-br'] = array( |
| 649 | + 'semantictasks-desc' => 'Notificações por email de tarefas atribuídas ou atualizadas', |
| 650 | + 'semantictasks-newtask' => 'Nova tarefa:', |
| 651 | + 'semantictasks-taskupdated' => 'Tarefa atualizada:', |
| 652 | + 'semantictasks-assignedtoyou-msg2' => 'A tarefa "$1" acaba de lhe ser atribuída', |
| 653 | + 'semantictasks-updatedtoyou-msg2' => 'A tarefa "$1" acaba de ser atualizada.', |
| 654 | + 'semantictasks-reminder' => 'Lembrete:', |
| 655 | + 'semantictasks-reminder-message2' => 'Só para lembrar que a tarefa "$1" acaba em $2 {{PLURAL:$2|dia|dias}}. |
| 656 | + |
| 657 | +$3', |
| 658 | + 'semantictasks-text-message' => 'Aqui está a descrição da tarefa:', |
| 659 | + 'semantictasks-diff-message' => 'Aqui estão as diferenças:', |
| 660 | +); |
| 661 | + |
| 662 | +/** Romanian (Română) |
| 663 | + * @author Firilacroco |
| 664 | + * @author KlaudiuMihaila |
| 665 | + */ |
| 666 | +$messages['ro'] = array( |
| 667 | + 'semantictasks-newtask' => 'Sarcină nouă:', |
| 668 | + 'semantictasks-taskupdated' => 'Sarcină actualizată:', |
| 669 | + 'semantictasks-assignedtoyou-msg2' => 'Sarcina "$1" tocmai ți-a fost atribuită', |
| 670 | + 'semantictasks-updatedtoyou-msg2' => 'Sarcina "$1" tocmai a fost actualizată.', |
| 671 | + 'semantictasks-reminder-message2' => 'Doar reamintim faptul că sarcina "$1" se termină peste $2 {{PLURAL:$2|zi|zile}}. |
| 672 | + |
| 673 | +$3', |
| 674 | + 'semantictasks-text-message' => 'Aceasta este descrierea sarcinii:', |
| 675 | + 'semantictasks-diff-message' => 'Acestea sunt diferențele:', |
| 676 | +); |
| 677 | + |
| 678 | +/** Russian (Русский) |
| 679 | + * @author Ferrer |
| 680 | + * @author Александр Сигачёв |
| 681 | + */ |
| 682 | +$messages['ru'] = array( |
| 683 | + 'semantictasks-desc' => 'Уведомления по электронной почте о принятых или обновлённых задачах', |
| 684 | + 'semantictasks-newtask' => 'Новая задача:', |
| 685 | + 'semantictasks-taskassigned' => 'Установленная задача:', |
| 686 | + 'semantictasks-taskupdated' => 'Задача обновлена:', |
| 687 | + 'semantictasks-taskclosed' => 'Задача закрыта:', |
| 688 | + 'semantictasks-newtask-msg' => 'Задача «$1» была только что создана.', |
| 689 | + 'semantictasks-taskclosed-msg' => 'Задача «$1» только что была закрыта.', |
| 690 | + 'semantictasks-assignedtoyou-msg2' => 'Вам была только что определена задача «$1»', |
| 691 | + 'semantictasks-updatedtoyou-msg2' => 'Задача «$1» только что была обновлена.', |
| 692 | + 'semantictasks-reminder' => 'Напоминание:', |
| 693 | + 'semantictasks-reminder-message2' => 'Напоминаем, что задача «$1» завершается через $2 {{PLURAL:$2|день|дня|дней}}. |
| 694 | + |
| 695 | +$3', |
| 696 | + 'semantictasks-text-message' => 'Здесь описание задачи:', |
| 697 | + 'semantictasks-diff-message' => 'Здесь различия:', |
| 698 | +); |
| 699 | + |
| 700 | +/** Slovak (Slovenčina) |
| 701 | + * @author Helix84 |
| 702 | + */ |
| 703 | +$messages['sk'] = array( |
| 704 | + 'semantictasks-desc' => 'Upozornenia emailom na pridelené a aktualizované úlohy', |
| 705 | + 'semantictasks-newtask' => 'Nová úloha:', |
| 706 | + 'semantictasks-taskupdated' => 'Aktualizovaná úloha:', |
| 707 | + 'semantictasks-assignedtoyou-msg2' => 'Práve vám bola pridelená úloha „$1“.', |
| 708 | + 'semantictasks-updatedtoyou-msg2' => 'Práve bola aktualizovaná úloha „$1“.', |
| 709 | + 'semantictasks-reminder' => 'Pripomienka:', |
| 710 | + 'semantictasks-reminder-message2' => 'Toto je iba pripomenutie, že úloha „$1“ končí o $2 {{PLURAL:$2|deň|dni|dní}}. |
| 711 | + |
| 712 | +$3', |
| 713 | + 'semantictasks-text-message' => 'Toto je popis úlohy:', |
| 714 | + 'semantictasks-diff-message' => 'Toto sú rozdiely:', |
| 715 | +); |
| 716 | + |
| 717 | +/** Serbian Cyrillic ekavian (Српски (ћирилица)) |
| 718 | + * @author Михајло Анђелковић |
| 719 | + */ |
| 720 | +$messages['sr-ec'] = array( |
| 721 | + 'semantictasks-newtask' => 'Нови задатак:', |
| 722 | + 'semantictasks-taskassigned' => 'Задатак додељен:', |
| 723 | + 'semantictasks-taskupdated' => 'Задатак ажуриран:', |
| 724 | + 'semantictasks-taskclosed' => 'Задатак затворен:', |
| 725 | + 'semantictasks-text-message' => 'Овде је опис задатка:', |
| 726 | + 'semantictasks-diff-message' => 'Овде су разлике:', |
| 727 | +); |
| 728 | + |
| 729 | +/** Serbian Latin ekavian (Srpski (latinica)) |
| 730 | + * @author Michaello |
| 731 | + */ |
| 732 | +$messages['sr-el'] = array( |
| 733 | + 'semantictasks-text-message' => 'Ovde je opis zadatka:', |
| 734 | + 'semantictasks-diff-message' => 'Ovde su razlike:', |
| 735 | +); |
| 736 | + |
| 737 | +/** Swedish (Svenska) |
| 738 | + * @author Fluff |
| 739 | + * @author Per |
| 740 | + */ |
| 741 | +$messages['sv'] = array( |
| 742 | + 'semantictasks-desc' => 'E-postmeddelanden för tilldelade eller uppdaterade uppgifter', |
| 743 | + 'semantictasks-newtask' => 'Ny uppgift:', |
| 744 | + 'semantictasks-taskupdated' => 'Uppgiften uppdaterad:', |
| 745 | + 'semantictasks-taskclosed' => 'Uppgiften avslutad:', |
| 746 | + 'semantictasks-newtask-msg' => 'Uppgiften "$1" har just skapats.', |
| 747 | + 'semantictasks-assignedtoyou-msg2' => 'Uppgiften "$1" har just tilldelats till dig', |
| 748 | + 'semantictasks-updatedtoyou-msg2' => 'Uppgiften "$1" har precis uppdaterats.', |
| 749 | + 'semantictasks-reminder' => 'Påminnelse:', |
| 750 | + 'semantictasks-reminder-message2' => 'Ett meddelande för att påminna dig om uppgiften "$1" som slutar om {{PLURAL:$2|en dag|$2 dagar}}. |
| 751 | + |
| 752 | +$3', |
| 753 | + 'semantictasks-text-message' => 'Här är uppgiftsbeskrivningen:', |
| 754 | + 'semantictasks-diff-message' => 'Här är skillnaden:', |
| 755 | +); |
| 756 | + |
| 757 | +/** Telugu (తెలుగు) |
| 758 | + * @author Veeven |
| 759 | + */ |
| 760 | +$messages['te'] = array( |
| 761 | + 'semantictasks-desc' => 'అప్పగించిన లేదా తాజాకరించిన పనుల యొక్క ఈ-మెయిలు గమనింపులు', |
| 762 | + 'semantictasks-newtask' => 'కొత్త పని:', |
| 763 | + 'semantictasks-taskupdated' => 'పనిని తాజాకరించారు:', |
| 764 | + 'semantictasks-assignedtoyou-msg2' => '"$1" పనిని ఇప్పుడే మీకు అప్పగించారు', |
| 765 | + 'semantictasks-updatedtoyou-msg2' => '"$1" పనిని ఇప్పుడే తాజాకరించారు.', |
| 766 | + 'semantictasks-text-message' => 'పని వివరణ ఇదిగో:', |
| 767 | +); |
| 768 | + |
| 769 | +/** Tagalog (Tagalog) |
| 770 | + * @author AnakngAraw |
| 771 | + */ |
| 772 | +$messages['tl'] = array( |
| 773 | + 'semantictasks-desc' => 'Patalastas sa pamamagitan ng e-liham para sa mga gawaing itinalaga o isinapanahon', |
| 774 | + 'semantictasks-newtask' => 'Bagong gawain:', |
| 775 | + 'semantictasks-taskassigned' => 'Itinalagang gawain:', |
| 776 | + 'semantictasks-taskupdated' => 'Isinapanahong gawain:', |
| 777 | + 'semantictasks-taskclosed' => 'Naisarang gawain:', |
| 778 | + 'semantictasks-newtask-msg' => 'Kalilikha pa lamang ng gawaing "$1".', |
| 779 | + 'semantictasks-taskclosed-msg' => 'Naisara na ang gawaing "$1".', |
| 780 | + 'semantictasks-assignedtoyou-msg2' => 'Katatalaga pa lamang sa iyo ng gawaing "$1".', |
| 781 | + 'semantictasks-updatedtoyou-msg2' => 'Kasasapanahon lamang ng gawaing "$1".', |
| 782 | + 'semantictasks-reminder' => 'Paalala:', |
| 783 | + 'semantictasks-reminder-message2' => 'Paalala lamang sa iyo na ang gawaing "$1" ay magtatapos na sa loob ng $2 {{PLURAL:$2|araw|mga araw}}. |
| 784 | + |
| 785 | +$3', |
| 786 | + 'semantictasks-text-message' => 'Narito ang paglalarawan ng gawain:', |
| 787 | + 'semantictasks-diff-message' => 'Narito ang mga pagkakaiba:', |
| 788 | +); |
| 789 | + |
| 790 | +/** Turkish (Türkçe) |
| 791 | + * @author Vito Genovese |
| 792 | + */ |
| 793 | +$messages['tr'] = array( |
| 794 | + 'semantictasks-newtask' => 'Yeni görev:', |
| 795 | + 'semantictasks-taskupdated' => 'Görev güncellendi:', |
| 796 | + 'semantictasks-reminder' => 'Hatırlatma:', |
| 797 | + 'semantictasks-text-message' => 'Görev tanımı şu şekildedir:', |
| 798 | + 'semantictasks-diff-message' => 'Farklılıklar şu şekildedir:', |
| 799 | +); |
| 800 | + |
| 801 | +/** Vietnamese (Tiếng Việt) |
| 802 | + * @author Minh Nguyen |
| 803 | + * @author Vinhtantran |
| 804 | + */ |
| 805 | +$messages['vi'] = array( |
| 806 | + 'semantictasks-desc' => 'Thông báo qua thư điện tử khi có nhiệm vụ được giao hoặc cập nhật', |
| 807 | + 'semantictasks-newtask' => 'Công việc mới:', |
| 808 | + 'semantictasks-taskupdated' => 'Công việc được cập nhật:', |
| 809 | + 'semantictasks-assignedtoyou-msg2' => 'Nhiệm vụ “$1” vừa được giao cho bạn', |
| 810 | + 'semantictasks-updatedtoyou-msg2' => 'Nhiệm vụ “$1” vừa mới được cập nhật.', |
| 811 | + 'semantictasks-reminder' => 'Lời nhắc:', |
| 812 | + 'semantictasks-reminder-message2' => 'Thư này chỉ để nhắc bạn rằng nhiệm vụ “$1” sẽ kết thúc trong $2 {{PLURAL:$2|ngày|ngày}} nữa. |
| 813 | + |
| 814 | +$3', |
| 815 | + 'semantictasks-text-message' => 'Miêu tả công việc:', |
| 816 | + 'semantictasks-diff-message' => 'Các khác biệt:', |
| 817 | +); |
| 818 | + |
Property changes on: tags/extensions/SemanticTasks/REL_1_3/SemanticTasks.i18n.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 819 | + native |