r24516 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r24515‎ | r24516 | r24517 >
Date:11:08, 1 August 2007
Author:catrope
Status:old
Tags:
Comment:
apiedit: Merging latest revisions from trunk
Modified paths:
  • /branches/apiedit/phase3 (modified) (history)
  • /branches/apiedit/phase3/includes/OutputPage.php (modified) (history)
  • /branches/apiedit/phase3/includes/Title.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesDe.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesEn.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesHe.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesKu_arab.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesMl.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesTh.php (modified) (history)
  • /branches/apiedit/phase3/maintenance/language/messages.inc (modified) (history)

Diff [purge]

Index: branches/apiedit/phase3/includes/Title.php
@@ -269,32 +269,27 @@
270270 }
271271
272272 /**
273 - * Create a new Title for a redirect
274 - * @param string $text the redirect title text
275 - * @return Title the new object, or NULL if the text is not a
276 - * valid redirect
 273+ * Extract a redirect destination from a string and return the
 274+ * Title, or null if the text doesn't contain a valid redirect
 275+ *
 276+ * @param string $text Text with possible redirect
 277+ * @return Title
277278 */
278279 public static function newFromRedirect( $text ) {
279 - $mwRedir = MagicWord::get( 'redirect' );
280 - $rt = NULL;
281 - if ( $mwRedir->matchStart( $text ) ) {
282 - $m = array();
283 - if ( preg_match( '/\[{2}(.*?)(?:\||\]{2})/', $text, $m ) ) {
284 - # categories are escaped using : for example one can enter:
285 - # #REDIRECT [[:Category:Music]]. Need to remove it.
286 - if ( substr($m[1],0,1) == ':') {
287 - # We don't want to keep the ':'
288 - $m[1] = substr( $m[1], 1 );
289 - }
290 -
291 - $rt = Title::newFromText( $m[1] );
292 - # Disallow redirects to Special:Userlogout
293 - if ( !is_null($rt) && $rt->isSpecial( 'Userlogout' ) ) {
294 - $rt = NULL;
295 - }
 280+ $redir = MagicWord::get( 'redirect' );
 281+ if( $redir->matchStart( $text ) ) {
 282+ // Extract the first link and see if it's usable
 283+ if( preg_match( '!\[{2}(.*?)(?:\||\]{2})!', $text, $m ) ) {
 284+ // Strip preceding colon used to "escape" categories, etc.
 285+ // and URL-decode links
 286+ $m[1] = urldecode( ltrim( $m[1], ':' ) );
 287+ $title = Title::newFromText( $m[1] );
 288+ // Redirects to Special:Userlogout are not permitted
 289+ if( $title instanceof Title && !$title->isSpecial( 'Userlogout' ) )
 290+ return $title;
296291 }
297292 }
298 - return $rt;
 293+ return null;
299294 }
300295
301296 #----------------------------------------------------------------------------
@@ -1019,42 +1014,110 @@
10201015 * @return boolean
10211016 */
10221017 public function userCan( $action, $doExpensiveQueries = true ) {
 1018+ global $wgUser;
 1019+ return ( $this->getUserPermissionsErrorsInternal( $action, $wgUser, $doExpensiveQueries ) === array());
 1020+ }
 1021+
 1022+ /**
 1023+ * Can $user perform $action on this page?
 1024+ * @param string $action action that permission needs to be checked for
 1025+ * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
 1026+ * @return array Array of arrays of the arguments to wfMsg to explain permissions problems.
 1027+ */
 1028+ public function getUserPermissionsErrors( $action, $user, $doExpensiveQueries = true ) {
 1029+ $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
 1030+
 1031+ global $wgContLang;
 1032+ global $wgLang;
 1033+
 1034+ if ( wfReadOnly() && $action != 'read' ) {
 1035+ $errors[] = array( 'readonlytext' );
 1036+ }
 1037+
 1038+ if ( $user->isBlockedFrom( $this ) ) {
 1039+ $block = $user->mBlock;
 1040+
 1041+ // This is from OutputPage::blockedPage
 1042+ // Copied at r23888 by werdna
 1043+
 1044+ $id = $user->blockedBy();
 1045+ $reason = $user->blockedFor();
 1046+ $ip = wfGetIP();
 1047+
 1048+ if ( is_numeric( $id ) ) {
 1049+ $name = User::whoIs( $id );
 1050+ } else {
 1051+ $name = $id;
 1052+ }
 1053+
 1054+ $link = '[[' . $wgContLang->getNsText( NS_USER ) . ":{$name}|{$name}]]";
 1055+ $blockid = $block->mId;
 1056+ $blockExpiry = $user->mBlock->mExpiry;
 1057+
 1058+ if ( $blockExpiry == 'infinity' ) {
 1059+ // Entry in database (table ipblocks) is 'infinity' but 'ipboptions' uses 'infinite' or 'indefinite'
 1060+ $scBlockExpiryOptions = wfMsg( 'ipboptions' );
 1061+
 1062+ foreach ( explode( ',', $scBlockExpiryOptions ) as $option ) {
 1063+ if ( strpos( $option, ':' ) == false )
 1064+ continue;
 1065+
 1066+ list ($show, $value) = explode( ":", $option );
 1067+
 1068+ if ( $value == 'infinite' || $value == 'indefinite' ) {
 1069+ $blockExpiry = $show;
 1070+ break;
 1071+ }
 1072+ }
 1073+ } else {
 1074+ $blockExpiry = $wgLang->timeanddate( wfTimestamp( TS_MW, $blockExpiry ), true );
 1075+ }
 1076+
 1077+ $intended = $user->mBlock->mAddress;
 1078+
 1079+ $errors[] = array ( ($block->mAuto ? 'autoblockedtext-concise' : 'blockedtext-concise'), $link, $reason, $ip, name, $blockid, $blockExpiry, $intended );
 1080+ }
 1081+
 1082+ return $errors;
 1083+ }
 1084+
 1085+ /**
 1086+ * Can $user perform $action on this page?
 1087+ * This is an internal function, which checks ONLY that previously checked by userCan (i.e. it leaves out checks on wfReadOnly() and blocks)
 1088+ * @param string $action action that permission needs to be checked for
 1089+ * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
 1090+ * @return array Array of arrays of the arguments to wfMsg to explain permissions problems.
 1091+ */
 1092+ private function getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries = true ) {
10231093 $fname = 'Title::userCan';
10241094 wfProfileIn( $fname );
10251095
1026 - global $wgUser;
 1096+ $errors = array();
10271097
1028 - $result = null;
1029 - wfRunHooks( 'userCan', array( &$this, &$wgUser, $action, &$result ) );
1030 - if ( $result !== null ) {
1031 - wfProfileOut( $fname );
1032 - return $result;
 1098+ if ( !wfRunHooks( 'userCan', array( &$this, &$user, $action, &$result ) ) ) {
 1099+ return $result ? array() : array( array( 'badaccess-group0' ) );
10331100 }
10341101
10351102 if( NS_SPECIAL == $this->mNamespace ) {
1036 - wfProfileOut( $fname );
1037 - return false;
 1103+ $errors[] = array('ns-specialprotected');
10381104 }
10391105
10401106 if ( $this->isNamespaceProtected() ) {
1041 - wfProfileOut( $fname );
1042 - return false;
 1107+ $errors[] = (NS_MEDIAWIKI == $this->mNamespace ? array('protectedinterface') : array( 'namespaceprotected', $wgContLang->getNSText( $this->mNamespace ) ) );
10431108 }
10441109
10451110 if( $this->mDbkeyform == '_' ) {
10461111 # FIXME: Is this necessary? Shouldn't be allowed anyway...
1047 - wfProfileOut( $fname );
1048 - return false;
 1112+ $errors[] = array('badaccess-group0');
10491113 }
10501114
10511115 # protect css/js subpages of user pages
10521116 # XXX: this might be better using restrictions
10531117 # XXX: Find a way to work around the php bug that prevents using $this->userCanEditCssJsSubpage() from working
10541118 if( $this->isCssJsSubpage()
1055 - && !$wgUser->isAllowed('editinterface')
1056 - && !preg_match('/^'.preg_quote($wgUser->getName(), '/').'\//', $this->mTextform) ) {
1057 - wfProfileOut( $fname );
1058 - return false;
 1119+ && !$user->isAllowed('editinterface')
 1120+ && !preg_match('/^'.preg_quote($user->getName(), '/').'\//', $this->mTextform) ) {
 1121+ $errors[] = array('customcssjsprotected');
10591122 }
10601123
10611124 if ( $doExpensiveQueries && !$this->isCssJsSubpage() ) {
@@ -1070,9 +1133,11 @@
10711134 if( $cascadingSources > 0 && isset($restrictions[$action]) ) {
10721135 foreach( $restrictions[$action] as $right ) {
10731136 $right = ( $right == 'sysop' ) ? 'protect' : $right;
1074 - if( '' != $right && !$wgUser->isAllowed( $right ) ) {
1075 - wfProfileOut( $fname );
1076 - return false;
 1137+ if( '' != $right && !$user->isAllowed( $right ) ) {
 1138+ $pages = '';
 1139+ foreach( $cascadeSources as $id => $page )
 1140+ $pages .= '* [[:' . $page->getPrefixedText() . "]]\n";
 1141+ $errors[] = array( 'cascadeprotected', array_len( $cascadingSources ), $pages );
10771142 }
10781143 }
10791144 }
@@ -1083,33 +1148,53 @@
10841149 if ( $right == 'sysop' ) {
10851150 $right = 'protect';
10861151 }
1087 - if( '' != $right && !$wgUser->isAllowed( $right ) ) {
1088 - wfProfileOut( $fname );
1089 - return false;
 1152+ if( '' != $right && !$user->isAllowed( $right ) ) {
 1153+ $errors[] = array( 'protectedpagetext' );
10901154 }
10911155 }
10921156
1093 - if( $action == 'move' &&
1094 - !( $this->isMovable() && $wgUser->isAllowed( 'move' ) ) ) {
1095 - wfProfileOut( $fname );
1096 - return false;
1097 - }
1098 -
10991157 if( $action == 'create' ) {
1100 - if( ( $this->isTalkPage() && !$wgUser->isAllowed( 'createtalk' ) ) ||
1101 - ( !$this->isTalkPage() && !$wgUser->isAllowed( 'createpage' ) ) ) {
1102 - wfProfileOut( $fname );
1103 - return false;
 1158+ if( ( $this->isTalkPage() && !$user->isAllowed( 'createtalk' ) ) ||
 1159+ ( !$this->isTalkPage() && !$user->isAllowed( 'createpage' ) ) ) {
 1160+ $errors[] = $user->isAnon() ? array ('nocreatetext') : array ('nocreate-loggedin');
11041161 }
11051162 }
11061163
1107 - if( $action == 'edit' && !$wgUser->isAllowed( 'edit' ) ) {
1108 - wfProfileOut( $fname );
1109 - return false;
 1164+ if( $action == 'move' &&
 1165+ !( $this->isMovable() && $user->isAllowed( 'move' ) ) ) {
 1166+ $errors[] = $user->isAnon() ? array ( 'movenologintext' ) : array ('movenotallowed');
 1167+ } else if ( !$user->isAllowed( $action ) ) {
 1168+ $return = null;
 1169+ $groups = array();
 1170+ global $wgGroupPermissions;
 1171+ foreach( $wgGroupPermissions as $key => $value ) {
 1172+ if( isset( $value[$permission] ) && $value[$permission] == true ) {
 1173+ $groupName = User::getGroupName( $key );
 1174+ $groupPage = User::getGroupPage( $key );
 1175+ if( $groupPage ) {
 1176+ $skin = $user->getSkin();
 1177+ $groups[] = $skin->makeLinkObj( $groupPage, $groupName );
 1178+ } else {
 1179+ $groups[] = $groupName;
 1180+ }
 1181+ }
 1182+ }
 1183+ $n = count( $groups );
 1184+ $groups = implode( ', ', $groups );
 1185+ switch( $n ) {
 1186+ case 0:
 1187+ case 1:
 1188+ case 2:
 1189+ $return = array( "badaccess-group$n", $groups );
 1190+ break;
 1191+ default:
 1192+ $return = array( 'badaccess-groups', $groups );
 1193+ }
 1194+ $errors[] = $return;
11101195 }
11111196
11121197 wfProfileOut( $fname );
1113 - return true;
 1198+ return $errors;
11141199 }
11151200
11161201 /**
Index: branches/apiedit/phase3/includes/OutputPage.php
@@ -821,6 +821,33 @@
822822 $this->returnToMain( false );
823823 }
824824
 825+ public function showPermissionsErrorPage( $title, $errors )
 826+ {
 827+ global $wgTitle;
 828+
 829+ $this->mDebugtext .= 'Original title: ' .
 830+ $wgTitle->getPrefixedText() . "\n";
 831+ $this->setPageTitle( wfMsg( 'permissionserrors' ) );
 832+ $this->setHTMLTitle( wfMsg( 'permissionserrors' ) );
 833+ $this->setRobotpolicy( 'noindex,nofollow' );
 834+ $this->setArticleRelated( false );
 835+ $this->enableClientCache( false );
 836+ $this->mRedirect = '';
 837+ $this->mBodytext = '';
 838+
 839+ $this->addWikiText( wfMsg('permissionserrorstext') );
 840+ $this->addHtml( '<ul class="permissions-errors">' . "\n" );
 841+
 842+ foreach( $errors as $error )
 843+ {
 844+ $this->addHtml( '<li>' );
 845+ $this->addWikiText( call_user_func_array( 'wfMsg', $error ) );
 846+ $this->addHtml( '</li>');
 847+ }
 848+ $this->addHtml( '</ul>' );
 849+
 850+ }
 851+
825852 /** @deprecated */
826853 public function errorpage( $title, $msg ) {
827854 throw new ErrorPageError( $title, $msg );
Index: branches/apiedit/phase3/languages/messages/MessagesTh.php
@@ -138,8 +138,8 @@
139139 'subcategories' => 'หมวดหมู่ย่อย',
140140 'category-media-header' => 'สื่อในหมวดหมู่ "$1"',
141141
142 -'mainpagetext' => "<big>'''ซอฟต์แวร์มีเดียได้ถูกติดตั้งเรียบร้อย'''</big>",
143 -'mainpagedocfooter' => 'ปรึกษา[http://meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับข้อมูลการใช้งานซอฟต์แวร์วิกิ.
 142+'mainpagetext' => "<big>'''ซอฟต์แวร์มีเดียวิกิได้ถูกติดตั้งเรียบร้อย'''</big>",
 143+'mainpagedocfooter' => 'ศึกษา[http://meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับเริ่มต้นใช้งานซอฟต์แวร์วิกิ
144144
145145 == เริ่มต้น ==
146146
@@ -371,7 +371,7 @@
372372 'userlogout' => 'ล็อกเอาต์',
373373 'notloggedin' => 'ไม่ได้ล็อกอิน',
374374 'nologin' => 'ล็อกอินด้านล่างหรือ $1',
375 -'nologinlink' => 'สร้างบัญชีผู้ใ้ช้',
 375+'nologinlink' => 'สร้างบัญชีผู้ใช้',
376376 'createaccount' => 'สร้างบัญชีผู้ใช้',
377377 'gotaccount' => 'มีบัญชีผู้ใช้แล้วหรือไม่ $1',
378378 'gotaccountlink' => 'ล็อกอิน',
@@ -481,7 +481,7 @@
482482 การบล็อกหมดอายุเมื่อ: $6<br />
483483 ผู้ถูกบล็อก: $7
484484
485 -สามารถติดต่อ $1 หรือ [[{{MediaWiki:grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือเกี่ยวกับการบล็อกนี้ หรือสามารถที่่จะอีเมลผ่านระบบวิกิด้วยคำสั่ง 'อีเมลหาผู้ใช้นี้'
 485+สามารถติดต่อ $1 หรือ [[{{MediaWiki:grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือเกี่ยวกับการบล็อกนี้ หรือสามารถที่จะอีเมลผ่านระบบวิกิด้วยคำสั่ง 'อีเมลหาผู้ใช้นี้'
486486 (ถ้าคุณได้ตั้งค่ารองรับการใช้คำสั่งพิเศษผ่านทางอีเมลในส่วน [[Special:Preferences|การตั้งค่าผู้ใช้]])
487487 หมายเลขไอพีปัจจุบันของคุณคือ $3 และรหัสการบล็อกคือ #$5 กรุณาระบุหมายเลขเหล่านี้ในการติดต่อผู้ดูแล",
488488 'autoblockedtext' => 'หมายเลขไอพีของคุณถูกบล็อกอัตโนมัติเนื่องจากถูกใช้งานโดยผู้อื่น ซึ่งถูกบล็อกก่อนหน้าโดย $1 โดยสาเหตุที่ว่า:
@@ -492,7 +492,7 @@
493493
494494 คุณอาจติดต่อ $1 หรือ [[{{MediaWiki:grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือเกี่ยวกับการบล็อกนี้
495495
496 -หรือสามารถที่่จะอีเมลผ่านระบบวิกิด้วยคำสั่ง "อีเมลหาผู้ใช้นี้"
 496+หรือสามารถที่จะอีเมลผ่านระบบวิกิด้วยคำสั่ง "อีเมลหาผู้ใช้นี้"
497497 (ถ้าคุณได้ตั้งค่ารองรับการใช้คำสั่งพิเศษผ่านทางอีเมลในส่วน [[Special:Preferences|การตั้งค่าผู้ใช้]])
498498
499499 หมายเลขไอพีปัจจุบันของคุณคือ $3 และรหัสการบล็อกคือ #$5 กรุณาระบุหมายเลขเหล่านี้ในการติดต่อผู้ดูแล',
@@ -532,13 +532,13 @@
533533 'note' => '<strong>คำแนะนำ:</strong>',
534534 'previewnote' => '<strong>นี้เป็นส่วนแสดงผลเท่านั้น การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก!</strong>',
535535 'previewconflict' => 'การแสดงผลส่วนนี้เป็นตัวอย่างของการแก้ไขด้านบน ถ้ากดบันทึกการแสดงผลจะแสดงในลักษณะนี้ทันที',
536 -'session_fail_preview' => '<strong>เสียใจด้วย! ไม่สามารถดำเนินการแก้ไขต่อได้เนื่องจากการสูญหายของการเชื่อมต่อในช่วงการแก้ไข
537 -ให้ทดลองแกไ้ขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง</strong>',
 536+'session_fail_preview' => '<strong>เสียใจด้วย! ไม่สามารถดำเนินการแก้ไขต่อได้เนื่องจากการเชื่อมต่อกับอินเทอร์เน็ตหรือทางระบบขาดหายในระหว่างการแก้ไข
 537+ให้ทดลองแก้ไขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง</strong>',
538538 'session_fail_preview_html' => "<strong>เสียใจด้วย! ไม่สามารถดำเนินการแก้ไขต่อได้เนื่องจากการสูญหายของการเชื่อมต่อในช่วงการแก้ไข</strong>
539539
540540 ''เนื่องจากวิกินี้ใช้รูปแบบเอชทีเอ็มแอลเปล่า จะไม่มีการแสดงผลเพื่อป้องกันการขัดข้องระหว่างจาวาสคริปต์''
541541
542 -<strong>ถ้าการแก้ไขครั้งนี้ถูกต้อง ให้ทดลองแกไ้ขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง</strong>",
 542+<strong>ถ้าการแก้ไขครั้งนี้ถูกต้อง ให้ทดลองแก้ไขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง</strong>",
543543 'token_suffix_mismatch' => '<strong>การแก้ไขของคุณได้ถูกปฏิเสธเนื่องจากไคลเอนต์ที่คุณใช้อยู่ได้ขัดขวางรูปแบบของเครื่องหมายวรรคตอนในการแก้ไข
544544 ระบบไม่รับการแก้ไขของคุณเพื่อป้องกันความขัดข้องของข้อมูล ปัญหานี้มักจะเกิดขึ้นถ้าใช้งานบริการพรอกซีซ่อนสำหรับผู้ไม่ประสงค์ออกนาม</strong>',
545545 'importing' => 'กำลังนำเข้า $1',
@@ -700,7 +700,7 @@
701701 'viewprevnext' => 'ดู ($1) ($2) ($3)',
702702 'showingresults' => "แสดง $1 รายการ เริ่มต้นจากรายการที่ '''$2'''",
703703 'showingresultsnum' => "แสดง $3 รายการ เริ่มต้นจากรายการที่ '''$2'''",
704 -'nonefound' => "'''คำแนะนำ''': ค้นหาไม่พบเนื่องจากค้นหาจากคำศัพท์ทั่วไป เช่น \"คุณ\" and \"จาก\" ซึ่งไม่ได้ถูกเก็บไว้ในดันชีคำค้นหา",
 704+'nonefound' => "'''คำแนะนำ''': ค้นหาไม่พบอาจเนื่องจาก การค้นหาจากคำศัพท์ทั่วไป เช่นคำว่า \"ที่\" and \"ของ\" ไม่ได้ถูกเก็บไว้ในดัชนีคำค้นหา",
705705 'powersearch' => 'ค้นหา',
706706 'powersearchtext' => 'ค้นหาในเนมสเปซ:<br />$1<br />$2 แสดงหน้าเปลี่ยนทาง<br />ค้นหาคำ $3 $9',
707707 'searchdisabled' => 'งดระบบการค้นหาใน {{SITENAME}} อาจจะลองค้นหาในกูเกิลหรือเซิร์ชเอนจินอื่น',
@@ -916,7 +916,7 @@
917917 'imagelisttext' => "รายชื่อไฟล์ '''$1''' รายการ เรียงตาม$2",
918918 'imagelistforuser' => 'แสดงเฉพาะภาพที่อัปโหลดโดย $1',
919919 'getimagelist' => 'รับค่ารายชื่อไฟล์',
920 -'ilsubmit' => 'ค้่นหา',
 920+'ilsubmit' => 'ค้นหา',
921921 'showlast' => 'แสดงไฟล์ $1 รายการเรียงตาม$2',
922922 'byname' => 'ชื่อ',
923923 'bydate' => 'วันที่',
@@ -924,13 +924,6 @@
925925 'imgdelete' => 'ลบ',
926926 'imgdesc' => 'อธิบาย',
927927 'imgfile' => 'ไฟล์',
928 -'imglegend' => 'คำอธิบาย: (อธิบาย) = แสดง/ซ่อน คำอธิบายไฟล์',
929 -'imghistory' => 'ประวัติไฟล์',
930 -'revertimg' => 'ย้อน',
931 -'deleteimg' => 'ลบ',
932 -'deleteimgcompletely' => 'ลบทุกรุ่นของไฟล์นี้',
933 -'imghistlegend' => 'คำอธิบาย: (ป) = ไฟล์ปัจจุบัน (ลบ) = ลบรุ่นเก่าของไฟล์นี้ (ย้อน) = ย้อนกลับไปเป็นรุ่นเก่า
934 -<br /><i>กดวันที่เพื่อดูไฟล์ในรุ่น ณ วันนั้น</i>',
935928 'imagelinks' => 'หน้าที่ใช้ภาพนี้',
936929 'linkstoimage' => 'หน้าที่ใช้ภาพนี้:',
937930 'nolinkstoimage' => 'ไม่มีหน้าที่ใช้ภาพนี้',
@@ -1212,7 +1205,6 @@
12131206 'deletionlog' => 'บันทึกการลบ',
12141207 'reverted' => 'ย้อนไปรุ่นก่อนหน้า',
12151208 'deletecomment' => 'สาเหตุในการลบ',
1216 -'imagereverted' => 'ย้อนกลับไปรุ่นก่อนหน้าสำเร็จ',
12171209 'rollback' => 'ย้อนการแก้ไข',
12181210 'rollback_short' => 'ย้อน',
12191211 'rollbacklink' => 'ย้อน',
@@ -1391,6 +1383,7 @@
13921384 'blocklink' => 'บล็อก',
13931385 'unblocklink' => 'เลิกบล็อก',
13941386 'contribslink' => 'แก้ไข',
 1387+'autoblocker' => 'ถูกบล็อกอัตโนมัติเนื่องจากหมายเลขไอพีของคุณตรงกับ "[[User:$1|$1]]" ถูกบล็อกกล่อนหน้านี้เนื่องจากสาเหตุ: "$2"',
13951388 'blocklogpage' => 'บันทึกการบล็อก',
13961389 'blocklogentry' => 'บล็อก "[[$1]]" หมดอายุ $2 $3',
13971390 'blocklogtext' => 'ด้านล่างเป็นบันทึกการบล็อกและการเลิกบล็อก ส่วนการบล็อกอัตโนมัติจะไม่ถูกรวมอยู่ในรายการนี้ ดู [[Special:Ipblocklist|รายการบล็อกไอพี]] สำหรับการบล็อกทั้งหมด',
@@ -1438,7 +1431,7 @@
14391432
14401433 <b>คำเตือน!</b>
14411434 การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้",
1442 -'movepagetalktext' => "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปด้วย '''เว้ันเสียแต่:'''
 1435+'movepagetalktext' => "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปด้วย '''เว้นเสียแต่:'''
14431436 *หน้าพูดคุยไม่ว่างมีแล้วที่ชื่อใหม่ หรือ
14441437 *ได้เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง
14451438
@@ -1854,7 +1847,7 @@
18551848
18561849 'exif-subjectdistance-value' => '$1 เมตร',
18571850
1858 -'exif-meteringmode-0' => 'ไ่ม่ทราบ',
 1851+'exif-meteringmode-0' => 'ไม่ทราบ',
18591852 'exif-meteringmode-1' => 'เฉลี่ย',
18601853 'exif-meteringmode-2' => 'เซนเตอร์',
18611854 'exif-meteringmode-3' => 'สปอต',
Index: branches/apiedit/phase3/languages/messages/MessagesKu_arab.php
@@ -8,4 +8,27 @@
99
1010 $fallback = 'ku-latn';
1111
 12+$skinNames = array(
 13+'standard' => 'كلاسیك',
 14+'nostalgia' => 'قاوه‌یی',
 15+'cologneblue' => 'شین',
 16+'monobook' => 'مۆنۆ',
 17+'myskin' => 'پێستی خۆم',
 18+'chick' => 'جوجه‌',
 19+'simple' => 'ساده‌'
 20+);
1221
 22+$messages = array(
 23+# User preference toggles
 24+'tog-underline' => 'هێڵ به‌ژێر به‌سه‌ره‌كاندا:',
 25+'tog-highlightbroken' => 'لابردنی به‌سته‌ری په‌ڕه‌ به‌تاڵه‌كان',
 26+'tog-justify' => 'ده‌ق وه‌كو كۆپله‌',
 27+'tog-hideminor' => 'گۆڕانكارییه‌ بچووكه‌كان بشاره‌وه‌',
 28+'tog-extendwatchlist' => 'لیسته‌ی چاودێری كردن - په‌ره‌پێدراو',
 29+'tog-usenewrc' => 'نیشاندان په‌ره‌پێدراو (پێویستی به‌ JavaScript)',
 30+'tog-numberheadings' => 'هێڵ به‌ژێر سه‌ردێره‌كان',
 31+'tog-showtoolbar' => 'ئامرازه‌كانی كاركردن نیشانبده‌',
 32+'tog-editondblclick' => 'په‌ڕه‌كان به‌ دوو كرته‌ بكه‌وه‌ بۆ كارتیاكردن (JavaScript)',
 33+'tog-editsection' => 'به‌سته‌ر بۆ كۆپله‌كان بۆ ده‌ستكاریی كردن نیشانبده‌',
 34+
 35+);
Index: branches/apiedit/phase3/languages/messages/MessagesDe.php
@@ -133,11 +133,26 @@
134134 'Withoutinterwiki' => array( 'Fehlende_Interwikis' ),
135135 );
136136
 137+$datePreferences = array(
 138+ 'default',
 139+ 'dmyt',
 140+ 'dmyts',
 141+ 'dmy',
 142+ 'ymd',
 143+ 'ISO 8601'
 144+);
 145+
 146+$defaultDateFormat = 'dmy';
 147+
137148 $dateFormats = array(
138 - 'mdy time' => 'H:i',
139 - 'mdy date' => 'M j. Y',
140 - 'mdy both' => 'H:i, M j. Y',
 149+ 'dmyt time' => 'H:i',
 150+ 'dmyt date' => 'j. F Y',
 151+ 'dmyt both' => 'j. M Y, H:i',
141152
 153+ 'dmyts time' => 'H:i:s',
 154+ 'dmyts date' => 'j. F Y',
 155+ 'dmyts both' => 'j. M Y, H:i:s',
 156+
142157 'dmy time' => 'H:i',
143158 'dmy date' => 'j. F Y',
144159 'dmy both' => 'H:i, j. M Y',
@@ -145,6 +160,10 @@
146161 'ymd time' => 'H:i',
147162 'ymd date' => 'Y M j',
148163 'ymd both' => 'H:i, Y M j',
 164+
 165+ 'ISO 8601 time' => 'xnH:xni:xns',
 166+ 'ISO 8601 date' => 'xnY-xnm-xnd',
 167+ 'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns'
149168 );
150169
151170 $messages = array(
@@ -517,6 +536,7 @@
518537 'nouserspecified' => 'Bitte geben Sie einen Benutzernamen an.',
519538 'wrongpassword' => 'Das Passwort ist falsch (oder fehlt). Bitte versuchen Sie es erneut.',
520539 'wrongpasswordempty' => 'Das eingegebene Passwort war leer. Bitte versuchen Sie es erneut.',
 540+'passwordtooshort' => 'Fehler bei der Passwort-Wahl: Es muss mindestens $1 Zeichen lang sein und darf nicht mit dem Benutzernamen identisch sein.',
521541 'mailmypassword' => 'Neues Passwort zusenden',
522542 'passwordremindertitle' => 'Neues Passwort für ein {{SITENAME}}-Benutzerkonto',
523543 'passwordremindertext' => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.
@@ -610,6 +630,7 @@
611631 \'\'\'Bitte geben Sie folgende Daten in jeder Anfrage an:\'\'\'
612632 *Sperrender Administrator: $1
613633 *Sperrgrund: $2
 634+*Beginn der Sperre: $8
614635 *Sperr-Ende: $6
615636 *IP-Adresse: $3
616637 *Sperre betrifft: $7
@@ -632,7 +653,8 @@
633654 \'\'\'Bitte geben Sie folgende Daten in jeder Anfrage an:\'\'\'
634655 *Sperrender Administrator: $1
635656 *Sperrgrund: $2
636 -*Sperrende: $6
 657+*Beginn der Sperre: $8
 658+*Sperr-Ende: $6
637659 *IP-Adresse: $3
638660 *Sperr-ID: #$5
639661 </div>',
@@ -878,14 +900,14 @@
879901 'math_lexing_error' => "'Lexing'-Fehler",
880902 'math_syntax_error' => 'Syntaxfehler',
881903 'math_image_error' => 'die PNG-Konvertierung schlug fehl',
882 -'math_bad_tmpdir' => 'Kann das Temporärverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.',
883 -'math_bad_output' => 'Kann das Zielverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.',
884 -'math_notexvc' => 'Das texvc-Programm kann nicht gefunden werden. Bitte math/README beachten.',
 904+'math_bad_tmpdir' => 'Das temporäre Verzeichnis für mathematische Formeln kann nicht angelegt oder beschrieben werden.',
 905+'math_bad_output' => 'Das Zielverzeichnis für mathematische Formeln kann nicht angelegt oder beschrieben werden.',
 906+'math_notexvc' => 'Das texvc-Programm wurde nicht gefunden. Bitte math/README beachten.',
885907 'prefs-personal' => 'Benutzerdaten',
886908 'prefs-rc' => 'Anzeige von „Letzte Änderungen“',
887909 'prefs-watchlist' => 'Beobachtungsliste',
888 -'prefs-watchlist-days' => 'Anzahl der Tage, die die Beobachtungsliste standardmäßig umfassen soll:',
889 -'prefs-watchlist-edits' => 'Anzahl der Einträge in der erweiterten Beobachtungsliste:',
 910+'prefs-watchlist-days' => 'Maximale Anzahl der Tage, die die Beobachtungsliste standardmäßig umfassen soll:',
 911+'prefs-watchlist-edits' => 'Maximale Anzahl der Einträge in der erweiterten Beobachtungsliste:',
890912 'prefs-misc' => 'Verschiedenes',
891913 'saveprefs' => 'Einstellungen speichern',
892914 'resetprefs' => 'Eingaben verwerfen',
@@ -1937,8 +1959,12 @@
19381960 'showhidebots' => '(Bots $1)',
19391961 'noimages' => 'Keine Dateien gefunden.',
19401962
1941 -'passwordtooshort' => 'Fehler bei der Passwort-Wahl: Es muss mindestens $1 Zeichen lang sein und darf nicht mit dem Benutzernamen identisch sein.',
 1963+# Bad image list
 1964+'bad_image_list' => 'Format:
19421965
 1966+Nur Zeilen, die mit einem * anfangen, werden ausgewertet. Als erstes nach dem * muss ein Link auf ein unerwünschtes Bild stehen.
 1967+Darauf folgende Artikellinks in derselben Zeile definieren Ausnahmen, in deren Kontext das Bild trotzdem erscheinen darf.',
 1968+
19431969 # Metadata
19441970 'metadata' => 'Metadaten',
19451971 'metadata-help' => 'Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.',
@@ -1968,6 +1994,7 @@
19691995 'exif-resolutionunit' => 'Maßeinheit der Auflösung',
19701996 'exif-stripoffsets' => 'Bilddaten-Versatz',
19711997 'exif-rowsperstrip' => 'Anzahl Zeilen pro Streifen',
 1998+'exif-stripbytecounts' => 'Bytes pro komprimiertem Streifen',
19721999 'exif-jpeginterchangeformat' => 'Offset zu JPEG SOI',
19732000 'exif-jpeginterchangeformatlength' => 'Größe der JPEG-Daten in Bytes',
19742001 'exif-transferfunction' => 'Übertragungsfunktion',
Index: branches/apiedit/phase3/languages/messages/MessagesEn.php
@@ -788,8 +788,11 @@
789789 'protectedinterface' => 'This page provides interface text for the software, and is locked to prevent abuse.',
790790 'editinginterface' => "'''Warning:''' You are editing a page which is used to provide interface text for the software. Changes to this page will affect the appearance of the user interface for other users.",
791791 'sqlhidden' => '(SQL query hidden)',
792 -'cascadeprotected' => 'This page has been protected from editing, because it is included in the following {{PLURAL:$1|page|pages}}, which are protected with the "cascading" option turned on:',
793 -'namespaceprotected' => "You do not have permission to edit pages in the '''$1''' namespace.",
 792+'cascadeprotected' => "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page|pages}}, which are protected with the \"cascading\" option turned on:
 793+$2",
 794+'namespaceprotected' => "You do not have permission to edit pages in the '''$1''' namespace.",
 795+'customcssjsprotected' => "You do not have permission to edit this page, because it contains another user's personal settings.",
 796+'ns-specialprotected' => "Pages in the special namespace cannot be edited.",
794797
795798 # Login and logout pages
796799 'logouttitle' => 'User logout',
@@ -847,6 +850,7 @@
848851 'nouserspecified' => 'You have to specify a username.',
849852 'wrongpassword' => 'Incorrect password entered. Please try again.',
850853 'wrongpasswordempty' => 'Password entered was blank. Please try again.',
 854+'passwordtooshort' => 'Your password is invalid or too short. It must have at least $1 characters and be different from your username.',
851855 'mailmypassword' => 'E-mail password',
852856 'passwordremindertitle' => 'Password reminder from {{SITENAME}}',
853857 'passwordremindertext' => 'Someone (probably you, from IP address $1)
@@ -943,7 +947,7 @@
944948
945949 You can contact $1 or another [[{{MediaWiki:grouppage-sysop}}|administrator]] to discuss the block.
946950 You cannot use the 'email this user' feature unless a valid email address is specified in your
947 -[[Special:Preferences|account preferences]] and you have not been blocked from using it.
 951+[[Special:Preferences|account preferences]] and you have not been blocked from using it.
948952 Your current IP address is $3, and the block ID is #$5. Please include either or both of these in any queries.",
949953 'autoblockedtext' => 'Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
950954 The reason given is this:
@@ -956,11 +960,18 @@
957961 You may contact $1 or one of the other
958962 [[{{MediaWiki:grouppage-sysop}}|administrators]] to discuss the block.
959963
960 -Note that you may not use the "e-mail this user" feature unless you have a valid e-mail address
 964+Note that you may not use the "e-mail this user" feature unless you have a valid e-mail address
961965 registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.
962966
963967 Your block ID is $5. Please include this ID in any queries you make.',
964 -'blockedoriginalsource' => "The source of '''$1''' is shown below:",
 968+'blockedtext-concise' => "$7, which matches your username or IP address, has been blocked by $1. The reason given was $2. The expiry time of this block is $6. To discuss the block, you can
 969+contact $1, or another administrator. You cannot use the 'email this user' feature unless a valid email address is specified in your account preferences and you have not been blocked from using it.
 970+Your current IP address is $3, and the block ID is #$5. Please include either or both of these in any queries.",
 971+'autoblockedtext-concise' => "Your IP address has recently been used by a user who was blocked. The block was made by $1. The reason given was $2. The expiry time of this block is $6. To
 972+discuss the block, you can contact $1, or another administrator. You cannot use the 'email this user' feature unless a valid email address is specified in your account preferences and you have not
 973+been blocked from using it. Your current IP address is $3, and the block ID is #$5. Please include either or both of these in any queries.",
 974+'blockedoriginalsource' => "The source of '''$1''' is
 975+shown below:",
965976 'blockededitsource' => "The text of '''your edits''' to '''$1''' is shown below:",
966977 'whitelistedittitle' => 'Login required to edit',
967978 'whitelistedittext' => 'You have to $1 to edit pages.',
@@ -1052,7 +1063,10 @@
10531064 'nocreatetitle' => 'Page creation limited',
10541065 'nocreatetext' => 'This site has restricted the ability to create new pages.
10551066 You can go back and edit an existing page, or [[Special:Userlogin|log in or create an account]].',
1056 -'recreate-deleted-warn' => "'''Warning: You are recreating a page that was previously deleted.'''
 1067+'nocreate-loggedin' => 'You do not have permission to create new pages on this wiki.',
 1068+'permissionserrors' => "Permissions Errors",
 1069+'permissionserrorstext' => "You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:",
 1070+'recreate-deleted-warn' => "'''Warning: You are recreating a page that was previously deleted.''',
10571071
10581072 You should consider whether it is appropriate to continue editing this page.
10591073 The deletion log for this page is provided here for convenience:",
@@ -2096,6 +2110,7 @@
20972111 'movenologin' => 'Not logged in',
20982112 'movenologintext' => 'You must be a registered user and [[Special:Userlogin|logged in]]
20992113 to move a page.',
 2114+'movenotallowed' => 'You do not have permission to move pages on this wiki.',
21002115 'newtitle' => 'To new title:',
21012116 'move-watch' => 'Watch this page',
21022117 'movepagebtn' => 'Move page',
@@ -2414,6 +2429,12 @@
24152430 'showhidebots' => '($1 bots)',
24162431 'noimages' => 'Nothing to see.',
24172432
 2433+# Bad image list
 2434+'bad_image_list' => 'The format is as follows:
 2435+
 2436+Only list items (lines starting with *) are considered. The first link on a line must be a link to a bad image.
 2437+Any subsequent links on the same line are considered to be exceptions, i.e. articles where the image may occur inline.',
 2438+
24182439 /*
24192440 Short names for language variants used for language conversion links.
24202441 To disable showing a particular link, set it to 'disable', e.g.
@@ -2444,8 +2465,6 @@
24452466 'variantname-ku-latn' => 'ku-latn', # only translate this message to other languages if you have to change it
24462467 'variantname-ku' => 'ku', # only translate this message to other languages if you have to change it
24472468
2448 -'passwordtooshort' => 'Your password is invalid or too short. It must have at least $1 characters and be different from your username.',
2449 -
24502469 # Metadata
24512470 'metadata' => 'Metadata',
24522471 'metadata-help' => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it. If the file has been modified from its original state, some details may not fully reflect the modified image.',
Index: branches/apiedit/phase3/languages/messages/MessagesMl.php
@@ -32,4 +32,46 @@
3333 NS_HELP_TALK => 'സഹായത്തിന്റെ_സംവാദം',
3434 );
3535
 36+$messages = array(
 37+# Days of the week
 38+'sunday' => 'ഞായര്‍',
 39+'monday' => 'തിങ്കള്‍',
 40+'tuesday' => 'ചൊവ്വ',
 41+'wednesday' => 'ബുധന്‍',
 42+'thursday' => 'വ്യാഴം',
 43+'friday' => 'വെള്ളി',
 44+'saturday' => 'ശനി',
 45+'sun' => 'ഞാ.',
 46+'mon' => 'തി.',
 47+'tue' => 'ചൊ.',
 48+'wed' => 'ബു.',
 49+'thu' => 'വ്യാ.',
 50+'fri' => 'വെ.',
 51+'sat' => 'ശ.',
3652
 53+# Month names
 54+'january' => 'ജനുവരി',
 55+'february' => 'ഫെബ്രുവരി',
 56+'march' => 'മാര്‍ച്ച്‌',
 57+'april' => 'ഏപ്രില്‍',
 58+'may_long' => 'മേയ്‌',
 59+'june' => 'ജൂണ്‍',
 60+'july' => 'ജൂലൈ',
 61+'august' => 'ഓഗസ്റ്റ്‌',
 62+'september' => 'സെപ്റ്റംബര്‍',
 63+'october' => 'ഒക്ടോബര്‍',
 64+'november' => 'നവംബര്‍',
 65+'december' => 'ഡിസംബര്‍',
 66+'jan' => 'ജനു.',
 67+'feb' => 'ഫെബ്രു.',
 68+'mar' => 'മാര്‍.',
 69+'apr' => 'ഏപ്രി.',
 70+'may' => 'മേയ്‌',
 71+'jun' => 'ജൂണ്‍',
 72+'jul' => 'ജൂലൈ',
 73+'aug' => 'ഓഗ.',
 74+'sep' => 'സെപ്റ്റം.',
 75+'oct' => 'ഒക്ടോ‍.‍',
 76+'nov' => 'നവം.',
 77+'dec' => 'ഡിസം.',
 78+);
Index: branches/apiedit/phase3/languages/messages/MessagesHe.php
@@ -655,8 +655,9 @@
656656
657657 החסימה בוצעה על־ידי \$1. הסיבה שניתנה לכך היא '''\$2'''.
658658
659 -פקיעת החסימה: \$6<br />
660 -החסימה שבוצעה: \$7
 659+* תחילת החסימה: \$8
 660+* פקיעת החסימה: \$6
 661+* החסימה שבוצעה: \$7
661662
662663 באפשרותכם ליצור קשר עם \$1 או עם כל אחד מ[[{{ns:project}}:מפעיל מערכת|מפעילי המערכת]] האחרים כדי לדון על החסימה.
663664 אינכם יכולים להשתמש בתכונת \"שלחו דואר אלקטרוני למשתמש זה\" אם לא ציינתם כתובת דוא\"ל תקפה ב[[{{ns:special}}:Preferences|העדפות המשתמש שלכם]].
@@ -666,7 +667,8 @@
667668
668669 :\'\'\'$2\'\'\'
669670
670 -פקיעת החסימה: $6
 671+* תחילת החסימה: $8
 672+* פקיעת החסימה: $6
671673
672674 באפשרותכם ליצור קשר עם $1 או עם כל אחד מ[[{{ns:project}}:מפעיל מערכת|מפעילי המערכת]] האחרים כדי לדון על החסימה.
673675 אינכם יכולים להשתמש בתכונת "שלחו דואר אלקטרוני למשתמש זה" אם לא ציינתם כתובת דוא"ל תקפה ב[[{{ns:special}}:Preferences|העדפות המשתמש שלכם]].
@@ -913,8 +915,8 @@
914916 'prefs-personal' => 'פרטי המשתמש',
915917 'prefs-rc' => 'שינויים אחרונים',
916918 'prefs-watchlist' => 'רשימת המעקב',
917 -'prefs-watchlist-days' => 'מספר הימים לתצוגה ברשימת המעקב:',
918 -'prefs-watchlist-edits' => 'מספר העריכות לתצוגה ברשימת המעקב המורחבת:',
 919+'prefs-watchlist-days' => 'מספר הימים המירבי שיוצגו ברשימת המעקב:',
 920+'prefs-watchlist-edits' => 'מספר העריכות המירבי שיוצגו ברשימת המעקב המורחבת:',
919921 'prefs-misc' => 'שונות',
920922 'saveprefs' => 'שמור העדפות',
921923 'resetprefs' => 'שחזר ברירת מחדל',
Index: branches/apiedit/phase3/maintenance/language/messages.inc
@@ -376,6 +376,7 @@
377377 'nouserspecified',
378378 'wrongpassword',
379379 'wrongpasswordempty',
 380+ 'passwordtooshort',
380381 'mailmypassword',
381382 'passwordremindertitle',
382383 'passwordremindertext',
@@ -1692,6 +1693,9 @@
16931694 'showhidebots',
16941695 'noimages',
16951696 ),
 1697+ 'badimagelist' => array(
 1698+ 'bad_image_list',
 1699+ ),
16961700 'variantname-zh' => array(
16971701 'variantname-zh-cn',
16981702 'variantname-zh-tw',
@@ -1717,9 +1721,6 @@
17181722 'variantname-ku-latn',
17191723 'variantname-ku',
17201724 ),
1721 - 'passwordtooshort' => array(
1722 - 'passwordtooshort',
1723 - ),
17241725 'metadata' => array(
17251726 'metadata',
17261727 'metadata-help',
@@ -2286,6 +2287,7 @@
22872288 'imagedeletion' => 'Image deletion',
22882289 'browsediffs' => 'Browsing diffs',
22892290 'newimages' => '',
 2291+ 'badimagelist' => 'Bad image list',
22902292 'variantname-zh' => "Short names for language variants used for language conversion links.
22912293 To disable showing a particular link, set it to 'disable', e.g.
22922294 'variantname-zh-sg' => 'disable',
@@ -2293,7 +2295,6 @@
22942296 'variantname-sr' => 'Variants for Serbian language',
22952297 'variantname-kk' => 'Variants for Kazakh language',
22962298 'variantname-ku' => 'Variants for Kurdish language',
2297 - 'passwordtooshort' => '',
22982299 'media-info' => 'Media information',
22992300 'metadata' => 'Metadata',
23002301 'exif' => 'EXIF tags',
Property changes on: branches/apiedit/phase3
___________________________________________________________________
Modified: svnmerge-integrated
23012302 - /trunk/phase3:1-24498
23022303 + /trunk/phase3:1-24515

Status & tagging log