r67756 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r67755‎ | r67756 | r67757 >
Date:20:26, 9 June 2010
Author:yaron
Status:deferred
Tags:
Comment:
Tag for version 1.3
Modified paths:
  • /tags/extensions/SemanticTasks/REL_1_3 (added) (history)

Diff [purge]

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
143 + 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
111 + 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
118 + 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
1428 + 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
126 + 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
1819 + native

Status & tagging log