r105272 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r105271‎ | r105272 | r105273 >
Date:01:32, 6 December 2011
Author:jeroendedauw
Status:deferred
Tags:
Comment:
Tag for version 1.4.1.
Modified paths:
  • /tags/extensions/SemanticTasks/REL_1_4_1 (added) (history)

Diff [purge]

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