Index: branches/liquidthreads/docs/hooks.txt |
— | — | @@ -482,6 +482,10 @@ |
483 | 483 | $imagePage: ImagePage object ($this) |
484 | 484 | $output: $wgOut |
485 | 485 | |
| 486 | +'InitPreferencesForm': called at the end of PreferencesForm's constructor |
| 487 | +$form: the PreferencesForm |
| 488 | +$request: the web request to initialized from |
| 489 | + |
486 | 490 | 'InternalParseBeforeLinks': during Parser's internalParse method before links but |
487 | 491 | after noinclude/includeonly/onlyinclude and other processing. |
488 | 492 | &$this: Parser object |
— | — | @@ -574,6 +578,20 @@ |
575 | 579 | &$obj: RawPage object |
576 | 580 | &$text: The text that's going to be the output |
577 | 581 | |
| 582 | +'RenderPreferencesForm': called at the end of PreferencesForm::mainPrefsForm |
| 583 | +$form: the PreferencesForm |
| 584 | +$out: output page to render to, probably $wgOut |
| 585 | + |
| 586 | +'ResetPreferences': called at the end of PreferencesForm::resetPrefs |
| 587 | +$form: the PreferencesForm |
| 588 | +$user: the User object to load preferences from |
| 589 | + |
| 590 | +'SavePreferences': called at the end of PreferencesForm::savePreferences; |
| 591 | + returning false prevents the preferences from being saved. |
| 592 | +$form: the PreferencesForm |
| 593 | +$user: the User object to save preferences to |
| 594 | +$message: change this to set an error message (ignored if the hook does notreturn fals) |
| 595 | + |
578 | 596 | 'SearchUpdate': Prior to search update completion |
579 | 597 | $id : Page id |
580 | 598 | $namespace : Page namespace |
Index: branches/liquidthreads/api.php |
— | — | @@ -50,7 +50,7 @@ |
51 | 51 | */ |
52 | 52 | $processor = new ApiMain($wgRequest, $wgEnableWriteAPI); |
53 | 53 | |
54 | | -// Generate the output. |
| 54 | +// Process data & print results |
55 | 55 | $processor->execute(); |
56 | 56 | |
57 | 57 | // Log what the user did, for book-keeping purposes. |
Index: branches/liquidthreads/languages/messages/MessagesZh_cn.php |
— | — | @@ -374,7 +374,7 @@ |
375 | 375 | 'filedeleteerror' => '无法删除文件 "$1"。', |
376 | 376 | 'directorycreateerror' => '无法创建目录"$1"。', |
377 | 377 | 'filenotfound' => '找不到文件 "$1"。', |
378 | | -'fileexists' => '无法写入文件"$1": 文件已存在', |
| 378 | +'fileexistserror' => '无法写入文件"$1": 文件已存在', |
379 | 379 | 'unexpected' => '非正常值: "$1"="$2"。', |
380 | 380 | 'formerror' => '错误: 无法提交表单', |
381 | 381 | 'badarticleerror' => '无法在此页进行此项操作。', |
— | — | @@ -978,14 +978,17 @@ |
979 | 979 | 'imgdelete' => '删除', |
980 | 980 | 'imgdesc' => '描述', |
981 | 981 | 'imgfile' => '文件', |
982 | | -'imglegend' => '说明: (描述) = 显示/编辑文件描述。', |
983 | | -'imghistory' => '文件历史', |
984 | | -'revertimg' => '恢复', |
985 | | -'deleteimg' => '删除', |
986 | | -'deleteimgcompletely' => '删除此文件的所有修订版本', |
987 | | -'imghistlegend' => '说明: (当前) = 这是当前文件,(删除) = 删除此旧版本, |
988 | | -(恢复 = 恢复到此旧版本。 |
989 | | -<br /><i>点击日期查看当天上载的文件</i>。', |
| 982 | +'filehist' => '文件历史', |
| 983 | +'filehist-help' => '点击日期/时间以查看当时出现过的文件。', |
| 984 | +'filehist-deleteall' => '删除全部', |
| 985 | +'filehist-deleteone' => '删除这个', |
| 986 | +'filehist-revert' => '恢复', |
| 987 | +'filehist-current' => '当前', |
| 988 | +'filehist-datetime' => '日期/时间', |
| 989 | +'filehist-user' => '用户', |
| 990 | +'filehist-dimensions' => '维度', |
| 991 | +'filehist-filesize' => '文件大小', |
| 992 | +'filehist-comment' => '注解', |
990 | 993 | 'imagelinks' => '鏈接', |
991 | 994 | 'linkstoimage' => '以下页面鏈接到本文件:', |
992 | 995 | 'nolinkstoimage' => '没有页面鏈接到本文件。', |
— | — | @@ -1002,6 +1005,16 @@ |
1003 | 1006 | 'imagelist_description' => '描述', |
1004 | 1007 | 'imagelist_search_for' => '按图像名称搜索:', |
1005 | 1008 | |
| 1009 | +# File reversion |
| 1010 | +'filerevert' => '恢复$1', |
| 1011 | +'filerevert-legend' => '恢复文件', |
| 1012 | +'filerevert-intro' => "<span class=\"plainlinks\">您现正在恢复'''[[Media:$1|$1]]'''到[于$2 $3的$4版本]。</span>", |
| 1013 | +'filerevert-comment' => '注解:', |
| 1014 | +'filerevert-defaultcomment' => '已经恢复到于$1 $2的版本', |
| 1015 | +'filerevert-submit' => '恢复', |
| 1016 | +'filerevert-success' => "<span class=\"plainlinks\">'''[[Media:$1|$1]]'''已经恢复到[于$2 $3的$4版本]。</span>", |
| 1017 | +'filerevert-badversion' => '这个文件所提供的时间截记并无先前的本地版本。', |
| 1018 | + |
1006 | 1019 | # MIME search |
1007 | 1020 | 'mimesearch' => 'MIME 搜索', |
1008 | 1021 | 'mimesearch-summary' => '本页面启用文件MIME类型过滤器。输入:内容类型/子类型,如 <tt>image/jpeg</tt>。', |
— | — | @@ -1037,7 +1050,7 @@ |
1038 | 1051 | 即每页平均编辑'''\$5'''次,各次编辑后页面的每个版本平均浏览'''\$6'''次。 |
1039 | 1052 | |
1040 | 1053 | [http://meta.wikimedia.org/wiki/Help:Job_queue 工作排队]的长度是'''\$7'''。", |
1041 | | -'userstatstext' => "网站有'''$1'''位注册用户,其中 |
| 1054 | +'userstatstext' => "网站有'''$1'''位注册[[Special:Listusers|用户]],其中 |
1042 | 1055 | '''$2''' (或 '''$4%''') 有$5权限。", |
1043 | 1056 | 'statistics-mostpopular' => '浏览最多的页面', |
1044 | 1057 | |
— | — | @@ -1276,7 +1289,6 @@ |
1277 | 1290 | 'deletionlog' => '删除日志', |
1278 | 1291 | 'reverted' => '恢复到早期版本', |
1279 | 1292 | 'deletecomment' => '删除原因', |
1280 | | -'imagereverted' => '恢复到早期版本操作完成。', |
1281 | 1293 | 'rollback' => '恢复编辑', |
1282 | 1294 | 'rollback_short' => '恢复', |
1283 | 1295 | 'rollbacklink' => '恢复', |
Index: branches/liquidthreads/languages/messages/MessagesHe.php |
— | — | @@ -505,7 +505,7 @@ |
506 | 506 | 'filedeleteerror' => 'מחיקת "$1" נכשלה.', |
507 | 507 | 'directorycreateerror' => 'יצירת התיקייה "$1" נכשלה.', |
508 | 508 | 'filenotfound' => 'הקובץ "$1" לא נמצא.', |
509 | | -'fileexists' => 'הכתיבה לקובץ "$1" נכשלה: הקובץ קיים', |
| 509 | +'fileexistserror' => 'הכתיבה לקובץ "$1" נכשלה: הקובץ קיים', |
510 | 510 | 'unexpected' => 'ערך לא צפוי: "$1"="$2"', |
511 | 511 | 'formerror' => 'שגיאה: לא יכול לשלוח טופס.', |
512 | 512 | 'badarticleerror' => 'לא ניתן לבצע פעולה זו בדף זה.', |
— | — | @@ -593,7 +593,7 @@ |
594 | 594 | 'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב־$1 השעות האחרונות. כדי למנוע ניצול לרעה, רק דואר אחד כזה יכול להישלח כל $1 שעות.', |
595 | 595 | 'mailerror' => 'שגיאה בשליחת דואר: $1', |
596 | 596 | 'acct_creation_throttle_hit' => 'מצטערים, יצרת כבר $1 חשבונות. אינך יכול ליצור חשבונות נוספים.', |
597 | | -'emailauthenticated' => 'כתובת הדוא"ל שלך אושרה על־ידי $1.', |
| 597 | +'emailauthenticated' => 'כתובת הדוא"ל שלך אושרה ב־$1.', |
598 | 598 | 'emailnotauthenticated' => 'כתובת הדוא"ל שלך עדיין לא אושרה. אף דוא"ל לא יישלח מאף אחת מהתכונות הבאות.', |
599 | 599 | 'noemailprefs' => 'אנא ציינו כתובת דוא"ל כדי שתכונות אלה יעבדו.', |
600 | 600 | 'emailconfirmlink' => 'אשר את כתובת הדוא"ל שלך', |
— | — | @@ -1104,13 +1104,17 @@ |
1105 | 1105 | 'imgdelete' => 'מחק', |
1106 | 1106 | 'imgdesc' => 'תיאור', |
1107 | 1107 | 'imgfile' => 'קובץ', |
1108 | | -'imglegend' => 'מקרא: (תיאור) הצג/ערוך תיאור התמונה.', |
1109 | | -'imghistory' => 'היסטורית קובץ תמונה', |
1110 | | -'revertimg' => 'חזור', |
1111 | | -'deleteimg' => 'מחק', |
1112 | | -'deleteimgcompletely' => 'מחק את כל גרסאות התמונה', |
1113 | | -'imghistlegend' => 'מקרא (נוכ) = זו התמונה הנוכחית, (מחק) = מחק גרסה ישנה זו, (חזור) חזור לגרסה ישנה זו.<br /> |
1114 | | -<b>לחצו על תאריך לראות את התמונה שהועלתה בתאריך זה.</b>', |
| 1108 | +'filehist' => 'היסטוריית קובץ התמונה', |
| 1109 | +'filehist-help' => 'לחצו על תאריך/שעה כדי לראות את התמונה כפי שהופיעה בעת זו.', |
| 1110 | +'filehist-deleteall' => 'מחיקת כל הגרסאות', |
| 1111 | +'filehist-deleteone' => 'מחיקת הגרסה הנוכחית', |
| 1112 | +'filehist-revert' => 'שחזור', |
| 1113 | +'filehist-current' => 'נוכחית', |
| 1114 | +'filehist-datetime' => 'תאריך/שעה', |
| 1115 | +'filehist-user' => 'משתמש', |
| 1116 | +'filehist-dimensions' => 'ממדים', |
| 1117 | +'filehist-filesize' => 'גודל הקובץ', |
| 1118 | +'filehist-comment' => 'הערה', |
1115 | 1119 | 'imagelinks' => 'קישורי תמונות', |
1116 | 1120 | 'linkstoimage' => 'הדפים הבאים משתמשים בתמונה זו:', |
1117 | 1121 | 'nolinkstoimage' => 'אין דפים המשתמשים בתמונה זו.', |
— | — | @@ -1127,6 +1131,16 @@ |
1128 | 1132 | 'imagelist_description' => 'תיאור', |
1129 | 1133 | 'imagelist_search_for' => 'חיפוש תמונה בשם:', |
1130 | 1134 | |
| 1135 | +# File reversion |
| 1136 | +'filerevert' => 'שחזור $1', |
| 1137 | +'filerevert-legend' => 'שחזור קובץ', |
| 1138 | +'filerevert-intro' => '<span class="plainlinks">משחזר את \'\'\'[[Media:$1|$1]]\'\'\' ל[גרסה $4 מ־$2, $3].</span>', |
| 1139 | +'filerevert-comment' => 'הערה:', |
| 1140 | +'filerevert-defaultcomment' => 'שוחזר לגרסה מ־$1, $2', |
| 1141 | +'filerevert-submit' => 'שחזור', |
| 1142 | +'filerevert-success' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\' שוחזרה ל[גרסה $4 מ־$2, $3].</span>', |
| 1143 | +'filerevert-badversion' => 'אין גרסה מקומית קודמת של הקובץ שהועלתה בתאריך המצוין.', |
| 1144 | + |
1131 | 1145 | # MIME search |
1132 | 1146 | 'mimesearch' => 'חיפוש MIME', |
1133 | 1147 | 'mimesearch-summary' => 'דף זה מאפשר את סינון הקבצים לפי סוג ה־MIME שלהם. סוג ה־MIME בנוי בצורה "סוג תוכן/סוג משני", לדוגמה <tt>image/jpeg</tt>.', |
— | — | @@ -1393,7 +1407,6 @@ |
1394 | 1408 | 'deletionlog' => 'יומן מחיקות', |
1395 | 1409 | 'reverted' => 'שוחזר לגרסה קודמת', |
1396 | 1410 | 'deletecomment' => 'סיבת המחיקה', |
1397 | | -'imagereverted' => 'השחזור לגרסה הקודמת הושלם בהצלחה.', |
1398 | 1411 | 'rollback' => 'שחזור עריכות', |
1399 | 1412 | 'rollback_short' => 'שחזור', |
1400 | 1413 | 'rollbacklink' => 'שחזור', |
— | — | @@ -1485,7 +1498,6 @@ |
1486 | 1499 | |
1487 | 1500 | $1 |
1488 | 1501 | ', |
1489 | | - |
1490 | 1502 | |
1491 | 1503 | # Namespace form on various pages |
1492 | 1504 | 'namespace' => 'מרחב שם:', |
— | — | @@ -1658,7 +1670,7 @@ |
1659 | 1671 | 'move-watch' => 'מעקב אחרי דף זה', |
1660 | 1672 | 'movepagebtn' => 'העבר דף', |
1661 | 1673 | 'pagemovedsub' => 'ההעברה הושלמה בהצלחה', |
1662 | | -'movepage-moved' => '<big>הדף "$1" הועבר לשם "$2".</big>', |
| 1674 | +'movepage-moved' => '<big>הדף "$1" הועבר לשם "$2".</big>', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message. |
1663 | 1675 | 'articleexists' => 'קיים כבר דף עם אותו שם, או שהשם שבחרתם אינו חוקי. |
1664 | 1676 | אנא בחרו שם אחר.', |
1665 | 1677 | 'talkexists' => 'הדף עצמו הועבר בהצלחה, אבל דף השיחה לא הועבר כיוון שקיים כבר דף שיחה במיקום החדש. אנא מזגו אותם ידנית.', |
— | — | @@ -2279,7 +2291,7 @@ |
2280 | 2292 | # Auto-summaries |
2281 | 2293 | 'autosumm-blank' => 'מסיר את כל התוכן מדף זה', |
2282 | 2294 | 'autosumm-replace' => "מחליף את הדף עם '$1'", |
2283 | | -'autoredircomment' => 'הפניה לדף [[$1]]', # This should be changed to the new naming convention, but existed beforehand |
| 2295 | +'autoredircomment' => 'הפניה לדף [[$1]]', |
2284 | 2296 | 'autosumm-new' => 'דף חדש: $1', |
2285 | 2297 | |
2286 | 2298 | # Size units |
Index: branches/liquidthreads/languages/messages/MessagesZh_yue.php |
— | — | @@ -432,7 +432,7 @@ |
433 | 433 | 'filedeleteerror' => '唔可以刪除檔案 "$1"。', |
434 | 434 | 'directorycreateerror' => '開唔到目錄 "$1"。', |
435 | 435 | 'filenotfound' => '搵唔到檔案 "$1"。', |
436 | | -'fileexists' => '寫唔到檔案 "$1": 檔案已經存在', |
| 436 | +'fileexistserror' => '寫唔到檔案 "$1": 檔案已經存在', |
437 | 437 | 'unexpected' => '意外數值。 "$1"="$2"。', |
438 | 438 | 'formerror' => '錯誤:表格交唔到', |
439 | 439 | 'badarticleerror' => '呢個動作唔可以喺頁面度進行。', |
— | — | @@ -1051,14 +1051,17 @@ |
1052 | 1052 | 'imgdelete' => '刪除', |
1053 | 1053 | 'imgdesc' => '描述', |
1054 | 1054 | 'imgfile' => '檔案', |
1055 | | -'imglegend' => '說明:(描述)顯示/編輯檔案描述。', |
1056 | | -'imghistory' => '檔案歷史', |
1057 | | -'revertimg' => '回復', |
1058 | | -'deleteimg' => '刪除', |
1059 | | -'deleteimgcompletely' => '刪除呢個檔案嘅所有修改', |
1060 | | -'imghistlegend' => '說明:(現) = 呢個係目前嘅檔案,(刪除) = 刪除呢個舊版本, |
1061 | | -(回復) = 恢復到呢個舊版本。 |
1062 | | -<br /><i>撳日期嚟睇喺嗰個日期上載嘅檔案。</i>', |
| 1055 | +'filehist' => '檔案歷史', |
| 1056 | +'filehist-help' => '撳個日期/時間去睇響嗰個時間出現過嘅檔案。', |
| 1057 | +'filehist-deleteall' => '刪除全部', |
| 1058 | +'filehist-deleteone' => '刪除呢個', |
| 1059 | +'filehist-revert' => '回復', |
| 1060 | +'filehist-current' => '現時', |
| 1061 | +'filehist-datetime' => '日期/時間', |
| 1062 | +'filehist-user' => '用戶', |
| 1063 | +'filehist-dimensions' => '尺寸', |
| 1064 | +'filehist-filesize' => '檔案大細', |
| 1065 | +'filehist-comment' => '註解', |
1063 | 1066 | 'imagelinks' => '連結', |
1064 | 1067 | 'linkstoimage' => '以下嘅頁面連結到呢個檔案:', |
1065 | 1068 | 'nolinkstoimage' => '冇個頁面連結到呢個檔案。', |
— | — | @@ -1075,6 +1078,16 @@ |
1076 | 1079 | 'imagelist_description' => '描述', |
1077 | 1080 | 'imagelist_search_for' => '搵圖像名:', |
1078 | 1081 | |
| 1082 | +# File reversion |
| 1083 | +'filerevert' => '回復$1', |
| 1084 | +'filerevert-legend' => '回復檔案', |
| 1085 | +'filerevert-intro' => "<span class=\"plainlinks\">你而家回復緊'''[[Media:$1|$1]]'''到[響$2 $3嘅$4版本]。</span>", |
| 1086 | +'filerevert-comment' => '註解:', |
| 1087 | +'filerevert-defaultcomment' => '已經回復到響$1 $2嘅版本', |
| 1088 | +'filerevert-submit' => '回復', |
| 1089 | +'filerevert-success' => "<span class=\"plainlinks\">'''[[Media:$1|$1]]'''已經回復到[響$2 $3嘅$4版本]。</span>", |
| 1090 | +'filerevert-badversion' => '呢個檔案所提供嘅時間截記並無之前嘅本地版本。', |
| 1091 | + |
1079 | 1092 | # MIME search |
1080 | 1093 | 'mimesearch' => 'MIME 搜尋', |
1081 | 1094 | 'mimesearch-summary' => '呢一版可以過濾有關檔案嘅MIME類型。輸入方法:contenttype/subtype,例如 <tt>image/jpeg</tt>。', |
— | — | @@ -1111,7 +1124,7 @@ |
1112 | 1125 | 平均每個頁面有'''$5'''次瀏覽,同埋'''$6'''次編輯。 |
1113 | 1126 | |
1114 | 1127 | [http://meta.wikimedia.org/wiki/Help:Job_queue job queue]嘅長度係'''$7'''。", |
1115 | | -'userstatstext' => "目前有'''$1'''個註冊用戶,其中有'''$2'''人(即'''$4%''')係$5。", |
| 1128 | +'userstatstext' => "目前有'''$1'''個註冊[[Special:Listusers|用戶]],其中有'''$2'''人(即'''$4%''')有$5權限。", |
1116 | 1129 | 'statistics-mostpopular' => '最多人睇嘅頁', |
1117 | 1130 | |
1118 | 1131 | 'disambiguations' => '搞清楚頁', |
— | — | @@ -1350,7 +1363,6 @@ |
1351 | 1364 | 'deletionlog' => '刪除日誌', |
1352 | 1365 | 'reverted' => '恢復到先前嘅修訂', |
1353 | 1366 | 'deletecomment' => '刪除原因', |
1354 | | -'imagereverted' => '恢復到先前版本嘅操作已經成功。', |
1355 | 1367 | 'rollback' => '還原修改', |
1356 | 1368 | 'rollback_short' => '還原', |
1357 | 1369 | 'rollbacklink' => '還原', |
Index: branches/liquidthreads/languages/messages/MessagesZh_tw.php |
— | — | @@ -357,7 +357,7 @@ |
358 | 358 | 'filedeleteerror' => '無法刪除檔案"$1"。', |
359 | 359 | 'directorycreateerror' => '無法建立目錄"$1"。', |
360 | 360 | 'filenotfound' => '找不到檔案"$1"。', |
361 | | -'fileexists' => '無法寫入檔案"$1": 檔案已存在', |
| 361 | +'fileexistserror' => '無法寫入檔案"$1": 檔案已存在', |
362 | 362 | 'unexpected' => '不正常值:"$1"="$2"。', |
363 | 363 | 'formerror' => '錯誤:無法提交表單', |
364 | 364 | 'badarticleerror' => '無法在本頁上進行此項操作。', |
— | — | @@ -952,14 +952,17 @@ |
953 | 953 | 'imgdelete' => '刪除', |
954 | 954 | 'imgdesc' => '描述', |
955 | 955 | 'imgfile' => '檔案', |
956 | | -'imglegend' => '說明: (描述) = 顯示/編輯檔案描述。', |
957 | | -'imghistory' => '檔案歷史', |
958 | | -'revertimg' => '恢復', |
959 | | -'deleteimg' => '刪除', |
960 | | -'deleteimgcompletely' => '刪除此檔案的所有修訂版本', |
961 | | -'imghistlegend' => '說明: (當前) = 這是當前檔案,(刪除) = 刪除此舊版本, |
962 | | -(恢復 = 恢復到此舊版本。 |
963 | | -<br /><i>點擊日期檢視當天上載的檔案</i>。', |
| 956 | +'filehist' => '檔案歷史', |
| 957 | +'filehist-help' => '點擊日期/時間以檢視當時出現過的檔案。', |
| 958 | +'filehist-deleteall' => '刪除全部', |
| 959 | +'filehist-deleteone' => '刪除這個', |
| 960 | +'filehist-revert' => '恢復', |
| 961 | +'filehist-current' => '當前', |
| 962 | +'filehist-datetime' => '日期/時間', |
| 963 | +'filehist-user' => '用戶', |
| 964 | +'filehist-dimensions' => '維度', |
| 965 | +'filehist-filesize' => '檔案大小', |
| 966 | +'filehist-comment' => '註解', |
964 | 967 | 'imagelinks' => '連結', |
965 | 968 | 'linkstoimage' => '以下頁面連接到本檔案:', |
966 | 969 | 'nolinkstoimage' => '沒有頁面連接到本檔案。', |
— | — | @@ -976,6 +979,16 @@ |
977 | 980 | 'imagelist_description' => '描述', |
978 | 981 | 'imagelist_search_for' => '按圖像名稱搜索:', |
979 | 982 | |
| 983 | +# File reversion |
| 984 | +'filerevert' => '恢復$1', |
| 985 | +'filerevert-legend' => '恢復檔案', |
| 986 | +'filerevert-intro' => "<span class=\"plainlinks\">您現正在恢復'''[[Media:$1|$1]]'''到[於$2 $3的$4版本]。</span>", |
| 987 | +'filerevert-comment' => '註解:', |
| 988 | +'filerevert-defaultcomment' => '已經恢復到於$1 $2的版本', |
| 989 | +'filerevert-submit' => '恢復', |
| 990 | +'filerevert-success' => "<span class=\"plainlinks\">'''[[Media:$1|$1]]'''已經恢復到[於$2 $3的$4版本]。</span>", |
| 991 | +'filerevert-badversion' => '這個檔案所提供的時間截記並無先前的本地版本。', |
| 992 | + |
980 | 993 | # MIME search |
981 | 994 | 'mimesearch' => 'MIME 搜索', |
982 | 995 | 'mimesearch-summary' => '本頁面啟用檔案MIME類型過濾器。輸入︰內容類型/子類型,如 <tt>image/jpeg</tt>。', |
— | — | @@ -1011,7 +1024,7 @@ |
1012 | 1025 | 即每頁平均編輯'''\$5'''次,各次編輯後頁面的每個版本平均瀏覽'''\$6'''次。 |
1013 | 1026 | |
1014 | 1027 | [http://meta.wikimedia.org/wiki/Help:Job_queue 工作隊列]的長度是'''\$7'''。", |
1015 | | -'userstatstext' => "網站有'''$1'''位註冊用戶,其中 |
| 1028 | +'userstatstext' => "網站有'''$1'''位註冊[[Special:Listusers|用戶]],其中 |
1016 | 1029 | '''$2''' (或 '''$4%''') 有$5許可權。", |
1017 | 1030 | 'statistics-mostpopular' => '被查閱次數最多的頁面', |
1018 | 1031 | |
— | — | @@ -1251,7 +1264,6 @@ |
1252 | 1265 | 'deletionlog' => '刪除紀錄', |
1253 | 1266 | 'reverted' => '恢復到早期版本', |
1254 | 1267 | 'deletecomment' => '刪除理由', |
1255 | | -'imagereverted' => '恢復到早期版本操作完成。', |
1256 | 1268 | 'rollback' => '恢復', |
1257 | 1269 | 'rollback_short' => '恢復', |
1258 | 1270 | 'rollbacklink' => '恢復', |
Index: branches/liquidthreads/languages/messages/MessagesZh_classical.php |
— | — | @@ -201,7 +201,7 @@ |
202 | 202 | 'navigation' => '導', |
203 | 203 | |
204 | 204 | # Metadata in edit box |
205 | | -'metadata_help' => '衍意,見[[{{ns:project}}:Metadata]]', |
| 205 | +'metadata_help' => '衍意:', |
206 | 206 | |
207 | 207 | 'errorpagetitle' => '誤', |
208 | 208 | 'returnto' => '返$1。', |
— | — | @@ -257,28 +257,29 @@ |
258 | 258 | |
259 | 259 | # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). |
260 | 260 | 'aboutsite' => '關於 {{SITENAME}}', |
261 | | -'aboutpage' => '{{ns:project}}:相關', |
| 261 | +'aboutpage' => 'Project:相關', |
262 | 262 | 'bugreports' => '稟明錯漏', |
263 | | -'bugreportspage' => '{{ns:project}}:錯漏集', |
| 263 | +'bugreportspage' => 'Project:錯漏集', |
264 | 264 | 'copyright' => '文悉釋以$1。', |
265 | 265 | 'copyrightpagename' => '{{SITENAME}}版權', |
266 | | -'copyrightpage' => '{{ns:project}}:版權', |
| 266 | +'copyrightpage' => 'Project:版權', |
267 | 267 | 'currentevents' => '世事', |
268 | 268 | 'currentevents-url' => '天下大事', |
269 | 269 | 'disclaimers' => '免責告示', |
270 | | -'disclaimerpage' => '{{ns:project}}:免責告示', |
| 270 | +'disclaimerpage' => 'Project:免責告示', |
271 | 271 | 'edithelp' => '助', |
272 | 272 | 'edithelppage' => '{{ns:help}}:修', |
273 | 273 | 'faq' => '頻答問', |
274 | | -'faqpage' => '{{ns:project}}:頻答問集', |
| 274 | +'faqpage' => 'Project:頻答問集', |
275 | 275 | 'helppage' => 'Help:目錄', |
276 | 276 | 'mainpage' => '卷首', |
| 277 | +'policy-url' => 'Project:策', |
277 | 278 | 'portal' => '市集', |
278 | | -'portal-url' => '{{ns:project}}:市集', |
| 279 | +'portal-url' => 'Project:市集', |
279 | 280 | 'privacy' => '隱私通例', |
280 | | -'privacypage' => '{{ns:project}}:隱私通例', |
| 281 | +'privacypage' => 'Project:隱私通例', |
281 | 282 | 'sitesupport' => '捐助', |
282 | | -'sitesupport-url' => '{{ns:project}}:捐助集', |
| 283 | +'sitesupport-url' => 'Project:捐助集', |
283 | 284 | |
284 | 285 | 'badaccess' => '子未逮', |
285 | 286 | 'badaccess-group0' => '子未逮,歉限之。', |
— | — | @@ -349,7 +350,7 @@ |
350 | 351 | 'filedeleteerror' => '"$1"未可刪。', |
351 | 352 | 'directorycreateerror' => '"$1"之目莫能立也。', |
352 | 353 | 'filenotfound' => '未見"$1"。', |
353 | | -'fileexists' => '"$1"檔莫之能書︰蓋因其檔已在', |
| 354 | +'fileexistserror' => '"$1"檔莫之能書︰蓋因其檔已在', |
354 | 355 | 'unexpected' => '異數,"$1"="$2"。', |
355 | 356 | 'formerror' => '有誤:表未可呈', |
356 | 357 | 'badarticleerror' => '此頁莫為之', |
— | — | @@ -475,7 +476,7 @@ |
476 | 477 | 終止之時為:$6<br /> |
477 | 478 | 見禁之人:$7 |
478 | 479 | |
479 | | -存惑可詢$1,或[[{{ns:project}}:Administrators|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。 |
| 480 | +存惑可詢$1,或[[{{MediaWiki:grouppage-sysop}}|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。 |
480 | 481 | 另,子IP為$3,其簿名為#$5。詢時切附之。", |
481 | 482 | 'blockedoriginalsource' => "'''$1'''本源如下:", |
482 | 483 | 'blockededitsource' => "子'''$1纂文'''如下:", |
— | — | @@ -611,7 +612,7 @@ |
612 | 613 | |
613 | 614 | # Search results |
614 | 615 | 'searchresults' => '得尋', |
615 | | -'searchresulttext' => '何索{{SITENAME}},詳見[[{{ns:project}}:Searching|索{{SITENAME}}]]。', |
| 616 | +'searchresulttext' => '何索{{SITENAME}},詳見[[{{MediaWiki:helppage}}|{{int:help}}]]。', |
616 | 617 | 'searchsubtitle' => "'''[[:$1]]'''尋焉", |
617 | 618 | 'searchsubtitleinvalid' => "'''$1'''索焉", |
618 | 619 | 'badquery' => '問尋有誤', |
— | — | @@ -775,8 +776,19 @@ |
776 | 777 | 'bydate' => '以日', |
777 | 778 | 'bysize' => '以量', |
778 | 779 | 'imgdelete' => '刪', |
779 | | -'imghistory' => '圖像沿革', |
780 | | -'deleteimg' => '刪', |
| 780 | +'imgdesc' => '述', |
| 781 | +'imgfile' => '檔', |
| 782 | +'filehist' => '檔案沿革', |
| 783 | +'filehist-help' => '擊日時,察時現檔。', |
| 784 | +'filehist-deleteall' => '刪全', |
| 785 | +'filehist-deleteone' => '刪此', |
| 786 | +'filehist-revert' => '還', |
| 787 | +'filehist-current' => '現', |
| 788 | +'filehist-datetime' => '日時', |
| 789 | +'filehist-user' => '薄', |
| 790 | +'filehist-dimensions' => '度', |
| 791 | +'filehist-filesize' => '檔量', |
| 792 | +'filehist-comment' => '注', |
781 | 793 | 'imagelinks' => '通', |
782 | 794 | 'shareduploadwiki' => '欲知更多,請詳閱$1。', |
783 | 795 | 'shareduploadwiki-linktext' => '文件描述頁', |
— | — | @@ -787,6 +799,16 @@ |
788 | 800 | 'imagelist_description' => '述', |
789 | 801 | 'imagelist_search_for' => '以圖名尋:', |
790 | 802 | |
| 803 | +# File reversion |
| 804 | +'filerevert' => '還$1', |
| 805 | +'filerevert-legend' => '還檔', |
| 806 | +'filerevert-intro' => "<span class=\"plainlinks\">汝還'''[[Media:$1|$1]]'''至[在$2$3之$4版本]。</span>", |
| 807 | +'filerevert-comment' => '注:', |
| 808 | +'filerevert-defaultcomment' => '已還至在$1$2之版矣', |
| 809 | +'filerevert-submit' => '還', |
| 810 | +'filerevert-success' => "<span class=\"plainlinks\">'''[[Media:$1|$1]]'''已還[在$2$3之$4版本]矣。</span>", |
| 811 | +'filerevert-badversion' => '此檔之時印無本地之前版也。', |
| 812 | + |
791 | 813 | # Unwatched pages |
792 | 814 | 'unwatchedpages' => '無哨', |
793 | 815 | |
— | — | @@ -797,7 +819,7 @@ |
798 | 820 | 'sitestatstext' => "庫藏共'''$1'''頁,除議、釋、芻文、轉與不濟者,有足文$2、獻品'''$8'''。 |
799 | 821 | 自大典始焉,閱頁'''$3''',纂文'''$4'''。均之則每頁'''$5'''覽,每文'''$6'''纂。 |
800 | 822 | [http://meta.wikimedia.org/wiki/Help:Job_queue job queue]長'''$7'''", |
801 | | -'userstatstext' => "有簿者'''$1''',中有'''$2'''人為$5,計有百分之'''$4'''。", |
| 823 | +'userstatstext' => "有[[Special:Listusers|簿]]者'''$1''',中有'''$2'''人有$5之權,計有百分之'''$4'''。", |
802 | 824 | 'statistics-mostpopular' => '首博之頁', |
803 | 825 | |
804 | 826 | 'disambiguations' => '釋義', |
— | — | @@ -944,12 +966,12 @@ |
945 | 967 | 'deletepage' => '刪頁', |
946 | 968 | 'confirm' => '准', |
947 | 969 | 'excontent' => "文乃:'$1'", |
948 | | -'excontentauthor' => "文乃:'$1' (而[[Special:Contributions/$2|$2]]'者,為僅有之與者也)", |
| 970 | +'excontentauthor' => "文乃:'$1' (而[[Special:Contributions/$2|$2]]者,為僅有之與者也)", |
949 | 971 | 'exblank' => '缺頁', |
950 | 972 | 'confirmdelete' => '准刪', |
951 | 973 | 'deletesub' => '("$1",正刪之)', |
952 | 974 | 'historywarning' => '警:欲刪之頁有誌:', |
953 | | -'confirmdeletetext' => '子若欲久刪此物與其誌,知後果、合[[{{ns:project}}:Policy]]後再為之。', |
| 975 | +'confirmdeletetext' => '子若欲久刪此物與其誌,知後果、合[[{{MediaWiki:policy-url}}]]後再為之。', |
954 | 976 | 'actioncomplete' => '已矣', |
955 | 977 | 'deletedtext' => '"$1"刪矣,見誌於$2。', |
956 | 978 | 'deletedarticle' => '"[[$1]]"刪矣', |
— | — | @@ -958,7 +980,6 @@ |
959 | 981 | 'deletionlog' => '誌刪', |
960 | 982 | 'reverted' => '還', |
961 | 983 | 'deletecomment' => '註刪', |
962 | | -'imagereverted' => '還矣', |
963 | 984 | 'rollback' => '退修', |
964 | 985 | 'rollback_short' => '退', |
965 | 986 | 'rollbacklink' => '退', |
— | — | @@ -1358,7 +1379,7 @@ |
1359 | 1380 | 'watchlistedit-normal-done' => '$1題之哨已撤:', |
1360 | 1381 | 'watchlistedit-raw-title' => '治源哨', |
1361 | 1382 | 'watchlistedit-raw-legend' => '治源哨', |
1362 | | -'watchlistedit-raw-explain' => '此列有哨之題,治此表以加減題;一行一題之。善,擊更哨。亦[[[Special:Watchlist/edit|標準治哨]]也。', |
| 1383 | +'watchlistedit-raw-explain' => '此列有哨之題,治此表以加減題;一行一題之。善,擊更哨。亦[[Special:Watchlist/edit|標準治哨]]也。', |
1363 | 1384 | 'watchlistedit-raw-titles' => '題:', |
1364 | 1385 | 'watchlistedit-raw-submit' => '更哨', |
1365 | 1386 | 'watchlistedit-raw-done' => '爾哨已更也。', |
— | — | @@ -1372,3 +1393,5 @@ |
1373 | 1394 | 'watchlisttools-clear' => '清哨', |
1374 | 1395 | |
1375 | 1396 | ); |
| 1397 | + |
| 1398 | + |
Index: branches/liquidthreads/languages/messages/MessagesDe.php |
— | — | @@ -439,7 +439,7 @@ |
440 | 440 | 'filedeleteerror' => 'Die Datei „$1“ konnte nicht gelöscht werden.', |
441 | 441 | 'directorycreateerror' => 'Das Verzeichnis „$1“ konnte nicht angelegt werden.', |
442 | 442 | 'filenotfound' => 'Die Datei „$1“ wurde nicht gefunden.', |
443 | | -'fileexists' => 'In die Datei „$1“ konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.', |
| 443 | +'fileexistserror' => 'In die Datei „$1“ konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.', |
444 | 444 | 'unexpected' => 'Unerwarteter Wert: „$1“=„$2“.', |
445 | 445 | 'formerror' => 'Fehler: Die Eingaben konnten nicht verarbeitet werden.', |
446 | 446 | 'badarticleerror' => 'Diese Aktion kann auf diese Seite nicht angewendet werden.', |
— | — | @@ -615,7 +615,7 @@ |
616 | 616 | *Sperre betrifft: $7 |
617 | 617 | *Sperr-ID: #$5 |
618 | 618 | </div>', |
619 | | -'autoblockedtext' => 'Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der durch $1 gesperrt wurde. |
| 619 | +'autoblockedtext' => 'Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der durch $1 gesperrt wurde. |
620 | 620 | Als Grund wurde angegeben: |
621 | 621 | |
622 | 622 | :\'\'$2\'\' |
— | — | @@ -735,32 +735,32 @@ |
736 | 736 | Dies geschah vermutlich auf Grund von wiederholtem Vandalismus von Besuchern der Bildungseinrichtung oder anderen Benutzern des Internet-Service-Providers.', |
737 | 737 | |
738 | 738 | # History pages |
739 | | -'revhistory' => 'Frühere Versionen', |
740 | | -'viewpagelogs' => 'Logbücher für diese Seite anzeigen', |
741 | | -'nohistory' => 'Es gibt keine früheren Versionen dieser Seite.', |
742 | | -'revnotfound' => 'Diese Version wurde nicht gefunden.', |
743 | | -'revnotfoundtext' => 'Die Version dieser Seite, nach der Sie suchen, konnte nicht gefunden werden. Bitte überprüfen Sie die URL dieser Seite.', |
744 | | -'loadhist' => 'Lade Liste mit früheren Versionen', |
745 | | -'currentrev' => 'Aktuelle Version', |
746 | | -'revisionasof' => 'Version vom $1', |
747 | | -'revision-info' => 'Version vom $1 von $2', |
748 | | -'previousrevision' => '← Nächstältere Version', |
749 | | -'nextrevision' => 'Nächstjüngere Version →', |
750 | | -'currentrevisionlink' => 'Aktuelle Version', |
751 | | -'cur' => 'Aktuell', |
752 | | -'next' => 'Nächste', |
753 | | -'last' => 'Vorherige', |
754 | | -'orig' => 'Original', |
755 | | -'page_first' => 'Anfang', |
756 | | -'page_last' => 'Ende', |
757 | | -'histlegend' => 'Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche „{{int:compareselectedversions}}“ klicken.<br /> |
| 739 | +'revhistory' => 'Frühere Versionen', |
| 740 | +'viewpagelogs' => 'Logbücher für diese Seite anzeigen', |
| 741 | +'nohistory' => 'Es gibt keine früheren Versionen dieser Seite.', |
| 742 | +'revnotfound' => 'Diese Version wurde nicht gefunden.', |
| 743 | +'revnotfoundtext' => 'Die Version dieser Seite, nach der Sie suchen, konnte nicht gefunden werden. Bitte überprüfen Sie die URL dieser Seite.', |
| 744 | +'loadhist' => 'Lade Liste mit früheren Versionen', |
| 745 | +'currentrev' => 'Aktuelle Version', |
| 746 | +'revisionasof' => 'Version vom $1', |
| 747 | +'revision-info' => 'Version vom $1 von $2', |
| 748 | +'previousrevision' => '← Nächstältere Version', |
| 749 | +'nextrevision' => 'Nächstjüngere Version →', |
| 750 | +'currentrevisionlink' => 'Aktuelle Version', |
| 751 | +'cur' => 'Aktuell', |
| 752 | +'next' => 'Nächste', |
| 753 | +'last' => 'Vorherige', |
| 754 | +'orig' => 'Original', |
| 755 | +'page_first' => 'Anfang', |
| 756 | +'page_last' => 'Ende', |
| 757 | +'histlegend' => 'Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche „{{int:compareselectedversions}}“ klicken.<br /> |
758 | 758 | * (Aktuell) = Unterschied zur aktuellen Version, (Vorherige) = Unterschied zur vorherigen Version |
759 | 759 | * Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, K = Kleine Änderung', |
760 | | -'deletedrev' => '[gelöscht]', |
761 | | -'histfirst' => 'Älteste', |
762 | | -'histlast' => 'Neueste', |
763 | | -'historysize' => '($1 Bytes)', |
764 | | -'historyempty' => '(leer)', |
| 760 | +'deletedrev' => '[gelöscht]', |
| 761 | +'histfirst' => 'Älteste', |
| 762 | +'histlast' => 'Neueste', |
| 763 | +'historysize' => '($1 Bytes)', |
| 764 | +'historyempty' => '(leer)', |
765 | 765 | |
766 | 766 | # Revision feed |
767 | 767 | 'history-feed-title' => 'Versionsgeschichte', |
— | — | @@ -769,7 +769,6 @@ |
770 | 770 | 'history-feed-empty' => 'Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen]] Sie {{SITENAME}} für passende neue Seiten.', |
771 | 771 | |
772 | 772 | # Revision deletion |
773 | | -'revisiondelete' => 'Versionen löschen/wiederherstellen', |
774 | 773 | 'rev-deleted-comment' => '(Bearbeitungskommentar entfernt)', |
775 | 774 | 'rev-deleted-user' => '(Benutzername entfernt)', |
776 | 775 | 'rev-deleted-event' => '(Aktion entfernt)', |
— | — | @@ -779,6 +778,7 @@ |
780 | 779 | Als Administrator können Sie sie weiterhin einsehen. |
781 | 780 | Nähere Angaben zum Löschvorgang sowie eine Begründung finden sich im [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].</div>', |
782 | 781 | 'rev-delundel' => 'zeige/verstecke', |
| 782 | +'revisiondelete' => 'Versionen löschen/wiederherstellen', |
783 | 783 | 'revdelete-nooldid-title' => 'Keine Version angegeben', |
784 | 784 | 'revdelete-nooldid-text' => 'Sie haben keine Version angegeben, auf die diese Aktion ausgeführt werden soll.', |
785 | 785 | 'revdelete-selected' => "{{PLURAL:$2|Ausgewählte Version|Ausgewählte Versionen}} von '''$1:'''", |
— | — | @@ -1029,21 +1029,21 @@ |
1030 | 1030 | 'largefileserver' => 'Die Datei ist größer als die vom Server eingestellte Maximalgröße.', |
1031 | 1031 | 'emptyfile' => 'Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.', |
1032 | 1032 | 'fileexists' => 'Eine Datei mit diesem Namen existiert bereits. Wenn Sie auf „Datei speichern“ klicken, wird die Datei überschrieben. Bitte prüfen Sie <strong><tt>$1</tt></strong>, wenn Sie sich nicht sicher sind.', |
1033 | | -'fileexists-extension' => "Eine Datei mit ähnlichem Namen existiert bereits:<br /> |
| 1033 | +'fileexists-extension' => 'Eine Datei mit ähnlichem Namen existiert bereits:<br /> |
1034 | 1034 | Name der hochzuladenden Datei: <strong><tt>$1</tt></strong><br /> |
1035 | 1035 | Name der vorhandenen Datei: <strong><tt>$2</tt></strong><br /> |
1036 | | -Nur die Dateiendung unterscheidet sich in Groß-/Kleinschreibung. Bitte prüfen Sie, ob die Dateien inhaltlich identisch sind.", |
| 1036 | +Nur die Dateiendung unterscheidet sich in Groß-/Kleinschreibung. Bitte prüfen Sie, ob die Dateien inhaltlich identisch sind.', |
1037 | 1037 | 'fileexists-thumb' => "'''<center>Vorhandenes Bild</center>'''", |
1038 | | -'fileexists-thumbnail-yes' => "Bei der Datei scheint es sich um ein Bild verringerter Größe <i>(thumbnail)</i> zu handeln. Bitte prüfen Sie die Datei <strong><tt>$1</tt></strong>.<br /> |
1039 | | -Wenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.", |
1040 | | -'file-thumbnail-no' => "Der Dateiname beginnt mit <strong><tt>$1</tt></strong>. Dies deutet auf ein Bild verringerter Größe <i>(thumbnail)</i> hin. |
1041 | | -Bitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden Sie dieses unter dem Originalnamen hoch.", |
| 1038 | +'fileexists-thumbnail-yes' => 'Bei der Datei scheint es sich um ein Bild verringerter Größe <i>(thumbnail)</i> zu handeln. Bitte prüfen Sie die Datei <strong><tt>$1</tt></strong>.<br /> |
| 1039 | +Wenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.', |
| 1040 | +'file-thumbnail-no' => 'Der Dateiname beginnt mit <strong><tt>$1</tt></strong>. Dies deutet auf ein Bild verringerter Größe <i>(thumbnail)</i> hin. |
| 1041 | +Bitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden Sie dieses unter dem Originalnamen hoch.', |
1042 | 1042 | 'fileexists-forbidden' => 'Mit diesem Namen existiert bereits eine Datei. Bitte gehen Sie zurück und laden Ihre Datei unter einem anderen Namen hoch. [[Image:$1|thumb|center|$1]]', |
1043 | 1043 | 'fileexists-shared-forbidden' => 'Mit diesem Namen existiert bereits eine Datei. Bitte gehen Sie zurück und laden Sie diese Datei unter einem anderen Namen hoch. [[Image:$1|thumb|center|$1]]', |
1044 | 1044 | 'successfulupload' => 'Erfolgreich hochgeladen', |
1045 | 1045 | 'uploadwarning' => 'Warnung', |
1046 | 1046 | 'savefile' => 'Datei speichern', |
1047 | | -'uploadedimage' => 'hat [[$1]] hochgeladen', |
| 1047 | +'uploadedimage' => 'hat „[[$1]]“ hochgeladen', |
1048 | 1048 | 'uploaddisabled' => 'Entschuldigung, das Hochladen ist deaktiviert.', |
1049 | 1049 | 'uploaddisabledtext' => 'Das Hochladen von Dateien ist in {{SITENAME}} deaktiviert.', |
1050 | 1050 | 'uploadscripted' => 'Diese Datei enthält HTML- oder Scriptcode, der irrtümlich von einem Webbrowser ausgeführt werden könnte.', |
— | — | @@ -1087,12 +1087,17 @@ |
1088 | 1088 | 'imgdelete' => 'Löschen', |
1089 | 1089 | 'imgdesc' => 'Beschreibung', |
1090 | 1090 | 'imgfile' => 'Datei', |
1091 | | -'imglegend' => 'Legende: (Beschreibung) = Zeige/Bearbeite Dateibeschreibung.', |
1092 | | -'imghistory' => 'Dateiversionen', |
1093 | | -'revertimg' => 'Zurücksetzen', |
1094 | | -'deleteimg' => 'Löschen', |
1095 | | -'deleteimgcompletely' => 'Alle Versionen dieser Datei löschen', |
1096 | | -'imghistlegend' => 'Legende: (Aktuell) = Dies ist die aktuelle Datei, (Löschen) = lösche diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.', |
| 1091 | +'filehist' => 'Dateiversionen', |
| 1092 | +'filehist-help' => 'Klicke auf einen Zeitpunkt, um die Dateiversion zu diesem Zeitpunkt darzustellen.', |
| 1093 | +'filehist-deleteall' => 'Alle Versionen löschen', |
| 1094 | +'filehist-deleteone' => 'Diese Version löschen', |
| 1095 | +'filehist-revert' => 'zurücksetzen', |
| 1096 | +'filehist-current' => 'aktuell', |
| 1097 | +'filehist-datetime' => 'Zeitpunkt', |
| 1098 | +'filehist-user' => 'Benutzer', |
| 1099 | +'filehist-dimensions' => 'Maße', |
| 1100 | +'filehist-filesize' => 'Dateigröße', |
| 1101 | +'filehist-comment' => 'Kommentar', |
1097 | 1102 | 'imagelinks' => 'Verwendung', |
1098 | 1103 | 'linkstoimage' => 'Die folgenden Seiten benutzen diese Datei:', |
1099 | 1104 | 'nolinkstoimage' => 'Keine Seite benutzt diese Datei.', |
— | — | @@ -1109,6 +1114,16 @@ |
1110 | 1115 | 'imagelist_description' => 'Beschreibung', |
1111 | 1116 | 'imagelist_search_for' => 'Suche nach Datei:', |
1112 | 1117 | |
| 1118 | +# File reversion |
| 1119 | +'filerevert' => 'Zurücksetzen von $1', |
| 1120 | +'filerevert-legend' => 'Datei zurücksetzen', |
| 1121 | +'filerevert-intro' => '<span class="plainlinks">Du setzt die Datei \'\'\'[[Media:$1|$1]]\'\'\' auf die [$4 Version vom $2, $3 Uhr] zurück.</span>', |
| 1122 | +'filerevert-comment' => 'Grund:', |
| 1123 | +'filerevert-defaultcomment' => 'zurückgesetzt auf die Version vom $1, $2 Uhr', |
| 1124 | +'filerevert-submit' => 'Zurücksetzen', |
| 1125 | +'filerevert-success' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\' wurde auf die [$4 Version vom $2, $3 Uhr] zurückgesetzt.</span>', |
| 1126 | +'filerevert-badversion' => 'Es gibt keine Version der Datei zu dem angegebenen Zeitpunkt.', |
| 1127 | + |
1113 | 1128 | # MIME search |
1114 | 1129 | 'mimesearch' => 'Suche nach MIME-Typ', |
1115 | 1130 | 'mimesearch-summary' => 'Auf dieser Spezialseite können die Dateien nach dem MIME-Typ gefiltert werden. Die Eingabe muss immer den Medien- und Subtyp beinhalten: <tt>image/jpeg</tt> (siehe Bildbeschreibungsseite).', |
— | — | @@ -1216,7 +1231,7 @@ |
1217 | 1232 | 'prefixindex' => 'Alle Seiten (mit Präfix)', |
1218 | 1233 | 'prefixindex-summary' => 'Diese Spezialseite zeigt alle Seiten, die mit der eingegebenen Zeichenfolge („Präfix“) beginnen. Die Ausgabe kann auf einen Namensraum eingeschränkt werden.', |
1219 | 1234 | 'randompage' => 'Zufällige Seite', |
1220 | | -'randompage-nopages' => 'In diesem Namensraum sind keine Seiten vorhanden.', |
| 1235 | +'randompage-nopages' => 'In diesem Namensraum sind keine Seiten vorhanden.', |
1221 | 1236 | 'shortpages' => 'Kurze Seiten', |
1222 | 1237 | 'shortpages-summary' => 'Diese Liste zeigt die kürzesten Seiten im Hauptnamensraum an. Gezählt werden die Zeichen des Textes wie er im Bearbeitungsfenster dargestellt wird, also in Wiki-Syntax und ohne die Inhalte eingebundener Vorlagen. Grundlage der Zählung ist der UTF-8-kodierte Text, nach dem beispielsweise deutsche Umlaute als zwei Zeichen gelten.', |
1223 | 1238 | 'longpages' => 'Lange Seiten', |
— | — | @@ -1260,7 +1275,7 @@ |
1261 | 1276 | 'alphaindexline' => '$1 bis $2', |
1262 | 1277 | 'version' => 'Version', |
1263 | 1278 | |
1264 | | -# Special:Logs |
| 1279 | +# Special:Log |
1265 | 1280 | 'specialloguserlabel' => 'Benutzer:', |
1266 | 1281 | 'speciallogtitlelabel' => 'Titel:', |
1267 | 1282 | 'log' => 'Logbücher', |
— | — | @@ -1312,7 +1327,7 @@ |
1313 | 1328 | |
1314 | 1329 | # Watchlist |
1315 | 1330 | 'watchlist' => 'Beobachtungsliste', |
1316 | | -'mywatchlist' => 'Beobachtungsliste', |
| 1331 | +'mywatchlist' => 'Beobachtungsliste', |
1317 | 1332 | 'watchlistfor' => "(für '''$1''')", |
1318 | 1333 | 'nowatchlist' => 'Sie haben keine Einträge auf Ihrer Beobachtungsliste.', |
1319 | 1334 | 'watchlistanontext' => 'Sie müssen sich $1, um Ihre Beobachtungsliste zu sehen oder Einträge auf ihr zu bearbeiten.', |
— | — | @@ -1408,7 +1423,6 @@ |
1409 | 1424 | 'deletionlog' => 'Lösch-Logbuch', |
1410 | 1425 | 'reverted' => 'Auf eine alte Version zurückgesetzt', |
1411 | 1426 | 'deletecomment' => 'Grund der Löschung', |
1412 | | -'imagereverted' => 'Auf eine alte Version zurückgesetzt.', |
1413 | 1427 | 'rollback' => 'Zurücksetzen der Änderungen', |
1414 | 1428 | 'rollback_short' => 'Zurücksetzen', |
1415 | 1429 | 'rollbacklink' => 'Zurücksetzen', |
— | — | @@ -1463,50 +1477,52 @@ |
1464 | 1478 | 'restriction-level-all' => 'alle', |
1465 | 1479 | |
1466 | 1480 | # Undelete |
1467 | | -'undelete' => 'Gelöschte Seite wiederherstellen', |
1468 | | -'undeletepage' => 'Gelöschte Seite wiederherstellen', |
1469 | | -'viewdeletedpage' => 'Gelöschte Seiten anzeigen', |
1470 | | -'undeletepagetext' => 'Die folgenden Seiten wurden gelöscht und können von Administratoren wiederhergestellt werden:', |
1471 | | -'undeleteextrahelp' => '* Um die Seite komplett mit allen Versionen wiederherzustellen, geben Sie bitte eine Begründung an und klicken auf „Wiederherstellen“. |
| 1481 | +'undelete' => 'Gelöschte Seite wiederherstellen', |
| 1482 | +'undeletepage' => 'Gelöschte Seite wiederherstellen', |
| 1483 | +'viewdeletedpage' => 'Gelöschte Seiten anzeigen', |
| 1484 | +'undeletepagetext' => 'Die folgenden Seiten wurden gelöscht und können von Administratoren wiederhergestellt werden:', |
| 1485 | +'undeleteextrahelp' => '* Um die Seite komplett mit allen Versionen wiederherzustellen, geben Sie bitte eine Begründung an und klicken auf „Wiederherstellen“. |
1472 | 1486 | * Möchten Sie nur bestimmte Versionen wiederherstellen, so wählen Sie diese bitte einzeln an Hand der Markierungen aus, geben eine Begründung an und klicken dann auf „Wiederherstellen“. |
1473 | 1487 | * „Abbrechen“ leert das Kommentarfeld und entfernt alle Markierungen bei den Versionen.', |
1474 | | -'undeleterevisions' => '{{PLURAL:$1|1 Version|$1 Versionen}} archiviert', |
1475 | | -'undeletehistory' => 'Wenn Sie diese Seite wiederherstellen, werden auch alle alten |
| 1488 | +'undeleterevisions' => '{{PLURAL:$1|1 Version|$1 Versionen}} archiviert', |
| 1489 | +'undeletehistory' => 'Wenn Sie diese Seite wiederherstellen, werden auch alle alten |
1476 | 1490 | Versionen wiederhergestellt. Wenn seit der Löschung eine neue Seite gleichen |
1477 | 1491 | Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet. |
1478 | 1492 | Die aktuelle Version, die gegenwärtig live angezeigt wird, wird nicht automatisch durch eine wiederhergestellte Version ersetzt, falls diese jünger ist. |
1479 | 1493 | Sichtbarkeits-Einschränkungen an Dateiversionen gehen bei einer Wiederherstellung verloren.', |
1480 | | -'undeleterevdel' => 'Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält. |
| 1494 | +'undeleterevdel' => 'Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält. |
1481 | 1495 | In diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden. |
1482 | 1496 | Versionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.', |
1483 | | -'undeletehistorynoadmin' => 'Diese Seite wurde gelöscht. Der Grund für die Löschung ist in der Zusammenfassung angegeben, |
| 1497 | +'undeletehistorynoadmin' => 'Diese Seite wurde gelöscht. Der Grund für die Löschung ist in der Zusammenfassung angegeben, |
1484 | 1498 | genauso wie Details zum letzten Benutzer der diese Seite vor der Löschung bearbeitet hat. |
1485 | 1499 | Der aktuelle Text der gelöschten Seite ist nur Administratoren zugänglich.', |
1486 | | -'undelete-revision' => 'Gelöschte Version von $1 vom $2:', |
1487 | | -'undeleterevision-missing' => 'Ungültige oder fehlende Version. Entweder ist der Link falsch oder die Version wurde aus dem Archiv wiederhergestellt oder entfernt.', |
1488 | | -'undeletebtn' => 'Wiederherstellen', |
1489 | | -'undeletereset' => 'Abbrechen', |
1490 | | -'undeletecomment' => 'Begründung:', |
1491 | | -'undeletedarticle' => 'hat „[[$1]]“ wiederhergestellt', |
1492 | | -'undeletedrevisions' => '$1 Version(en) wurde(n) wiederhergestellt', |
1493 | | -'undeletedrevisions-files' => '$1 Version(en) und $2 Datei(en) wurden wiederhergestellt', |
1494 | | -'undeletedfiles' => '$1 Datei(en) wurde(n) wiederhergestellt', |
1495 | | -'cannotundelete' => 'Wiederherstellung fehlgeschlagen; jemand anderes hat die Seite bereits wiederhergestellt.', |
1496 | | -'undeletedpage' => "'''$1''' wurde wiederhergestellt. |
| 1500 | +'undelete-revision' => 'Gelöschte Version von $1 vom $2:', |
| 1501 | +'undeleterevision-missing' => 'Ungültige oder fehlende Version. Entweder ist der Link falsch oder die Version wurde aus dem Archiv wiederhergestellt oder entfernt.', |
| 1502 | +'undeletebtn' => 'Wiederherstellen', |
| 1503 | +'undeletereset' => 'Abbrechen', |
| 1504 | +'undeletecomment' => 'Begründung:', |
| 1505 | +'undeletedarticle' => 'hat „[[$1]]“ wiederhergestellt', |
| 1506 | +'undeletedrevisions' => '$1 Version(en) wurde(n) wiederhergestellt', |
| 1507 | +'undeletedrevisions-files' => '$1 Version(en) und $2 Datei(en) wurden wiederhergestellt', |
| 1508 | +'undeletedfiles' => '$1 Datei(en) wurde(n) wiederhergestellt', |
| 1509 | +'cannotundelete' => 'Wiederherstellung fehlgeschlagen; jemand anderes hat die Seite bereits wiederhergestellt.', |
| 1510 | +'undeletedpage' => "'''$1''' wurde wiederhergestellt. |
1497 | 1511 | |
1498 | 1512 | Im [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.", |
1499 | | -'undelete-header' => 'Siehe das [[{{ns:special}}:Log/delete|Lösch-Logbuch]] für kürzlich gelöschte Seiten.', |
1500 | | -'undelete-search-box' => 'Suche nach gelöschten Seiten', |
1501 | | -'undelete-search-prefix' => 'Suchbegriff (Wortanfang ohne Wildcards):', |
1502 | | -'undelete-search-submit' => 'Suche', |
1503 | | -'undelete-no-results' => 'Es wurde im Archiv keine zum Suchbegriff passende Seite gefunden.', |
1504 | | -'undelete-filename-mismatch' => 'Die Dateiversion mit dem Zeitstempel $1 konnte nicht wiederhergestellt werden: Die Dateinamen passen nicht zueinander.', |
1505 | | -'undelete-bad-store-key' => 'Die Dateiversion mit dem Zeitstempel $1 konnte nicht wiederhergestellt werden: Die Datei war bereits vor dem Löschen nicht mehr vorhanden.', |
1506 | | -'undelete-cleanup-error' => 'Fehler beim Löschen der unbenutzten Archiv-Version $1.', |
| 1513 | +'undelete-header' => 'Siehe das [[{{ns:special}}:Log/delete|Lösch-Logbuch]] für kürzlich gelöschte Seiten.', |
| 1514 | +'undelete-search-box' => 'Suche nach gelöschten Seiten', |
| 1515 | +'undelete-search-prefix' => 'Suchbegriff (Wortanfang ohne Wildcards):', |
| 1516 | +'undelete-search-submit' => 'Suche', |
| 1517 | +'undelete-no-results' => 'Es wurde im Archiv keine zum Suchbegriff passende Seite gefunden.', |
| 1518 | +'undelete-filename-mismatch' => 'Die Dateiversion mit dem Zeitstempel $1 konnte nicht wiederhergestellt werden: Die Dateinamen passen nicht zueinander.', |
| 1519 | +'undelete-bad-store-key' => 'Die Dateiversion mit dem Zeitstempel $1 konnte nicht wiederhergestellt werden: Die Datei war bereits vor dem Löschen nicht mehr vorhanden.', |
| 1520 | +'undelete-cleanup-error' => 'Fehler beim Löschen der unbenutzten Archiv-Version $1.', |
1507 | 1521 | 'undelete-missing-filearchive' => 'Die Datei mit der Archiv-ID $1 kann nicht wiederhergestellt werden, da sie nicht in der Datenbank vorhanden ist. Möglicherweise wurde sie bereits wiederhergestellt.', |
1508 | | -'undelete-error-short' => 'Fehler beim Wiederherstellen der Datei $1', |
1509 | | -'undelete-error-long' => "Es wurden Fehler beim Wiederherstellen einer Datei festgestellt:\n\n$1\n", |
| 1522 | +'undelete-error-short' => 'Fehler beim Wiederherstellen der Datei $1', |
| 1523 | +'undelete-error-long' => 'Es wurden Fehler beim Wiederherstellen einer Datei festgestellt: |
1510 | 1524 | |
| 1525 | +$1', |
| 1526 | + |
1511 | 1527 | # Namespace form on various pages |
1512 | 1528 | 'namespace' => 'Namensraum:', |
1513 | 1529 | 'invert' => 'Auswahl umkehren', |
— | — | @@ -1519,7 +1535,6 @@ |
1520 | 1536 | 'ucnote' => 'Dies sind die letzten <b>$1</b> Beiträge des Benutzers in den letzten <b>$2</b> Tagen.', |
1521 | 1537 | 'uclinks' => 'Zeige die letzten $1 Beiträge; zeige die letzten $2 Tage.', |
1522 | 1538 | 'uctop' => ' (aktuell)', |
1523 | | - |
1524 | 1539 | 'month' => 'ab Monat (und vorher):', |
1525 | 1540 | 'year' => 'ab Jahr (und vorher):', |
1526 | 1541 | |
— | — | @@ -1581,7 +1596,7 @@ |
1582 | 1597 | 'ipboptions' => '1 Stunde:1 hour,2 Stunden:2 hours,6 Stunden:6 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,1 Jahr:1 year,Unbeschränkt:infinite', |
1583 | 1598 | 'ipbotheroption' => 'Andere Dauer', |
1584 | 1599 | 'ipbotherreason' => 'Andere/ergänzende Begründung:', |
1585 | | -'ipbhidename' => 'Benutzername/IP-Adresse im Sperr-Logbuch, der Liste aktiver Sperren und dem Benutzerverzeichnis verstecken.', |
| 1600 | +'ipbhidename' => 'Benutzername/IP-Adresse im Sperr-Logbuch, der Liste aktiver Sperren und dem Benutzerverzeichnis verstecken.', |
1586 | 1601 | 'badipaddress' => 'Die IP-Adresse hat ein falsches Format.', |
1587 | 1602 | 'blockipsuccesssub' => 'Sperre erfolgreich', |
1588 | 1603 | 'blockipsuccesstext' => 'Der Benutzer/die IP-Adresse [[{{ns:special}}:Contributions/$1|$1]] wurde gesperrt und die Aktion im [[{{ns:special}}:Log/block|Benutzersperr-Logbuch]] protokolliert |
— | — | @@ -1665,7 +1680,7 @@ |
1666 | 1681 | 'move-watch' => 'Diese Seite beobachten', |
1667 | 1682 | 'movepagebtn' => 'Seite verschieben', |
1668 | 1683 | 'pagemovedsub' => 'Verschiebung erfolgreich', |
1669 | | -'movepage-moved' => "<big>'''Die Seite „$1“ wurde nach „$2“ verschoben.'''</big>", # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message |
| 1684 | +'movepage-moved' => "<big>'''Die Seite „$1“ wurde nach „$2“ verschoben.'''</big>", # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message. |
1670 | 1685 | 'articleexists' => 'Unter diesem Namen existiert bereits eine Seite. |
1671 | 1686 | Bitte wählen Sie einen anderen Namen.', |
1672 | 1687 | 'talkexists' => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussions-Seite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.', |
— | — | @@ -1892,8 +1907,16 @@ |
1893 | 1908 | 'patrol-log-diff' => 'Version $1', |
1894 | 1909 | |
1895 | 1910 | # Image deletion |
1896 | | -'deletedrevision' => 'Alte Version $1 gelöscht.', |
| 1911 | +'deletedrevision' => 'alte Version $1 gelöscht.', |
| 1912 | +'filedeleteerror-short' => 'Fehler beim Datei-Löschen: $1', |
| 1913 | +'filedeleteerror-long' => 'Beim Datei-Löschen wurden Fehler festgestellt: |
1897 | 1914 | |
| 1915 | +$1', |
| 1916 | +'filedelete-missing' => 'Die Datei „$1“ kann nicht gelöscht werden, da sie nicht vorhanden ist.', |
| 1917 | +'filedelete-old-unregistered' => 'Die angegebene Datei-Version „$1“ ist nicht in der Datenbank vorhanden.', |
| 1918 | +'filedelete-current-unregistered' => 'Die angegebene Datei „$1“ ist nicht in der Datenbank vorhanden.', |
| 1919 | +'filedelete-archive-read-only' => 'Das Archiv-Verzeichnis „$1“ ist für den Webserver nicht beschreibbar.', |
| 1920 | + |
1898 | 1921 | # Browsing diffs |
1899 | 1922 | 'previousdiff' => '← Zum vorherigen Versionsunterschied', |
1900 | 1923 | 'nextdiff' => 'Zum nächsten Versionsunterschied →', |
— | — | @@ -2280,7 +2303,7 @@ |
2281 | 2304 | # Auto-summaries |
2282 | 2305 | 'autosumm-blank' => 'Die Seite wurde geleert.', |
2283 | 2306 | 'autosumm-replace' => "Der Seiteninhalt wurde durch einen anderen Text ersetzt: '$1'", |
2284 | | -'autoredircomment' => 'Weiterleitung nach [[$1]] erstellt', # This should be changed to the new naming convention, but existed beforehand |
| 2307 | +'autoredircomment' => 'Weiterleitung nach [[$1]] erstellt', |
2285 | 2308 | 'autosumm-new' => 'Die Seite wurde neu angelegt: $1', |
2286 | 2309 | |
2287 | 2310 | # Size units |
Index: branches/liquidthreads/languages/messages/MessagesLo.php |
— | — | @@ -3,7 +3,6 @@ |
4 | 4 | * |
5 | 5 | * @addtogroup Language |
6 | 6 | * |
7 | | - * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com> |
8 | 7 | */ |
9 | 8 | $digitTransformTable = array( |
10 | 9 | '0' => '໐', # ໐ |
— | — | @@ -18,4 +17,676 @@ |
19 | 18 | '9' => '໙', # ໙ |
20 | 19 | ); |
21 | 20 | |
| 21 | +$messages = array( |
| 22 | +# User preference toggles |
| 23 | +'tog-hideminor' => 'ເຊື່ອງການດັດແກ້ເລັກນ້ອຍ ໃນ ການປ່ຽນແປງຫຼ້າສຸດ', |
| 24 | +'tog-extendwatchlist' => 'ຂະຫຍາຍ ລາຍການຕິດຕາມ ເພື່ອ ສະແດງທຸກໆການປ່ຽນແປງ', |
| 25 | +'tog-usenewrc' => 'ສະແດງ ການປ່ຽນແປງຫຼ້າສຸດ ເປັນສີເຂັ້ມ (JavaScript)', |
| 26 | +'tog-showtoolbar' => 'ສະແດງ ທູລບາດັດແກ້ (JavaScript)', |
| 27 | +'tog-editondblclick' => 'ໃຫ້ສາມາດດັດແກ້ ໂດຍ ດັບເບິລ໌ ຄລິກ (JavaScript)', |
| 28 | +'tog-editsection' => 'ໃຫ້ສາມາດ ດັດແກ້ເປັນພາກ ໂດຍ ກົດລິ້ງຄ໌ [ດັດແກ້]', |
| 29 | +'tog-editsectiononrightclick' => 'ໃຫ້ສາມາດ ດັດແກ້ ໂດຍກົດປຸ່ມຂວາ ຂອງເມົາສ໌ ຢູ່ <br /> ຫົວຂໍ້ຂອງພາກ (JavaScript)', |
| 30 | +'tog-rememberpassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້', |
| 31 | +'tog-editwidth' => 'ໃຫ້ ຊ່ອງດັດແກ້ ກ້ວາງທີ່ສຸດ', |
| 32 | +'tog-watchcreations' => 'ເພີ່ມ ໜ້າທີ່ຂ້ອຍສ້າງ ເຂົ້າໃນ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ', |
| 33 | +'tog-watchdefault' => 'ເພີ່ມໜ້າ ທີ່ ຂ້ອຍດັດແກ້ ໃສ່ ລາຍຕິດຕາມ ຂອງ ຂ້ອຍ', |
| 34 | +'tog-watchmoves' => 'ເພີ່ມ ໜ້າທີ່ຂອ້ຍຍ້າຍ ໃສ່ ລາຍການຕິດຕາມຂອງຂ້ອຍ', |
| 35 | +'tog-watchdeletion' => 'ເພີ່ມ ໜ້າ ທີ່ຂ້ອຍລຶບ ໃສ່ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ', |
| 36 | +'tog-minordefault' => 'ຖ້າບໍ່ມີການຕັ້ງ ກຳໜົດໃຫ້ທຸກໆການດັດແກ້ ເປັນ ການດັດແກ້ເລັກນ້ອຍ', |
| 37 | +'tog-previewontop' => 'ສະແດງ ຜົນການດັດແກ້ ເທິງ ຊ່ອງດັດແກ້', |
| 38 | +'tog-previewonfirst' => 'ສະແດງ ຜົນການດັດແກ້ ໃນ ເວລາດັດແກ້ເທື່ອທຳອິດ', |
| 39 | +'tog-enotifwatchlistpages' => 'ສົ່ງອີເມລມາໃຫ້ຂ້ອຍ ເມື່ອ ໜ້າທີ່ຂ້ອຍຕິດຕາມໄດ້ຖືກປ່ຽນແປງ', |
| 40 | +'tog-enotifusertalkpages' => 'ສົ່ງ ອີເມລ ມາໃຫ້ ຂ້ອຍ ເວລາ ໜ້າສົນທະນາຂ້ອຍ ມີການປ່ຽນແປງ', |
| 41 | +'tog-externaleditor' => 'ໃຊ້ ເອດິດເຕີທາງນອກ ຖ້າບໍ່ມີການຕັ້ງ', |
| 42 | +'tog-externaldiff' => 'ໃຊ້ ສ່ວນຕ່າງທາງນອກ ຖ້າບໍ່ມີ ການກຳໜົດ', |
| 43 | +'tog-forceeditsummary' => 'ເຕື່ອນຂ້ອຍ ຖ້າບໍ່ໄດ້ຂຽນຫຍັງໃສ່ ຊ່ອງ ສະຫຼຸບການດັດແກ້', |
| 44 | +'tog-watchlisthideown' => 'ເຊື່ອງ ການດັດແກ້ໂດຍຂ້ອຍ ໃນ ລາຍການຕິດຕາມຂອງຂ້ອຍ', |
| 45 | +'tog-watchlisthidebots' => 'ເຊື່ອງ ການດັດແກ້ ໂດຍ ບອທ໌ ໃນລາຍການຕິດຕາມຂອງຂ້ອຍ', |
| 46 | +'tog-watchlisthideminor' => 'ເຊື່ອງ ການດັດແກ້ເລັກນ້ອຍ ໃນ ລາຍການຕິດຕາມຂອງຂ້ອຍ', |
| 47 | +'tog-ccmeonemails' => 'ສົ່ງສຳເນົາ ອີເມລ ທີ່ ຂ້ອຍສົ່ງຫາຜູ້ອື່ນ ໃຫ້ ຂ້ອຍ', |
22 | 48 | |
| 49 | +'skinpreview' => '(ລອງເບິ່ງ)', |
| 50 | + |
| 51 | +# Dates |
| 52 | +'january' => 'ມັງກອນ', |
| 53 | +'february' => 'ກຸມພາ', |
| 54 | +'march' => 'ມີນາ', |
| 55 | +'april' => 'ເມສາ', |
| 56 | +'may_long' => 'ພຶດສະພາ', |
| 57 | +'june' => 'ມີຖຸນາ', |
| 58 | +'july' => 'ກໍລະກົດ', |
| 59 | +'august' => 'ສິງຫາ', |
| 60 | +'september' => 'ກັນຍາ', |
| 61 | +'october' => 'ຕຸລາ', |
| 62 | +'november' => 'ພະຈິກ', |
| 63 | +'december' => 'ທັນວາ', |
| 64 | +'may-gen' => 'ພຶດສະພາ', |
| 65 | +'jan' => 'ມັງກອນ', |
| 66 | +'feb' => 'ກຸມພາ', |
| 67 | +'may' => 'ພຶດສະພາ', |
| 68 | + |
| 69 | +# Bits of text used by many pages |
| 70 | +'categories' => 'ໝວດ', |
| 71 | +'pagecategories' => 'ໝວດ', |
| 72 | +'category_header' => 'ບົດຄວາມໃນໝວດ "$1"', |
| 73 | +'subcategories' => 'ໝວດຍ່ອຍ', |
| 74 | + |
| 75 | +'about' => 'ກ່ຽວກັບ', |
| 76 | +'article' => 'ໜ້າເນື້ອໃນ', |
| 77 | +'newwindow' => '(ເປີດເປັນ ປ່ອງຢ້ຽມ(ວິນໂດ)ໃໝ່ )', |
| 78 | +'cancel' => 'ລົບລ້າງ', |
| 79 | +'qbspecialpages' => 'ໜ້າພິເສດ', |
| 80 | +'mypage' => 'ໜ້າຂ້ອຍ', |
| 81 | +'mytalk' => 'ສົນທະນາຂ້ອຍ', |
| 82 | +'anontalk' => 'ສົນທະນາ ສຳຫຼັບ IP ນີ້', |
| 83 | +'navigation' => 'ນຳທິດ', |
| 84 | + |
| 85 | +'returnto' => 'ກັບໄປ $1.', |
| 86 | +'help' => 'ຊ່ອຍເຫຼືອ', |
| 87 | +'search' => 'ຊອກຫາ', |
| 88 | +'searchbutton' => 'ຊອກຫາ', |
| 89 | +'searcharticle' => 'ໄປ', |
| 90 | +'history' => 'ປະຫວັດການດັດແກ້', |
| 91 | +'history_short' => 'ປະຫວັດການດັດແກ້', |
| 92 | +'printableversion' => 'ສະບັບພິມໄດ້', |
| 93 | +'permalink' => 'ລິ້ງຄ໌ຖາວອນ', |
| 94 | +'edit' => 'ດັດແກ້', |
| 95 | +'editthispage' => 'ດັດແກ້ໜ້ານີ້', |
| 96 | +'delete' => 'ລຶບ', |
| 97 | +'deletethispage' => 'ລຶບໜ້ານີ້', |
| 98 | +'protect' => 'ປົກປ້ອງ', |
| 99 | +'newpage' => 'ໜ້າໃໝ່', |
| 100 | +'talkpage' => 'ປຶກສາຫາລືໜ້ານີ້', |
| 101 | +'talkpagelinktext' => 'ສົນທະນາ', |
| 102 | +'articlepage' => 'ເບິ່ງໜ້າເນື້ອໃນ', |
| 103 | +'talk' => 'ສົນທະນາ', |
| 104 | +'toolbox' => 'ກັບອຸບປະກອນ', |
| 105 | +'templatepage' => 'ເບິ່ງໜ້າແມ່ແບບ', |
| 106 | +'categorypage' => 'ເບິ່ງ ໜ້າ ໝວດ', |
| 107 | +'otherlanguages' => 'ເປັນພາສາອື່ນໆ', |
| 108 | +'redirectedfrom' => '(ໂອນມາຈາກ $1)', |
| 109 | +'viewcount' => 'ໜ້ານີ້ຖືກເຂົ້າເບິ່ງ {{plural:$1|ເທື່ອໜຶ່ງ|$1 ເທື່ອ}}.', |
| 110 | +'protectedpage' => 'ໜ້າຖືກປົກປ້ອງ', |
| 111 | +'jumptonavigation' => 'ນຳທິດ', |
| 112 | +'jumptosearch' => 'ຄົ້ນຫາ', |
| 113 | + |
| 114 | +# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations). |
| 115 | +'aboutsite' => 'ກ່ຽວກັບ {{SITENAME}}', |
| 116 | +'aboutpage' => '{{ns:project}}:ກ່ຽວກັບ', |
| 117 | +'copyright' => 'ເນື້ອໃນ ສະໜອງໃຫ້ ພາຍໃຕ້ $1.', |
| 118 | +'copyrightpage' => '{{ns:project}}:ລິຂະສິດ', |
| 119 | +'edithelppage' => '{{ns:project}}:ການດັດແກ້', |
| 120 | +'helppage' => '{{ns:project}}:ເນື້ອໃນ', |
| 121 | +'mainpage' => 'ໜ້າຫຼັກ', |
| 122 | +'sitesupport' => 'ບໍລິຈາກ', |
| 123 | + |
| 124 | +'badaccess' => 'ການອະນຸມັດບໍ່ຖືກຕ້ອງ', |
| 125 | +'badaccess-group0' => 'ທ່ານ ບໍ່ໄດ້ຮັບອະນຸຍາດ ໃຫ້ປະຕິບັດການ ທີ່ ທ່ານ ສັ່ງ.', |
| 126 | + |
| 127 | +'youhavenewmessages' => 'ທ່ານ ມີ $1 ($2).', |
| 128 | +'newmessageslink' => 'ຂໍ້ຄວາມໃໝ່', |
| 129 | +'newmessagesdifflink' => 'ການປ່ຽນແປງຫຼ້າສຸດ', |
| 130 | +'editsection' => 'ດັດແກ້', |
| 131 | +'editold' => 'ດັດແກ້', |
| 132 | +'editsectionhint' => 'ດັດແກ້ ພາກ: $1', |
| 133 | +'toc' => 'ເນື້ອໃນ', |
| 134 | +'showtoc' => 'ສະແດງ', |
| 135 | +'hidetoc' => 'ເຊື່ອງ', |
| 136 | +'viewdeleted' => 'ເບິ່ງ $1 ບໍ?', |
| 137 | + |
| 138 | +# Short words for each namespace, by default used in the 'article' tab in monobook |
| 139 | +'nstab-main' => 'ບົດຄວາມ', |
| 140 | +'nstab-user' => 'ໜ້າຜູ້ໃຊ້', |
| 141 | +'nstab-special' => 'ພິເສດ', |
| 142 | +'nstab-project' => 'ໜ້າໂຄງການ', |
| 143 | +'nstab-image' => 'ໄຟລ໌', |
| 144 | +'nstab-mediawiki' => 'ຂໍ້ຄວາມ', |
| 145 | +'nstab-template' => 'ແມ່ແບບ', |
| 146 | +'nstab-help' => 'ໜ້າຊ່ອຍເຫຼືອ', |
| 147 | +'nstab-category' => 'ໝວດ', |
| 148 | + |
| 149 | +# General errors |
| 150 | +'noconnect' => 'ຂໍອະໄພ! ວິກີ ພວມປະສົບບັນຫາ ທາງດ້ານເຕັກນິກ ແລະ ບໍ່ສາມາດເຂົ້າຫາ ຖານຂໍ້ມູນ.<br />$1', |
| 151 | +'filerenameerror' => 'ບໍ່ສາມາດ ປ່ຽນ ຊື່ໄຟລ໌ "$1" ໄປເປັນ "$2" ໄດ້.', |
| 152 | +'cannotdelete' => 'ບໍ່ສາມາດລຶບໜ້າ ຫຼື ໄຟລ໌ ໄດ້. (ມັນອາດຈະຖືກລຶບໂດຍໃຜຜູ້ໜຶ່ງແລ້ວ.)', |
| 153 | +'badtitle' => 'ຫົວຂໍ້ບໍ່ຖືກຕ້ອງ', |
| 154 | +'viewsource' => 'ເບິ່ງ ຊອສ໌', |
| 155 | +'editinginterface' => "'''ເຕືອນ:''' ທ່ານ ພວມດັດແກ້ ໜ້າ ທີ່ ສະໜອງ ອິນເຕີເຟສ ໂຕໜັງສື ໃຫ້ ຊອຟແວ. ການປ່ຽນແປງ ຂອງ ໜ້ານີ້ ຈະມີຜົນກະທົບ ຕໍ່ ການປະກົດ ຂອງ ອິນເຕີເຟສ ຂອງ ຜູ້ໃຊ້ອື່ນ.", |
| 156 | +'namespaceprotected' => "ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດ ໃຫ້ ດັດແກ້ ໜ້າ ໃນ '''$1'''.", |
| 157 | + |
| 158 | +# Login and logout pages |
| 159 | +'logouttitle' => 'ຜູ້ໃຊ້ ເຊັນອອກ', |
| 160 | +'logouttext' => '<strong>ທ່່ານ ໄດ້ ເຊັນອອກແລ້ວ.</strong><br /> |
| 161 | +ທ່ານ ສາມາດສືບຕໍ່ໃຊ້ {{SITENAME}} ແບບບໍ່ສະແດງຊື່, ຫຼື ທ່ານ ສາມາດ ເຊັນເຂົ້າ |
| 162 | +ອີກ ໂດຍ ຊື່ຜູ້ໃຊ້ ເກົ່າ ຫຼື ໃໝ່ ກໍ່ໄດ້. ກະລຸນາ ຮັບຊາບວ່າ ບາງໜ້າ ອາດຈະສືບຕໍ່ ສະແດງ |
| 163 | +ຄືວ່າ ທ່ານ ຍັງເຊັນເຂົ້າຢູ່ ຈົນກວ່າ ທ່ານ ຂໍ້ມູນບັນທຶກຊົ່ວຄາວ ໃນ ໂປຣແກຣມທ່ອງເວັບ |
| 164 | +ຂອງ ທ່ານ ຈະຖືກລຶບ.', |
| 165 | +'welcomecreation' => '== ຍິນດີຕ້ອນຮັບ, $1! == |
| 166 | + |
| 167 | +ບັນຊີ ຂອງທ່ານ ຖືກສ້າງຂຶ້ນແລ້ວ. ຢ່າລືມ ຕັ້ງຄ່າ ທ່ານ ຢູ່ {{SITENAME}}.', |
| 168 | +'loginpagetitle' => 'ຜູ້ໃຊ້ ເຊັນເຂົ້າ', |
| 169 | +'yourname' => 'ຊື່ຜູ້ໃຊ້', |
| 170 | +'yourpassword' => 'ລະຫັດຜ່ານ', |
| 171 | +'yourpasswordagain' => 'ພິມລະຫັດຜ່ານອີກ', |
| 172 | +'remembermypassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້', |
| 173 | +'yourdomainname' => 'ໂດເມນ ຂອງ ທ່ານ', |
| 174 | +'alreadyloggedin' => '<strong>ຜູ້ໃຊ້ $1, ທ່ານ ໄດ້ເຊັນເຂົ້າແລ້ວ!</strong><br />', |
| 175 | +'login' => 'ເຊັນເຂົ້າ', |
| 176 | +'loginprompt' => 'ທ່ານ ຕ້ອງ ອະນຸຍາດ cookies ເພື່ອ ຈະເຊັນເຂົ້າ {{SITENAME}}.', |
| 177 | +'userlogin' => 'ເຊັນເຂົ້າ / ສ້າງບັນຊີ', |
| 178 | +'logout' => 'ເຊັນອອກ', |
| 179 | +'userlogout' => 'ເຊັນອອກ', |
| 180 | +'nologin' => 'ບໍ່ມີບັນຊີເທື່ອບໍ? $1.', |
| 181 | +'nologinlink' => 'ສ້າງບັນຊີໃໝ່', |
| 182 | +'createaccount' => 'ສ້າງບັນຊີ', |
| 183 | +'gotaccount' => 'ມີ ບັນຊີແລ້ວບໍ? $1.', |
| 184 | +'gotaccountlink' => 'ເຊັນເຂົ້າ', |
| 185 | +'createaccountmail' => 'ໂດຍ ອີເມລ', |
| 186 | +'badretype' => 'ລະຫັດຜ່ານ ທີ່ ທ່ານພິມຄືນ ບໍ່ຖືກກັບ ທີ່ພິມກ່ອນ.', |
| 187 | +'youremail' => 'ອີເມລ *:', |
| 188 | +'username' => 'ຊື່ຜູ້ໃຊ້:', |
| 189 | +'uid' => 'ເລກປະຈຳໂຕຜູ້ໃຊ້:', |
| 190 | +'yourrealname' => 'ຊື່ແທ້ *:', |
| 191 | +'yourlanguage' => 'ພາສາ:', |
| 192 | +'yournick' => 'ຊື່ຫຼິ້ນ:', |
| 193 | +'email' => 'ອີເມລ', |
| 194 | +'loginerror' => 'ມີບັນຫາໃນການເຊັນເຂົ້າ', |
| 195 | +'prefs-help-email' => '* ອີເມລ (ເລືອກໄດ້): ໃຫ້ຜູ້ອື່ນ ສາມາດຕິດຕໍ່ຫາ ທ່ານ ຜ່ານ ໜ້າຜູ້ໃຊ້ ຫຼື ໜ້າສົນທະນາຜູ້ໃຊ້ ຂອງ ທ່ານ ໂດຍ ບໍ່ຈຳເປັນຕ້ອງ ເປີດເຜີຍ ອີເມລຂອງທ່ານ.', |
| 196 | +'loginsuccesstitle' => 'ເຊັນເຂົ້າສຳເລັດ', |
| 197 | +'loginsuccess' => "'''ທ່ານ ເຊັນເຂົ້າ {{SITENAME}} ໃນນາມ \"\$1\".'''", |
| 198 | +'wrongpassword' => 'ລະຫັດຜ່ານບໍ່ຖືກ. ກະລຸນາເຮັດຄືນໃໝ່.', |
| 199 | +'wrongpasswordempty' => 'ບໍ່ມີລະຫັດຜ່ານຖືກພິມເຂົ້າ. ກະລຸນາເຮັດຄືນໃໝ່.', |
| 200 | +'mailmypassword' => 'ຂໍລະຫັດຜ່ານທາງອີເມລ', |
| 201 | +'acct_creation_throttle_hit' => 'ຂໍໂທດຫຼາຍໆ, ທ່ານ ໄດ້ສ້າງ $1 ບັນຊີແລ້ວ. ທ່ານ ບໍ່ສາມາດ ສ້ງບັນຊີໄດ້ອີກ.', |
| 202 | +'emailauthenticated' => 'ອີເມລ ຂອງ ທ່ານ ຖືກຢືນຢັນ ເມື່ອ $1.', |
| 203 | +'emailconfirmlink' => 'ຢືນຢັນ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ', |
| 204 | +'accountcreated' => 'ບັນຊີ ໄດ້ຖືກສ້າງ ແລ້ວ', |
| 205 | +'accountcreatedtext' => 'ບັນຊີ ຂອງ $1 ໄດ້ ຖືກສ້າງແລ້ວ.', |
| 206 | + |
| 207 | +# Password reset dialog |
| 208 | +'resetpass_submit' => 'ຕັ້ງລະຫັດຜ່ານ ແລະ ເຊັນເຂົ້າ', |
| 209 | +'resetpass_success' => 'ສຳເລັດການປ່ຽນແປງ ລະຫັດຜ່ານຂອງທ່ານແລ້ວ! ດຽວນີ້ ທ່ານ ເຊັ່ນເຂົ້າ ໃນ ...', |
| 210 | + |
| 211 | +# Edit page toolbar |
| 212 | +'bold_sample' => 'ໂຕໜັງສືເຂັ້ມ', |
| 213 | +'bold_tip' => 'ໂຕໜັງສືເຂັ້ມ', |
| 214 | +'extlink_tip' => 'ລິ້ງຄ໌ພາຍນອກ (remember http:// prefix)', |
| 215 | +'headline_sample' => 'ສຳຄັນ', |
| 216 | +'math_tip' => ' |
| 217 | +== Headline text == |
| 218 | +ສູດ ຄະນິດສາດ (LaTeX)', |
| 219 | + |
| 220 | +# Edit pages |
| 221 | +'minoredit' => 'ນີ້ແມ່ນການດັດແກ້ເລັກນ້ອຍ', |
| 222 | +'watchthis' => 'ຕິດຕາມໜ້ານີ້', |
| 223 | +'savearticle' => 'ບັນທຶກ', |
| 224 | +'preview' => 'ລອງເບິ່ງຜົນ', |
| 225 | +'showpreview' => 'ລອງເບິ່ງຜົນ', |
| 226 | +'showdiff' => 'ສະແດງສ່ວນຕ່າງ', |
| 227 | +'anoneditwarning' => "'''ເຕືອນ:''' ທ່ານ ບໍ່ໄດ້ເຊັນເຂົ້າ. ທີ່ຢູ່ IP ຂອງ ທ່ານ ຈະຖືກບັນທຶກໄວ້ ໃນ ປະຫວັດການດັດແກ້ ຂອງ ໜ້ານີ້.", |
| 228 | +'blockedtitle' => 'ຜູ້ໃຊ້ຖືກຫ້າມ', |
| 229 | +'blockededitsource' => "ເນື້ອໃນ ຂອງ '''ການດັດແປງໂດຍທ່ານ '''ຕໍ່ກັບ '''$1''' ມີດັ່ງລຸ່ມນີ້:", |
| 230 | +'whitelistedittext' => 'ທ່ານ ຈະຕ້ອງ $1 ເພື່ອ ຈະດັດແກ້.', |
| 231 | +'whitelistreadtitle' => 'ຈະຕ້ອງ ເຊັນເຂົ້າ ເພື່ອອ່ານໜ້ານີ້', |
| 232 | +'confirmedittitle' => 'ຕ້ອງຢືນຢັນ ທີ່ຢູ່ ອີເມລ ຈຶ່ງຈະສາມາດ ດັດແກ້', |
| 233 | +'confirmedittext' => 'ທ່ານ ຕ້ອງຢືນຢັນ ທີ່ຢູ່ອີເມລ ກ່ອນການດັດແກ້ບົດຄວາມຕ່າງໆ. ກະລຸນາ ຂຽນ ທີ່ຢູ່ ອີເມລ ທີ່ໃຊ້ໄດ້ ຢູ່ [[Special:Preferences|user preferences]].', |
| 234 | +'loginreqtitle' => 'ຈຳເປັນຕ້ອງ ເຊັນເຂົ້າ', |
| 235 | +'loginreqlink' => 'ເຊັນເຂົ້າ', |
| 236 | +'accmailtitle' => 'ໄດ້ສົ່ງ ລະຫັດຜ່ານ ໄປແລ້ວ.', |
| 237 | +'accmailtext' => 'ລະຫັດຜ່ານ ຂອງ "$1" ໄດ້ຖືກສົ່ງໄປ $2 ແລ້ວ.', |
| 238 | +'newarticle' => '(ໃໝ່)', |
| 239 | +'newarticletext' => "== Headline text == |
| 240 | +ທ່ານ ໄດ້ມາຮອດ ໜ້າທີ່ຍັງບໍ່ໄດ້ຖືກສ້າງຂຶ້ນເທື່ອ. |
| 241 | +ທ່ານ ສາມາດເລີ່ມ ສ້າງໜ້າ ໂດຍ ພິມໃສ່ ກັບ ຂ້າງລຸ່ມ. |
| 242 | +(ເບິ່ງລາຍລະອຽດຕື່ມ ທີ່ [[{{MediaWiki:helppage}}|help page]]). |
| 243 | +ຖ້າ ທ່ານ ມາຮອດນີ້ ໂດຍຄວາມຜິດພາດ, ກະລຸນາ ກົດ ປຸ່ມ '''ກັບຄືນ''', ຢູ່ ໂປຣແກຣມ ທ່ອງເວັບ ຂອງທ່ານ.", |
| 244 | +'noarticletext' => 'ຍັງບໍ່ມີເນື້ອໃນ ຢູ່ ໜ້ານີ້, ທ່ານ ສາມາດ [[Special:Search/{{PAGENAME}}|ຊອກຫາຫົວຂໍ້ໜ້ານີ້]] ຢູ່ ໜ້າອື່ນ ຫຼື [{{fullurl:{{FULLPAGENAME}}|action=edit}} ຂຽນໜ້ານີ້].', |
| 245 | +'clearyourcache' => "'''ເອົາໃຈໃສ່:''' ຫຼັງຈາກບັນທຶກ, ທ່ານອາດຈຳເປັນຕ້ອງເວັ້ນຜ່ານ ຂໍ້ມູນເກົ່າທີ່ ໂປແກມທ່ອງເວັບ ຂອງ ທ່ານບັນທຶກໄວ້ເພື່ອເບິ່ງຜົນການປ່ຽນແປງ. '''Mozilla / Firefox / Safari:''' ກົດ ''Shift'' ໃນເວລາຄລິກ ''Reload'', ຫຼືກົດ ''Ctrl-Shift-R'' (''Cmd-Shift-R'' ໃນ ເມັກຄິນທົສ); '''IE:''' ກົດ ''Ctrl'' ໃນເວລາຄລິກ ''Refresh'', ຫຼືກົດ ''Ctrl-F5''; '''Konqueror:''': ກົດປຸ່ມ ''Reload'' , ຫຼື ກົດ ''F5''; '''Opera''' ຜູ້ໃຊ້ອາດຈຳເປັນຕ້ອງລຶບ ຂໍ້ມູນບັນທຶກໂດຍສິ້ນເຊີງ ໃນ ''Tools→Preferences''.", |
| 246 | +'previewnote' => '<strong>ນີ້ ແມ່ນ ການລອງເບິ່ງຜົນເທົ່ານັ້ນ; ການດັດແກ້ຍັງບໍ່ທັນຖືກບັນທຶກ!</strong>', |
| 247 | +'editing' => 'ພວມດັດແກ້ $1', |
| 248 | +'editinguser' => 'ຜູ້ໃຊ້ <b>$1</b> ພວມດັດແກ້', |
| 249 | +'editingsection' => 'ພວມດັດແກ້ $1 (ພາກ)', |
| 250 | +'editingcomment' => 'ພວມດັດແກ້ $1 (comment)', |
| 251 | +'yourtext' => 'ເນື້ອໃນ', |
| 252 | +'yourdiff' => 'ສ່ວນຕ່າງ', |
| 253 | +'copyrightwarning' => 'ກະລຸນາ ເຂົ້າໃຈວ່າ ທຸກໆ ການປະກອບສ່ວນຕໍ່ກັບ {{SITENAME}} ຈະຖືກ ເປີດເຜີຍ ພາຍໃຕ້ $2 (ເບິ່ງ ລາຍລະອຽດ ທີ່ $1). ຖ້າ ທ່ານ ບໍ່ປະສົງ ໃຫ້ ສິ່ງທີ່ ທ່ານ ຂຽນ ຖືກດັດແກ້ ຫຼື ແຈກຢາຍ ອີກ ຕາມຊອບໃຈ, ທ່ານ ບໍ່ຄວນ ຂຽນຢູ່ນີ້. <br /> |
| 254 | +ທ່ານ ຈະຕ້ອງ ສັນຍາອີກວ່າ, ທ່ານ ຂຽນມັນຂຶ້ນມາເອງ ຫຼື ກ່າຍມັນມາຈາກ ໂດເມນ ສາທາລະນະ ຫຼື ສິ່ງບໍ່ເສຍຄ່າ ຄ້າຍຄືກັນ. |
| 255 | +<strong>ກະລຸນາ ຢ່າ ສົ່ງສິ່ງທີ່ ຖືກສະຫງວນ ລິຂະສິດ ໂດຍ ບໍ່ໄດ້ຮັບອະນຸຍາດ!</strong>', |
| 256 | +'copyrightwarning2' => 'ກະລຸນາ ເຂົ້າໃຈວ່າ ທຸກໆ ການປະກອນສ່ວນ ຕໍ່ {{SITENAME}} ອາດຖືກ ດັດແກ້, ປ່ຽນແປງ, ຫຼື ລຶບ ໂດຍ ຜູ້ປະກອບສ່ວນອື່ນ. ຖ້າ ທ່ານ ບໍ່ປະສົງ ໃຫ້ ສິ່ງທີ່ ທ່ານ ຂຽນ ຖືກດັດແກ້ ຫຼື ແຈກຢາຍ ອີກ ຕາມຊອບໃຈ, ທ່ານ ບໍ່ຄວນ ຂຽນຢູ່ນີ້. <br /> |
| 257 | +ທ່ານ ຈະຕ້ອງ ສັນຍາອີກວ່າ, ທ່ານ ຂຽນມັນຂຶ້ນມາເອງ ຫຼື ກ່າຍມັນມາຈາກ ໂດເມນ ສາທາລະນະ ຫຼື ສິ່ງບໍ່ເສຍຄ່າ ຄ້າຍຄືກັນ. (ເບິ່ງ ລາຍລະອຽດ ທີ່ $1). |
| 258 | +<strong>ກະລຸນາ ຢ່າ ສົ່ງສິ່ງທີ່່ ຖືກສະຫງວນ ລິຂະສິດ ໂດຍ ບໍ່ໄດ້ຮັບອະນຸຍາດ!</strong>', |
| 259 | +'templatesused' => 'ແມ່ແບບໄດ້ໃຊ້ໃນໜ້ານີ້:', |
| 260 | +'templatesusedpreview' => 'ແມ່ແບບໃຊ້ໃນການລອງເບິ່ງຜົນນີ້:', |
| 261 | +'templatesusedsection' => 'ແມ່ແບບໄດ້ໃຊ້ໃນພາກນີ້:', |
| 262 | +'template-protected' => '(ປົກປ້ອງ)', |
| 263 | +'template-semiprotected' => '(ເຄິ່ງປົກປ້ອງ)', |
| 264 | + |
| 265 | +# Account creation failure |
| 266 | +'cantcreateaccounttitle' => 'ບໍ່ສາມາດສ້າງ ບັນຊີ ໄດ້', |
| 267 | +'cantcreateaccounttext' => 'ການສ້າງບັນຊີ ຈາກ ທີ່ຢູ່ IP (<b>$1</b>) ນີ້ໄດ້ຖືກຫ້າມ. |
| 268 | +ອັນນີ້ ອາດແມ່ນຍ້ອນມີການສ້າງບັນຫາ ຫຼື ຂຽນໂລເລ ຈາກ ໂຮງຮຽນ ຫຼື ຜູ້ສະໜອງການເຂົ້າຫາ ອິນເຕີເນັດ ທີ່ທ່ານໃຊ້.', |
| 269 | + |
| 270 | +# History pages |
| 271 | +'nohistory' => 'ຍັງບໍ່ມີ ປະຫວັດການດັດແກ້ໜ້ານີ້ເທື່ອ.', |
| 272 | +'next' => 'ຕໍ່ໄປ', |
| 273 | +'page_first' => 'ທຳອິດ', |
| 274 | +'page_last' => 'ສຸດທ້າຍ', |
| 275 | + |
| 276 | +# Revision deletion |
| 277 | +'rev-delundel' => 'ສະແດງ/ເຊື່ອງ', |
| 278 | + |
| 279 | +# Diffs |
| 280 | +'compareselectedversions' => 'ສົມທຽບ ລະຫວ່າງ ສະບັບເລືອກ', |
| 281 | + |
| 282 | +# Search results |
| 283 | +'searchresulttext' => 'ສຳຫຼັບ ຂໍ້ມູນເພີ່ມເຕີມ ກ່ຽວກັບ ການຊອກຫາ ຢູ່ {{SITENAME}}, ກະລຸນາເບິ່ງ [[{{MediaWiki:helppage}}|{{int:help}}]].', |
| 284 | +'searchsubtitle' => "ທ່ານ ຊອກຫາ '''[[:$1]]'''", |
| 285 | +'badquerytext' => 'ບໍ່ສາມາດດຳເນີນ ການຄົ້ນຫາ ທີ່ທ່ານກຳນົດໄດ້. |
| 286 | +ອັນນີ້ ອາດແມ່ນຍ້ອນ ທ່ານພະຍາຍາມ ຄົ້ນຫາໂດຍຄຳສັບທີ່ໜ້ອຍກ່ວາ 3 ໂຕໜັງສື, ທີ່ພວກເຮົາຍັງບໍ່ສາມາດຕອບສະໜອງໄດ້ເທື່ອ.. |
| 287 | +ຫຼື ທ່ານອາດຈະພິມຜິດ ເຊັ່ນ "ປາ ແລະ ແລະ ຂະໜາດ". |
| 288 | +ກະລຸນາ ທົດລອງ ໂດຍ ຄຳສັບອື່ນໆ.', |
| 289 | +'noexactmatch' => "'''ຍັງບໍ່ມີໜ້າ ຊື່ວ່າ \"\$1\".''' ທ່ານ ສາມາດ [[:\$1|ສ້າງໜ້ານີ້ໄດ້]].", |
| 290 | +'nextn' => '$1 ຕໍ່ໄປ', |
| 291 | +'viewprevnext' => 'ເບິ່ງ ($1) ($2) ($3).', |
| 292 | +'powersearch' => 'ຊອກຫາ', |
| 293 | +'blanknamespace' => '(ຫຼັກ)', |
| 294 | + |
| 295 | +# Preferences page |
| 296 | +'preferences' => 'ການຕັ້ງຄ່າ', |
| 297 | +'mypreferences' => 'ຕັ້ງຄ່າຂອງຂ້ອຍ', |
| 298 | +'changepassword' => 'ປ່ຽນລະຫັດຜ່ານ', |
| 299 | +'skin' => 'ລວດລາຍ', |
| 300 | +'math' => 'ຄະນິດສາດ', |
| 301 | +'dateformat' => 'ແບບວັນເດືອນປີ', |
| 302 | +'datedefault' => 'ແນວໃດກໍ່ໄດ້', |
| 303 | +'datetime' => 'ວັນ ແລະ ເວລາ', |
| 304 | +'math_syntax_error' => 'ຜິດຫຼັກໄວຍະກອນ', |
| 305 | +'prefs-personal' => 'ຂໍ້ມູນຫຼັກຜູ້ໃຊ້', |
| 306 | +'prefs-rc' => 'ການດັດແກ້ຫຼ້າສຸດ', |
| 307 | +'prefs-watchlist' => 'ລາຍການຕິດຕາມ', |
| 308 | +'prefs-watchlist-days' => 'ຈຳນວນມື້ສະແດງ ໃນ ລາຍການຕິດຕາມ:', |
| 309 | +'prefs-watchlist-edits' => 'ຈຳນວນການດັດແກ້ ສະແດງ ໃນ ລາຍການຕິດຕາມທີ່ຂະຫຍາຍອອກ:', |
| 310 | +'prefs-misc' => 'ແລະອື່ນໆ', |
| 311 | +'saveprefs' => 'ບັນທຶກ', |
| 312 | +'resetprefs' => 'ເລີ່ມຄືນໃໝ່', |
| 313 | +'oldpassword' => 'ລະຫັດຜ່ານເກົ່າ:', |
| 314 | +'newpassword' => 'ລະຫັດຜ່ານໃໝ່:', |
| 315 | +'retypenew' => 'ພິມລະຫັດຜ່ານໃໝ່ອີກ:', |
| 316 | +'textboxsize' => 'ການດັດແກ້', |
| 317 | +'rows' => 'ແຖວ:', |
| 318 | +'columns' => 'ຖັນ:', |
| 319 | +'searchresultshead' => 'ຊອກຫາ', |
| 320 | +'resultsperpage' => 'ຈຳນວນຜົນການຊອກເຫັນ ຕໍ່ ໜ້າ:', |
| 321 | +'contextlines' => 'ຈຳນວນແຖວ ຕໍ່ ຜົນການຊອກເຫັນ:', |
| 322 | +'recentchangesdays' => 'ຈຳນວນມື້ສະແດງໃນການປ່ຽນແປງຫຼ້າສຸດ:', |
| 323 | +'recentchangescount' => 'ຈຳນວນການດັດແກ້ສະແດງໃນການປ່ຽນແປງຫຼ້າສຸດ:', |
| 324 | +'savedprefs' => 'ການຕັ້ງຄ່າຂອງທ່ານໄດ້ຖືກບັນທຶກແລ້ວ.', |
| 325 | +'timezonelegend' => 'ເຂດເວລາ', |
| 326 | +'timezonetext' => 'ຈຳນວນຊົ່ວໂມງແຕກຕ່າງ ລະຫວ່າງເວລາທ້ອງຖິ່ນ ແລະ ເວລາ ຂອງ ເຊີບເວີ (UTC).', |
| 327 | +'localtime' => 'ເວລາທ້ອງຖິ່ນ', |
| 328 | +'timezoneoffset' => 'ຫ່າງກັນ¹', |
| 329 | +'servertime' => 'ເວລາເຊີເວີ', |
| 330 | +'guesstimezone' => 'ເອົາເວລາຈາກໂປຣແກຣມທ່ອງເວັບ', |
| 331 | +'allowemail' => 'ອະນຸຍາດ ໃຫ້ຜູ້ໃຊ້ອື່ນ ສົ່ງອີເມລຫາຂ້ອຍ', |
| 332 | +'defaultns' => 'ຄົ້ນຫາ ໃນ ຂອບເຂດຊື່ ນີ້ ເວລາບໍ່ມີການລະບຸ:', |
| 333 | +'files' => 'ໄຟລ໌', |
| 334 | + |
| 335 | +# Recent changes |
| 336 | +'nchanges' => '$1 {{PLURAL:$1|ການປ່ຽນແປງ|ການປ່ຽນແປງ}}', |
| 337 | +'recentchanges' => 'ການດັດແກ້ຫຼ້າສຸດ', |
| 338 | +'recentchangestext' => 'ເບິ່ງ ການປ່ຽນແປງ ຫຼ້າສຸດ ຢູ່ ໜ້າວິກີນີ້.', |
| 339 | +'rcnote' => 'ຂ້າງລຸ່ມ ແມ່ນ <strong>$1</strong>ການປ່ຽນແປງ ຫຼ້າສຸດ ໃນ <strong>$2</strong>ມື້ຫຼ້າສຸດ, ມື້ນີ້ ແມ່ນ $3.', |
| 340 | +'rclistfrom' => 'ສະແດງ ການປ່ຽນແປງ ເລີ່ມແຕ່ $1', |
| 341 | +'rcshowhideminor' => '$1 ການດັດແກ້ເລັກນ້ອຍ', |
| 342 | +'rcshowhideliu' => '$1 ຜູ້ໃຊ້ໄດ້ເຊັນເຂົ້າ', |
| 343 | +'rcshowhideanons' => '$1 ຜູ້ໃຊ້ບໍ່ສະແດງຊື່', |
| 344 | +'rcshowhidemine' => '$1 ການດັດແກ້ໂດຍຂ້ອຍ', |
| 345 | +'rclinks' => 'ສະແດງ $1ການປ່ຽນແປງ ຫຼ້າສຸດ ໃນ $2ມື້ຫຼ້າສຸດ<br />$3', |
| 346 | +'diff' => 'ສ່ວນຕ່າງ', |
| 347 | +'hist' => 'ປະຫວັດ', |
| 348 | +'hide' => 'ເຊື່ອງ', |
| 349 | +'show' => 'ສະແດງ', |
| 350 | +'newpageletter' => 'ໃໝ່', |
| 351 | + |
| 352 | +# Recent changes linked |
| 353 | +'recentchangeslinked' => 'ການດັດແກ້ທີ່ກ່ຽວຂ້ອງ', |
| 354 | + |
| 355 | +# Upload |
| 356 | +'upload' => 'ອັບໂຫຼດໄຟລ໌', |
| 357 | +'filedesc' => 'ສະຫຼຸບ', |
| 358 | +'fileuploadsummary' => 'ສະຫຼຸບ:', |
| 359 | +'badfilename' => 'ຊື່ໄຟລ໌ ໄດ້ຖືກປ່ຽນເປັນ "$1".', |
| 360 | +'savefile' => 'ບັນທຶກໄຟລ໌', |
| 361 | +'watchthisupload' => 'ຕິດຕາມໜ້ານີ້', |
| 362 | + |
| 363 | +# Image list |
| 364 | +'imagelist' => 'ລາຍຊື່ໄຟລ໌', |
| 365 | +'ilsubmit' => 'ຄົ້ນຫາ', |
| 366 | +'byname' => 'ຕາມຊື່', |
| 367 | +'bydate' => 'ຕາມວັນເວລາ', |
| 368 | +'bysize' => 'ຕາມ ຂະໜາດ', |
| 369 | +'nolinkstoimage' => 'ບໍ່ມີໜ້າໃດ ລິ້ງຄ໌ ຫາ ໄຟລ໌ນີ້.', |
| 370 | +'noimage' => 'ຍັງບໍ່ມີ ໄຟລ໌ຊື່ນີ້ ເທື່ອ, ທ່ານ ສາມາດ $1.', |
| 371 | +'noimage-linktext' => 'ອັບໂຫຼດມັນ', |
| 372 | + |
| 373 | +# List redirects |
| 374 | +'listredirects' => 'ລາຍການການໂອນໜ້າ', |
| 375 | + |
| 376 | +# Unused templates |
| 377 | +'unusedtemplates' => 'ແມ່ແບບບໍ່ໄດ້ໃຊ້', |
| 378 | + |
| 379 | +# Random redirect |
| 380 | +'randomredirect' => 'ໂອນໄປໜ້າໃດໜຶ່ງ', |
| 381 | + |
| 382 | +# Statistics |
| 383 | +'statistics' => 'ສະຖິຕິ', |
| 384 | + |
| 385 | +'doubleredirects' => 'ໂອນໜ້າ 2 ຄັ້ງ', |
| 386 | + |
| 387 | +'brokenredirects' => 'ການໂອນບໍ່ມີໜ້າປາຍທາງ', |
| 388 | +'brokenredirectstext' => 'ການໂອນໜ້ານີ້ ເຊື່ອມຕໍ່ໄປຫາໜ້າ ທີ່ ຍັງບໍ່ມີເທື່ອ:', |
| 389 | +'brokenredirects-edit' => '(ດັດແກ້)', |
| 390 | +'brokenredirects-delete' => '(ລຶບ)', |
| 391 | + |
| 392 | +'withoutinterwiki-header' => 'ໜ້າ ຕໍ່ໄປນີ້ ບໍ່ມີ ລິ້ງຄ໌ ຫາ ບົດຄວາມສະບັບພາສາອື່ນໆ:', |
| 393 | + |
| 394 | +# Miscellaneous special pages |
| 395 | +'nbytes' => '$1 {{PLURAL:$1|ໄບຕ໌|ໄບຕ໌}}', |
| 396 | +'ncategories' => '$1 {{PLURAL:$1|ໝວດ|ໝວດ}}', |
| 397 | +'nlinks' => '$1 {{PLURAL:$1|ລິ້ງຄ໌|ລິ້ງຄ໌}}', |
| 398 | +'lonelypages' => 'ໜ້າບໍ່ມີໜ້າໃດເຊື່ອມຕໍ່ຫາ', |
| 399 | +'uncategorizedpages' => 'ໜ້າບໍ່ໄດ້ຈັດໝວດ', |
| 400 | +'uncategorizedcategories' => 'ໝວດບໍ່ໄດ້ຈັດໝວດ', |
| 401 | +'uncategorizedimages' => 'ຮູບບໍ່ໄດ້ຈັດໝວດ', |
| 402 | +'unusedcategories' => 'ໝວດບໍ່ໄດ້ໃຊ້', |
| 403 | +'unusedimages' => 'ໄຟລ໌ບໍ່ໄດ້ໃຊ້', |
| 404 | +'wantedcategories' => 'ໝວດ ພວມຕ້ອງການ', |
| 405 | +'wantedpages' => 'ໜ້າ ພວມຕ້ອງການ', |
| 406 | +'mostlinked' => 'ໜ້າທີ່ມີການເຊື່ອມຕໍ່ຫາຫຼາຍທີ່ສຸດ', |
| 407 | +'mostlinkedcategories' => 'ໝວດທີ່ມີການເຊື່ອມຕໍ່ຫາຫຼາຍທີ່ສຸດ', |
| 408 | +'mostcategories' => 'ບົດຄວາມ ທີ່ມີຫຼາຍ ໝວດ ທີ່ສຸດ', |
| 409 | +'mostimages' => 'ຮູບທີ່ມີການເຊື່ອມຕໍ່ຫາຫຼາຍທີ່ສຸດ', |
| 410 | +'mostrevisions' => 'ບົດຄວາມ ທີ່ມີການດັດແກ້ຫຼາຍເທື່ອທີ່ສຸດ', |
| 411 | +'allpages' => 'ທຸກໆໜ້າ', |
| 412 | +'prefixindex' => 'ດັດຊະນີຄຳນຳໜ້າ', |
| 413 | +'randompage' => 'ໜ້າໃດໜຶ່ງ', |
| 414 | +'shortpages' => 'ໜ້າເນື້ອໃນສັ້ນ', |
| 415 | +'longpages' => 'ໜ້າເນື້ອໃນຍາວ', |
| 416 | +'deadendpages' => 'ໜ້າບໍ່ການເຊື່ອມຕໍ່ຫາໜ້າອື່ນ', |
| 417 | +'protectedpages' => 'ບັນດາໜ້າຖືກປົກປ້ອງ', |
| 418 | +'listusers' => 'ລາຍຊື່ຜູ້ໃຊ້', |
| 419 | +'specialpages' => 'ໜ້າພິເສດ', |
| 420 | +'spheading' => 'ໜ້າພິເສດ ສຳຫຼັບ ຜູ້ໃຊ້ທຸກໆທ່ານ', |
| 421 | +'newpages' => 'ໜ້າສ້າງໃໝ່', |
| 422 | +'newpages-username' => 'ຊື່ຜູ້ໃຊ້:', |
| 423 | +'ancientpages' => 'ບັນດາໜ້າເກົ່າທີ່ສຸດ', |
| 424 | +'move' => 'ຍ້າຍ', |
| 425 | + |
| 426 | +# Book sources |
| 427 | +'booksources' => 'ປຶ້ມອ້າງອີງ', |
| 428 | +'booksources-go' => 'ໄປ', |
| 429 | + |
| 430 | +'categoriespagetext' => 'ມີ ບັນດາ ໝວດ ຕໍ່ໄປນີ້ ຢູ່ ວິກີ.', |
| 431 | +'alphaindexline' => '$1 ຫາ $2', |
| 432 | +'version' => 'ສະບັບ', |
| 433 | + |
| 434 | +# Special:Log |
| 435 | +'log' => 'ບັນທຶກ', |
| 436 | +'all-logs-page' => 'ທຸກໆຂໍ້ມູນບັນທຶກການນຳໃຊ້', |
| 437 | +'log-search-legend' => 'ຊອກຫາ ໃນ ບັນທຶກການນຳໃຊ້', |
| 438 | +'log-search-submit' => 'ໄປ', |
| 439 | +'alllogstext' => 'ສະແດງ ບັນທຶກ ການອັບໂຫຼດ, ການລຶບ, ການປົກປ້ອງ, ການຫ້າມ ແລະ sysop. |
| 440 | +ທ່ານ ສາມາດຄັດຈ້ອນ ການສະແດງ ໂດຍ ເລືອກ ປະເພດການບັນທຶກ, ຊື່ຜູ້ໃຊ້ ຫຼື ໜ້າທີ່ມີຜົນກະທົບ.', |
| 441 | + |
| 442 | +# Special:Allpages |
| 443 | +'nextpage' => 'ໜ້າຕໍ່ໄປ ($1)', |
| 444 | +'allpagesfrom' => 'ສະແດງທຸກໆໜ້າ ເລີ່ມແຕ່:', |
| 445 | +'allarticles' => 'ທຸກໆບົດຄວາມ', |
| 446 | +'allinnamespace' => 'ທຸກໆໜ້າ ຂອງ ($1 namespace)', |
| 447 | +'allnotinnamespace' => 'ທຸກໆໜ້າ (ນອກຈາກ ໃນ $1 namespace)', |
| 448 | +'allpagesprev' => 'ກ່ອນໜ້າ', |
| 449 | +'allpagesnext' => 'ຕໍ່ໄປ', |
| 450 | +'allpagessubmit' => 'ໄປ', |
| 451 | +'allpagesprefix' => 'ສະແດງ ໜ້າ ຂຶ້ນຕົ້ນດ້ວຍ:', |
| 452 | +'allpagesbadtitle' => 'ຫົວຂໍ້ ຂອງ ໜ້າດັງກ່າວ ບໍ່ຖືກຕ້ອງ ຫຼື ອາດໃຊ້ ຄຳນຳໜ້າ ທີ່ inter-language ຫຼື inter-wiki ໄດ້ສະຫງວນໄວ້. ມັນອາດຈະມີ ໜຶ່ງ ຫຼື ຫຼາຍໂຕໜັງສື ທີ່ ບໍ່ສາມາດໃຊ້ ໃນ ຫົວຂໍ້ໄດ້.', |
| 453 | + |
| 454 | +# Special:Listusers |
| 455 | +'listusers-submit' => 'ສະແດງ', |
| 456 | + |
| 457 | +# E-mail user |
| 458 | +'mailnologintext' => 'ທ່ານ ຈະຕ້ອງ [[Special:Userlogin|logged in]] |
| 459 | +ແລະ ມີ ອີເມລ ທີ່ໃຊ້ໄດ້ ຢູ່ [[Special:Preferences|preferences]] |
| 460 | +ຂອງ ທ່ານ ເພື່ອຈະ ສົ່ງ ອີເມລ ຫາ ຜູ້ໃຊ້ອື່ນ.', |
| 461 | +'emailuser' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້ນີ້', |
| 462 | +'emailpage' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້', |
| 463 | +'emailpagetext' => 'ຖ້າຜູ້ໃຊ້ນີ້ ຂຽນທີ່ຢູ່ອີເມລຢ່າງຖືກຕ້ອງຢູ່ການຕັ້ງຄ່າຂອງລາວ, ຟອມທາງລຸ່ມນີ້ ຈະສົ່ງຂໍ້ຄວາມໜຶ່ງຫາທີ່ຢູ່ອີເມລນັ້ນ. |
| 464 | +ທີ່ຢູ່ອີເມລ ທີ່ທ່ານຂຽນຢູ່ການຕັ້ງຄ່າຂອງທ່ານ, ຈະປະກົດຂຶ້ນ ຢູ່ຊ່ອງ "From" ຂອງ ອີເມລ ເພື່ອໃຫ້ ຜູ້ຮັບສາມາດທຳການຕອບໄດ້.', |
| 465 | +'noemailtitle' => 'ບໍ່ມີ ທີ່ຢູ່ອີເມລ', |
| 466 | +'emailfrom' => 'ຈາກ', |
| 467 | +'emailto' => 'ຫາ', |
| 468 | +'emailsubject' => 'ຫົວເລື້ອງ', |
| 469 | +'emailmessage' => 'ຂໍ້ຄວາມ', |
| 470 | +'emailsend' => 'ສົ່ງ', |
| 471 | +'emailccme' => 'ສົ່ງສຳເນົາ ຂໍ້ຄວາມ ມາໃຫ້ ຂ້ອຍ.', |
| 472 | +'emailccsubject' => 'ສຳເນົາ ຂໍ້ຄວາມທ່ານ ຫາ $1: $2', |
| 473 | +'emailsent' => 'ອີເມລ ໄດ້ຖືກສົ່ງໄປແລ້ວ', |
| 474 | +'emailsenttext' => 'ອີເມລ ຂອງ ທ່ານ ໄດ້ຖືກສົ່ງໄປແລ້ວ.', |
| 475 | + |
| 476 | +# Watchlist |
| 477 | +'watchlist' => 'ລາຍການຕິດຕາມ', |
| 478 | +'mywatchlist' => 'ລາຍການຕິດຕາມຂອງຂ້ອຍ', |
| 479 | +'watchnologin' => 'ບໍ່ໄດ້ເຊັນເຂົ້າ', |
| 480 | +'addedwatch' => 'ເພີ່ມໃສ່ລາຍການຕິດຕາມແລ້ວ', |
| 481 | +'addedwatchtext' => "ໜ້າ \"[[:\$1]]\" ໄດ້ຖືກເພີ່ມໃສ່ [[Special:Watchlist|ລາຍການຕິດຕາມ]] ຂອງ ທ່ານ. |
| 482 | +ການປ່ຽນແປງ ໃນໜ້ານີ້ ແລະ ໜ້າສົນທະນາ ຂອງ ມັນ ຈະຖືກ ສະແດງຢູ່ຫັ້ນ, |
| 483 | +ແລະ ໜ້າ ຈະປະກົດ '''ເຂັ້ມ'''ຂຶ້ນ ໃນ [[Special:Recentchanges|ລາຍການການດັດແກ້ຫຼ້າສຸດ]] ເພື່ອ ໃຫ້ ສາມາດຈຳແນກໄດ້ງ່າຍຂຶ້ນ. |
| 484 | + |
| 485 | +ຖ້າ ທ່ານ ຢາກເອົາມັນອອກ ຈາກ ລາຍການຕິດຕາມ ຂອງ ທ່ານ, ທ່ານ ສາມາດ ກົດ \"ເຊົາຕິດຕາມ\" ຢູ່ ທາງຂ້າງ.", |
| 486 | +'removedwatch' => 'ເອົາອອກຈາກລາຍການຕິດຕາມ', |
| 487 | +'removedwatchtext' => 'ໜ້າ "[[:$1]]" ໄດ້ຖືກເອົາອອກຈາກ ລາຍການຕິດຕາມ ຂອງ ທ່ານ.', |
| 488 | +'watch' => 'ຕິດຕາມ', |
| 489 | +'watchthispage' => 'ຕິດຕາມໜ້ານີ້', |
| 490 | +'unwatch' => 'ເຊົາຕິດຕາມ', |
| 491 | +'watchnochange' => 'ບໍ່ມີໜ້າທີ່ທ່ານຕິດຕາມໃດໆ ຖືກດັດແປງໃນໄລຍະສະແດງຂ້າງເທິງນີ້.', |
| 492 | +'wlheader-showupdated' => "* ບັນດາ ໜ້າ ທີ່ມີການປ່ຽນແປງ ຫຼັງຈາກທີ່ທ່ານ ເຂົ້າຊົມຫຼ້າສຸດ ຈະຖືກສະແດງເປັນ ໂຕໜັງສື '''ເຂັ້ມ'''", |
| 493 | +'wlnote' => 'ຂ້າງລຸ່ມ ແມ່ນ $1 ການປ່ຽນແປງຫຼ້າສຸດ ໃນ <b>$2</b> ຊົ່ວໂມງຫຼ້າສຸດ.', |
| 494 | +'wlshowlast' => 'ສະແດງ $1 ຊົ່ວໂມງຫຼ້າສຸດ $2 ມື້ຫຼ້າສຸດ $3', |
| 495 | +'watchlist-show-bots' => 'ສະແດງການດັດແກ້ ໂດຍ ບອທ໌', |
| 496 | +'watchlist-hide-bots' => 'ເຊື່ອງການດັດແກ້ ໂດຍ ບອທ໌', |
| 497 | +'watchlist-show-own' => 'ສະແດງການດັດແກ້ໂດຍຂ້ອຍ', |
| 498 | +'watchlist-hide-own' => 'ເຊື່ອງການດັດແກ້ ໂດຍ ຂ້ອຍ', |
| 499 | +'watchlist-show-minor' => 'ສະແດງການດັດແກ້ເລັກນ້ອຍ', |
| 500 | +'watchlist-hide-minor' => 'ເຊື່ອງການດັດແກ້ເລັກນ້ອຍ', |
| 501 | + |
| 502 | +# Displayed when you click the "watch" button and it's in the process of watching |
| 503 | +'watching' => 'ພວມຕິດຕາມ...', |
| 504 | + |
| 505 | +'enotif_newpagetext' => 'ນີ້ແມ່ນໜ້າໃໝ່.', |
| 506 | +'changed' => 'ປ່ຽນແລ້ວ', |
| 507 | +'created' => 'ສ້າງແລ້ວ', |
| 508 | +'enotif_lastvisited' => 'ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.', |
| 509 | + |
| 510 | +# Delete/protect/revert |
| 511 | +'confirm' => 'ຢືນຢັນ', |
| 512 | +'confirmdelete' => 'ຢືນຢັນການລຶບ', |
| 513 | +'deletesub' => '(ພວມລຶບ "$1")', |
| 514 | +'actioncomplete' => 'ສຳເລັດ', |
| 515 | +'dellogpage' => 'ບັນທຶກ ການລຶບ', |
| 516 | +'dellogpagetext' => 'ຂ້າງລຸ່ມ ແມ່ນ ລາຍການ ການລຶບຫຼ້າສຸດ.', |
| 517 | +'deletionlog' => 'ບັນທຶກ ການລຶບ', |
| 518 | +'deletecomment' => 'ເຫດຜົນໃນການລຶບ', |
| 519 | +'cantrollback' => 'ບໍ່ສາມາດ ປ່ຽນການດັດແກ້ກັບຄືນໄດ້; ຜູ້ປະກອບສ່ວນຫຼ້າສຸດ ແມ່ນ ຜູ້ຂຽນພຽງຜູ້ດຽວ ຂອງ ໜ້ານີ້.', |
| 520 | +'alreadyrolled' => 'ບໍ່ສາມາດປ່ຽນກັບຄືນ ຫາ ສະບັບຫຼ້າສຸດ ຂອງ [[:$1]] |
| 521 | +ໂດຍ [[User:$2|$2]] ([[User talk:$2|Talk]]); ບາງຄົນ ອາດຈະດັດແກ້ ຫຼື ປ່ຽນກັບຄືນແລ້ວ. |
| 522 | + |
| 523 | +ການດັດແກ້ຫຼ້າສຸດ ແມ່ນ ເຮັດໂດຍ [[User:$3|$3]] ([[User talk:$3|Talk]]).', |
| 524 | +'confirmprotect' => 'ຢືນຢັນ ການປົກປ້ອງ', |
| 525 | + |
| 526 | +# Undelete |
| 527 | +'viewdeletedpage' => 'ເບິ່ງໜ້າທີ່ຖືກລຶບ', |
| 528 | +'cannotundelete' => 'ບໍ່ສາມາດ ກັບຄືນ ຫາສະບັບກ່ອນການລຶບ; ບາງຄົນອາດເຮັດກ່ອນແລ້ວ.', |
| 529 | +'undelete-search-submit' => 'ຊອກຫາ', |
| 530 | + |
| 531 | +# Namespace form on various pages |
| 532 | +'namespace' => 'ຂອບເຂດຊື່:', |
| 533 | + |
| 534 | +# Contributions |
| 535 | +'contributions' => 'ການປະກອບສ່ວນຂອງຜູ້ໃຊ້ນີ້', |
| 536 | +'mycontris' => 'ປະກອບສ່ວນຂອງຂ້ອຍ', |
| 537 | +'contribsub2' => 'ສຳຫຼັບ $1 ($2)', |
| 538 | +'nocontribs' => 'ຍັງບໍ່ມີການປ່ຽນແປງ ໃນນີ້.', |
| 539 | +'year' => 'ແຕ່ປີ (ແລະກ່ອນໜ້ານັ້ນ):', |
| 540 | + |
| 541 | +'sp-contributions-newest' => 'ໃໝ່ສຸດ', |
| 542 | +'sp-contributions-oldest' => 'ເກົ່າສຸດ', |
| 543 | +'sp-contributions-newer' => 'ໃໝ່ກວ່າ $1', |
| 544 | +'sp-contributions-older' => 'ເກົ່າກວ່າ $1', |
| 545 | +'sp-contributions-newbies' => 'ສະແດງສະເພາະ ການປະກອບສ່ວນ ໂດຍ ບັນຊີໃໝ່', |
| 546 | +'sp-contributions-blocklog' => 'ບັນທຶກການຫ້າມ', |
| 547 | +'sp-contributions-search' => 'ຊອກຫາ ການປະກອບສ່ວນ', |
| 548 | +'sp-contributions-username' => 'ທີ່ຢູ່ IP ຫຼື ຊື່ຜູ້ໃຊ້:', |
| 549 | +'sp-contributions-submit' => 'ຊອກຫາ', |
| 550 | + |
| 551 | +# What links here |
| 552 | +'whatlinkshere' => 'ໜ້າທີ່ເຊື່ອມຕໍ່ມາໜ້ານີ້', |
| 553 | +'nolinkshere' => "ບໍ່ມີໜ້າລິ້ງຄ໌ ຫາ '''[[:$1]]'''.", |
| 554 | +'nolinkshere-ns' => "ບໍ່ມີໜ້າລິ້ງຄ໌ ຫາ '''[[:$1]]''' ໃນ ຂອບເຂດຊື່ ທີ່ ທ່ານເລືອກ.", |
| 555 | + |
| 556 | +# Block/unblock |
| 557 | +'blockip' => 'ຫ້າມຜູ້ໃຊ້ນີ້', |
| 558 | +'ipbsubmit' => 'ຫ້າມຜູ້ໃຊ້ນີ້', |
| 559 | +'badipaddress' => 'ທີ່ຢູ່ IP ບໍ່ຖືກຕ້ອງ', |
| 560 | +'blockipsuccesssub' => 'ຫ້າມສຳເລັດ', |
| 561 | +'ipblocklist' => 'ລາຍການ ທີ່ຢູ່ IP ແລະ ຊື່ຜູ້ໃຊ້ ທີ່ຖືກຫ້າມ', |
| 562 | +'blocklistline' => '$1, $2 ຫ້າມ $3 ($4)', |
| 563 | +'blocklink' => 'ຫ້າມ', |
| 564 | +'contribslink' => 'ປະກອບສ່ວນ', |
| 565 | +'autoblocker' => 'ຫ້າມໂດຍອັດຕາໂນມັດ ຍ້ອນ ທີ່ຢູ່ IP ຂອງທ່ານ ຖືກໃຊ້ໂດຍ "[[User:$1|$1]]" ໃນໄລຍະຫຼັງ. ເຫດຜົນໃນການຫ້າມ $1 ແມ່ນ : "$2"', |
| 566 | +'blocklogpage' => 'ບັນທຶກການຫ້າມ', |
| 567 | +'blocklogentry' => 'ໄດ້ຫ້າມ "[[$1]]" ຈົນຮອດ $2 $3', |
| 568 | + |
| 569 | +# Move page |
| 570 | +'newtitle' => 'ຫາ ຫົວຂໍ້ໃໝ່', |
| 571 | +'move-watch' => 'ຕິດຕາມໜ້ານີ້', |
| 572 | +'articleexists' => 'ມີໜ້າຊືນີ້ແລ້ວ, ຫຼື |
| 573 | +ຊື່ ທີ່ທ່ານເລືອກບໍ່ຖືກຕ້ອງ. |
| 574 | +ກະລຸນາເລືອກຊື່ໃໝ່.', |
| 575 | +'talkpagemoved' => 'ໜ້າສົນທະນາ ໄດ້ຖືກຍ້າຍແລ້ວ ເຊັ່ນດຽວກັນ.', |
| 576 | +'1movedto2' => '[[$1]] ຍ້າຍໄປ [[$2]]', |
| 577 | +'1movedto2_redir' => '[[$1]] ຍ້າຍໄປ [[$2]] ທັບ ການໂອນໜ້າ', |
| 578 | +'delete_and_move' => 'ລຶບ ແລະ ຍ້າຍ', |
| 579 | +'delete_and_move_confirm' => 'ແມ່ນແລ້ວ, ລຶບໜ້ານີ້', |
| 580 | +'delete_and_move_reason' => 'ລຶບແລ້ວ ເພື່ອ ຍ້າຍໜ້າອື່ນ ມານີ້', |
| 581 | + |
| 582 | +# Namespace 8 related |
| 583 | +'allmessages' => 'ຂໍ້ຄວາມ ຂອງ ລະບົບ', |
| 584 | +'allmessagesname' => 'ຊື່', |
| 585 | +'allmessagesdefault' => 'ຂໍ້ຄວາມເດີມ', |
| 586 | +'allmessagescurrent' => 'ຂໍ້ຄວາມປະຈຸບັນ', |
| 587 | +'allmessagestext' => 'ນີ້ ແມ່ນ ລາຍການຂໍ້ຄວາມລະບົບ ໃນ MediaWiki namespace.', |
| 588 | +'allmessagesmodified' => 'ສະແດງແຕ່ອັນທີ່ຖືກດັດແປງ', |
| 589 | + |
| 590 | +# Tooltip help for the actions |
| 591 | +'tooltip-pt-mytalk' => 'ໜ້າສົນທະນາຂ້ອຍ', |
| 592 | +'tooltip-ca-addsection' => 'ເພີ່ມ ຄຳເຫັນ ໃສ່ ການສົນທະນານີ້.', |
| 593 | +'tooltip-ca-move' => 'ຍ້າຍໜ້ານີ້', |
| 594 | +'tooltip-search' => 'ຄົ້ນຫາ {{SITENAME}}', |
| 595 | +'tooltip-p-logo' => 'ໜ້າຫຼັກ', |
| 596 | +'tooltip-ca-nstab-category' => 'ເບິ່ງ ໜ້າໝວດ', |
| 597 | + |
| 598 | +# Attribution |
| 599 | +'anonymous' => 'ຜູ້ໃຊ້ ບໍ່ສະແດງຊື່ ຈາກ {{SITENAME}}', |
| 600 | +'and' => 'ແລະ', |
| 601 | + |
| 602 | +# Spam protection |
| 603 | +'subcategorycount' => 'ມີ $1 ໝວດຍ່ອຍ ໃນ ໝວດນີ້.', |
| 604 | +'categoryarticlecount' => 'ມີ $1 ບົດຄວາມ ໃນ ໝວດນີ້.', |
| 605 | +'category-media-count' => 'ມີ $1 ບົດຄວາມ ໃນ ໝວດນີ້.', |
| 606 | + |
| 607 | +# Browsing diffs |
| 608 | +'nextdiff' => 'ສ່ວນຕ່າງຕໍ່ໄປ →', |
| 609 | + |
| 610 | +# Media information |
| 611 | +'imagemaxsize' => 'ກຳນົດຄວາມໃຫຍ່ຂອງ ຮູບ ຫຼື ໜ້າອະທິບາຍຮູບ ບໍ່ໃຫ້ກາຍ:', |
| 612 | +'thumbsize' => 'ຂະໜາດສະແດງ:', |
| 613 | + |
| 614 | +'newimages' => 'ໄຟລ໌ຮູບໃໝ່', |
| 615 | + |
| 616 | +# EXIF tags |
| 617 | +'exif-imagewidth' => 'ຄວາມກ້ວາງ', |
| 618 | +'exif-imagelength' => 'ຄວາມສູງ', |
| 619 | +'exif-imagedescription' => 'ຫົວຂໍ້ຮູບ', |
| 620 | +'exif-artist' => 'ຜູ້ຂຽນ', |
| 621 | +'exif-copyright' => 'ເຈົ້າຂອງລິຂະສິດ', |
| 622 | + |
| 623 | +# 'all' in various places, this might be different for inflected languages |
| 624 | +'recentchangesall' => 'ທັງໝົດ', |
| 625 | +'imagelistall' => 'ທັງໝົດ', |
| 626 | +'namespacesall' => 'ທັງໝົດ', |
| 627 | + |
| 628 | +# E-mail address confirmation |
| 629 | +'confirmemail' => 'ຢືນຢັນ ທີ່ຢູ່ ອີເມລ', |
| 630 | +'confirmemail_noemail' => 'ທ່ານ ບໍ່ໄດ້ຕັ້ງ ທີ່ຢູ່ອີເມລ ທີ່ໃຊ້ໄດ້ ຢູ່ [[Special:Preferences|user preferences]] ຂອງທ່ານ.', |
| 631 | +'confirmemail_pending' => '<div class="error"> |
| 632 | +ລະຫັດຢືນຢັນ ໄດ້ຖືກສົ່ງໄປ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ; ຖ້າ ທ່ານ ຫາກໍ່ສ້າງບັນຊີ |
| 633 | +, ທ່ານ ຄວນຈະລໍຖ້າໜ້ອຍໜຶ່ງ ກ່ອນຈະ ພະຍາຍາມ |
| 634 | +ຂໍລະຫັດຢືນຢັນໃໝ່. |
| 635 | +</div>', |
| 636 | +'confirmemail_send' => 'ສົ່ງ ລະຫັດ ຢືນຢັນ', |
| 637 | +'confirmemail_sent' => 'ອີເມລຢືນຢັນ ໄດ້ຖືກສົ່ງໄປແລ້ວ.', |
| 638 | +'confirmemail_oncreate' => 'ລະຫັດ ຢືນຢັນ ໄດ້ຖືກສົງໄປ ຫາ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານແລ້ວ. |
| 639 | +ລະຫັດດັ່ງກ່າວ ບໍ່ຈຳເປັນ ສຳຫຼັບ ການເຊັນເຂົ້າ, ແຕ່ ທ່ານ ຕ້ອງໃຊ້ມັນ ເພື່ອ ໃຊ້ |
| 640 | +ການບໍລິການຕ່າງໆ ທີ່ ອີງໃສ່ ອີເມລ ຢູ່ ວິກີ.', |
| 641 | +'confirmemail_sendfailed' => 'ບໍ່ສາມາດ ສົ່ງອີເມລ ຢືນຢັນ. ກະລຸນາກວດເບິ່ງວ່າ ມີໂຕໜັງສືບໍ່ຖືກຕ້ອງ ໃນ ທີ່ຢູ່ອີເມລບໍ່. |
| 642 | + |
| 643 | +ອີເມລ ຖືກສົ່ງກັບຄືນ: $1', |
| 644 | +'confirmemail_invalid' => 'ລະຫັດຢືນຢັນ ບໍ່ຖືກຕ້ອງ. ລະຫັດຢືນຢັນ ອາດຈະກາຍກຳນົດເວລາແລ້ວ.', |
| 645 | +'confirmemail_needlogin' => 'ທ່ານ ຈະຕ້ອງ $1 ເພື່ອ ຢືນຢັນ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ.', |
| 646 | +'confirmemail_success' => 'ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ ໄດ້ຮັບການຢືນຢັນແລ້ວ. ທ່ານ ສາມາດ ເຊັນເຂົ້າ ແລະ ມ່ວນຊື່ນກັບ ວີກີ ໄດ້.', |
| 647 | +'confirmemail_loggedin' => 'ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານໄດ້ຖືກຢືນຢັນແລ້ວ.', |
| 648 | +'confirmemail_error' => 'ມີອັນໃດອັນໜຶ່ງຜິດພາດ ໃນ ເວລາບັນທຶກ ການຢືນຢັນຂອງທ່ານ.', |
| 649 | +'confirmemail_subject' => '{{SITENAME}} ຢືນຢັນ ທີ່ຢູ່ ອີເມລ', |
| 650 | +'confirmemail_body' => 'ຜູ້ໃດຜູ້ໜຶ່ງ, ຈາກ ທີ່ຢູ່ IP $1 ຫຼື ອາດຈະແມ່ນ ທ່ານເອງ ໄດ້ທຳການ ຈົດທະບຽນ |
| 651 | +ບັນຊີ "$2" ໂດຍ ທີ່ຢູ່ ອີເມລນີ້ ຢູ່ {{SITENAME}}. |
| 652 | + |
| 653 | +Someone, probably you from IP address $1, has registered an |
| 654 | +account "$2" with this e-mail address on {{SITENAME}}. |
| 655 | + |
| 656 | +ເພື່ອ ຈະຢືນຢັນ ວ່າ ທີ່ຢູ່ ອີເມລນີ້ ແມ່ນ ຂອງ ທ່ານແທ້ ແລະ ເປີດນຳໃຊ້ສິ່ງ ທີ່ ຈຳເປັນ ຕ້ອງ |
| 657 | +ມີ ອີເມລ ຢູ່ {{SITENAME}}, ກະລຸນາ ກົດ ລິ້ງຄ໌ ຕໍ່ໄປນີ້: |
| 658 | + |
| 659 | +$3 |
| 660 | + |
| 661 | +To confirm that this account really does belong to you and activate |
| 662 | +e-mail features on {{SITENAME}}, open this link in your browser: |
| 663 | + |
| 664 | +$3 |
| 665 | + |
| 666 | +ຖ້າ ທ່ານ ບໍ່ໄດ້ທຳການ ຈົດທະບຽນນີ້, ຢ່າ ກົດລິ້ງຄ໌ນີ້. ລະຫັດລິ້ງຄ໌ນີ້ ຈະໝົດ ຜົນບັງຄັບ ໃນ $4. |
| 667 | + |
| 668 | +If this is *not* you, don\'t follow the link. This confirmation code |
| 669 | +will expire at $4.', |
| 670 | + |
| 671 | +# Inputbox extension, may be useful in other contexts as well |
| 672 | +'createarticle' => 'ສ້າງບົດຄວາມ', |
| 673 | + |
| 674 | +# action=purge |
| 675 | +'confirm_purge_button' => 'ຕົກລົງ', |
| 676 | + |
| 677 | +'youhavenewmessagesmulti' => 'ທ່ານມີຂໍ້ຄວາມໃໝ່ ຢູ່ $1', |
| 678 | + |
| 679 | +'searchcontaining' => "ຊອກຫາ ບົດຄວາມ ທີ່ປະກອບມີ ''$1''.", |
| 680 | +'searchnamed' => "ຊອກຫາ ບົດຄວາມ ຊື່ ''$1''.", |
| 681 | +'articletitles' => "ບົດຄວາມ ເລີ່ມດ້ວຍ ''$1''", |
| 682 | + |
| 683 | +# Multipage image navigation |
| 684 | +'imgmultigo' => 'ໄປ!', |
| 685 | +'imgmultigotopre' => 'ໄປ ຫາ ໜ້າ', |
| 686 | + |
| 687 | +# Auto-summaries |
| 688 | +'autosumm-blank' => 'ພວມລຶບ ທຸກໆເນື້ອໃນ ຈາກ ໜ້ານີ້', |
| 689 | +'autosumm-replace' => "ປ່ຽນ ໜ້ານີ້ ໂດຍ '$1'", |
| 690 | +'autoredircomment' => 'ພວມໂອນໄປ ຫາ [[$1]]', |
| 691 | +'autosumm-new' => 'ໜ້າໃໝ່: $1', |
| 692 | + |
| 693 | +); |
Index: branches/liquidthreads/languages/messages/MessagesEn.php |
— | — | @@ -771,7 +771,7 @@ |
772 | 772 | 'filedeleteerror' => 'Could not delete file "$1".', |
773 | 773 | 'directorycreateerror' => 'Could not create directory "$1".', |
774 | 774 | 'filenotfound' => 'Could not find file "$1".', |
775 | | -'fileexists' => 'Unable to write to file "$1": file exists', |
| 775 | +'fileexistserror' => 'Unable to write to file "$1": file exists', |
776 | 776 | 'unexpected' => 'Unexpected value: "$1"="$2".', |
777 | 777 | 'formerror' => 'Error: could not submit form', |
778 | 778 | 'badarticleerror' => 'This action cannot be performed on this page.', |
— | — | @@ -1443,14 +1443,17 @@ |
1444 | 1444 | 'imgdelete' => 'del', |
1445 | 1445 | 'imgdesc' => 'desc', |
1446 | 1446 | 'imgfile' => 'file', |
1447 | | -'imglegend' => 'Legend: (desc) = show/edit file description.', |
1448 | | -'imghistory' => 'File history', |
1449 | | -'revertimg' => 'rev', |
1450 | | -'deleteimg' => 'del', |
1451 | | -'deleteimgcompletely' => 'Delete all revisions of this file', |
1452 | | -'imghistlegend' => 'Legend: (cur) = this is the current file, (del) = delete |
1453 | | -this old version, (rev) = revert to this old version. |
1454 | | -<br /><i>Click on date to see the file uploaded on that date</i>.', |
| 1447 | +'filehist' => 'File history', |
| 1448 | +'filehist-help' => 'Click on a date/time to view the file as it appeared at that time.', |
| 1449 | +'filehist-deleteall' => 'delete all', |
| 1450 | +'filehist-deleteone' => 'delete this', |
| 1451 | +'filehist-revert' => 'revert', |
| 1452 | +'filehist-current' => 'current', |
| 1453 | +'filehist-datetime' => 'Date/Time', |
| 1454 | +'filehist-user' => 'User', |
| 1455 | +'filehist-dimensions' => 'Dimensions', |
| 1456 | +'filehist-filesize' => 'File size', |
| 1457 | +'filehist-comment' => 'Comment', |
1455 | 1458 | 'imagelinks' => 'Links', |
1456 | 1459 | 'linkstoimage' => 'The following pages link to this file:', |
1457 | 1460 | 'nolinkstoimage' => 'There are no pages that link to this file.', |
— | — | @@ -1468,6 +1471,16 @@ |
1469 | 1472 | 'imagelist_description' => 'Description', |
1470 | 1473 | 'imagelist_search_for' => 'Search for image name:', |
1471 | 1474 | |
| 1475 | +# File reversion |
| 1476 | +'filerevert' => 'Revert $1', |
| 1477 | +'filerevert-legend' => 'Revert file', |
| 1478 | +'filerevert-intro' => "<span class=\"plainlinks\">You are reverting '''[[Media:$1|$1]]''' to the [$4 version as of $2, $3].</span>", |
| 1479 | +'filerevert-comment' => 'Comment:', |
| 1480 | +'filerevert-defaultcomment' => 'Reverted to version as of $1, $2', |
| 1481 | +'filerevert-submit' => 'Revert', |
| 1482 | +'filerevert-success' => "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' has been reverted to the [$4 version as of $2, $3].</span>", |
| 1483 | +'filerevert-badversion' => 'There is no previous local version of this file with the provided timestamp.', |
| 1484 | + |
1472 | 1485 | # MIME search |
1473 | 1486 | 'mimesearch' => 'MIME search', |
1474 | 1487 | 'mimesearch-summary' => 'This page enables the filtering of files for its MIME-type. Input: contenttype/subtype, e.g. <tt>image/jpeg</tt>.', |
— | — | @@ -1794,7 +1807,6 @@ |
1795 | 1808 | 'deletionlog' => 'deletion log', |
1796 | 1809 | 'reverted' => 'Reverted to earlier revision', |
1797 | 1810 | 'deletecomment' => 'Reason for deletion', |
1798 | | -'imagereverted' => 'Revert to earlier version was successful.', |
1799 | 1811 | 'rollback' => 'Roll back edits', |
1800 | 1812 | 'rollback_short' => 'Rollback', |
1801 | 1813 | 'rollbacklink' => 'rollback', |
Index: branches/liquidthreads/includes/Title.php |
— | — | @@ -2126,7 +2126,7 @@ |
2127 | 2127 | * be a redirect |
2128 | 2128 | */ |
2129 | 2129 | private function moveOverExistingRedirect( &$nt, $reason = '' ) { |
2130 | | - global $wgUseSquid; |
| 2130 | + global $wgUseSquid, $wgContLang; |
2131 | 2131 | $fname = 'Title::moveOverExistingRedirect'; |
2132 | 2132 | $comment = wfMsgForContent( '1movedto2_redir', $this->getPrefixedText(), $nt->getPrefixedText() ); |
2133 | 2133 | |
— | — | @@ -2156,6 +2156,7 @@ |
2157 | 2157 | 'page_touched' => $dbw->timestamp($now), |
2158 | 2158 | 'page_namespace' => $nt->getNamespace(), |
2159 | 2159 | 'page_title' => $nt->getDBkey(), |
| 2160 | + 'page_key' => $wgContLang->caseFold($nt->getDBkey()), |
2160 | 2161 | 'page_latest' => $nullRevId, |
2161 | 2162 | ), |
2162 | 2163 | /* WHERE */ array( 'page_id' => $oldid ), |
— | — | @@ -2203,7 +2204,7 @@ |
2204 | 2205 | * @param Title &$nt the new Title |
2205 | 2206 | */ |
2206 | 2207 | private function moveToNewTitle( &$nt, $reason = '' ) { |
2207 | | - global $wgUseSquid; |
| 2208 | + global $wgUseSquid, $wgContLang; |
2208 | 2209 | $fname = 'MovePageForm::moveToNewTitle'; |
2209 | 2210 | $comment = wfMsgForContent( '1movedto2', $this->getPrefixedText(), $nt->getPrefixedText() ); |
2210 | 2211 | if ( $reason ) { |
— | — | @@ -2226,6 +2227,7 @@ |
2227 | 2228 | 'page_touched' => $now, |
2228 | 2229 | 'page_namespace' => $nt->getNamespace(), |
2229 | 2230 | 'page_title' => $nt->getDBkey(), |
| 2231 | + 'page_key' => $wgContLang->caseFold($nt->getDBkey()), |
2230 | 2232 | 'page_latest' => $nullRevId, |
2231 | 2233 | ), |
2232 | 2234 | /* WHERE */ array( 'page_id' => $oldid ), |
Index: branches/liquidthreads/includes/ImagePage.php |
— | — | @@ -105,7 +105,7 @@ |
106 | 106 | global $wgLang; |
107 | 107 | $r = '<ul id="filetoc"> |
108 | 108 | <li><a href="#file">' . $wgLang->getNsText( NS_IMAGE ) . '</a></li> |
109 | | - <li><a href="#filehistory">' . wfMsgHtml( 'imghistory' ) . '</a></li> |
| 109 | + <li><a href="#filehistory">' . wfMsgHtml( 'filehist' ) . '</a></li> |
110 | 110 | <li><a href="#filelinks">' . wfMsgHtml( 'imagelinks' ) . '</a></li>' . |
111 | 111 | ($metadata ? ' <li><a href="#metadata">' . wfMsgHtml( 'metadata' ) . '</a></li>' : '') . ' |
112 | 112 | </ul>'; |
— | — | @@ -554,7 +554,7 @@ |
555 | 555 | $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) ); |
556 | 556 | return; |
557 | 557 | } |
558 | | - if ( strstr( $oldimage, "/" ) || strstr( $oldimage, "\\" ) ) { |
| 558 | + if( strpos( $oldimage, '/' ) !== false || strpos( $oldimage, '\\' ) !== false ) { |
559 | 559 | $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) ); |
560 | 560 | return; |
561 | 561 | } |
— | — | @@ -610,56 +610,12 @@ |
611 | 611 | return $status; |
612 | 612 | } |
613 | 613 | |
| 614 | + /** |
| 615 | + * Revert the file to an earlier version |
| 616 | + */ |
614 | 617 | function revert() { |
615 | | - global $wgOut, $wgRequest, $wgUser; |
616 | | - |
617 | | - $oldimage = $wgRequest->getText( 'oldimage' ); |
618 | | - if ( strlen( $oldimage ) < 16 ) { |
619 | | - $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) ); |
620 | | - return; |
621 | | - } |
622 | | - if ( strstr( $oldimage, "/" ) || strstr( $oldimage, "\\" ) ) { |
623 | | - $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) ); |
624 | | - return; |
625 | | - } |
626 | | - |
627 | | - if ( wfReadOnly() ) { |
628 | | - $wgOut->readOnlyPage(); |
629 | | - return; |
630 | | - } |
631 | | - if( $wgUser->isAnon() ) { |
632 | | - $wgOut->showErrorPage( 'uploadnologin', 'uploadnologintext' ); |
633 | | - return; |
634 | | - } |
635 | | - if ( ! $this->mTitle->userCan( 'edit' ) ) { |
636 | | - $wgOut->readOnlyPage( $this->getContent(), true ); |
637 | | - return; |
638 | | - } |
639 | | - if ( $wgUser->isBlocked() ) { |
640 | | - $wgOut->blockedPage(); |
641 | | - return; |
642 | | - } |
643 | | - if( !$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ), $oldimage ) ) { |
644 | | - $wgOut->showErrorPage( 'internalerror', 'sessionfailure' ); |
645 | | - return; |
646 | | - } |
647 | | - |
648 | | - $sourcePath = $this->img->getArchiveVirtualUrl( $oldimage ); |
649 | | - $comment = wfMsg( "reverted" ); |
650 | | - // TODO: preserve file properties from DB instead of reloading from file |
651 | | - $status = $this->img->upload( $sourcePath, $comment, $comment ); |
652 | | - |
653 | | - if ( !$status->isGood() ) { |
654 | | - $this->showError( $status->getWikiText() ); |
655 | | - return; |
656 | | - } |
657 | | - |
658 | | - $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) ); |
659 | | - $wgOut->setRobotpolicy( 'noindex,nofollow' ); |
660 | | - $wgOut->addHTML( wfMsg( 'imagereverted' ) ); |
661 | | - |
662 | | - $descTitle = $this->img->getTitle(); |
663 | | - $wgOut->returnToMain( false, $descTitle->getPrefixedText() ); |
| 618 | + $reverter = new FileRevertForm( $this->img ); |
| 619 | + $reverter->execute(); |
664 | 620 | } |
665 | 621 | |
666 | 622 | /** |
— | — | @@ -693,85 +649,109 @@ |
694 | 650 | } |
695 | 651 | |
696 | 652 | /** |
697 | | - * @todo document |
| 653 | + * Builds the image revision log shown on image pages |
| 654 | + * |
698 | 655 | * @addtogroup Media |
699 | 656 | */ |
700 | 657 | class ImageHistoryList { |
701 | | - var $img, $skin; |
702 | | - function ImageHistoryList( $skin, $img ) { |
| 658 | + |
| 659 | + protected $img, $skin, $title; |
| 660 | + |
| 661 | + public function __construct( $skin, $img ) { |
703 | 662 | $this->skin = $skin; |
704 | 663 | $this->img = $img; |
| 664 | + $this->title = $img->getTitle(); |
705 | 665 | } |
706 | 666 | |
707 | | - function beginImageHistoryList() { |
708 | | - $s = "\n" . |
709 | | - Xml::element( 'h2', array( 'id' => 'filehistory' ), wfMsg( 'imghistory' ) ) . |
710 | | - "\n<p>" . wfMsg( 'imghistlegend' ) . "</p>\n".'<ul class="special">'; |
711 | | - return $s; |
| 667 | + public function beginImageHistoryList() { |
| 668 | + global $wgOut, $wgUser; |
| 669 | + return Xml::element( 'h2', array( 'id' => 'filehistory' ), wfMsg( 'filehist' ) ) |
| 670 | + . $wgOut->parse( wfMsgNoTrans( 'filehist-help' ) ) |
| 671 | + . Xml::openElement( 'table', array( 'class' => 'filehistory' ) ) . "\n" |
| 672 | + . '<tr><td></td>' |
| 673 | + . ( $this->img->isLocal() && $wgUser->isAllowed( 'delete' ) ? '<td></td>' : '' ) |
| 674 | + . '<th>' . wfMsgHtml( 'filehist-datetime' ) . '</th>' |
| 675 | + . '<th>' . wfMsgHtml( 'filehist-user' ) . '</th>' |
| 676 | + . '<th>' . wfMsgHtml( 'filehist-dimensions' ) . '</th>' |
| 677 | + . '<th class="mw-imagepage-filesize">' . wfMsgHtml( 'filehist-filesize' ) . '</th>' |
| 678 | + . '<th>' . wfMsgHtml( 'filehist-comment' ) . '</th>' |
| 679 | + . "</tr>\n"; |
712 | 680 | } |
713 | 681 | |
714 | | - function endImageHistoryList() { |
715 | | - $s = "</ul>\n"; |
716 | | - return $s; |
| 682 | + public function endImageHistoryList() { |
| 683 | + return "</table>\n"; |
717 | 684 | } |
718 | 685 | |
719 | | - function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description, $width, $height ) { |
| 686 | + public function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description, $width, $height ) { |
720 | 687 | global $wgUser, $wgLang, $wgTitle, $wgContLang; |
721 | | - |
722 | | - $datetime = $wgLang->timeanddate( $timestamp, true ); |
723 | | - $del = wfMsgHtml( 'deleteimg' ); |
724 | | - $delall = wfMsgHtml( 'deleteimgcompletely' ); |
725 | | - $cur = wfMsgHtml( 'cur' ); |
726 | 688 | $local = $this->img->isLocal(); |
| 689 | + $row = ''; |
727 | 690 | |
728 | | - if ( $iscur ) { |
729 | | - $url = htmlspecialchars( $this->img->getURL() ); |
730 | | - $rlink = $cur; |
731 | | - if ( $local && $wgUser->isAllowed('delete') ) { |
732 | | - $link = $wgTitle->escapeLocalURL( 'image=' . $wgTitle->getPartialURL() . |
733 | | - '&action=delete' ); |
734 | | - $style = $this->skin->getInternalLinkAttributes( $link, $delall ); |
| 691 | + // Deletion link |
| 692 | + if( $local && $wgUser->isAllowed( 'delete' ) ) { |
| 693 | + $row .= '<td>'; |
| 694 | + $q = array(); |
| 695 | + $q[] = 'action=delete'; |
| 696 | + $q[] = ( $iscur ? 'image=' . $this->title->getPartialUrl() : 'oldimage=' . urlencode( $img ) ); |
| 697 | + if( !$iscur ) |
| 698 | + $q[] = 'wpEditToken=' . urlencode( $wgUser->editToken( $img ) ); |
| 699 | + $row .= '(' . $this->skin->makeKnownLinkObj( |
| 700 | + $this->title, |
| 701 | + wfMsgHtml( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' ), |
| 702 | + implode( '&', $q ) |
| 703 | + ) . ')'; |
| 704 | + $row .= '</td>'; |
| 705 | + } |
735 | 706 | |
736 | | - $dlink = '<a href="'.$link.'"'.$style.'>'.$delall.'</a>'; |
737 | | - } else { |
738 | | - $dlink = $del; |
739 | | - } |
740 | | - } else { |
741 | | - $url = htmlspecialchars( $this->img->getArchiveUrl( $img ) ); |
742 | | - if( $local && $wgUser->getID() != 0 && $wgTitle->userCan( 'edit' ) ) { |
743 | | - $token = urlencode( $wgUser->editToken( $img ) ); |
744 | | - $rlink = $this->skin->makeKnownLinkObj( $wgTitle, |
745 | | - wfMsgHtml( 'revertimg' ), 'action=revert&oldimage=' . |
746 | | - urlencode( $img ) . "&wpEditToken=$token" ); |
747 | | - $dlink = $this->skin->makeKnownLinkObj( $wgTitle, |
748 | | - $del, 'action=delete&oldimage=' . urlencode( $img ) . |
749 | | - "&wpEditToken=$token" ); |
750 | | - } else { |
751 | | - # Having live active links for non-logged in users |
752 | | - # means that bots and spiders crawling our site can |
753 | | - # inadvertently change content. Baaaad idea. |
754 | | - $rlink = wfMsgHtml( 'revertimg' ); |
755 | | - $dlink = $del; |
756 | | - } |
| 707 | + // Reversion link/current indicator |
| 708 | + $row .= '<td>'; |
| 709 | + if( $iscur ) { |
| 710 | + $row .= '(' . wfMsgHtml( 'filehist-current' ) . ')'; |
| 711 | + } elseif( $local && $wgUser->isLoggedIn() && $this->title->userCan( 'edit' ) ) { |
| 712 | + $q = array(); |
| 713 | + $q[] = 'action=revert'; |
| 714 | + $q[] = 'oldimage=' . urlencode( $img ); |
| 715 | + $q[] = 'wpEditToken=' . urlencode( $wgUser->editToken( $img ) ); |
| 716 | + $row .= '(' . $this->skin->makeKnownLinkObj( |
| 717 | + $this->title, |
| 718 | + wfMsgHtml( 'filehist-revert' ), |
| 719 | + implode( '&', $q ) |
| 720 | + ) . ')'; |
757 | 721 | } |
| 722 | + $row .= '</td>'; |
758 | 723 | |
759 | | - if ( $local ) { |
760 | | - $userlink = $this->skin->userLink( $user, $usertext ) . $this->skin->userToolLinks( $user, $usertext ); |
| 724 | + // Date/time and image link |
| 725 | + $row .= '<td>'; |
| 726 | + $url = $iscur ? $this->img->getUrl() : $this->img->getArchiveUrl( $img ); |
| 727 | + $row .= Xml::element( |
| 728 | + 'a', |
| 729 | + array( 'href' => $url ), |
| 730 | + $wgLang->timeAndDate( $timestamp, true ) |
| 731 | + ); |
| 732 | + $row .= '</td>'; |
| 733 | + |
| 734 | + // Uploading user |
| 735 | + $row .= '<td>'; |
| 736 | + if( $local ) { |
| 737 | + $row .= $this->skin->userLink( $user, $usertext ) . $this->skin->userToolLinks( $user, $usertext ); |
761 | 738 | } else { |
762 | | - $userlink = htmlspecialchars( $usertext ); |
| 739 | + $row .= htmlspecialchars( $usertext ); |
763 | 740 | } |
764 | | - $nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), |
765 | | - $wgLang->formatNum( $size ) ); |
766 | | - $widthheight = wfMsgHtml( 'widthheight', $width, $height ); |
767 | | - $style = $this->skin->getInternalLinkAttributes( $url, $datetime ); |
| 741 | + $row .= '</td>'; |
768 | 742 | |
769 | | - $s = "<li> ({$dlink}) ({$rlink}) <a href=\"{$url}\"{$style}>{$datetime}</a> . . {$userlink} . . {$widthheight} ({$nbytes})"; |
| 743 | + // Image dimensions |
| 744 | + // FIXME: It would be nice to show the duration (sound files) or |
| 745 | + // width/height/duration (video files) here, but this needs some |
| 746 | + // additional media handler work |
| 747 | + $row .= '<td>' . wfMsgHtml( 'widthheight', $width, $height ) . '</td>'; |
770 | 748 | |
771 | | - $s .= $this->skin->commentBlock( $description, $wgTitle ); |
772 | | - $s .= "</li>\n"; |
773 | | - return $s; |
774 | | - } |
775 | | -} |
| 749 | + // File size |
| 750 | + $row .= '<td class="mw-imagepage-filesize">' . $this->skin->formatSize( $size ) . '</td>'; |
776 | 751 | |
| 752 | + // Comment |
| 753 | + $row .= '<td>' . $this->skin->formatComment( $description, $this->title ) . '</td>'; |
777 | 754 | |
| 755 | + return "<tr>{$row}</tr>\n"; |
| 756 | + } |
778 | 757 | |
| 758 | +} |
\ No newline at end of file |
Index: branches/liquidthreads/includes/DatabasePostgres.php |
— | — | @@ -105,6 +105,9 @@ |
106 | 106 | function searchableIPs() { |
107 | 107 | return true; |
108 | 108 | } |
| 109 | + function functionalIndexes() { |
| 110 | + return true; |
| 111 | + } |
109 | 112 | |
110 | 113 | static function newFromParams( $server, $user, $password, $dbName, $failFunction = false, $flags = 0) |
111 | 114 | { |
Index: branches/liquidthreads/includes/Article.php |
— | — | @@ -262,6 +262,7 @@ |
263 | 263 | 'page_id', |
264 | 264 | 'page_namespace', |
265 | 265 | 'page_title', |
| 266 | + 'page_key', |
266 | 267 | 'page_restrictions', |
267 | 268 | 'page_counter', |
268 | 269 | 'page_is_redirect', |
— | — | @@ -1001,6 +1002,7 @@ |
1002 | 1003 | * @private |
1003 | 1004 | */ |
1004 | 1005 | function insertOn( $dbw ) { |
| 1006 | + global $wgContLang; |
1005 | 1007 | wfProfileIn( __METHOD__ ); |
1006 | 1008 | |
1007 | 1009 | $page_id = $dbw->nextSequenceValue( 'page_page_id_seq' ); |
— | — | @@ -1008,6 +1010,7 @@ |
1009 | 1011 | 'page_id' => $page_id, |
1010 | 1012 | 'page_namespace' => $this->mTitle->getNamespace(), |
1011 | 1013 | 'page_title' => $this->mTitle->getDBkey(), |
| 1014 | + 'page_key' => $wgContLang->caseFold($this->mTitle->getDBkey()), |
1012 | 1015 | 'page_counter' => 0, |
1013 | 1016 | 'page_restrictions' => '', |
1014 | 1017 | 'page_is_redirect' => 0, # Will set this shortly... |
Index: branches/liquidthreads/includes/filerepo/FSRepo.php |
— | — | @@ -166,10 +166,10 @@ |
167 | 167 | $hashSource = sha1_file( $srcPath ); |
168 | 168 | $hashDest = sha1_file( $dstPath ); |
169 | 169 | if ( $hashSource != $hashDest ) { |
170 | | - $status->fatal( 'fileexists', $dstPath ); |
| 170 | + $status->fatal( 'fileexistserror', $dstPath ); |
171 | 171 | } |
172 | 172 | } else { |
173 | | - $status->fatal( 'fileexists', $dstPath ); |
| 173 | + $status->fatal( 'fileexistserror', $dstPath ); |
174 | 174 | } |
175 | 175 | } |
176 | 176 | } |
Index: branches/liquidthreads/includes/filerepo/File.php |
— | — | @@ -975,7 +975,8 @@ |
976 | 976 | } |
977 | 977 | |
978 | 978 | /** |
979 | | - * Get the 14-character timestamp of the file upload, or false if |
| 979 | + * Get the 14-character timestamp of the file upload, or false if |
| 980 | + * it doesn't exist |
980 | 981 | */ |
981 | 982 | function getTimestamp() { |
982 | 983 | $path = $this->getPath(); |
Index: branches/liquidthreads/includes/media/Bitmap.php |
— | — | @@ -274,11 +274,11 @@ |
275 | 275 | // Sort fields into visible and collapsed |
276 | 276 | $visibleFields = $this->visibleMetadataFields(); |
277 | 277 | foreach ( $formatted as $name => $value ) { |
278 | | - $tag = strtolower( $k ); |
| 278 | + $tag = strtolower( $name ); |
279 | 279 | self::addMeta( $result, |
280 | 280 | in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed', |
281 | 281 | 'exif', |
282 | | - "exif-$tag", |
| 282 | + $tag, |
283 | 283 | $value |
284 | 284 | ); |
285 | 285 | } |
Index: branches/liquidthreads/includes/media/BMP.php |
— | — | @@ -1,8 +1,8 @@ |
2 | 2 | <?php |
| 3 | + |
3 | 4 | /** |
4 | | - * Handler for Microsoft bitmap format (bmp). It inherits most of the methods |
5 | | - * from ImageHandler, some of them had to be overriden cause gd does not |
6 | | - * support this format. |
| 5 | + * Handler for Microsoft's bitmap format; getimagesize() doesn't |
| 6 | + * support these files |
7 | 7 | * |
8 | 8 | * @addtogroup Media |
9 | 9 | */ |
— | — | @@ -26,6 +26,4 @@ |
27 | 27 | $h = unpack( 'V' , $h ); |
28 | 28 | return array( $w[1], $h[1] ); |
29 | 29 | } |
30 | | -} |
31 | | - |
32 | | - |
| 30 | +} |
\ No newline at end of file |
Index: branches/liquidthreads/includes/Database.php |
— | — | @@ -448,6 +448,13 @@ |
449 | 449 | return false; |
450 | 450 | } |
451 | 451 | |
| 452 | + /** |
| 453 | + * Returns true if this database can use functional indexes |
| 454 | + */ |
| 455 | + function functionalIndexes() { |
| 456 | + return false; |
| 457 | + } |
| 458 | + |
452 | 459 | /**#@+ |
453 | 460 | * Get function |
454 | 461 | */ |
Index: branches/liquidthreads/includes/api/ApiQueryAllpages.php |
— | — | @@ -63,7 +63,7 @@ |
64 | 64 | if (!is_null($params['from'])) |
65 | 65 | $this->addWhere('page_title>=' . $db->addQuotes(ApiQueryBase :: titleToKey($params['from']))); |
66 | 66 | if (isset ($params['prefix'])) |
67 | | - $this->addWhere("page_title LIKE '" . $db->strencode(ApiQueryBase :: titleToKey($params['prefix'])) . "%'"); |
| 67 | + $this->addWhere("page_title LIKE '" . $db->escapeLike(ApiQueryBase :: titleToKey($params['prefix'])) . "%'"); |
68 | 68 | |
69 | 69 | if (is_null($resultPageSet)) { |
70 | 70 | $this->addFields(array ( |
Index: branches/liquidthreads/includes/api/ApiQueryImageInfo.php |
— | — | @@ -71,8 +71,11 @@ |
72 | 72 | |
73 | 73 | if ($fld_timestamp) |
74 | 74 | $vals['timestamp'] = wfTimestamp(TS_ISO_8601, $line->img_timestamp); |
75 | | - if ($fld_user) |
| 75 | + if ($fld_user) { |
76 | 76 | $vals['user'] = $line->img_user_text; |
| 77 | + if(!$line->img_user) |
| 78 | + $vals['anon'] = ''; |
| 79 | + } |
77 | 80 | if ($fld_size) { |
78 | 81 | $vals['size'] = $line->img_size; |
79 | 82 | $vals['width'] = $line->img_width; |
Index: branches/liquidthreads/includes/api/ApiQueryBase.php |
— | — | @@ -52,11 +52,16 @@ |
53 | 53 | $this->options = array (); |
54 | 54 | } |
55 | 55 | |
56 | | - protected function addTables($value) { |
57 | | - if (is_array($value)) |
58 | | - $this->tables = array_merge($this->tables, $value); |
59 | | - else |
60 | | - $this->tables[] = $value; |
| 56 | + protected function addTables($tables, $alias = null) { |
| 57 | + if (is_array($tables)) { |
| 58 | + if (!is_null($alias)) |
| 59 | + ApiBase :: dieDebug(__METHOD__, 'Multiple table aliases not supported'); |
| 60 | + $this->tables = array_merge($this->tables, $tables); |
| 61 | + } else { |
| 62 | + if (!is_null($alias)) |
| 63 | + $tables = $this->getDB()->tableName($tables) . ' ' . $alias; |
| 64 | + $this->tables[] = $tables; |
| 65 | + } |
61 | 66 | } |
62 | 67 | |
63 | 68 | protected function addFields($value) { |
Index: branches/liquidthreads/includes/api/ApiQueryRevisions.php |
— | — | @@ -219,7 +219,6 @@ |
220 | 220 | |
221 | 221 | if ($this->fld_ids) { |
222 | 222 | $vals['revid'] = intval($row->rev_id); |
223 | | - $vals['pageid'] = intval($row->rev_page); |
224 | 223 | // $vals['oldid'] = intval($row->rev_text_id); // todo: should this be exposed? |
225 | 224 | } |
226 | 225 | |
Index: branches/liquidthreads/includes/api/ApiQueryAllUsers.php |
— | — | @@ -5,7 +5,7 @@ |
6 | 6 | * |
7 | 7 | * API for MediaWiki 1.8+ |
8 | 8 | * |
9 | | - * Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com |
| 9 | + * Copyright (C) 2007 Yuri Astrakhan <Firstname><Lastname>@gmail.com |
10 | 10 | * |
11 | 11 | * This program is free software; you can redistribute it and/or modify |
12 | 12 | * it under the terms of the GNU General Public License as published by |
— | — | @@ -47,42 +47,107 @@ |
48 | 48 | if (!is_null($prop)) { |
49 | 49 | $prop = array_flip($prop); |
50 | 50 | $fld_editcount = isset($prop['editcount']); |
| 51 | + $fld_groups = isset($prop['groups']); |
51 | 52 | } else { |
52 | | - $fld_editcount = false; |
| 53 | + $fld_editcount = $fld_groups = false; |
53 | 54 | } |
54 | 55 | |
55 | | - $this->addTables('user'); |
| 56 | + $limit = $params['limit']; |
| 57 | + $tables = $db->tableName('user'); |
56 | 58 | |
57 | 59 | if (!is_null($params['from'])) |
58 | 60 | $this->addWhere('user_name>=' . $db->addQuotes(ApiQueryBase :: titleToKey($params['from']))); |
59 | 61 | |
| 62 | + if (isset($params['prefix'])) |
| 63 | + $this->addWhere("user_name LIKE '" . $db->escapeLike(ApiQueryBase :: titleToKey($params['prefix'])) . "%'"); |
| 64 | + |
| 65 | + if (!is_null($params['group'])) { |
| 66 | + // Filter only users that belong to a given group |
| 67 | + $tblName = $db->tableName('user_groups'); |
| 68 | + $tables = "$tables INNER JOIN $tblName ug1 ON ug1.ug_user=user_id"; |
| 69 | + $this->addWhereFld('ug1.ug_group', $params['group']); |
| 70 | + } |
| 71 | + |
| 72 | + if ($fld_groups) { |
| 73 | + // Show the groups the given users belong to |
| 74 | + // request more than needed to avoid not getting all rows that belong to one user |
| 75 | + $groupCount = count(User::getAllGroups()); |
| 76 | + $sqlLimit = $limit+$groupCount+1; |
| 77 | + |
| 78 | + $tblName = $db->tableName('user_groups'); |
| 79 | + $tables = "$tables LEFT JOIN $tblName ug2 ON ug2.ug_user=user_id"; |
| 80 | + $this->addFields('ug2.ug_group ug_group2'); |
| 81 | + } else { |
| 82 | + $sqlLimit = $limit+1; |
| 83 | + } |
| 84 | + |
| 85 | + $this->addOption('LIMIT', $sqlLimit); |
| 86 | + $this->addTables($tables); |
| 87 | + |
60 | 88 | $this->addFields('user_name'); |
61 | 89 | $this->addFieldsIf('user_editcount', $fld_editcount); |
62 | 90 | |
63 | | - $limit = $params['limit']; |
64 | | - $this->addOption('LIMIT', $limit+1); |
65 | 91 | $this->addOption('ORDER BY', 'user_name'); |
66 | 92 | |
67 | 93 | $res = $this->select(__METHOD__); |
68 | 94 | |
69 | 95 | $data = array (); |
70 | 96 | $count = 0; |
71 | | - while ($row = $db->fetchObject($res)) { |
72 | | - if (++ $count > $limit) { |
73 | | - // We've reached the one extra which shows that there are additional pages to be had. Stop here... |
74 | | - $this->setContinueEnumParameter('from', ApiQueryBase :: keyToTitle($row->user_name)); |
75 | | - break; |
76 | | - } |
| 97 | + $lastUserData = false; |
| 98 | + $lastUser = false; |
| 99 | + $result = $this->getResult(); |
| 100 | + |
| 101 | + // |
| 102 | + // This loop keeps track of the last entry. |
| 103 | + // For each new row, if the new row is for different user then the last, the last entry is added to results. |
| 104 | + // Otherwise, the group of the new row is appended to the last entry. |
| 105 | + // The setContinue... is more complex because of this, and takes into account the higher sql limit |
| 106 | + // to make sure all rows that belong to the same user are received. |
| 107 | + // |
| 108 | + while (true) { |
| 109 | + |
| 110 | + $row = $db->fetchObject($res); |
| 111 | + $count++; |
| 112 | + |
| 113 | + if (!$row || $lastUser != $row->user_name) { |
| 114 | + // Save the last pass's user data |
| 115 | + if (is_array($lastUserData)) |
| 116 | + $data[] = $lastUserData; |
| 117 | + |
| 118 | + // No more rows left |
| 119 | + if (!$row) |
| 120 | + break; |
77 | 121 | |
78 | | - $vals = array( 'name' => $row->user_name ); |
79 | | - if ($fld_editcount) { |
80 | | - $vals['editcount'] = intval($row->user_editcount); |
| 122 | + if ($count > $limit) { |
| 123 | + // We've reached the one extra which shows that there are additional pages to be had. Stop here... |
| 124 | + $this->setContinueEnumParameter('from', ApiQueryBase :: keyToTitle($row->user_name)); |
| 125 | + break; |
| 126 | + } |
| 127 | + |
| 128 | + // Record new user's data |
| 129 | + $lastUser = $row->user_name; |
| 130 | + $lastUserData = array( 'name' => $lastUser ); |
| 131 | + if ($fld_editcount) |
| 132 | + $lastUserData['editcount'] = intval($row->user_editcount); |
| 133 | + |
81 | 134 | } |
82 | | - $data[] = $vals; |
| 135 | + |
| 136 | + if ($sqlLimit == $count) { |
| 137 | + // BUG! database contains group name that User::getAllGroups() does not return |
| 138 | + // TODO: should handle this more gracefully |
| 139 | + ApiBase :: dieDebug(__METHOD__, |
| 140 | + 'MediaWiki configuration error: the database contains more user groups than known to User::getAllGroups() function'); |
| 141 | + } |
| 142 | + |
| 143 | + // Add user's group info |
| 144 | + if ($fld_groups && !is_null($row->ug_group2)) { |
| 145 | + $lastUserData['groups'][] = $row->ug_group2; |
| 146 | + $result->setIndexedTagName($lastUserData['groups'], 'g'); |
| 147 | + } |
83 | 148 | } |
| 149 | + |
84 | 150 | $db->freeResult($res); |
85 | 151 | |
86 | | - $result = $this->getResult(); |
87 | 152 | $result->setIndexedTagName($data, 'u'); |
88 | 153 | $result->addValue('query', $this->getModuleName(), $data); |
89 | 154 | } |
— | — | @@ -90,10 +155,15 @@ |
91 | 156 | protected function getAllowedParams() { |
92 | 157 | return array ( |
93 | 158 | 'from' => null, |
| 159 | + 'prefix' => null, |
| 160 | + 'group' => array( |
| 161 | + ApiBase :: PARAM_TYPE => User::getAllGroups() |
| 162 | + ), |
94 | 163 | 'prop' => array ( |
95 | 164 | ApiBase :: PARAM_ISMULTI => true, |
96 | 165 | ApiBase :: PARAM_TYPE => array ( |
97 | | - 'editcount' |
| 166 | + 'editcount', |
| 167 | + 'groups', |
98 | 168 | ) |
99 | 169 | ), |
100 | 170 | 'limit' => array ( |
— | — | @@ -109,8 +179,12 @@ |
110 | 180 | protected function getParamDescription() { |
111 | 181 | return array ( |
112 | 182 | 'from' => 'The user name to start enumerating from.', |
113 | | - 'prop' => 'What pieces of information to include', |
114 | | - 'limit' => 'How many total user names to return.' |
| 183 | + 'prefix' => 'Search for all page titles that begin with this value.', |
| 184 | + 'group' => 'Limit users to a given group name', |
| 185 | + 'prop' => array( |
| 186 | + 'What pieces of information to include.', |
| 187 | + '`groups` property uses more server resources and may return fewer results than the limit.'), |
| 188 | + 'limit' => 'How many total user names to return.', |
115 | 189 | ); |
116 | 190 | } |
117 | 191 | |
Index: branches/liquidthreads/includes/api/ApiQuerySearch.php |
— | — | @@ -0,0 +1,151 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/* |
| 5 | + * Created on July 30, 2007 |
| 6 | + * |
| 7 | + * API for MediaWiki 1.8+ |
| 8 | + * |
| 9 | + * Copyright (C) 2007 Yuri Astrakhan <Firstname><Lastname>@gmail.com |
| 10 | + * |
| 11 | + * This program is free software; you can redistribute it and/or modify |
| 12 | + * it under the terms of the GNU General Public License as published by |
| 13 | + * the Free Software Foundation; either version 2 of the License, or |
| 14 | + * (at your option) any later version. |
| 15 | + * |
| 16 | + * This program is distributed in the hope that it will be useful, |
| 17 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 18 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 19 | + * GNU General Public License for more details. |
| 20 | + * |
| 21 | + * You should have received a copy of the GNU General Public License along |
| 22 | + * with this program; if not, write to the Free Software Foundation, Inc., |
| 23 | + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 24 | + * http://www.gnu.org/copyleft/gpl.html |
| 25 | + */ |
| 26 | + |
| 27 | +if (!defined('MEDIAWIKI')) { |
| 28 | + // Eclipse helper - will be ignored in production |
| 29 | + require_once ('ApiQueryBase.php'); |
| 30 | +} |
| 31 | + |
| 32 | +/** |
| 33 | + * Query module to perform full text search within wiki titles and content |
| 34 | + * |
| 35 | + * @addtogroup API |
| 36 | + */ |
| 37 | +class ApiQuerySearch extends ApiQueryGeneratorBase { |
| 38 | + |
| 39 | + public function __construct($query, $moduleName) { |
| 40 | + parent :: __construct($query, $moduleName, 'sr'); |
| 41 | + } |
| 42 | + |
| 43 | + public function execute() { |
| 44 | + $this->run(); |
| 45 | + } |
| 46 | + |
| 47 | + public function executeGenerator($resultPageSet) { |
| 48 | + $this->run($resultPageSet); |
| 49 | + } |
| 50 | + |
| 51 | + private function run($resultPageSet = null) { |
| 52 | + |
| 53 | + $params = $this->extractRequestParams(); |
| 54 | + |
| 55 | + $limit = $params['limit']; |
| 56 | + $query = $params['search']; |
| 57 | + if (is_null($query) || empty($query)) |
| 58 | + $this->dieUsage("empty search string is not allowed", 'param-search'); |
| 59 | + |
| 60 | + $search = SearchEngine::create(); |
| 61 | + $search->setLimitOffset( $limit+1, $params['offset'] ); |
| 62 | + $search->setNamespaces( $params['namespace'] ); |
| 63 | + $search->showRedirects = $params['redirects']; |
| 64 | + |
| 65 | + if ($params['what'] == 'text') |
| 66 | + $matches = $search->searchText( $query ); |
| 67 | + else |
| 68 | + $matches = $search->searchTitle( $query ); |
| 69 | + |
| 70 | + $data = array (); |
| 71 | + $count = 0; |
| 72 | + while( $result = $matches->next() ) { |
| 73 | + if (++ $count > $limit) { |
| 74 | + // We've reached the one extra which shows that there are additional items to be had. Stop here... |
| 75 | + $this->setContinueEnumParameter('offset', $params['offset'] + $params['limit']); |
| 76 | + break; |
| 77 | + } |
| 78 | + |
| 79 | + $title = $result->getTitle(); |
| 80 | + if (is_null($resultPageSet)) { |
| 81 | + $data[] = array( |
| 82 | + 'ns' => intval($title->getNamespace()), |
| 83 | + 'title' => $title->getPrefixedText()); |
| 84 | + } else { |
| 85 | + $data[] = $title; |
| 86 | + } |
| 87 | + } |
| 88 | + |
| 89 | + if (is_null($resultPageSet)) { |
| 90 | + $result = $this->getResult(); |
| 91 | + $result->setIndexedTagName($data, 'p'); |
| 92 | + $result->addValue('query', $this->getModuleName(), $data); |
| 93 | + } else { |
| 94 | + $resultPageSet->populateFromTitles($data); |
| 95 | + } |
| 96 | + } |
| 97 | + |
| 98 | + protected function getAllowedParams() { |
| 99 | + return array ( |
| 100 | + 'search' => null, |
| 101 | + 'namespace' => array ( |
| 102 | + ApiBase :: PARAM_DFLT => 0, |
| 103 | + ApiBase :: PARAM_TYPE => 'namespace', |
| 104 | + ApiBase :: PARAM_ISMULTI => true, |
| 105 | + ), |
| 106 | + 'what' => array ( |
| 107 | + ApiBase :: PARAM_DFLT => 'title', |
| 108 | + ApiBase :: PARAM_TYPE => array ( |
| 109 | + 'title', |
| 110 | + 'text', |
| 111 | + ) |
| 112 | + ), |
| 113 | + 'redirects' => false, |
| 114 | + 'offset' => 0, |
| 115 | + 'limit' => array ( |
| 116 | + ApiBase :: PARAM_DFLT => 10, |
| 117 | + ApiBase :: PARAM_TYPE => 'limit', |
| 118 | + ApiBase :: PARAM_MIN => 1, |
| 119 | + ApiBase :: PARAM_MAX => ApiBase :: LIMIT_BIG1, |
| 120 | + ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2 |
| 121 | + ) |
| 122 | + ); |
| 123 | + } |
| 124 | + |
| 125 | + protected function getParamDescription() { |
| 126 | + return array ( |
| 127 | + 'search' => 'Search for all page titles (or content) that has this value.', |
| 128 | + 'namespace' => 'The namespace(s) to enumerate.', |
| 129 | + 'what' => 'Search inside the text or titles.', |
| 130 | + 'redirects' => 'Include redirect pages in the search.', |
| 131 | + 'offset' => 'Use this value to continue paging (return by query)', |
| 132 | + 'limit' => 'How many total pages to return.' |
| 133 | + ); |
| 134 | + } |
| 135 | + |
| 136 | + protected function getDescription() { |
| 137 | + return 'Perform a full text search'; |
| 138 | + } |
| 139 | + |
| 140 | + protected function getExamples() { |
| 141 | + return array ( |
| 142 | + 'api.php?action=query&list=search&srsearch=meaning', |
| 143 | + 'api.php?action=query&list=search&srwhat=text&srsearch=meaning', |
| 144 | + 'api.php?action=query&generator=search&gsrsearch=meaning&prop=info', |
| 145 | + ); |
| 146 | + } |
| 147 | + |
| 148 | + public function getVersion() { |
| 149 | + return __CLASS__ . ': $Id$'; |
| 150 | + } |
| 151 | +} |
| 152 | + |
Property changes on: branches/liquidthreads/includes/api/ApiQuerySearch.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 153 | + native |
Added: svn:keywords |
2 | 154 | + Id |
Index: branches/liquidthreads/includes/api/ApiQueryAllLinks.php |
— | — | @@ -70,7 +70,7 @@ |
71 | 71 | if (!is_null($params['from'])) |
72 | 72 | $this->addWhere('pl_title>=' . $db->addQuotes(ApiQueryBase :: titleToKey($params['from']))); |
73 | 73 | if (isset ($params['prefix'])) |
74 | | - $this->addWhere("pl_title LIKE '" . $db->strencode(ApiQueryBase :: titleToKey($params['prefix'])) . "%'"); |
| 74 | + $this->addWhere("pl_title LIKE '" . $db->escapeLike(ApiQueryBase :: titleToKey($params['prefix'])) . "%'"); |
75 | 75 | |
76 | 76 | if (is_null($resultPageSet)) { |
77 | 77 | $this->addFields(array ( |
Index: branches/liquidthreads/includes/api/ApiQuery.php |
— | — | @@ -67,6 +67,7 @@ |
68 | 68 | 'imageusage' => 'ApiQueryBacklinks', |
69 | 69 | 'logevents' => 'ApiQueryLogEvents', |
70 | 70 | 'recentchanges' => 'ApiQueryRecentChanges', |
| 71 | + 'search' => 'ApiQuerySearch', |
71 | 72 | 'usercontribs' => 'ApiQueryContributions', |
72 | 73 | 'watchlist' => 'ApiQueryWatchlist', |
73 | 74 | 'exturlusage' => 'ApiQueryExtLinksUsage', |
Index: branches/liquidthreads/includes/OutputPage.php |
— | — | @@ -1062,12 +1062,25 @@ |
1063 | 1063 | } |
1064 | 1064 | |
1065 | 1065 | /** |
1066 | | - * return from error messages or notes |
1067 | | - * @param $unused No longer used |
1068 | | - * @param $returnto page title to return to. Default is Main Page. |
| 1066 | + * Add a "return to" link pointing to a specified title |
| 1067 | + * |
| 1068 | + * @param Title $title Title to link |
1069 | 1069 | */ |
| 1070 | + public function addReturnTo( $title ) { |
| 1071 | + global $wgUser; |
| 1072 | + $link = wfMsg( 'returnto', $wgUser->getSkin()->makeLinkObj( $title ) ); |
| 1073 | + $this->addHtml( "<p>{$link}</p>\n" ); |
| 1074 | + } |
| 1075 | + |
| 1076 | + /** |
| 1077 | + * Add a "return to" link pointing to a specified title, |
| 1078 | + * or the title indicated in the request, or else the main page |
| 1079 | + * |
| 1080 | + * @param null $unused No longer used |
| 1081 | + * @param Title $returnto Title to return to |
| 1082 | + */ |
1070 | 1083 | public function returnToMain( $unused = null, $returnto = NULL ) { |
1071 | | - global $wgUser, $wgOut, $wgRequest; |
| 1084 | + global $wgRequest; |
1072 | 1085 | |
1073 | 1086 | if ( $returnto == NULL ) { |
1074 | 1087 | $returnto = $wgRequest->getText( 'returnto' ); |
— | — | @@ -1086,11 +1099,7 @@ |
1087 | 1100 | $titleObj = Title::newMainPage(); |
1088 | 1101 | } |
1089 | 1102 | |
1090 | | - $sk = $wgUser->getSkin(); |
1091 | | - $link = $sk->makeLinkObj( $titleObj, '' ); |
1092 | | - |
1093 | | - $r = wfMsg( 'returnto', $link ); |
1094 | | - $wgOut->addHTML( "\n<p>$r</p>\n" ); |
| 1103 | + $this->addReturnTo( $titleObj ); |
1095 | 1104 | } |
1096 | 1105 | |
1097 | 1106 | /** |
Index: branches/liquidthreads/includes/SpecialUndelete.php |
— | — | @@ -799,7 +799,7 @@ |
800 | 800 | |
801 | 801 | |
802 | 802 | if( $haveFiles ) { |
803 | | - $wgOut->addHtml( "<h2>" . wfMsgHtml( 'imghistory' ) . "</h2>\n" ); |
| 803 | + $wgOut->addHtml( "<h2>" . wfMsgHtml( 'filehist' ) . "</h2>\n" ); |
804 | 804 | $wgOut->addHtml( "<ul>" ); |
805 | 805 | while( $row = $files->fetchObject() ) { |
806 | 806 | $ts = wfTimestamp( TS_MW, $row->fa_timestamp ); |
Index: branches/liquidthreads/includes/FileRevertForm.php |
— | — | @@ -0,0 +1,183 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * File reversion user interface |
| 6 | + * |
| 7 | + * @addtogroup Media |
| 8 | + * @author Rob Church <robchur@gmail.com> |
| 9 | + */ |
| 10 | +class FileRevertForm { |
| 11 | + |
| 12 | + private $title = null; |
| 13 | + private $file = null; |
| 14 | + private $oldimage = ''; |
| 15 | + |
| 16 | + /** |
| 17 | + * Constructor |
| 18 | + * |
| 19 | + * @param File $file File we're reverting |
| 20 | + */ |
| 21 | + public function __construct( $file ) { |
| 22 | + $this->title = $file->getTitle(); |
| 23 | + $this->file = $file; |
| 24 | + } |
| 25 | + |
| 26 | + /** |
| 27 | + * Fulfil the request; shows the form or reverts the file, |
| 28 | + * pending authentication, confirmation, etc. |
| 29 | + */ |
| 30 | + public function execute() { |
| 31 | + global $wgOut, $wgRequest, $wgUser, $wgLang, $wgServer; |
| 32 | + $this->setHeaders(); |
| 33 | + |
| 34 | + if( wfReadOnly() ) { |
| 35 | + $wgOut->readOnlyPage(); |
| 36 | + return; |
| 37 | + } elseif( !$wgUser->isLoggedIn() ) { |
| 38 | + $wgOut->showErrorPage( 'uploadnologin', 'uploadnologintext' ); |
| 39 | + return; |
| 40 | + } elseif( !$this->title->userCan( 'edit' ) ) { |
| 41 | + // The standard read-only thing doesn't make a whole lot of sense |
| 42 | + // here; surely it should show the image or something? -- RC |
| 43 | + $article = new Article( $this->title ); |
| 44 | + $wgOut->readOnlyPage( $article->getContent(), true ); |
| 45 | + return; |
| 46 | + } elseif( $wgUser->isBlocked() ) { |
| 47 | + $wgOut->blockedPage(); |
| 48 | + return; |
| 49 | + } |
| 50 | + |
| 51 | + $this->oldimage = $wgRequest->getText( 'oldimage' ); |
| 52 | + $token = $wgRequest->getText( 'wpEditToken' ); |
| 53 | + if( !$this->isValidOldSpec() ) { |
| 54 | + $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars( $this->oldimage ) ); |
| 55 | + return; |
| 56 | + } |
| 57 | + |
| 58 | + if( !$this->haveOldVersion() ) { |
| 59 | + $wgOut->addHtml( wfMsgExt( 'filerevert-badversion', 'parse' ) ); |
| 60 | + $wgOut->returnToMain( false, $this->title ); |
| 61 | + return; |
| 62 | + } |
| 63 | + |
| 64 | + // Perform the reversion if appropriate |
| 65 | + if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $token, $this->oldimage ) ) { |
| 66 | + $source = $this->file->getArchiveVirtualUrl( $this->oldimage ); |
| 67 | + $comment = $wgRequest->getText( 'wpComment' ); |
| 68 | + // TODO: Preserve file properties from database instead of reloading from file |
| 69 | + $status = $this->file->upload( $source, $comment, $comment ); |
| 70 | + if( $status->isGood() ) { |
| 71 | + $wgOut->addHtml( wfMsgExt( 'filerevert-success', 'parse', $this->title->getText(), |
| 72 | + $wgLang->date( $this->getTimestamp() ), |
| 73 | + $wgLang->time( $this->getTimestamp() ), |
| 74 | + $wgServer . $this->file->getArchiveUrl( $this->oldimage ) ) ); |
| 75 | + $wgOut->returnToMain( false, $this->title ); |
| 76 | + } else { |
| 77 | + $wgOut->addWikiText( $status->getWikiText() ); |
| 78 | + } |
| 79 | + return; |
| 80 | + } |
| 81 | + |
| 82 | + // Show the form |
| 83 | + $this->showForm(); |
| 84 | + } |
| 85 | + |
| 86 | + /** |
| 87 | + * Show the confirmation form |
| 88 | + */ |
| 89 | + private function showForm() { |
| 90 | + global $wgOut, $wgUser, $wgRequest, $wgLang, $wgContLang, $wgServer; |
| 91 | + |
| 92 | + /* |
| 93 | + $cur = wfFindFile( $this->title ); |
| 94 | + $old = wfFindFile( $this->title, substr( $this->oldimage, 0, 14 ) ); |
| 95 | + */ |
| 96 | + $timestamp = $this->getTimestamp(); |
| 97 | + |
| 98 | + $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getAction() ) ); |
| 99 | + $form .= Xml::hidden( 'wpEditToken', $wgUser->editToken( $this->oldimage ) ); |
| 100 | + $form .= '<fieldset><legend>' . wfMsgHtml( 'filerevert-legend' ) . '</legend>'; |
| 101 | + $form .= wfMsgExt( 'filerevert-intro', 'parse', $this->title->getText(), |
| 102 | + $wgLang->date( $timestamp ), $wgLang->time( $timestamp ), $wgServer . $this->file->getArchiveUrl( $this->oldimage ) ); |
| 103 | + |
| 104 | + /* |
| 105 | + * I was going to do a little comparison (current vs. old) here, |
| 106 | + * but realised it wasn't too straightforward to do a media transform |
| 107 | + * with an *old* file version using the current mechanism. Leaving |
| 108 | + * this here in case it becomes possible in the future. -- RC |
| 109 | + * |
| 110 | + $form .= '<table class="compare-files">'; |
| 111 | + $form .= '<tr>'; |
| 112 | + $form .= '<th>' . wfMsgHtml( 'filerevert-current' ) . '</th>'; |
| 113 | + $form .= '<th>' . wfMsgHtml( 'filerevert-old', $old->getTimestamp() ) . '</th>'; |
| 114 | + $form .= '</tr><tr>'; |
| 115 | + // FIXME: Hard-coding magic numbers makes baby Jesus cry... |
| 116 | + $form .= '<td>' . $this->getThumbnail( $cur, 180 ) . '</td>'; |
| 117 | + $form .= '<td>' . $this->getThumbnail( $old, 180 ) . '</td>'; |
| 118 | + $form .= '</tr>'; |
| 119 | + $form .= '</table>'; |
| 120 | + */ |
| 121 | + |
| 122 | + $form .= '<p>' . Xml::inputLabel( wfMsg( 'filerevert-comment' ), 'wpComment', 'wpComment', |
| 123 | + 60, wfMsgForContent( 'filerevert-defaultcomment', |
| 124 | + $wgContLang->date( $timestamp, false, false ), $wgContLang->time( $timestamp, false, false ) ) ) . '</p>'; |
| 125 | + $form .= '<p>' . Xml::submitButton( wfMsg( 'filerevert-submit' ) ) . '</p>'; |
| 126 | + $form .= '</fieldset>'; |
| 127 | + $form .= '</form>'; |
| 128 | + |
| 129 | + $wgOut->addHtml( $form ); |
| 130 | + } |
| 131 | + |
| 132 | + /** |
| 133 | + * Set headers, titles and other bits |
| 134 | + */ |
| 135 | + private function setHeaders() { |
| 136 | + global $wgOut; |
| 137 | + $wgOut->setPageTitle( wfMsg( 'filerevert', $this->title->getText() ) ); |
| 138 | + $wgOut->setRobotPolicy( 'noindex,nofollow' ); |
| 139 | + } |
| 140 | + |
| 141 | + /** |
| 142 | + * Is the provided `oldimage` value valid? |
| 143 | + * |
| 144 | + * @return bool |
| 145 | + */ |
| 146 | + private function isValidOldSpec() { |
| 147 | + return strlen( $this->oldimage ) >= 16 |
| 148 | + && strpos( $this->oldimage, '/' ) === false |
| 149 | + && strpos( $this->oldimage, '\\' ) === false; |
| 150 | + } |
| 151 | + |
| 152 | + /** |
| 153 | + * Does the provided `oldimage` value correspond |
| 154 | + * to an existing, local, old version of this file? |
| 155 | + * |
| 156 | + * @return bool |
| 157 | + */ |
| 158 | + private function haveOldVersion() { |
| 159 | + $file = wfFindFile( $this->title, $this->oldimage ); |
| 160 | + return $file && $file->exists() && $file->isLocal(); |
| 161 | + } |
| 162 | + |
| 163 | + /** |
| 164 | + * Prepare the form action |
| 165 | + * |
| 166 | + * @return string |
| 167 | + */ |
| 168 | + private function getAction() { |
| 169 | + $q = array(); |
| 170 | + $q[] = 'action=revert'; |
| 171 | + $q[] = 'oldimage=' . urlencode( $this->oldimage ); |
| 172 | + return $this->title->getLocalUrl( implode( '&', $q ) ); |
| 173 | + } |
| 174 | + |
| 175 | + /** |
| 176 | + * Extract the timestamp of the old version |
| 177 | + * |
| 178 | + * @return string |
| 179 | + */ |
| 180 | + private function getTimestamp() { |
| 181 | + return substr( $this->oldimage, 0, 14 ); |
| 182 | + } |
| 183 | + |
| 184 | +} |
\ No newline at end of file |
Property changes on: branches/liquidthreads/includes/FileRevertForm.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 185 | + native |
Index: branches/liquidthreads/includes/AutoLoader.php |
— | — | @@ -101,6 +101,7 @@ |
102 | 102 | 'ImagePage' => 'includes/ImagePage.php', |
103 | 103 | 'ImageHistoryList' => 'includes/ImagePage.php', |
104 | 104 | 'ImageRemote' => 'includes/ImageRemote.php', |
| 105 | + 'FileRevertForm' => 'includes/FileRevertForm.php', |
105 | 106 | 'Job' => 'includes/JobQueue.php', |
106 | 107 | 'EmaillingJob' => 'includes/EmaillingJob.php', |
107 | 108 | 'EnotifNotifyJob' => 'includes/EnotifNotifyJob.php', |
— | — | @@ -327,6 +328,7 @@ |
328 | 329 | 'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php', |
329 | 330 | 'ApiQueryRecentChanges'=> 'includes/api/ApiQueryRecentChanges.php', |
330 | 331 | 'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php', |
| 332 | + 'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php', |
331 | 333 | 'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php', |
332 | 334 | 'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php', |
333 | 335 | 'ApiResult' => 'includes/api/ApiResult.php', |
Index: branches/liquidthreads/includes/DefaultSettings.php |
— | — | @@ -1195,7 +1195,7 @@ |
1196 | 1196 | * to ensure that client-side caches don't keep obsolete copies of global |
1197 | 1197 | * styles. |
1198 | 1198 | */ |
1199 | | -$wgStyleVersion = '90'; |
| 1199 | +$wgStyleVersion = '94'; |
1200 | 1200 | |
1201 | 1201 | |
1202 | 1202 | # Server-side caching: |
Index: branches/liquidthreads/includes/EditPage.php |
— | — | @@ -1714,7 +1714,7 @@ |
1715 | 1715 | array( 'image' => 'button_image.png', |
1716 | 1716 | 'id' => 'mw-editbutton-image', |
1717 | 1717 | 'open' => '[['.$wgContLang->getNsText(NS_IMAGE).":", |
1718 | | - 'close' => '|thumb]]', |
| 1718 | + 'close' => ']]', |
1719 | 1719 | 'sample'=> wfMsg('image_sample'), |
1720 | 1720 | 'tip' => wfMsg('image_tip'), |
1721 | 1721 | 'key' => 'D' |
Index: branches/liquidthreads/includes/SpecialPreferences.php |
— | — | @@ -97,6 +97,8 @@ |
98 | 98 | if ( !preg_match( '/^[a-z\-]*$/', $this->mUserLanguage ) ) { |
99 | 99 | $this->mUserLanguage = 'nolanguage'; |
100 | 100 | } |
| 101 | + |
| 102 | + wfRunHooks( "InitPreferencesForm", array( $this, $request ) ); |
101 | 103 | } |
102 | 104 | |
103 | 105 | function execute() { |
— | — | @@ -298,9 +300,17 @@ |
299 | 301 | $wgUser->setOption( $tname, $tvalue ); |
300 | 302 | } |
301 | 303 | if (!$wgAuth->updateExternalDB($wgUser)) { |
302 | | - $this->mainPrefsForm( wfMsg( 'externaldberror' ) ); |
| 304 | + $this->mainPrefsForm( 'error', wfMsg( 'externaldberror' ) ); |
303 | 305 | return; |
304 | 306 | } |
| 307 | + |
| 308 | + $msg = ''; |
| 309 | + if ( !wfRunHooks( "SavePreferences", array( $this, $wgUser, &$msg ) ) ) { |
| 310 | + print "(($msg))"; |
| 311 | + $this->mainPrefsForm( 'error', $msg ); |
| 312 | + return; |
| 313 | + } |
| 314 | + |
305 | 315 | $wgUser->setCookies(); |
306 | 316 | $wgUser->saveSettings(); |
307 | 317 | |
— | — | @@ -395,6 +405,8 @@ |
396 | 406 | $this->mSearchNs[$i] = $wgUser->getOption( 'searchNs'.$i ); |
397 | 407 | } |
398 | 408 | } |
| 409 | + |
| 410 | + wfRunHooks( "ResetPreferences", array( $this, $wgUser ) ); |
399 | 411 | } |
400 | 412 | |
401 | 413 | /** |
— | — | @@ -994,6 +1006,8 @@ |
995 | 1007 | } |
996 | 1008 | $wgOut->addHTML( '</fieldset>' ); |
997 | 1009 | |
| 1010 | + wfRunHooks( "RenderPreferencesForm", array( $this, $wgOut ) ); |
| 1011 | + |
998 | 1012 | $token = htmlspecialchars( $wgUser->editToken() ); |
999 | 1013 | $skin = $wgUser->getSkin(); |
1000 | 1014 | $wgOut->addHTML( " |
Index: branches/liquidthreads/RELEASE-NOTES |
— | — | @@ -159,6 +159,8 @@ |
160 | 160 | * Skip the difference engine cache when 'action=purge' is used while requesting |
161 | 161 | a difference page, to allow refreshing the cache in case of errors |
162 | 162 | * (bug 10701) Link to Special:Listusers in default Special:Statistics messages |
| 163 | +* Improved file history presentation |
| 164 | +* (bug 10739) Users can now enter comments when reverting files |
163 | 165 | |
164 | 166 | == Bugfixes since 1.10 == |
165 | 167 | |
— | — | @@ -330,6 +332,8 @@ |
331 | 333 | * Improved error reporting and robustness for file delete/undelete. |
332 | 334 | * Improved speed of file delete by storing the SHA-1 hash in image/oldimage |
333 | 335 | * Fixed leading zero in base 36 SHA-1 hash |
| 336 | +* Protection form no longer produces JavaScript errors |
| 337 | +* (bug 10741) File histories show "delete" links for non-sysops |
334 | 338 | |
335 | 339 | == API changes since 1.10 == |
336 | 340 | |
— | — | @@ -376,6 +380,9 @@ |
377 | 381 | * Added external url search within wiki pages (list=exturlusage) |
378 | 382 | * Added link enumeration (list=alllinks) |
379 | 383 | * Added registered users enumeration (list=allusers) |
| 384 | +* Added full text search in titles and content (list=search) |
| 385 | +* (bug 10684) Expanded list=allusers functionality |
| 386 | +* Possible breaking change: prop=revisions no longer includes pageid for rvprop=ids |
380 | 387 | |
381 | 388 | == Maintenance script changes since 1.10 == |
382 | 389 | |
— | — | @@ -386,6 +393,9 @@ |
387 | 394 | to $wgFileExtensions) |
388 | 395 | * Add option to maintenance/createAndPromote.php to give the user bureaucrat |
389 | 396 | permissions (--bureaucrat) |
| 397 | +* Allow overwriting existing files with a conflicting name using |
| 398 | + maintenance/importImages.php |
| 399 | +* (bug 10266) Use native newlines when rebuilding a messages file. |
390 | 400 | |
391 | 401 | == Languages updated since 1.10 == |
392 | 402 | |
— | — | @@ -412,6 +422,7 @@ |
413 | 423 | * Kazakh (kk) |
414 | 424 | * Kurdish (ku) |
415 | 425 | * Latin (la) |
| 426 | +* Lao (lo) |
416 | 427 | * Lithuanian (lt) |
417 | 428 | * Malayalam (ml) |
418 | 429 | * Burmese (my) |
Index: branches/liquidthreads/maintenance/language/messages.inc |
— | — | @@ -304,7 +304,7 @@ |
305 | 305 | 'filedeleteerror', |
306 | 306 | 'directorycreateerror', |
307 | 307 | 'filenotfound', |
308 | | - 'fileexists', |
| 308 | + 'fileexistserror', |
309 | 309 | 'unexpected', |
310 | 310 | 'formerror', |
311 | 311 | 'badarticleerror', |
— | — | @@ -319,12 +319,12 @@ |
320 | 320 | 'viewsource', |
321 | 321 | 'viewsourcefor', |
322 | 322 | 'protectedpagetext', |
323 | | - 'namespaceprotected', |
324 | 323 | 'viewsourcetext', |
325 | 324 | 'protectedinterface', |
326 | 325 | 'editinginterface', |
327 | 326 | 'sqlhidden', |
328 | 327 | 'cascadeprotected', |
| 328 | + 'namespaceprotected', |
329 | 329 | ), |
330 | 330 | 'login' => array( |
331 | 331 | 'logouttitle', |
— | — | @@ -849,12 +849,17 @@ |
850 | 850 | 'imgdelete', |
851 | 851 | 'imgdesc', |
852 | 852 | 'imgfile', |
853 | | - 'imglegend', |
854 | | - 'imghistory', |
855 | | - 'revertimg', |
856 | | - 'deleteimg', |
857 | | - 'deleteimgcompletely', |
858 | | - 'imghistlegend', |
| 853 | + 'filehist', |
| 854 | + 'filehist-help', |
| 855 | + 'filehist-deleteall', |
| 856 | + 'filehist-deleteone', |
| 857 | + 'filehist-revert', |
| 858 | + 'filehist-current', |
| 859 | + 'filehist-datetime', |
| 860 | + 'filehist-user', |
| 861 | + 'filehist-dimensions', |
| 862 | + 'filehist-filesize', |
| 863 | + 'filehist-comment', |
859 | 864 | 'imagelinks', |
860 | 865 | 'linkstoimage', |
861 | 866 | 'nolinkstoimage', |
— | — | @@ -872,6 +877,16 @@ |
873 | 878 | 'imagelist_description', |
874 | 879 | 'imagelist_search_for', |
875 | 880 | ), |
| 881 | + 'filerevert' => array( |
| 882 | + 'filerevert', |
| 883 | + 'filerevert-legend', |
| 884 | + 'filerevert-intro', |
| 885 | + 'filerevert-comment', |
| 886 | + 'filerevert-defaultcomment', |
| 887 | + 'filerevert-submit', |
| 888 | + 'filerevert-success', |
| 889 | + 'filerevert-badversion', |
| 890 | + ), |
876 | 891 | 'mimesearch' => array( |
877 | 892 | 'mimesearch', |
878 | 893 | 'mimesearch-summary', |
— | — | @@ -1150,7 +1165,6 @@ |
1151 | 1166 | 'deletionlog', |
1152 | 1167 | 'reverted', |
1153 | 1168 | 'deletecomment', |
1154 | | - 'imagereverted', |
1155 | 1169 | 'rollback', |
1156 | 1170 | 'rollback_short', |
1157 | 1171 | 'rollbacklink', |
— | — | @@ -2219,6 +2233,7 @@ |
2220 | 2234 | 'upload-curl-errors' => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>', |
2221 | 2235 | 'licenses' => '', |
2222 | 2236 | 'imagelist' => 'Image list', |
| 2237 | + 'filerevert' => 'File reversion', |
2223 | 2238 | 'mimesearch' => 'MIME search', |
2224 | 2239 | 'unwatchedpages' => 'Unwatched pages', |
2225 | 2240 | 'listredirects' => 'List redirects', |
Index: branches/liquidthreads/maintenance/language/writeMessagesArray.inc |
— | — | @@ -1,8 +1,6 @@ |
2 | 2 | <?php |
3 | 3 | /** |
4 | 4 | * Write a messages array as a PHP text. |
5 | | - * TODO: make it possible to use Windows endlines |
6 | | - * TODO: remove PHP ending tags recently removed from MediaWiki files |
7 | 5 | * |
8 | 6 | * @addtogroup Maintenance |
9 | 7 | */ |
— | — | @@ -75,7 +73,8 @@ |
76 | 74 | } |
77 | 75 | |
78 | 76 | # Write all the messages |
79 | | - $messagesText = "\$messages = array(\n"; |
| 77 | + $messagesText = "\$messages = array( |
| 78 | +"; |
80 | 79 | foreach( $sortedMessages as $block => $messages ) { |
81 | 80 | # Skip if it's the block of unknown messages - handle that in the end of file |
82 | 81 | if ( $block == 'unknown' ) { |
— | — | @@ -87,7 +86,8 @@ |
88 | 87 | } |
89 | 88 | ksort( $sortedMessages['unknown'] ); |
90 | 89 | $messagesText .= writeMessagesBlock( 'unknown', 'Unknown messages', $sortedMessages['unknown'], $ignoredComments ); # Write the unknown messages, alphabetically sorted |
91 | | - $messagesText .= ");\n"; |
| 90 | + $messagesText .= "); |
| 91 | +"; |
92 | 92 | |
93 | 93 | return array( $messagesText, $sortedMessages ); |
94 | 94 | } |
— | — | @@ -115,9 +115,13 @@ |
116 | 116 | # Format the block comment (if exists); check for multiple lines comments |
117 | 117 | if ( !empty( $comment ) ) { |
118 | 118 | if ( strpos( $comment, "\n" ) === false ) { |
119 | | - $blockText .= "# $comment\n"; |
| 119 | + $blockText .= "# $comment |
| 120 | +"; |
120 | 121 | } else { |
121 | | - $blockText .= "/*\n$comment\n*/\n"; |
| 122 | + $blockText .= "/* |
| 123 | +$comment |
| 124 | +*/ |
| 125 | +"; |
122 | 126 | } |
123 | 127 | } |
124 | 128 | |
— | — | @@ -173,11 +177,13 @@ |
174 | 178 | } |
175 | 179 | |
176 | 180 | # Newline |
177 | | - $blockText .= "\n"; |
| 181 | + $blockText .= " |
| 182 | +"; |
178 | 183 | } |
179 | 184 | |
180 | 185 | # Newline to end the block |
181 | | - $blockText .= "\n"; |
| 186 | + $blockText .= " |
| 187 | +"; |
182 | 188 | |
183 | 189 | return $blockText; |
184 | 190 | } |
Index: branches/liquidthreads/maintenance/updaters.inc |
— | — | @@ -82,6 +82,7 @@ |
83 | 83 | array( 'oldimage', 'oi_metadata', 'patch-oi_metadata.sql'), |
84 | 84 | array( 'archive', 'ar_page', 'patch-archive-ar_page.sql'), |
85 | 85 | array( 'image', 'img_sha1', 'patch-img_sha1.sql' ), |
| 86 | + array( 'page', 'page_key', 'patch-page_key.sql' ), |
86 | 87 | ); |
87 | 88 | |
88 | 89 | # For extensions only, should be populated via hooks |
Index: branches/liquidthreads/maintenance/importImages.inc.php |
— | — | @@ -45,6 +45,4 @@ |
46 | 46 | unset( $parts[ count( $parts ) - 1 ] ); |
47 | 47 | $fname = implode( '.', $parts ); |
48 | 48 | return array( $fname, $ext ); |
49 | | -} |
50 | | - |
51 | | - |
| 49 | +} |
\ No newline at end of file |
Index: branches/liquidthreads/maintenance/archives/patch-page_key.sql |
— | — | @@ -0,0 +1,5 @@ |
| 2 | +ALTER TABLE /*$wgDBprefix*/page |
| 3 | + ADD page_key VARCHAR(255) BINARY NOT NULL; |
| 4 | +ALTER TABLE /*$wgDBprefix*/page |
| 5 | + ADD INDEX name_key (page_namespace, page_key); |
| 6 | + |
Index: branches/liquidthreads/maintenance/importImages.php |
— | — | @@ -8,9 +8,11 @@ |
9 | 9 | * @author Rob Church <robchur@gmail.com> |
10 | 10 | */ |
11 | 11 | |
12 | | -$optionsWithArguments = array( 'extensions' ); |
| 12 | +$optionsWithArguments = array( 'extensions', 'overwrite' ); |
13 | 13 | require_once( 'commandLine.inc' ); |
14 | 14 | require_once( 'importImages.inc.php' ); |
| 15 | +$added = $skipped = $overwritten = 0; |
| 16 | + |
15 | 17 | echo( "Import Images\n\n" ); |
16 | 18 | |
17 | 19 | # Need a path |
— | — | @@ -44,8 +46,7 @@ |
45 | 47 | $license = isset( $options['license'] ) ? $options['license'] : ''; |
46 | 48 | |
47 | 49 | # Batch "upload" operation |
48 | | - global $wgUploadDirectory; |
49 | | - if( count( $files ) > 0 ) { |
| 50 | + if( ( $count = count( $files ) ) > 0 ) { |
50 | 51 | |
51 | 52 | foreach( $files as $file ) { |
52 | 53 | $base = wfBaseName( $file ); |
— | — | @@ -60,28 +61,44 @@ |
61 | 62 | # Check existence |
62 | 63 | $image = wfLocalFile( $title ); |
63 | 64 | if( $image->exists() ) { |
64 | | - echo( "{$base} could not be imported; a file with this name exists in the wiki\n" ); |
65 | | - continue; |
| 65 | + if( isset( $options['overwrite'] ) ) { |
| 66 | + echo( "{$base} exists, overwriting..." ); |
| 67 | + $svar = 'overwritten'; |
| 68 | + } else { |
| 69 | + echo( "{$base} exists, skipping\n" ); |
| 70 | + $skipped++; |
| 71 | + continue; |
| 72 | + } |
| 73 | + } else { |
| 74 | + echo( "Importing {$base}..." ); |
| 75 | + $svar = 'added'; |
66 | 76 | } |
67 | | - |
68 | | - # Stash the file |
69 | | - echo( "Saving {$base}..." ); |
70 | | - |
| 77 | + |
| 78 | + # Import the file |
71 | 79 | $archive = $image->publish( $file ); |
72 | | - if ( WikiError::isError( $archive ) ) { |
| 80 | + if( WikiError::isError( $archive ) || !$archive->isGood() ) { |
73 | 81 | echo( "failed.\n" ); |
74 | 82 | continue; |
75 | 83 | } |
76 | | - echo( "importing..." ); |
77 | | - |
78 | | - if ( $image->recordUpload( $archive, $comment, $license ) ) { |
| 84 | + |
| 85 | + $$svar++; |
| 86 | + if ( $image->recordUpload( $archive->value, $comment, $license ) ) { |
79 | 87 | # We're done! |
80 | 88 | echo( "done.\n" ); |
81 | 89 | } else { |
82 | 90 | echo( "failed.\n" ); |
83 | 91 | } |
| 92 | + |
84 | 93 | } |
85 | 94 | |
| 95 | + # Print out some statistics |
| 96 | + echo( "\n" ); |
| 97 | + foreach( array( 'count' => 'Found', 'added' => 'Added', |
| 98 | + 'skipped' => 'Skipped', 'overwritten' => 'Overwritten' ) as $var => $desc ) { |
| 99 | + if( $$var > 0 ) |
| 100 | + echo( "{$desc}: {$$var}\n" ); |
| 101 | + } |
| 102 | + |
86 | 103 | } else { |
87 | 104 | echo( "No suitable files could be found for import.\n" ); |
88 | 105 | } |
— | — | @@ -98,18 +115,18 @@ |
99 | 116 | } |
100 | 117 | |
101 | 118 | echo <<<END |
| 119 | +Imports images and other media files into the wiki |
102 | 120 | USAGE: php importImages.php [options] <dir> |
103 | 121 | |
104 | 122 | <dir> : Path to the directory containing images to be imported |
105 | 123 | |
106 | 124 | Options: |
| 125 | +--extensions=<exts> Comma-separated list of allowable extensions, defaults to \$wgFileExtensions |
| 126 | +--overwrite Overwrite existing images if a conflicting-named image is found |
107 | 127 | --user=<username> Set username of uploader, default 'Maintenance script' |
108 | 128 | --comment=<text> Set upload summary comment, default 'Importing image file' |
109 | 129 | --license=<code> Use an optional license template |
110 | 130 | |
111 | 131 | END; |
112 | 132 | exit(); |
113 | | -} |
114 | | - |
115 | | - |
| 133 | +} |
\ No newline at end of file |
Index: branches/liquidthreads/maintenance/tables.sql |
— | — | @@ -190,6 +190,9 @@ |
191 | 191 | -- Spaces are transformed into underscores in title storage. |
192 | 192 | page_title varchar(255) binary NOT NULL, |
193 | 193 | |
| 194 | + -- page_title in uppercase. Used for case-insensitive title searching. |
| 195 | + page_key varchar(255) binary NOT NULL, |
| 196 | + |
194 | 197 | -- Comma-separated set of permission keys indicating who |
195 | 198 | -- can move or edit the page. |
196 | 199 | page_restrictions tinyblob NOT NULL, |
— | — | @@ -224,6 +227,7 @@ |
225 | 228 | |
226 | 229 | PRIMARY KEY page_id (page_id), |
227 | 230 | UNIQUE INDEX name_title (page_namespace,page_title), |
| 231 | + INDEX name_key (page_namespace, page_key), |
228 | 232 | |
229 | 233 | -- Special-purpose indexes |
230 | 234 | INDEX (page_random), |
Index: branches/liquidthreads/skins/common/protect.js |
— | — | @@ -1,89 +1,94 @@ |
2 | | -function protectInitialize(tableId, labelText) { |
3 | | - if (document.createTextNode) { |
4 | | - var box = document.getElementById(tableId); |
5 | | - if (!box) |
6 | | - return false; |
| 2 | +/** |
| 3 | + * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox) |
| 4 | + * on the protection form |
| 5 | + * |
| 6 | + * @param String tableId Identifier of the table containing UI bits |
| 7 | + * @param String labelText Text to use for the checkbox label |
| 8 | + */ |
| 9 | +function protectInitialize( tableId, labelText ) { |
| 10 | + if( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) |
| 11 | + return false; |
| 12 | + |
| 13 | + var box = document.getElementById( tableId ); |
| 14 | + if( !box ) |
| 15 | + return false; |
| 16 | + |
| 17 | + var tbody = box.getElementsByTagName( 'tbody' )[0]; |
| 18 | + var row = document.createElement( 'tr' ); |
| 19 | + tbody.appendChild( row ); |
| 20 | + |
| 21 | + row.appendChild( document.createElement( 'td' ) ); |
| 22 | + var col = document.createElement( 'td' ); |
| 23 | + row.appendChild( col ); |
| 24 | + |
| 25 | + var check = document.createElement( 'input' ); |
| 26 | + check.id = 'mwProtectUnchained'; |
| 27 | + check.type = 'checkbox'; |
| 28 | + col.appendChild( check ); |
| 29 | + addClickHandler( check, protectChainUpdate ); |
7 | 30 | |
8 | | - var tbody = box.getElementsByTagName('tbody')[0]; |
9 | | - var row = document.createElement('tr'); |
10 | | - tbody.appendChild(row); |
| 31 | + col.appendChild( document.createTextNode( ' ' ) ); |
| 32 | + var label = document.createElement( 'label' ); |
| 33 | + label.setAttribute( 'for', 'mwProtectUnchained' ); |
| 34 | + label.appendChild( document.createTextNode( labelText ) ); |
| 35 | + col.appendChild( label ); |
11 | 36 | |
12 | | - row.appendChild(document.createElement('td')); |
13 | | - var col2 = document.createElement('td'); |
14 | | - row.appendChild(col2); |
15 | | - |
16 | | - var check = document.createElement('input'); |
17 | | - check.id = "mwProtectUnchained"; |
18 | | - check.type = "checkbox"; |
19 | | - check.onclick = protectChainUpdate; |
20 | | - col2.appendChild(check); |
21 | | - |
22 | | - var space = document.createTextNode(" "); |
23 | | - col2.appendChild(space); |
24 | | - |
25 | | - var label = document.createElement('label'); |
26 | | - label.setAttribute("for", "mwProtectUnchained"); |
27 | | - label.appendChild(document.createTextNode(labelText)); |
28 | | - col2.appendChild(label); |
29 | | - |
30 | | - if (protectAllMatch()) { |
31 | | - check.checked = false; |
32 | | - protectEnable(false); |
33 | | - } else { |
34 | | - check.checked = true; |
35 | | - protectEnable(true); |
36 | | - } |
37 | | - |
38 | | - allowCascade(); |
39 | | - |
40 | | - return true; |
41 | | - } |
42 | | - return false; |
| 37 | + check.checked = !protectAllMatch(); |
| 38 | + protectEnable( check.checked ); |
| 39 | + |
| 40 | + allowCascade(); |
| 41 | + |
| 42 | + return true; |
43 | 43 | } |
44 | 44 | |
45 | 45 | function allowCascade() { |
46 | | - var pr_types = document.getElementsByTagName("select"); |
47 | | - for (var i = 0; i < pr_types.length; i++) { |
48 | | - if (pr_types[i].id.match(/^mwProtect-level-/)) { |
49 | | - var selected_level = pr_types[i].getElementsByTagName("option")[pr_types[i].selectedIndex].value; |
50 | | - if ( !isCascadeableLevel(selected_level) ) { |
51 | | - document.getElementById('mwProtect-cascade').checked=false; |
52 | | - document.getElementById('mwProtect-cascade').disabled=true; |
| 46 | + var lists = protectSelectors(); |
| 47 | + for( var i = 0; i < lists.length; i++ ) { |
| 48 | + if( lists[i].selectedIndex > -1 ) { |
| 49 | + var items = lists[i].getElementsByTagName( 'option' ); |
| 50 | + var selected = items[ lists[i].selectedIndex ].value; |
| 51 | + if( wgCascadeableLevels.indexOf( selected ) == -1 ) { |
| 52 | + document.getElementById( 'mwProtect-cascade' ).checked = false; |
| 53 | + document.getElementById( 'mwProtect-cascade' ).disabled = true; |
53 | 54 | return false; |
54 | 55 | } |
55 | 56 | } |
56 | 57 | } |
57 | | - document.getElementById('mwProtect-cascade').disabled=false; |
| 58 | + document.getElementById( 'mwProtect-cascade' ).disabled = false; |
58 | 59 | return true; |
59 | 60 | } |
60 | 61 | |
61 | | -function isCascadeableLevel( level ) { |
62 | | - for (var k = 0; k < wgCascadeableLevels.length; k++) { |
63 | | - if ( wgCascadeableLevels[k] == level ) { |
64 | | - return true; |
65 | | - } |
66 | | - } |
67 | | - return false; |
68 | | -} |
69 | | - |
| 62 | +/** |
| 63 | + * When protection levels are locked together, update the rest |
| 64 | + * when one action's level changes |
| 65 | + * |
| 66 | + * @param Element source Level selector that changed |
| 67 | + */ |
70 | 68 | function protectLevelsUpdate(source) { |
71 | | - if (!protectUnchained()) { |
72 | | - protectUpdateAll(source.selectedIndex); |
73 | | - } |
| 69 | + if( !protectUnchained() ) |
| 70 | + protectUpdateAll( source.selectedIndex ); |
74 | 71 | allowCascade(); |
75 | 72 | } |
76 | 73 | |
| 74 | +/** |
| 75 | + * Update chain status and enable/disable various bits of the UI |
| 76 | + * when the user changes the "unlock move permissions" checkbox |
| 77 | + */ |
77 | 78 | function protectChainUpdate() { |
78 | | - if (protectUnchained()) { |
79 | | - protectEnable(true); |
| 79 | + if( protectUnchained() ) { |
| 80 | + protectEnable( true ); |
80 | 81 | } else { |
81 | 82 | protectChain(); |
82 | | - protectEnable(false); |
| 83 | + protectEnable( false ); |
83 | 84 | } |
84 | 85 | allowCascade(); |
85 | 86 | } |
86 | 87 | |
87 | | - |
| 88 | +/** |
| 89 | + * Are all actions protected at the same level? |
| 90 | + * |
| 91 | + * @return boolean |
| 92 | + */ |
88 | 93 | function protectAllMatch() { |
89 | 94 | var values = new Array(); |
90 | 95 | protectForSelectors(function(set) { |
— | — | @@ -97,17 +102,22 @@ |
98 | 103 | return true; |
99 | 104 | } |
100 | 105 | |
| 106 | +/** |
| 107 | + * Is protection chaining on or off? |
| 108 | + * |
| 109 | + * @return bool |
| 110 | + */ |
101 | 111 | function protectUnchained() { |
102 | | - var unchain = document.getElementById("mwProtectUnchained"); |
103 | | - if (!unchain) { |
104 | | - alert("This shouldn't happen"); |
105 | | - return false; |
106 | | - } |
107 | | - return unchain.checked; |
| 112 | + var unchain = document.getElementById( 'mwProtectUnchained' ); |
| 113 | + return unchain |
| 114 | + ? unchain.checked |
| 115 | + : true; // No control, so we need to let the user set both levels |
108 | 116 | } |
109 | 117 | |
| 118 | +/** |
| 119 | + * Find the highest-protected action and set all others to that level |
| 120 | + */ |
110 | 121 | function protectChain() { |
111 | | - // Find the highest-protected action and bump them all to this level |
112 | 122 | var maxIndex = -1; |
113 | 123 | protectForSelectors(function(set) { |
114 | 124 | if (set.selectedIndex > maxIndex) { |
— | — | @@ -117,6 +127,11 @@ |
118 | 128 | protectUpdateAll(maxIndex); |
119 | 129 | } |
120 | 130 | |
| 131 | +/** |
| 132 | + * Protect all actions at the specified level |
| 133 | + * |
| 134 | + * @param int index Protection level |
| 135 | + */ |
121 | 136 | function protectUpdateAll(index) { |
122 | 137 | protectForSelectors(function(set) { |
123 | 138 | if (set.selectedIndex != index) { |
— | — | @@ -125,6 +140,11 @@ |
126 | 141 | }); |
127 | 142 | } |
128 | 143 | |
| 144 | +/** |
| 145 | + * Apply a callback to each protection selector |
| 146 | + * |
| 147 | + * @param callable func Callback function |
| 148 | + */ |
129 | 149 | function protectForSelectors(func) { |
130 | 150 | var selectors = protectSelectors(); |
131 | 151 | for (var i = 0; i < selectors.length; i++) { |
— | — | @@ -132,6 +152,11 @@ |
133 | 153 | } |
134 | 154 | } |
135 | 155 | |
| 156 | +/** |
| 157 | + * Get a list of all protection selectors on the page |
| 158 | + * |
| 159 | + * @return Array |
| 160 | + */ |
136 | 161 | function protectSelectors() { |
137 | 162 | var all = document.getElementsByTagName("select"); |
138 | 163 | var ours = new Array(); |
— | — | @@ -144,6 +169,11 @@ |
145 | 170 | return ours; |
146 | 171 | } |
147 | 172 | |
| 173 | +/** |
| 174 | + * Enable/disable protection selectors |
| 175 | + * |
| 176 | + * @param boolean val Enable? |
| 177 | + */ |
148 | 178 | function protectEnable(val) { |
149 | 179 | // fixme |
150 | 180 | var first = true; |
Index: branches/liquidthreads/skins/common/shared.css |
— | — | @@ -27,3 +27,25 @@ |
28 | 28 | float: right; |
29 | 29 | margin-left: 5px; |
30 | 30 | } |
| 31 | + |
| 32 | +/** |
| 33 | + * File histories |
| 34 | + */ |
| 35 | +table.filehistory { |
| 36 | + border:1px solid #ccc; |
| 37 | + border-collapse:collapse; |
| 38 | +} |
| 39 | + |
| 40 | +table.filehistory th, |
| 41 | +table.filehistory td { |
| 42 | + padding: 0 0.2em 0 0.2em; |
| 43 | + vertical-align:top; |
| 44 | + border:1px solid #ccc; |
| 45 | +} |
| 46 | +table.filehistory th { |
| 47 | + text-align: left; |
| 48 | +} |
| 49 | +table.filehistory td.mw-imagepage-filesize, |
| 50 | +table.filehistory th.mw-imagepage-filesize { |
| 51 | + white-space:nowrap; |
| 52 | +} |
Index: branches/liquidthreads/skins/common/wikibits.js |
— | — | @@ -1302,8 +1302,31 @@ |
1303 | 1303 | } |
1304 | 1304 | } |
1305 | 1305 | |
| 1306 | +/** |
| 1307 | + * Add an event handler to an element |
| 1308 | + * |
| 1309 | + * @param Element element Element to add handler to |
| 1310 | + * @param String attach Event to attach to |
| 1311 | + * @param callable handler Event handler callback |
| 1312 | + */ |
| 1313 | +function addHandler( element, attach, handler ) { |
| 1314 | + if( window.addEventListener ) { |
| 1315 | + element.addEventListener( attach, handler, false ); |
| 1316 | + } else if( window.attachEvent ) { |
| 1317 | + element.attachEvent( 'on' + attach, handler ); |
| 1318 | + } |
| 1319 | +} |
| 1320 | + |
| 1321 | +/** |
| 1322 | + * Add a click event handler to an element |
| 1323 | + * |
| 1324 | + * @param Element element Element to add handler to |
| 1325 | + * @param callable handler Event handler callback |
| 1326 | + */ |
| 1327 | +function addClickHandler( element, handler ) { |
| 1328 | + addHandler( element, 'click', handler ); |
| 1329 | +} |
1306 | 1330 | //note: all skins should call runOnloadHook() at the end of html output, |
1307 | 1331 | // so the below should be redundant. It's there just in case. |
1308 | 1332 | hookEvent("load", runOnloadHook); |
1309 | | - |
1310 | | -hookEvent("load", mwSetupToolbar); |
| 1333 | +hookEvent("load", mwSetupToolbar); |
\ No newline at end of file |
Index: branches/liquidthreads/skins/monobook/main.css |
— | — | @@ -1904,4 +1904,4 @@ |
1905 | 1905 | text-align: center; |
1906 | 1906 | vertical-align: middle; |
1907 | 1907 | font-size: 90%; |
1908 | | -} |
| 1908 | +} |
\ No newline at end of file |
Property changes on: branches/liquidthreads |
___________________________________________________________________ |
Modified: svnmerge-integrated |
1909 | 1909 | - /trunk/phase3:1-24414 |
1910 | 1910 | + /trunk/phase3:1-24479 |