summaryrefslogtreecommitdiff
path: root/maintenance/language
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/language')
-rw-r--r--maintenance/language/StatOutputs.php47
-rw-r--r--maintenance/language/checkDupeMessages.php3
-rw-r--r--maintenance/language/checkLanguage.inc262
-rw-r--r--maintenance/language/countMessages.php72
-rw-r--r--maintenance/language/generateCollationData.php19
-rw-r--r--maintenance/language/generateNormalizerDataAr.php (renamed from maintenance/language/generateNormalizerData.php)72
-rw-r--r--maintenance/language/generateNormalizerDataMl.php69
-rw-r--r--maintenance/language/generateUtf8Case.php129
-rw-r--r--maintenance/language/langmemusage.php2
-rw-r--r--maintenance/language/languages.inc209
-rw-r--r--maintenance/language/listVariants.php73
-rw-r--r--maintenance/language/messageTypes.inc872
-rw-r--r--maintenance/language/messages.inc4239
-rw-r--r--maintenance/language/rebuildLanguage.php126
-rw-r--r--maintenance/language/transstat.php41
-rw-r--r--maintenance/language/validate.php64
-rw-r--r--maintenance/language/writeMessagesArray.inc283
-rw-r--r--maintenance/language/zhtable/Makefile.py70
-rw-r--r--maintenance/language/zhtable/trad2simp_supp_unset.manual0
-rw-r--r--maintenance/language/zhtable/tradphrases.manual1
20 files changed, 713 insertions, 5940 deletions
diff --git a/maintenance/language/StatOutputs.php b/maintenance/language/StatOutputs.php
index e9d8c86d..31ce7024 100644
--- a/maintenance/language/StatOutputs.php
+++ b/maintenance/language/StatOutputs.php
@@ -1,7 +1,4 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) {
- die();
-}
/**
* Statistic output classes.
*
@@ -27,57 +24,78 @@ if ( !defined( 'MEDIAWIKI' ) ) {
*/
/** A general output object. Need to be overriden */
-class statsOutput {
+class StatsOutput {
function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
- return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+ wfSuppressWarnings();
+ $return = sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+ wfRestoreWarnings();
+
+ return $return;
}
# Override the following methods
function heading() {
}
+
function footer() {
}
+
function blockstart() {
}
+
function blockend() {
}
+
function element( $in, $heading = false ) {
}
}
/** Outputs WikiText */
-class wikiStatsOutput extends statsOutput {
+class WikiStatsOutput extends StatsOutput {
function heading() {
global $wgDummyLanguageCodes;
$version = SpecialVersion::getVersion( 'nodb' );
echo "'''Statistics are based on:''' <code>" . $version . "</code>\n\n";
- echo "'''Note:''' These statistics can be generated by running <code>php maintenance/language/transstat.php</code>.\n\n";
- echo "For additional information on specific languages (the message names, the actual problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
+ echo "'''Note:''' These statistics can be generated by running " .
+ "<code>php maintenance/language/transstat.php</code>.\n\n";
+ echo "For additional information on specific languages (the message names, the actual " .
+ "problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
echo 'English (en) is excluded because it is the default localization';
if ( is_array( $wgDummyLanguageCodes ) ) {
$dummyCodes = array();
foreach ( $wgDummyLanguageCodes as $dummyCode => $correctCode ) {
$dummyCodes[] = Language::fetchLanguageName( $dummyCode ) . ' (' . $dummyCode . ')';
}
- echo ', as well as the following languages that are not intended for system message translations, usually because they redirect to other language codes: ' . implode( ', ', $dummyCodes );
+ echo ', as well as the following languages that are not intended for ' .
+ 'system message translations, usually because they redirect to other ' .
+ 'language codes: ' . implode( ', ', $dummyCodes );
}
echo ".\n\n"; # dot to end sentence
- echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
+ echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; ' .
+ 'border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
}
+
function footer() {
echo "|}\n";
}
+
function blockstart() {
echo "|-\n";
}
+
function blockend() {
echo '';
}
+
function element( $in, $heading = false ) {
echo ( $heading ? '!' : '|' ) . "$in\n";
}
+
function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
- $v = @round( 255 * $subset / $total );
+ wfSuppressWarnings();
+ $v = round( 255 * $subset / $total );
+ wfRestoreWarnings();
+
if ( $revert ) {
# Weigh reverse with factor 20 so coloring takes effect more quickly as
# this option is used solely for reporting 'bad' percentages.
@@ -100,25 +118,28 @@ class wikiStatsOutput extends statsOutput {
$color = $red . $green . $blue;
$percent = parent::formatPercent( $subset, $total, $revert, $accuracy );
+
return 'style="background-color:#' . $color . ';"|' . $percent;
}
}
/** Output text. To be used on a terminal for example. */
-class textStatsOutput extends statsOutput {
+class TextStatsOutput extends StatsOutput {
function element( $in, $heading = false ) {
echo $in . "\t";
}
+
function blockend() {
echo "\n";
}
}
/** csv output. Some people love excel */
-class csvStatsOutput extends statsOutput {
+class CsvStatsOutput extends StatsOutput {
function element( $in, $heading = false ) {
echo $in . ";";
}
+
function blockend() {
echo "\n";
}
diff --git a/maintenance/language/checkDupeMessages.php b/maintenance/language/checkDupeMessages.php
index 381ddae1..5d482442 100644
--- a/maintenance/language/checkDupeMessages.php
+++ b/maintenance/language/checkDupeMessages.php
@@ -67,8 +67,7 @@ if ( $runTest ) {
$messagesFileC = $messagesDir . 'Messages' . $langCodeFC . '.php';
if ( file_exists( $messagesFile ) && file_exists( $messagesFileC ) ) {
$run = true;
- }
- else {
+ } else {
echo "Messages file(s) could not be found.\nMake sure both files are exists.\n";
}
}
diff --git a/maintenance/language/checkLanguage.inc b/maintenance/language/checkLanguage.inc
index 4b49ada3..990f2585 100644
--- a/maintenance/language/checkLanguage.inc
+++ b/maintenance/language/checkLanguage.inc
@@ -41,7 +41,7 @@ class CheckLanguageCLI {
/**
* Constructor.
- * @param $options array Options for script.
+ * @param array $options Options for script.
*/
public function __construct( array $options ) {
if ( isset( $options['help'] ) ) {
@@ -89,7 +89,7 @@ class CheckLanguageCLI {
$this->output = $options['output'];
}
- $this->L = new languages( $this->includeExif );
+ $this->L = new Languages( $this->includeExif );
}
/**
@@ -118,7 +118,7 @@ class CheckLanguageCLI {
/**
* Get the checks that can easily be treated by non-speakers of the language.
- * @return Array A list of the easy checks.
+ * @return array A list of the easy checks.
*/
protected function easyChecks() {
return array(
@@ -182,21 +182,25 @@ class CheckLanguageCLI {
return array(
'untranslated' => '$1 message(s) of $2 are not translated to $3, but exist in en:',
'duplicate' => '$1 message(s) of $2 are translated the same in en and $3:',
- 'obsolete' => '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
+ 'obsolete' =>
+ '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
'variables' => '$1 message(s) of $2 in $3 don\'t match the variables used in en:',
'plural' => '$1 message(s) of $2 in $3 don\'t use {{plural}} while en uses:',
'empty' => '$1 message(s) of $2 in $3 are empty or -:',
'whitespace' => '$1 message(s) of $2 in $3 have trailing whitespace:',
'xhtml' => '$1 message(s) of $2 in $3 contain illegal XHTML:',
- 'chars' => '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
+ 'chars' =>
+ '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
'links' => '$1 message(s) of $2 in $3 have problematic link(s):',
'unbalanced' => '$1 message(s) of $2 in $3 have unbalanced {[]}:',
'namespace' => '$1 namespace name(s) of $2 are not translated to $3, but exist in en:',
- 'projecttalk' => '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
+ 'projecttalk' =>
+ '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
'magic' => '$1 magic word(s) of $2 are not translated to $3, but exist in en:',
'magic-old' => '$1 magic word(s) of $2 do not exist in en, but exist in $3:',
'magic-over' => '$1 magic word(s) of $2 in $3 do not contain the original en word(s):',
- 'magic-case' => '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
+ 'magic-case' =>
+ '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
'special' => '$1 special page alias(es) of $2 are not translated to $3, but exist in en:',
'special-old' => '$1 special page alias(es) of $2 do not exist in en, but exist in $3:',
);
@@ -216,35 +220,49 @@ Parameters:
--all: Check all customized languages.
--level: Show the following display level (default: 2):
* 0: Skip the checks (useful for checking syntax).
- * 1: Show only the stub headers and number of wrong messages, without list of messages.
- * 2: Show only the headers and the message keys, without the message values.
- * 3: Show both the headers and the complete messages, with both keys and values.
+ * 1: Show only the stub headers and number of wrong messages, without
+ list of messages.
+ * 2: Show only the headers and the message keys, without the message
+ values.
+ * 3: Show both the headers and the complete messages, with both keys and
+ values.
--links: Link the message values (default off).
--prefix: prefix to add to links.
- --wikilang: For the links, what is the content language of the wiki to display the output in (default en).
- --noexif: Do not check for Exif messages (a bit hard and boring to translate), if you know
- that they are currently not translated and want to focus on other problems (default off).
+ --wikilang: For the links, what is the content language of the wiki to
+ display the output in (default en).
+ --noexif: Do not check for Exif messages (a bit hard and boring to
+ translate), if you know what they are currently not translated and want
+ to focus on other problems (default off).
--whitelist: Do only the following checks (form: code,code).
--blacklist: Do not do the following checks (form: code,code).
- --easy: Do only the easy checks, which can be treated by non-speakers of the language.
-
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
- * untranslated: Messages which are required to translate, but are not translated.
- * duplicate: Messages which translation equal to fallback
- * obsolete: Messages which are untranslatable or do not exist, but are translated.
- * variables: Messages without variables which should be used, or with variables which should not be used.
+ --easy: Do only the easy checks, which can be treated by non-speakers of
+ the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+ * untranslated: Messages which are required to translate, but are not
+ translated.
+ * duplicate: Messages which translation equal to fallback.
+ * obsolete: Messages which are untranslatable or do not exist, but are
+ translated.
+ * variables: Messages without variables which should be used, or with
+ variables which should not be used.
* empty: Empty messages and messages that contain only -.
* whitespace: Messages which have trailing whitespace.
- * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+ * xhtml: Messages which are not well-formed XHTML (checks only few common
+ errors).
* chars: Messages with hidden characters.
* links: Messages which contains broken links to pages (does not find all).
- * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+ * unbalanced: Messages which contains unequal numbers of opening {[ and
+ closing ]}.
* namespace: Namespace names that were not translated.
- * projecttalk: Namespace names and aliases where the project talk does not contain $1.
+ * projecttalk: Namespace names and aliases where the project talk does not
+ contain $1.
* magic: Magic words that were not translated.
* magic-old: Magic words which do not exist.
* magic-over: Magic words that override the original English word.
- * magic-case: Magic words whose translation changes the case-sensitivity of the original English word.
+ * magic-case: Magic words whose translation changes the case-sensitivity of
+ the original English word.
* special: Special page names that were not translated.
* special-old: Special page names which do not exist.
@@ -291,6 +309,17 @@ ENDS;
$this->results[$this->code] = $this->checkLanguage( $this->code );
}
}
+
+ $results = $this->results;
+ foreach ( $results as $code => $checks ) {
+ foreach ( $checks as $check => $messages ) {
+ foreach ( $messages as $key => $details ) {
+ if ( $this->isCheckBlacklisted( $check, $code, $key ) ) {
+ unset( $this->results[$code][$check][$key] );
+ }
+ }
+ }
+ }
}
/**
@@ -298,14 +327,58 @@ ENDS;
* @return array The list of checks which should not be executed.
*/
protected function getCheckBlacklist() {
+ static $blacklist = null;
+
+ if ( $blacklist !== null ) {
+ return $blacklist;
+ }
+
+ // @codingStandardsIgnoreStart Ignore that globals should have a "wg" prefix.
global $checkBlacklist;
+ // @codingStandardsIgnoreEnd
+
+ $blacklist = $checkBlacklist;
+
+ wfRunHooks( 'LocalisationChecksBlacklist', array( &$blacklist ) );
+
+ return $blacklist;
+ }
+
+ /**
+ * Verify whether a check is blacklisted.
+ *
+ * @param string $check Check name
+ * @param string $code Language code
+ * @param string|bool $message Message name, or False for a whole language
+ * @return bool Whether the check is blacklisted
+ */
+ protected function isCheckBlacklisted( $check, $code, $message ) {
+ $blacklist = $this->getCheckBlacklist();
+
+ foreach ( $blacklist as $item ) {
+ if ( isset( $item['check'] ) && $check !== $item['check'] ) {
+ continue;
+ }
- return $checkBlacklist;
+ if ( isset( $item['code'] ) && !in_array( $code, $item['code'] ) ) {
+ continue;
+ }
+
+ if ( isset( $item['message'] ) &&
+ ( $message === false || !in_array( $message, $item['message'] ) )
+ ) {
+ continue;
+ }
+
+ return true;
+ }
+
+ return false;
}
/**
* Check a language.
- * @param $code string The language code.
+ * @param string $code The language code.
* @throws MWException
* @return array The results.
*/
@@ -319,11 +392,8 @@ ENDS;
}
$checkFunctions = $this->getChecks();
- $checkBlacklist = $this->getCheckBlacklist();
foreach ( $this->checks as $check ) {
- if ( isset( $checkBlacklist[$code] ) &&
- in_array( $check, $checkBlacklist[$code] )
- ) {
+ if ( $this->isCheckBlacklisted( $check, $code, false ) ) {
$results[$check] = array();
continue;
}
@@ -340,8 +410,8 @@ ENDS;
/**
* Format a message key.
- * @param $key string The message key.
- * @param $code string The language code.
+ * @param string $key The message key.
+ * @param string $code The language code.
* @return string The formatted message key.
*/
protected function formatKey( $key, $code ) {
@@ -407,7 +477,8 @@ ENDS;
*/
function outputWiki() {
$detailText = '';
- $rows[] = '! Language !! Code !! Total !! ' . implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
+ $rows[] = '! Language !! Code !! Total !! ' .
+ implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
foreach ( $this->results as $code => $results ) {
$detailTextForLang = "==$code==\n";
$numbers = array();
@@ -447,6 +518,7 @@ ENDS;
$tableRows = implode( "\n|-\n", $rows );
$version = SpecialVersion::getVersion( 'nodb' );
+ // @codingStandardsIgnoreStart Long line.
echo <<<EOL
'''Check results are for:''' <code>$version</code>
@@ -458,6 +530,7 @@ $tableRows
$detailText
EOL;
+ // @codingStandardsIgnoreEnd
}
/**
@@ -485,8 +558,8 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
/**
* Constructor.
- * @param $options array Options for script.
- * @param $extension string The extension name (or names).
+ * @param array $options Options for script.
+ * @param string $extension The extension name (or names).
*/
public function __construct( array $options, $extension ) {
if ( isset( $options['help'] ) ) {
@@ -539,19 +612,19 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
if ( $extension == 'all' ) {
foreach ( MessageGroups::singleton()->getGroups() as $group ) {
if ( strpos( $group->getId(), 'ext-' ) === 0 && !$group->isMeta() ) {
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
}
} elseif ( $extension == 'wikimedia' ) {
$wikimedia = MessageGroups::getGroup( 'ext-0-wikimedia' );
foreach ( $wikimedia->wmfextensions() as $extension ) {
$group = MessageGroups::getGroup( $extension );
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
} elseif ( $extension == 'flaggedrevs' ) {
foreach ( MessageGroups::singleton()->getGroups() as $group ) {
if ( strpos( $group->getId(), 'ext-flaggedrevs-' ) === 0 && !$group->isMeta() ) {
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
}
} else {
@@ -559,7 +632,7 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
foreach ( $extensions as $extension ) {
$group = MessageGroups::getGroup( 'ext-' . $extension );
if ( $group ) {
- $extension = new extensionLanguages( $group );
+ $extension = new ExtensionLanguages( $group );
$this->extensions[] = $extension;
} else {
print "No such extension $extension.\n";
@@ -589,7 +662,7 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
/**
* Get the checks that can easily be treated by non-speakers of the language.
- * @return arrayA list of the easy checks.
+ * @return array A list of the easy checks.
*/
protected function easyChecks() {
return array(
@@ -603,34 +676,50 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
*/
protected function help() {
return <<<ENDS
-Run this script to check the status of a specific language in extensions, or all of them.
-Command line settings are in form --parameter[=value], except for the first one.
+Run this script to check the status of a specific language in extensions, or
+all of them. Command line settings are in form --parameter[=value], except for
+the first one.
Parameters:
- * First parameter (mandatory): Extension name, multiple extension names (separated by commas), "all" for all the extensions, "wikimedia" for extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs extension messages.
+ * First parameter (mandatory): Extension name, multiple extension names
+ (separated by commas), "all" for all the extensions, "wikimedia" for
+ extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs
+ extension messages.
* lang: Language code (default: the installation default language).
* help: Show this help.
* level: Show the following display level (default: 2).
* links: Link the message values (default off).
- * wikilang: For the links, what is the content language of the wiki to display the output in (default en).
+ * wikilang: For the links, what is the content language of the wiki to
+ display the output in (default en).
* whitelist: Do only the following checks (form: code,code).
* blacklist: Do not perform the following checks (form: code,code).
- * easy: Do only the easy checks, which can be treated by non-speakers of the language.
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
- * untranslated: Messages which are required to translate, but are not translated.
- * duplicate: Messages which translation equal to fallback
+ * easy: Do only the easy checks, which can be treated by non-speakers of
+ the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+ * untranslated: Messages which are required to translate, but are not
+ translated.
+ * duplicate: Messages which translation equal to fallback.
* obsolete: Messages which are untranslatable, but translated.
- * variables: Messages without variables which should be used, or with variables which should not be used.
+ * variables: Messages without variables which should be used, or with
+ variables which should not be used.
* empty: Empty messages.
* whitespace: Messages which have trailing whitespace.
- * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+ * xhtml: Messages which are not well-formed XHTML (checks only few common
+ errors).
* chars: Messages with hidden characters.
* links: Messages which contains broken links to pages (does not find all).
- * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+ * unbalanced: Messages which contains unequal numbers of opening {[ and
+ closing ]}.
+
Display levels (default: 2):
* 0: Skip the checks (useful for checking syntax).
- * 1: Show only the stub headers and number of wrong messages, without list of messages.
- * 2: Show only the headers and the message keys, without the message values.
- * 3: Show both the headers and the complete messages, with both keys and values.
+ * 1: Show only the stub headers and number of wrong messages, without list
+ of messages.
+ * 2: Show only the headers and the message keys, without the message
+ values.
+ * 3: Show both the headers and the complete messages, with both keys and
+ values.
ENDS;
}
@@ -644,7 +733,7 @@ ENDS;
/**
* Check a language and show the results.
- * @param $code string The language code.
+ * @param string $code The language code.
* @throws MWException
*/
protected function checkLanguage( $code ) {
@@ -675,52 +764,21 @@ ENDS;
}
}
-# Blacklist some checks for some languages
+// Blacklist some checks for some languages or some messages
+// Possible keys of the sub arrays are: 'check', 'code' and 'message'.
$checkBlacklist = array(
-#'code' => array( 'check1', 'check2' ... )
- 'az' => array( 'plural' ),
- 'bo' => array( 'plural' ),
- 'cdo' => array( 'plural' ),
- 'dz' => array( 'plural' ),
- 'id' => array( 'plural' ),
- 'fa' => array( 'plural' ),
- 'gan' => array( 'plural' ),
- 'gan-hans' => array( 'plural' ),
- 'gan-hant' => array( 'plural' ),
- 'gn' => array( 'plural' ),
- 'hak' => array( 'plural' ),
- 'hu' => array( 'plural' ),
- 'ja' => array( 'plural' ), // Does not use plural
- 'jv' => array( 'plural' ),
- 'ka' => array( 'plural' ),
- 'kk-arab' => array( 'plural' ),
- 'kk-cyrl' => array( 'plural' ),
- 'kk-latn' => array( 'plural' ),
- 'km' => array( 'plural' ),
- 'kn' => array( 'plural' ),
- 'ko' => array( 'plural' ),
- 'lzh' => array( 'plural' ),
- 'mn' => array( 'plural' ),
- 'ms' => array( 'plural' ),
- 'my' => array( 'plural', 'chars' ), // Uses a lot zwnj
- 'sah' => array( 'plural' ),
- 'sq' => array( 'plural' ),
- 'tet' => array( 'plural' ),
- 'th' => array( 'plural' ),
- 'to' => array( 'plural' ),
- 'tr' => array( 'plural' ),
- 'vi' => array( 'plural' ),
- 'wuu' => array( 'plural' ),
- 'xmf' => array( 'plural' ),
- 'yo' => array( 'plural' ),
- 'yue' => array( 'plural' ),
- 'zh' => array( 'plural' ),
- 'zh-classical' => array( 'plural' ),
- 'zh-cn' => array( 'plural' ),
- 'zh-hans' => array( 'plural' ),
- 'zh-hant' => array( 'plural' ),
- 'zh-hk' => array( 'plural' ),
- 'zh-sg' => array( 'plural' ),
- 'zh-tw' => array( 'plural' ),
- 'zh-yue' => array( 'plural' ),
+ array(
+ 'check' => 'plural',
+ 'code' => array( 'az', 'bo', 'cdo', 'dz', 'id', 'fa', 'gan', 'gan-hans',
+ 'gan-hant', 'gn', 'hak', 'hu', 'ja', 'jv', 'ka', 'kk-arab',
+ 'kk-cyrl', 'kk-latn', 'km', 'kn', 'ko', 'lzh', 'mn', 'ms',
+ 'my', 'sah', 'sq', 'tet', 'th', 'to', 'tr', 'vi', 'wuu', 'xmf',
+ 'yo', 'yue', 'zh', 'zh-classical', 'zh-cn', 'zh-hans',
+ 'zh-hant', 'zh-hk', 'zh-sg', 'zh-tw', 'zh-yue'
+ ),
+ ),
+ array(
+ 'check' => 'chars',
+ 'code' => array( 'my' ),
+ ),
);
diff --git a/maintenance/language/countMessages.php b/maintenance/language/countMessages.php
deleted file mode 100644
index 95a7154b..00000000
--- a/maintenance/language/countMessages.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Count how many messages we have defined for each language.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- */
-
-require_once __DIR__ . '/../Maintenance.php';
-
-/**
- * Maintenance script that counts how many messages we have defined
- * for each language.
- *
- * @ingroup MaintenanceLanguage
- */
-class CountMessages extends Maintenance {
- public function __construct() {
- parent::__construct();
- $this->mDescription = "Count how many messages we have defined for each language";
- }
-
- public function execute() {
- global $IP;
- $dir = $this->getArg( 0, "$IP/languages/messages" );
- $total = 0;
- $nonZero = 0;
- foreach ( glob( "$dir/*.php" ) as $file ) {
- $baseName = basename( $file );
- if ( !preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $baseName, $m ) ) {
- continue;
- }
-
- $numMessages = $this->getNumMessages( $file );
- // print "$code: $numMessages\n";
- $total += $numMessages;
- if ( $numMessages > 0 ) {
- $nonZero ++;
- }
- }
- $this->output( "\nTotal: $total\n" );
- $this->output( "Languages: $nonZero\n" );
- }
-
- private function getNumMessages( $file ) {
- // Separate function to limit scope
- require $file;
- if ( isset( $messages ) ) {
- return count( $messages );
- } else {
- return 0;
- }
- }
-}
-
-$maintClass = "CountMessages";
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateCollationData.php b/maintenance/language/generateCollationData.php
index fcf2c960..973cf7bc 100644
--- a/maintenance/language/generateCollationData.php
+++ b/maintenance/language/generateCollationData.php
@@ -48,7 +48,7 @@ class GenerateCollationData extends Maintenance {
* Important tertiary weights from UTS #10 section 7.2
*/
const NORMAL_UPPERCASE = 0x08;
- const NORMAL_HIRAGANA = 0X0E;
+ const NORMAL_HIRAGANA = 0x0E;
public function __construct() {
parent::__construct();
@@ -158,7 +158,8 @@ class GenerateCollationData extends Maintenance {
// people like to use that as a fake no header symbol.
$category = substr( $data['gc'], 0, 1 );
if ( strpos( 'LNPS', $category ) === false
- && $data['cp'] !== '0020' ) {
+ && $data['cp'] !== '0020'
+ ) {
return;
}
$cp = hexdec( $data['cp'] );
@@ -178,8 +179,8 @@ class GenerateCollationData extends Maintenance {
// Calculate implicit weight per UTS #10 v6.0.0, sec 7.1.3
if ( $data['UIdeo'] === 'Y' ) {
if ( $data['block'] == 'CJK Unified Ideographs'
- || $data['block'] == 'CJK Compatibility Ideographs' )
- {
+ || $data['block'] == 'CJK Compatibility Ideographs'
+ ) {
$base = 0xFB40;
} else {
$base = 0xFB80;
@@ -248,8 +249,8 @@ class GenerateCollationData extends Maintenance {
}
$this->weights[$cp] = $primary;
if ( $tertiary === '.0008'
- || $tertiary === '.000E' )
- {
+ || $tertiary === '.000E'
+ ) {
$goodTertiaryChars[$cp] = true;
}
}
@@ -325,7 +326,7 @@ class GenerateCollationData extends Maintenance {
$char = codepointToUtf8( $cp );
$headerChars[] = $char;
if ( $primaryCollator->compare( $char, $prevChar ) <= 0 ) {
- $numOutOfOrder ++;
+ $numOutOfOrder++;
/*
printf( "Out of order: U+%05X > U+%05X\n",
utf8ToCodepoint( $prevChar ),
@@ -390,6 +391,7 @@ class UcdXmlReader {
}
while ( $this->xml->name !== 'ucd' && $this->xml->read() );
$this->xml->read();
+
return $this->xml;
}
@@ -403,6 +405,7 @@ class UcdXmlReader {
while ( $this->xml->moveToNextAttribute() ) {
$attrs[$this->xml->name] = $this->xml->value;
}
+
return $attrs;
}
@@ -460,9 +463,9 @@ class UcdXmlReader {
}
}
$xml->close();
+
return $this->blocks;
}
-
}
$maintClass = 'GenerateCollationData';
diff --git a/maintenance/language/generateNormalizerData.php b/maintenance/language/generateNormalizerDataAr.php
index 216445e4..ece0450f 100644
--- a/maintenance/language/generateNormalizerData.php
+++ b/maintenance/language/generateNormalizerDataAr.php
@@ -1,6 +1,6 @@
<?php
/**
- * Generates normalizer data files for Arabic and Malayalam.
+ * Generates the normalizer data file for Arabic.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,46 +21,43 @@
* @ingroup MaintenanceLanguage
*/
-require_once __DIR__ . '/../../includes/normal/UtfNormalUtil.php';
-
require_once __DIR__ . '/../Maintenance.php';
/**
- * Generates normalizer data files for Arabic and Malayalam.
+ * Generates the normalizer data file for Arabic.
* For NFC see includes/normal.
*
* @ingroup MaintenanceLanguage
*/
-class GenerateNormalizerData extends Maintenance {
- public $dataFile;
-
+class GenerateNormalizerDataAr extends Maintenance {
public function __construct() {
parent::__construct();
+ $this->mDescription = 'Generate the normalizer data file for Arabic';
$this->addOption( 'unicode-data-file', 'The local location of the data file ' .
'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
}
+ public function getDbType() {
+ return Maintenance::DB_NONE;
+ }
+
public function execute() {
if ( !$this->hasOption( 'unicode-data-file' ) ) {
- $this->dataFile = 'UnicodeData.txt';
- if ( !file_exists( $this->dataFile ) ) {
- $this->error( "Unable to find UnicodeData.txt. Please specify its location with --unicode-data-file=<FILE>" );
+ $dataFile = 'UnicodeData.txt';
+ if ( !file_exists( $dataFile ) ) {
+ $this->error( "Unable to find UnicodeData.txt. Please specify " .
+ "its location with --unicode-data-file=<FILE>" );
exit( 1 );
}
} else {
- $this->dataFile = $this->getOption( 'unicode-data-file' );
- if ( !file_exists( $this->dataFile ) ) {
+ $dataFile = $this->getOption( 'unicode-data-file' );
+ if ( !file_exists( $dataFile ) ) {
$this->error( 'Unable to find the specified data file.' );
exit( 1 );
}
}
- $this->generateArabic();
- $this->generateMalayalam();
- }
-
- function generateArabic() {
- $file = fopen( $this->dataFile, 'r' );
+ $file = fopen( $dataFile, 'r' );
if ( !$file ) {
$this->error( 'Unable to open the data file.' );
exit( 1 );
@@ -74,7 +71,9 @@ class GenerateNormalizerData extends Maintenance {
'Canonical_Combining_Class',
'Bidi_Class',
'Decomposition_Type_Mapping',
- 'Numeric_Type_Value',
+ 'Numeric_Type_Value_6',
+ 'Numeric_Type_Value_7',
+ 'Numeric_Type_Value_8',
'Bidi_Mirrored',
'Unicode_1_Name',
'ISO_Comment',
@@ -104,15 +103,15 @@ class GenerateNormalizerData extends Maintenance {
$code = base_convert( $data['Code'], 16, 10 );
if ( ( $code >= 0xFB50 && $code <= 0xFDFF ) # Arabic presentation forms A
- || ( $code >= 0xFE70 && $code <= 0xFEFF ) ) # Arabic presentation forms B
- {
+ || ( $code >= 0xFE70 && $code <= 0xFEFF ) # Arabic presentation forms B
+ ) {
if ( $data['Decomposition_Type_Mapping'] === '' ) {
// No decomposition
continue;
}
if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/',
- $data['Decomposition_Type_Mapping'], $m ) )
- {
+ $data['Decomposition_Type_Mapping'], $m )
+ ) {
$this->error( "Can't parse Decomposition_Type/Mapping on line $lineNum" );
$this->error( $line );
continue;
@@ -128,32 +127,7 @@ class GenerateNormalizerData extends Maintenance {
file_put_contents( "$IP/serialized/normalize-ar.ser", serialize( $pairs ) );
echo "ar: " . count( $pairs ) . " pairs written.\n";
}
-
- function generateMalayalam() {
- $hexPairs = array(
- # From http://unicode.org/versions/Unicode5.1.0/#Malayalam_Chillu_Characters
- '0D23 0D4D 200D' => '0D7A',
- '0D28 0D4D 200D' => '0D7B',
- '0D30 0D4D 200D' => '0D7C',
- '0D32 0D4D 200D' => '0D7D',
- '0D33 0D4D 200D' => '0D7E',
-
- # From http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46413
- '0D15 0D4D 200D' => '0D7F',
- );
-
- $pairs = array();
- foreach ( $hexPairs as $hexSource => $hexDest ) {
- $source = hexSequenceToUtf8( $hexSource );
- $dest = hexSequenceToUtf8( $hexDest );
- $pairs[$source] = $dest;
- }
-
- global $IP;
- file_put_contents( "$IP/serialized/normalize-ml.ser", serialize( $pairs ) );
- echo "ml: " . count( $pairs ) . " pairs written.\n";
- }
}
-$maintClass = 'GenerateNormalizerData';
+$maintClass = 'GenerateNormalizerDataAr';
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateNormalizerDataMl.php b/maintenance/language/generateNormalizerDataMl.php
new file mode 100644
index 00000000..c7237cfe
--- /dev/null
+++ b/maintenance/language/generateNormalizerDataMl.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Generates the normalizer data file for Malayalam.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup MaintenanceLanguage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Generates the normalizer data file for Malayalam.
+ * For NFC see includes/normal.
+ *
+ * @ingroup MaintenanceLanguage
+ */
+class GenerateNormalizerDataMl extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Generate the normalizer data file for Malayalam';
+ }
+
+ public function getDbType() {
+ return Maintenance::DB_NONE;
+ }
+
+ public function execute() {
+ $hexPairs = array(
+ # From http://unicode.org/versions/Unicode5.1.0/#Malayalam_Chillu_Characters
+ '0D23 0D4D 200D' => '0D7A',
+ '0D28 0D4D 200D' => '0D7B',
+ '0D30 0D4D 200D' => '0D7C',
+ '0D32 0D4D 200D' => '0D7D',
+ '0D33 0D4D 200D' => '0D7E',
+
+ # From http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46413
+ '0D15 0D4D 200D' => '0D7F',
+ );
+
+ $pairs = array();
+ foreach ( $hexPairs as $hexSource => $hexDest ) {
+ $source = hexSequenceToUtf8( $hexSource );
+ $dest = hexSequenceToUtf8( $hexDest );
+ $pairs[$source] = $dest;
+ }
+
+ global $IP;
+ file_put_contents( "$IP/serialized/normalize-ml.ser", serialize( $pairs ) );
+ echo "ml: " . count( $pairs ) . " pairs written.\n";
+ }
+}
+
+$maintClass = 'GenerateNormalizerDataMl';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateUtf8Case.php b/maintenance/language/generateUtf8Case.php
new file mode 100644
index 00000000..0fd32427
--- /dev/null
+++ b/maintenance/language/generateUtf8Case.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Generates Utf8Case.ser from the Unicode Character Database and
+ * supplementary files.
+ *
+ * Copyright © 2004, 2008 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup MaintenanceLanguage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Generates Utf8Case.ser from the Unicode Character Database and
+ * supplementary files.
+ *
+ * @ingroup MaintenanceLanguage
+ */
+class GenerateUtf8Case extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Generate Utf8Case.ser from the Unicode Character Database ' .
+ 'and supplementary files';
+ $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
+ 'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
+ }
+
+ public function getDbType() {
+ return Maintenance::DB_NONE;
+ }
+
+ public function execute() {
+ if ( !$this->hasOption( 'unicode-data-file' ) ) {
+ $dataFile = 'UnicodeData.txt';
+ if ( !file_exists( $dataFile ) ) {
+ $this->error( "Unable to find UnicodeData.txt. Please specify " .
+ "its location with --unicode-data-file=<FILE>" );
+ exit( 1 );
+ }
+ } else {
+ $dataFile = $this->getOption( 'unicode-data-file' );
+ if ( !file_exists( $dataFile ) ) {
+ $this->error( 'Unable to find the specified data file.' );
+ exit( 1 );
+ }
+ }
+
+ $file = fopen( $dataFile, 'r' );
+ if ( !$file ) {
+ $this->error( 'Unable to open the data file.' );
+ exit( 1 );
+ }
+
+ // For the file format, see http://www.unicode.org/reports/tr44/
+ $fieldNames = array(
+ 'Code',
+ 'Name',
+ 'General_Category',
+ 'Canonical_Combining_Class',
+ 'Bidi_Class',
+ 'Decomposition_Type_Mapping',
+ 'Numeric_Type_Value_6',
+ 'Numeric_Type_Value_7',
+ 'Numeric_Type_Value_8',
+ 'Bidi_Mirrored',
+ 'Unicode_1_Name',
+ 'ISO_Comment',
+ 'Simple_Uppercase_Mapping',
+ 'Simple_Lowercase_Mapping',
+ 'Simple_Titlecase_Mapping'
+ );
+
+ $upper = array();
+ $lower = array();
+
+ $lineNum = 0;
+ while ( false !== ( $line = fgets( $file ) ) ) {
+ ++$lineNum;
+
+ # Strip comments
+ $line = trim( substr( $line, 0, strcspn( $line, '#' ) ) );
+ if ( $line === '' ) {
+ continue;
+ }
+
+ # Split fields
+ $numberedData = explode( ';', $line );
+ $data = array();
+ foreach ( $fieldNames as $number => $name ) {
+ $data[$name] = $numberedData[$number];
+ }
+
+ $source = hexSequenceToUtf8( $data['Code'] );
+ if ( $data['Simple_Uppercase_Mapping'] ) {
+ $upper[$source] = hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
+ }
+ if ( $data['Simple_Lowercase_Mapping'] ) {
+ $lower[$source] = hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
+ }
+ }
+
+ global $IP;
+ file_put_contents( "$IP/serialized/Utf8Case.ser", serialize( array(
+ 'wikiUpperChars' => $upper,
+ 'wikiLowerChars' => $lower,
+ ) ) );
+ }
+}
+
+$maintClass = 'GenerateUtf8Case';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/langmemusage.php b/maintenance/language/langmemusage.php
index 14485f98..32cfcd7d 100644
--- a/maintenance/language/langmemusage.php
+++ b/maintenance/language/langmemusage.php
@@ -43,7 +43,7 @@ class LangMemUsage extends Maintenance {
$this->error( "You must compile PHP with --enable-memory-limit", true );
}
- $langtool = new languages();
+ $langtool = new Languages();
$memlast = $memstart = memory_get_usage();
$this->output( "Base memory usage: $memstart\n" );
diff --git a/maintenance/language/languages.inc b/maintenance/language/languages.inc
index 6070f4ab..fb496cbc 100644
--- a/maintenance/language/languages.inc
+++ b/maintenance/language/languages.inc
@@ -24,35 +24,47 @@
/**
* @ingroup MaintenanceLanguage
*/
-class languages {
- protected $mLanguages; # List of languages
+class Languages {
+ /** @var array List of languages */
+ protected $mLanguages;
- protected $mRawMessages; # Raw list of the messages in each language
- protected $mMessages; # Messages in each language (except for English), divided to groups
- protected $mFallback; # Fallback language in each language
- protected $mGeneralMessages; # General messages in English, divided to groups
- protected $mIgnoredMessages; # All the messages which should be exist only in the English file
- protected $mOptionalMessages; # All the messages which may be translated or not, depending on the language
+ /** @var array Raw list of the messages in each language */
+ protected $mRawMessages;
- protected $mNamespaceNames; # Namespace names
- protected $mNamespaceAliases; # Namespace aliases
- protected $mMagicWords; # Magic words
- protected $mSpecialPageAliases; # Special page aliases
+ /** @var array Messages in each language (except for English), divided to groups */
+ protected $mMessages;
+
+ /** @var array Fallback language in each language */
+ protected $mFallback;
+
+ /** @var array General messages in English, divided to groups */
+ protected $mGeneralMessages;
+
+ /** @var array All the messages which should be exist only in the English file */
+ protected $mIgnoredMessages;
+
+ /** @var array All the messages which may be translated or not, depending on the language */
+ protected $mOptionalMessages;
+
+ /** @var array Namespace names */
+ protected $mNamespaceNames;
+
+ /** @var array Namespace aliases */
+ protected $mNamespaceAliases;
+
+ /** @var array Magic words */
+ protected $mMagicWords;
+
+ /** @var array Special page aliases */
+ protected $mSpecialPageAliases;
/**
* Load the list of languages: all the Messages*.php
* files in the languages directory.
- *
- * @param $exif bool Treat the Exif messages?
*/
- function __construct( $exif = true ) {
- require __DIR__ . '/messageTypes.inc';
- $this->mIgnoredMessages = $wgIgnoredMessages;
- if ( $exif ) {
- $this->mOptionalMessages = array_merge( $wgOptionalMessages );
- } else {
- $this->mOptionalMessages = array_merge( $wgOptionalMessages, $wgEXIFMessages );
- }
+ function __construct() {
+ wfRunHooks( 'LocalisationIgnoredOptionalMessages',
+ array( &$this->mIgnoredMessages, &$this->mOptionalMessages ) );
$this->mLanguages = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
sort( $this->mLanguages );
@@ -88,7 +100,7 @@ class languages {
/**
* Load the language file.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*/
protected function loadFile( $code ) {
if ( isset( $this->mRawMessages[$code] ) &&
@@ -96,7 +108,8 @@ class languages {
isset( $this->mNamespaceNames[$code] ) &&
isset( $this->mNamespaceAliases[$code] ) &&
isset( $this->mMagicWords[$code] ) &&
- isset( $this->mSpecialPageAliases[$code] ) ) {
+ isset( $this->mSpecialPageAliases[$code] )
+ ) {
return;
}
$this->mRawMessages[$code] = array();
@@ -105,12 +118,16 @@ class languages {
$this->mNamespaceAliases[$code] = array();
$this->mMagicWords[$code] = array();
$this->mSpecialPageAliases[$code] = array();
+
+ $jsonfilename = Language::getJsonMessagesFileName( $code );
+ if ( file_exists( $jsonfilename ) ) {
+ $json = Language::getLocalisationCache()->readJSONFile( $jsonfilename );
+ $this->mRawMessages[$code] = $json['messages'];
+ }
+
$filename = Language::getMessagesFileName( $code );
if ( file_exists( $filename ) ) {
require $filename;
- if ( isset( $messages ) ) {
- $this->mRawMessages[$code] = $messages;
- }
if ( isset( $fallback ) ) {
$this->mFallback[$code] = $fallback;
}
@@ -130,14 +147,18 @@ class languages {
}
/**
- * Load the messages for a specific language (which is not English) and divide them to groups:
+ * Load the messages for a specific language (which is not English) and divide them to
+ * groups:
* all - all the messages.
* required - messages which should be translated in order to get a complete translation.
- * optional - messages which can be translated, the fallback translation is used if not translated.
- * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
- * translated - messages which are either required or optional, but translated from English and needed.
+ * optional - messages which can be translated, the fallback translation is used if not
+ * translated.
+ * obsolete - messages which should not be translated, either because they do not exist,
+ * or they are ignored messages.
+ * translated - messages which are either required or optional, but translated from
+ * English and needed.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*/
private function loadMessages( $code ) {
if ( isset( $this->mMessages[$code] ) ) {
@@ -166,10 +187,13 @@ class languages {
/**
* Load the messages for English and divide them to groups:
* all - all the messages.
- * required - messages which should be translated to other languages in order to get a complete translation.
- * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+ * required - messages which should be translated to other languages in order to get a
+ * complete translation.
+ * optional - messages which can be translated to other languages, but it's not required
+ * for a complete translation.
* ignored - messages which should not be translated to other languages.
- * translatable - messages which are either required or optional, but can be translated from English.
+ * translatable - messages which are either required or optional, but can be translated
+ * from English.
*/
private function loadGeneralMessages() {
if ( isset( $this->mGeneralMessages ) ) {
@@ -199,111 +223,125 @@ class languages {
* fallback language messages, divided to groups:
* all - all the messages.
* required - messages which should be translated in order to get a complete translation.
- * optional - messages which can be translated, the fallback translation is used if not translated.
- * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
- * translated - messages which are either required or optional, but translated from English and needed.
+ * optional - messages which can be translated, the fallback translation is used if not
+ * translated.
+ * obsolete - messages which should not be translated, either because they do not exist,
+ * or they are ignored messages.
+ * translated - messages which are either required or optional, but translated from
+ * English and needed.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return string The messages in this language.
*/
public function getMessages( $code ) {
$this->loadMessages( $code );
+
return $this->mMessages[$code];
}
/**
* Get all the general English messages, divided to groups:
* all - all the messages.
- * required - messages which should be translated to other languages in order to get a complete translation.
- * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+ * required - messages which should be translated to other languages in
+ * order to get a complete translation.
+ * optional - messages which can be translated to other languages, but it's
+ * not required for a complete translation.
* ignored - messages which should not be translated to other languages.
- * translatable - messages which are either required or optional, but can be translated from English.
+ * translatable - messages which are either required or optional, but can be
+ * translated from English.
*
* @return array The general English messages.
*/
public function getGeneralMessages() {
$this->loadGeneralMessages();
+
return $this->mGeneralMessages;
}
/**
* Get fallback language code for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return string Fallback code.
*/
public function getFallback( $code ) {
$this->loadFile( $code );
+
return $this->mFallback[$code];
}
/**
* Get namespace names for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array Namespace names.
*/
public function getNamespaceNames( $code ) {
$this->loadFile( $code );
+
return $this->mNamespaceNames[$code];
}
/**
* Get namespace aliases for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array Namespace aliases.
*/
public function getNamespaceAliases( $code ) {
$this->loadFile( $code );
+
return $this->mNamespaceAliases[$code];
}
/**
* Get magic words for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array Magic words.
*/
public function getMagicWords( $code ) {
$this->loadFile( $code );
+
return $this->mMagicWords[$code];
}
/**
* Get special page aliases for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array Special page aliases.
*/
public function getSpecialPageAliases( $code ) {
$this->loadFile( $code );
+
return $this->mSpecialPageAliases[$code];
}
/**
* Get the untranslated messages for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The untranslated messages for this language.
*/
public function getUntranslatedMessages( $code ) {
$this->loadGeneralMessages();
$this->loadMessages( $code );
+
return array_diff_key( $this->mGeneralMessages['required'], $this->mMessages[$code]['required'] );
}
/**
* Get the duplicate messages for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The duplicate messages for this language.
*/
@@ -316,26 +354,28 @@ class languages {
$duplicateMessages[$key] = $value;
}
}
+
return $duplicateMessages;
}
/**
* Get the obsolete messages for a specific language.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The obsolete messages for this language.
*/
public function getObsoleteMessages( $code ) {
$this->loadGeneralMessages();
$this->loadMessages( $code );
+
return $this->mMessages[$code]['obsolete'];
}
/**
* Get the messages whose variables do not match the original ones.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages whose variables do not match the original ones.
*/
@@ -348,11 +388,13 @@ class languages {
$missing = false;
foreach ( $variables as $var ) {
if ( preg_match( "/$var/sU", $this->mGeneralMessages['translatable'][$key] ) &&
- !preg_match( "/$var/sU", $value ) ) {
+ !preg_match( "/$var/sU", $value )
+ ) {
$missing = true;
}
if ( !preg_match( "/$var/sU", $this->mGeneralMessages['translatable'][$key] ) &&
- preg_match( "/$var/sU", $value ) ) {
+ preg_match( "/$var/sU", $value )
+ ) {
$missing = true;
}
}
@@ -360,13 +402,14 @@ class languages {
$mismatchMessages[$key] = $value;
}
}
+
return $mismatchMessages;
}
/**
* Get the messages which do not use plural.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages which do not use plural in this language.
*/
@@ -375,17 +418,20 @@ class languages {
$this->loadMessages( $code );
$messagesWithoutPlural = array();
foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
- if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false && stripos( $value, '{{plural:' ) === false ) {
+ if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false &&
+ stripos( $value, '{{plural:' ) === false
+ ) {
$messagesWithoutPlural[$key] = $value;
}
}
+
return $messagesWithoutPlural;
}
/**
* Get the empty messages.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The empty messages for this language.
*/
@@ -398,13 +444,14 @@ class languages {
$emptyMessages[$key] = $value;
}
}
+
return $emptyMessages;
}
/**
* Get the messages with trailing whitespace.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages with trailing whitespace in this language.
*/
@@ -417,13 +464,14 @@ class languages {
$messagesWithWhitespace[$key] = $value;
}
}
+
return $messagesWithWhitespace;
}
/**
* Get the non-XHTML messages.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The non-XHTML messages for this language.
*/
@@ -445,13 +493,14 @@ class languages {
$nonXHTMLMessages[$key] = $value;
}
}
+
return $nonXHTMLMessages;
}
/**
* Get the messages which include wrong characters.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages which include wrong characters in this language.
*/
@@ -482,13 +531,14 @@ class languages {
$wrongCharsMessages[$key] = $value;
}
}
+
return $wrongCharsMessages;
}
/**
* Get the messages which include dubious links.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages which include dubious links in this language.
*/
@@ -500,24 +550,25 @@ class languages {
foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
$matches = array();
preg_match_all( "/\[\[([{$tc}]+)(?:\\|(.+?))?]]/sDu", $value, $matches );
- for ( $i = 0; $i < count( $matches[0] ); $i++ ) {
+ $numMatches = count( $matches[0] );
+ for ( $i = 0; $i < $numMatches; $i++ ) {
if ( preg_match( "/.*project.*/isDu", $matches[1][$i] ) ) {
$messages[$key][] = $matches[0][$i];
}
}
-
if ( isset( $messages[$key] ) ) {
$messages[$key] = implode( $messages[$key], ", " );
}
}
+
return $messages;
}
/**
* Get the messages which include unbalanced brackets.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The messages which include unbalanced brackets in this language.
*/
@@ -547,15 +598,15 @@ class languages {
if ( $a !== $b || $c !== $d ) {
$messages[$key] = "$a, $b, $c, $d";
}
-
}
+
return $messages;
}
/**
* Get the untranslated namespace names.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The untranslated namespace names in this language.
*/
@@ -566,13 +617,14 @@ class languages {
if ( isset( $namespacesDiff[NS_MAIN] ) ) {
unset( $namespacesDiff[NS_MAIN] );
}
+
return $namespacesDiff;
}
/**
* Get the project talk namespace names with no $1.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The problematic project talk namespaces in this language.
*/
@@ -601,7 +653,7 @@ class languages {
/**
* Get the untranslated magic words.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The untranslated magic words in this language.
*/
@@ -614,13 +666,14 @@ class languages {
$magicWords[$key] = $value[1];
}
}
+
return $magicWords;
}
/**
* Get the obsolete magic words.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The obsolete magic words in this language.
*/
@@ -633,13 +686,14 @@ class languages {
$magicWords[$key] = $value[1];
}
}
+
return $magicWords;
}
/**
* Get the magic words that override the original English magic word.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The overriding magic words in this language.
*/
@@ -662,13 +716,14 @@ class languages {
}
}
}
+
return $magicWords;
}
/**
* Get the magic words which do not match the case-sensitivity of the original words.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The magic words whose case does not match in this language.
*/
@@ -685,13 +740,14 @@ class languages {
$magicWords[$key] = $local[0];
}
}
+
return $magicWords;
}
/**
* Get the untranslated special page names.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The untranslated special page names in this language.
*/
@@ -704,13 +760,14 @@ class languages {
$specialPageAliases[$key] = $value[0];
}
}
+
return $specialPageAliases;
}
/**
* Get the obsolete special page names.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*
* @return array The obsolete special page names in this language.
*/
@@ -723,12 +780,12 @@ class languages {
$specialPageAliases[$key] = $value[0];
}
}
+
return $specialPageAliases;
}
}
-class extensionLanguages extends languages {
-
+class ExtensionLanguages extends Languages {
/**
* @var MessageGroup
*/
@@ -736,7 +793,7 @@ class extensionLanguages extends languages {
/**
* Load the messages group.
- * @param $group MessageGroup The messages group.
+ * @param MessageGroup $group The messages group.
*/
function __construct( MessageGroup $group ) {
$this->mMessageGroup = $group;
@@ -757,7 +814,7 @@ class extensionLanguages extends languages {
/**
* Load the language file.
*
- * @param $code string The language code.
+ * @param string $code The language code.
*/
protected function loadFile( $code ) {
if ( !isset( $this->mRawMessages[$code] ) ) {
diff --git a/maintenance/language/listVariants.php b/maintenance/language/listVariants.php
new file mode 100644
index 00000000..4bff8916
--- /dev/null
+++ b/maintenance/language/listVariants.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Lists all language variants
+ *
+ * Copyright © 2014 MediaWiki developers
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+require_once dirname( __DIR__ ) . '/Maintenance.php';
+
+/**
+ * @since 1.24
+ */
+class ListVariants extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Outputs a list of language variants';
+ $this->addOption( 'flat', 'Output variants in a flat list' );
+ $this->addOption( 'json', 'Output variants as JSON' );
+ }
+
+ public function execute() {
+ $variantLangs = array();
+ $variants = array();
+ foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
+ $lang = Language::factory( $langCode );
+ if ( count( $lang->getVariants() ) > 1 ) {
+ $variants += array_flip( $lang->getVariants() );
+ $variantLangs[$langCode] = $lang->getVariants();
+ }
+ }
+ $variants = array_keys( $variants );
+ sort( $variants );
+ $result = $this->hasOption( 'flat' ) ? $variants : $variantLangs;
+
+ // Not using $this->output() because muting makes no sense here
+ if ( $this->hasOption( 'json' ) ) {
+ echo FormatJson::encode( $result, true ) . "\n";
+ } else {
+ foreach ( $result as $key => $value ) {
+ if ( is_array( $value ) ) {
+ echo "$key\n";
+ foreach ( $value as $variant ) {
+ echo " $variant\n";
+ }
+ } else {
+ echo "$value\n";
+ }
+ }
+ }
+ }
+}
+
+$maintClass = 'ListVariants';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/messageTypes.inc b/maintenance/language/messageTypes.inc
deleted file mode 100644
index f9239b1c..00000000
--- a/maintenance/language/messageTypes.inc
+++ /dev/null
@@ -1,872 +0,0 @@
-<?php
-/**
- * Several types of messages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- */
-
-/** Ignored messages, which should exist only in the English messages file. */
-$wgIgnoredMessages = array(
- 'sidebar',
- 'accesskey-pt-userpage',
- 'accesskey-pt-anonuserpage',
- 'accesskey-pt-mytalk',
- 'accesskey-pt-anontalk',
- 'accesskey-pt-preferences',
- 'accesskey-pt-watchlist',
- 'accesskey-pt-mycontris',
- 'accesskey-pt-login',
- 'accesskey-pt-anonlogin',
- 'accesskey-pt-logout',
- 'accesskey-ca-talk',
- 'accesskey-ca-edit',
- 'accesskey-ca-addsection',
- 'accesskey-ca-viewsource',
- 'accesskey-ca-history',
- 'accesskey-ca-protect',
- 'accesskey-ca-unprotect',
- 'accesskey-ca-delete',
- 'accesskey-ca-undelete',
- 'accesskey-ca-move',
- 'accesskey-ca-watch',
- 'accesskey-ca-unwatch',
- 'accesskey-search',
- 'accesskey-search-go',
- 'accesskey-search-fulltext',
- 'accesskey-p-logo',
- 'accesskey-n-mainpage',
- 'accesskey-n-mainpage-description',
- 'accesskey-n-portal',
- 'accesskey-n-currentevents',
- 'accesskey-n-recentchanges',
- 'accesskey-n-randompage',
- 'accesskey-n-help',
- 'accesskey-t-whatlinkshere',
- 'accesskey-t-recentchangeslinked',
- 'accesskey-feed-rss',
- 'accesskey-feed-atom',
- 'accesskey-t-contributions',
- 'accesskey-t-emailuser',
- 'accesskey-t-permalink',
- 'accesskey-t-print',
- 'accesskey-t-upload',
- 'accesskey-t-specialpages',
- 'accesskey-ca-nstab-main',
- 'accesskey-ca-nstab-user',
- 'accesskey-ca-nstab-media',
- 'accesskey-ca-nstab-special',
- 'accesskey-ca-nstab-project',
- 'accesskey-ca-nstab-image',
- 'accesskey-ca-nstab-mediawiki',
- 'accesskey-ca-nstab-template',
- 'accesskey-ca-nstab-help',
- 'accesskey-ca-nstab-category',
- 'accesskey-minoredit',
- 'accesskey-save',
- 'accesskey-preview',
- 'accesskey-diff',
- 'accesskey-compareselectedversions',
- 'accesskey-watch',
- 'accesskey-upload',
- 'accesskey-preferences-save',
- 'accesskey-summary',
- 'accesskey-userrights-set',
- 'accesskey-blockip-block',
- 'accesskey-export',
- 'accesskey-import',
- 'accesskey-watchlistedit-normal-submit',
- 'accesskey-watchlistedit-raw-submit',
- 'addsection',
- 'talkpageheader',
- 'anonnotice',
- 'autoblock_whitelist',
- 'searchmenu-new-nocreate',
- 'googlesearch',
- 'opensearch-desc',
- 'exif-make-value',
- 'exif-model-value',
- 'exif-software-value',
- 'exif-software-version-value',
- 'history_copyright',
- 'licenses',
- 'loginstart',
- 'loginend-https',
- 'loginend',
- 'loginlanguagelinks',
- 'pear-mail-error',
- 'php-mail-error',
- 'markaspatrolledlink',
- 'newarticletextanon',
- 'newsectionheaderdefaultlevel',
- 'mainpage-nstab',
- 'newtalkseparator',
- 'noarticletextanon',
- 'number_of_watching_users_RCview',
- 'pagecategorieslink',
- 'pubmedurl',
- 'randompage-url',
- 'recentchanges-url',
- 'recentchangestext',
- 'revision-info-current',
- 'revision-nav',
- 'rfcurl',
- 'shareddescriptionfollows',
- 'signature-anon',
- 'signupstart',
- 'signupend',
- 'signupend-https',
- 'sitenotice',
- 'sitesubtitle',
- 'sitetitle',
- 'sp-contributions-footer',
- 'sp-contributions-footer-anon',
- 'sp-contributions-footer-newbies',
- 'statistics-summary',
- 'statistics-footer',
- 'talkpagetext',
- 'uploadfooter',
- 'upload-default-description',
- 'listgrouprights-link',
- 'search-interwiki-custom',
- 'allpages-summary',
- 'booksources-summary',
- 'categories-summary',
- 'blocklist-summary',
- 'protectedtitles-summary',
- 'listusers-summary',
- 'longpages-summary',
- 'preferences-summary',
- 'specialpages-summary',
- 'whatlinkshere-summary',
- 'listredirects-summary',
- 'uncategorizedpages-summary',
- 'uncategorizedcategories-summary',
- 'uncategorizedimages-summary',
- 'uncategorizedtemplates-summary',
- 'popularpages-summary',
- 'wantedcategories-summary',
- 'wantedfiles-summary',
- 'wantedpages-summary',
- 'watchlist-summary',
- 'mostlinked-summary',
- 'mostlinkedcategories-summary',
- 'mostlinkedtemplates-summary',
- 'mostcategories-summary',
- 'mostimages-summary',
- 'mostinterwikis-summary',
- 'mostrevisions-summary',
- 'prefixindex-summary',
- 'shortpages-summary',
- 'newpages-summary',
- 'ancientpages-summary',
- 'unwatchedpages-summary',
- 'userrights-summary',
- 'brokenredirects-summary',
- 'deadendpages-summary',
- 'protectedpages-summary',
- 'disambiguations-summary',
- 'pageswithprop-summary',
- 'doubleredirects-summary',
- 'lonelypages-summary',
- 'unusedtemplates-summary',
- 'fewestrevisions-summary',
- 'upload-summary',
- 'wantedtemplates-summary',
- 'activeusers-summary',
- 'search-summary',
- 'editpage-head-copy-warn',
- 'editpage-tos-summary',
- 'addsection-preload',
- 'addsection-editintro',
- 'longpage-hint',
- 'javascripttest-backlink',
- 'javascripttest-qunit-name',
- 'revdelete-logentry',
- 'logdelete-logentry',
- 'revdelete-content',
- 'revdelete-summary',
- 'revdelete-uname',
- 'revdelete-hid',
- 'revdelete-unhid',
- 'revdelete-log-message',
- 'logdelete-log-message',
- 'deletedarticle',
- 'suppressedarticle',
- 'undeletedarticle',
- 'patrol-log-line',
- 'patrol-log-auto',
- 'patrol-log-diff',
- '1movedto2',
- '1movedto2_redir',
- 'move-redirect-suppressed',
- 'newuserlog-create-entry',
- 'newuserlog-create2-entry',
- 'newuserlog-autocreate-entry',
- 'rightslogentry',
- 'rightslogentry-autopromote',
- 'suppressedarticle',
- 'deletedarticle',
- // 'uploadedimage',
- // 'overwroteimage',
- 'createacct-helpusername',
- 'createacct-imgcaptcha-help',
- 'userlogout-summary',
- 'changeemail-summary',
- 'changepassword-summary',
- 'unusedcategories-summary',
- 'unusedimages-summary',
- 'deletedcontributions-summary',
- 'linksearch-summary',
- 'emailuser-summary',
- 'undelete-summary',
- 'contributions-summary',
- 'unblock-summary',
- 'movepage-summary',
- 'export-summary',
- 'import-summary',
- 'editwatchlist-summary',
- 'version-summary',
- 'tags-summary',
- 'comparepages-summary',
- 'resettokens-summary',
- 'version-db-mysql-url',
- 'version-db-mariadb-url',
- 'version-db-percona-url',
- 'version-db-postgres-url',
- 'version-db-oracle-url',
- 'version-db-sqlite-url',
- 'version-db-mssql-url',
- 'version-entrypoints-index-php',
- 'version-entrypoints-api-php',
- 'version-entrypoints-load-php',
- 'ipb-default-expiry',
- 'pageinfo-header',
- 'pageinfo-footer',
- 'createacct-benefit-head1',
- 'createacct-benefit-icon1',
- 'createacct-benefit-head2',
- 'createacct-benefit-icon2',
- 'createacct-benefit-head3',
- 'createacct-benefit-icon3',
- 'today-at',
- 'redirect-text',
- 'helppage',
- 'edithelppage',
- 'helplogin-url',
- 'autocomment-prefix',
- 'move-redirect-text',
-);
-
-/** Optional messages, which may be translated only if changed in the target language. */
-$wgOptionalMessages = array(
- 'linkprefix',
- 'feed-atom',
- 'feed-rss',
- 'unit-pixel',
- 'userrights-irreversible-marker',
- 'tog-noconvertlink',
- 'variantname-zh-hans',
- 'variantname-zh-hant',
- 'variantname-zh-cn',
- 'variantname-zh-tw',
- 'variantname-zh-hk',
- 'variantname-zh-mo',
- 'variantname-zh-my',
- 'variantname-zh-sg',
- 'variantname-zh',
- 'variantname-gan-hans',
- 'variantname-gan-hant',
- 'variantname-gan',
- 'variantname-sr-ec',
- 'variantname-sr-el',
- 'variantname-sr',
- 'variantname-kk-arab',
- 'variantname-kk-cyrl',
- 'variantname-kk-latn',
- 'variantname-kk-tr',
- 'variantname-kk-kz',
- 'variantname-kk-cn',
- 'variantname-kk',
- 'variantname-ku-latn',
- 'variantname-ku-arab',
- 'variantname-ku',
- 'variantname-tg-cyrl',
- 'variantname-tg-latn',
- 'variantname-tg',
- 'variantname-ike-cans',
- 'variantname-ike-latn',
- 'variantname-iu',
- 'variantname-shi-tfng',
- 'variantname-shi-latn',
- 'variantname-shi',
- 'rc-change-size',
- 'resetpass_text',
- 'image_sample',
- 'media_sample',
- 'skinname-cologneblue',
- 'skinname-monobook',
- 'skinname-modern',
- 'skinname-vector',
- 'common.css',
- 'cologneblue.css',
- 'monobook.css',
- 'modern.css',
- 'vector.css',
- 'print.css',
- 'noscript.css',
- 'group-autoconfirmed.css',
- 'group-bot.css',
- 'group-sysop.css',
- 'group-bureaucrat.css',
- 'common.js',
- 'cologneblue.js',
- 'monobook.js',
- 'modern.js',
- 'vector.js',
- 'group-autoconfirmed.js',
- 'group-bot.js',
- 'group-sysop.js',
- 'group-bureaucrat.js',
- 'widthheight',
- 'exif-fnumber-format',
- 'exif-focallength-format',
- 'exif-compression-5',
- 'exif-compression-6',
- 'exif-compression-7',
- 'exif-compression-8',
- 'exif-compression-32773',
- 'exif-compression-32946',
- 'exif-compression-34712',
- 'exif-photometricinterpretation-2',
- 'exif-photometricinterpretation-6',
- 'exif-xyresolution-i',
- 'exif-xyresolution-c',
- 'exif-colorspace-1',
- 'exif-componentsconfiguration-1',
- 'exif-componentsconfiguration-2',
- 'exif-componentsconfiguration-3',
- 'exif-componentsconfiguration-4',
- 'exif-componentsconfiguration-5',
- 'exif-componentsconfiguration-6',
- 'exif-contact-value',
- 'exif-coordinate-format',
- 'exif-lightsource-20',
- 'exif-lightsource-21',
- 'exif-lightsource-22',
- 'exif-lightsource-23',
- 'exif-maxaperturevalue-value',
- 'exif-subjectnewscode-value',
- 'booksources-isbn',
- 'protect-summary-desc',
- 'sp-contributions-explain',
- 'sorbs',
- 'video-dims',
- 'seconds-abbrev',
- 'minutes-abbrev',
- 'hours-abbrev',
- 'days-abbrev',
- 'pagetitle',
- 'filename-prefix-blacklist',
- 'edittools',
- 'edittools-upload',
- 'size-bytes',
- 'size-kilobytes',
- 'size-megabytes',
- 'size-gigabytes',
- 'size-terabytes',
- 'size-petabytes',
- 'size-exabytes',
- 'size-zetabytes',
- 'size-yottabytes',
- 'bitrate-bits',
- 'bitrate-kilobits',
- 'bitrate-megabits',
- 'bitrate-gigabits',
- 'bitrate-terabits',
- 'bitrate-petabits',
- 'bitrate-exabits',
- 'bitrate-zetabits',
- 'bitrate-yottabits',
- 'iranian-calendar-m1',
- 'iranian-calendar-m2',
- 'iranian-calendar-m3',
- 'iranian-calendar-m4',
- 'iranian-calendar-m5',
- 'iranian-calendar-m6',
- 'iranian-calendar-m7',
- 'iranian-calendar-m8',
- 'iranian-calendar-m9',
- 'iranian-calendar-m10',
- 'iranian-calendar-m11',
- 'iranian-calendar-m12',
- 'hijri-calendar-m1',
- 'hijri-calendar-m2',
- 'hijri-calendar-m3',
- 'hijri-calendar-m4',
- 'hijri-calendar-m5',
- 'hijri-calendar-m6',
- 'hijri-calendar-m7',
- 'hijri-calendar-m8',
- 'hijri-calendar-m9',
- 'hijri-calendar-m10',
- 'hijri-calendar-m11',
- 'hijri-calendar-m12',
- 'hebrew-calendar-m1',
- 'hebrew-calendar-m2',
- 'hebrew-calendar-m3',
- 'hebrew-calendar-m4',
- 'hebrew-calendar-m5',
- 'hebrew-calendar-m6',
- 'hebrew-calendar-m6a',
- 'hebrew-calendar-m6b',
- 'hebrew-calendar-m7',
- 'hebrew-calendar-m8',
- 'hebrew-calendar-m9',
- 'hebrew-calendar-m10',
- 'hebrew-calendar-m11',
- 'hebrew-calendar-m12',
- 'hebrew-calendar-m1-gen',
- 'hebrew-calendar-m2-gen',
- 'hebrew-calendar-m3-gen',
- 'hebrew-calendar-m4-gen',
- 'hebrew-calendar-m5-gen',
- 'hebrew-calendar-m6-gen',
- 'hebrew-calendar-m6a-gen',
- 'hebrew-calendar-m6b-gen',
- 'hebrew-calendar-m7-gen',
- 'hebrew-calendar-m8-gen',
- 'hebrew-calendar-m9-gen',
- 'hebrew-calendar-m10-gen',
- 'hebrew-calendar-m11-gen',
- 'hebrew-calendar-m12-gen',
- 'version-api',
- 'version-svn-revision',
- 'semicolon-separator',
- 'comma-separator',
- 'colon-separator',
- 'pipe-separator',
- 'word-separator',
- 'ellipsis',
- 'percent',
- 'parentheses',
- 'brackets',
- 'listgrouprights-right-display',
- 'listgrouprights-right-revoked',
- 'timezone-utc',
- 'unpatrolledletter',
- 'diff-with-additional',
- 'pagetitle-view-mainpage',
- 'backlinksubtitle',
- 'prefs-registration-date-time',
- 'prefs-memberingroups-type',
- 'userrights-groupsmember-type',
- 'shared-repo-name-wikimediacommons',
- 'usermessage-template',
- 'filepage.css',
- 'metadata-langitem',
- 'metadata-langitem-default',
- 'nocookiesforlogin',
- 'version-entrypoints-articlepath',
- 'version-entrypoints-scriptpath',
- 'mergehistory-revisionrow',
- 'categoryviewer-pagedlinks',
- 'undelete-revisionrow',
- 'pageinfo-redirects-value',
- 'created', // @deprecated. Remove in MediaWiki 1.23.
- 'changed', // @deprecated. Remove in MediaWiki 1.23.
- 'limitreport-ppvisitednodes-value',
- 'limitreport-ppgeneratednodes-value',
- 'limitreport-expansiondepth-value',
- 'limitreport-expensivefunctioncount-value',
- 'tooltip-iwiki',
-);
-
-/** Exif messages, which may be set as optional in several checks, but are generally mandatory */
-$wgEXIFMessages = array(
- 'exif-imagewidth',
- 'exif-imagelength',
- 'exif-bitspersample',
- 'exif-compression',
- 'exif-photometricinterpretation',
- 'exif-orientation',
- 'exif-samplesperpixel',
- 'exif-planarconfiguration',
- 'exif-ycbcrsubsampling',
- 'exif-ycbcrpositioning',
- 'exif-xresolution',
- 'exif-yresolution',
- 'exif-stripoffsets',
- 'exif-rowsperstrip',
- 'exif-stripbytecounts',
- 'exif-jpeginterchangeformat',
- 'exif-jpeginterchangeformatlength',
- 'exif-whitepoint',
- 'exif-primarychromaticities',
- 'exif-ycbcrcoefficients',
- 'exif-referenceblackwhite',
- 'exif-datetime',
- 'exif-imagedescription',
- 'exif-make',
- 'exif-model',
- 'exif-software',
- 'exif-artist',
- 'exif-copyright',
- 'exif-exifversion',
- 'exif-flashpixversion',
- 'exif-colorspace',
- 'exif-componentsconfiguration',
- 'exif-compressedbitsperpixel',
- 'exif-pixelydimension',
- 'exif-pixelxdimension',
- 'exif-usercomment',
- 'exif-relatedsoundfile',
- 'exif-datetimeoriginal',
- 'exif-datetimedigitized',
- 'exif-subsectime',
- 'exif-subsectimeoriginal',
- 'exif-subsectimedigitized',
- 'exif-exposuretime',
- 'exif-exposuretime-format',
- 'exif-fnumber',
- 'exif-fnumber-format',
- 'exif-exposureprogram',
- 'exif-spectralsensitivity',
- 'exif-isospeedratings',
- 'exif-shutterspeedvalue',
- 'exif-aperturevalue',
- 'exif-brightnessvalue',
- 'exif-exposurebiasvalue',
- 'exif-maxaperturevalue',
- 'exif-subjectdistance',
- 'exif-meteringmode',
- 'exif-lightsource',
- 'exif-flash',
- 'exif-focallength',
- 'exif-focallength-format',
- 'exif-subjectarea',
- 'exif-flashenergy',
- 'exif-focalplanexresolution',
- 'exif-focalplaneyresolution',
- 'exif-focalplaneresolutionunit',
- 'exif-subjectlocation',
- 'exif-exposureindex',
- 'exif-sensingmethod',
- 'exif-filesource',
- 'exif-scenetype',
- 'exif-customrendered',
- 'exif-exposuremode',
- 'exif-whitebalance',
- 'exif-digitalzoomratio',
- 'exif-focallengthin35mmfilm',
- 'exif-scenecapturetype',
- 'exif-gaincontrol',
- 'exif-contrast',
- 'exif-saturation',
- 'exif-sharpness',
- 'exif-devicesettingdescription',
- 'exif-subjectdistancerange',
- 'exif-imageuniqueid',
- 'exif-gpsversionid',
- 'exif-gpslatituderef',
- 'exif-gpslatitude',
- 'exif-gpslongituderef',
- 'exif-gpslongitude',
- 'exif-gpsaltituderef',
- 'exif-gpsaltitude',
- 'exif-gpstimestamp',
- 'exif-gpssatellites',
- 'exif-gpsstatus',
- 'exif-gpsmeasuremode',
- 'exif-gpsdop',
- 'exif-gpsspeedref',
- 'exif-gpsspeed',
- 'exif-gpstrackref',
- 'exif-gpstrack',
- 'exif-gpsimgdirectionref',
- 'exif-gpsimgdirection',
- 'exif-gpsmapdatum',
- 'exif-gpsdestlatituderef',
- 'exif-gpsdestlatitude',
- 'exif-gpsdestlongituderef',
- 'exif-gpsdestlongitude',
- 'exif-gpsdestbearingref',
- 'exif-gpsdestbearing',
- 'exif-gpsdestdistanceref',
- 'exif-gpsdestdistance',
- 'exif-gpsprocessingmethod',
- 'exif-gpsareainformation',
- 'exif-gpsdatestamp',
- 'exif-gpsdifferential',
- 'exif-coordinate-format',
- 'exif-jpegfilecomment',
- 'exif-keywords',
- 'exif-worldregioncreated',
- 'exif-countrycreated',
- 'exif-countrycodecreated',
- 'exif-provinceorstatecreated',
- 'exif-citycreated',
- 'exif-sublocationcreated',
- 'exif-worldregiondest',
- 'exif-countrydest',
- 'exif-countrycodedest',
- 'exif-provinceorstatedest',
- 'exif-citydest',
- 'exif-sublocationdest',
- 'exif-objectname',
- 'exif-specialinstructions',
- 'exif-headline',
- 'exif-credit',
- 'exif-source',
- 'exif-editstatus',
- 'exif-urgency',
- 'exif-fixtureidentifier',
- 'exif-locationdest',
- 'exif-locationdestcode',
- 'exif-objectcycle',
- 'exif-contact',
- 'exif-writer',
- 'exif-languagecode',
- 'exif-iimversion',
- 'exif-iimcategory',
- 'exif-iimsupplementalcategory',
- 'exif-datetimeexpires',
- 'exif-datetimereleased',
- 'exif-originaltransmissionref',
- 'exif-identifier',
- 'exif-lens',
- 'exif-serialnumber',
- 'exif-cameraownername',
- 'exif-label',
- 'exif-datetimemetadata',
- 'exif-nickname',
- 'exif-rating',
- 'exif-rightscertificate',
- 'exif-copyrighted',
- 'exif-copyrightowner',
- 'exif-usageterms',
- 'exif-webstatement',
- 'exif-originaldocumentid',
- 'exif-licenseurl',
- 'exif-morepermissionsurl',
- 'exif-attributionurl',
- 'exif-preferredattributionname',
- 'exif-pngfilecomment',
- 'exif-disclaimer',
- 'exif-contentwarning',
- 'exif-giffilecomment',
- 'exif-intellectualgenre',
- 'exif-subjectnewscode',
- 'exif-scenecode',
- 'exif-event',
- 'exif-organisationinimage',
- 'exif-personinimage',
- 'exif-originalimageheight',
- 'exif-originalimagewidth',
- 'exif-make-value',
- 'exif-model-value',
- 'exif-software-value',
- 'exif-software-version-value',
- 'exif-contact-value',
- 'exif-subjectnewscode-value',
- 'exif-compression-1',
- 'exif-compression-2',
- 'exif-compression-3',
- 'exif-compression-4',
- 'exif-compression-5',
- 'exif-compression-6',
- 'exif-compression-7',
- 'exif-compression-8',
- 'exif-compression-32773',
- 'exif-compression-32946',
- 'exif-compression-34712',
- 'exif-copyrighted-true',
- 'exif-copyrighted-false',
- 'exif-photometricinterpretation-2',
- 'exif-photometricinterpretation-6',
- 'exif-unknowndate',
- 'exif-orientation-1',
- 'exif-orientation-2',
- 'exif-orientation-3',
- 'exif-orientation-4',
- 'exif-orientation-5',
- 'exif-orientation-6',
- 'exif-orientation-7',
- 'exif-orientation-8',
- 'exif-planarconfiguration-1',
- 'exif-planarconfiguration-2',
- 'exif-xyresolution-i',
- 'exif-xyresolution-c',
- 'exif-colorspace-1',
- 'exif-colorspace-65535',
- 'exif-componentsconfiguration-0',
- 'exif-componentsconfiguration-1',
- 'exif-componentsconfiguration-2',
- 'exif-componentsconfiguration-3',
- 'exif-componentsconfiguration-4',
- 'exif-componentsconfiguration-5',
- 'exif-componentsconfiguration-6',
- 'exif-exposureprogram-0',
- 'exif-exposureprogram-1',
- 'exif-exposureprogram-2',
- 'exif-exposureprogram-3',
- 'exif-exposureprogram-4',
- 'exif-exposureprogram-5',
- 'exif-exposureprogram-6',
- 'exif-exposureprogram-7',
- 'exif-exposureprogram-8',
- 'exif-subjectdistance-value',
- 'exif-meteringmode-0',
- 'exif-meteringmode-1',
- 'exif-meteringmode-2',
- 'exif-meteringmode-3',
- 'exif-meteringmode-4',
- 'exif-meteringmode-5',
- 'exif-meteringmode-6',
- 'exif-meteringmode-255',
- 'exif-lightsource-0',
- 'exif-lightsource-1',
- 'exif-lightsource-2',
- 'exif-lightsource-3',
- 'exif-lightsource-4',
- 'exif-lightsource-9',
- 'exif-lightsource-10',
- 'exif-lightsource-11',
- 'exif-lightsource-12',
- 'exif-lightsource-13',
- 'exif-lightsource-14',
- 'exif-lightsource-15',
- 'exif-lightsource-17',
- 'exif-lightsource-18',
- 'exif-lightsource-19',
- 'exif-lightsource-20',
- 'exif-lightsource-21',
- 'exif-lightsource-22',
- 'exif-lightsource-23',
- 'exif-lightsource-24',
- 'exif-lightsource-255',
- 'exif-flash-fired-0',
- 'exif-flash-fired-1',
- 'exif-flash-return-0',
- 'exif-flash-return-2',
- 'exif-flash-return-3',
- 'exif-flash-mode-1',
- 'exif-flash-mode-2',
- 'exif-flash-mode-3',
- 'exif-flash-function-1',
- 'exif-flash-redeye-1',
- 'exif-focalplaneresolutionunit-2',
- 'exif-sensingmethod-1',
- 'exif-sensingmethod-2',
- 'exif-sensingmethod-3',
- 'exif-sensingmethod-4',
- 'exif-sensingmethod-5',
- 'exif-sensingmethod-7',
- 'exif-sensingmethod-8',
- 'exif-filesource-3',
- 'exif-scenetype-1',
- 'exif-customrendered-0',
- 'exif-customrendered-1',
- 'exif-exposuremode-0',
- 'exif-exposuremode-1',
- 'exif-exposuremode-2',
- 'exif-whitebalance-0',
- 'exif-whitebalance-1',
- 'exif-scenecapturetype-0',
- 'exif-scenecapturetype-1',
- 'exif-scenecapturetype-2',
- 'exif-scenecapturetype-3',
- 'exif-gaincontrol-0',
- 'exif-gaincontrol-1',
- 'exif-gaincontrol-2',
- 'exif-gaincontrol-3',
- 'exif-gaincontrol-4',
- 'exif-contrast-0',
- 'exif-contrast-1',
- 'exif-contrast-2',
- 'exif-saturation-0',
- 'exif-saturation-1',
- 'exif-saturation-2',
- 'exif-sharpness-0',
- 'exif-sharpness-1',
- 'exif-sharpness-2',
- 'exif-subjectdistancerange-0',
- 'exif-subjectdistancerange-1',
- 'exif-subjectdistancerange-2',
- 'exif-subjectdistancerange-3',
- 'exif-gpslatitude-n',
- 'exif-gpslatitude-s',
- 'exif-gpslongitude-e',
- 'exif-gpslongitude-w',
- 'exif-gpsaltitude-above-sealevel',
- 'exif-gpsaltitude-below-sealevel',
- 'exif-gpsstatus-a',
- 'exif-gpsstatus-v',
- 'exif-gpsmeasuremode-2',
- 'exif-gpsmeasuremode-3',
- 'exif-gpsspeed-k',
- 'exif-gpsspeed-m',
- 'exif-gpsspeed-n',
- 'exif-gpsdestdistance-k',
- 'exif-gpsdestdistance-m',
- 'exif-gpsdestdistance-n',
- 'exif-gpsdop-excellent',
- 'exif-gpsdop-good',
- 'exif-gpsdop-moderate',
- 'exif-gpsdop-fair',
- 'exif-gpsdop-poor',
- 'exif-objectcycle-a',
- 'exif-objectcycle-p',
- 'exif-objectcycle-b',
- 'exif-gpsdirection-t',
- 'exif-gpsdirection-m',
- 'exif-ycbcrpositioning-1',
- 'exif-ycbcrpositioning-2',
- 'exif-dc-contributor',
- 'exif-dc-coverage',
- 'exif-dc-date',
- 'exif-dc-publisher',
- 'exif-dc-relation',
- 'exif-dc-rights',
- 'exif-dc-source',
- 'exif-dc-type',
- 'exif-rating-rejected',
- 'exif-isospeedratings-overflow',
- 'exif-maxaperturevalue-value',
- 'exif-iimcategory-ace',
- 'exif-iimcategory-clj',
- 'exif-iimcategory-dis',
- 'exif-iimcategory-fin',
- 'exif-iimcategory-edu',
- 'exif-iimcategory-evn',
- 'exif-iimcategory-hth',
- 'exif-iimcategory-hum',
- 'exif-iimcategory-lab',
- 'exif-iimcategory-lif',
- 'exif-iimcategory-pol',
- 'exif-iimcategory-rel',
- 'exif-iimcategory-sci',
- 'exif-iimcategory-soi',
- 'exif-iimcategory-spo',
- 'exif-iimcategory-war',
- 'exif-iimcategory-wea',
- 'exif-urgency-normal',
- 'exif-urgency-low',
- 'exif-urgency-high',
- 'exif-urgency-other',
-);
diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc
deleted file mode 100644
index e351549b..00000000
--- a/maintenance/language/messages.inc
+++ /dev/null
@@ -1,4239 +0,0 @@
-<?php
-/**
- * Define the messages structure in the messages file, for an automated rewriting.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- */
-
-/** The structure of the messages, divided to blocks */
-$wgMessageStructure = array(
- 'sidebar' => array(
- 'sidebar',
- ),
- 'toggles' => array(
- 'tog-underline',
- 'tog-justify',
- 'tog-hideminor',
- 'tog-hidepatrolled',
- 'tog-newpageshidepatrolled',
- 'tog-extendwatchlist',
- 'tog-usenewrc',
- 'tog-numberheadings',
- 'tog-showtoolbar',
- 'tog-editondblclick',
- 'tog-editsection',
- 'tog-editsectiononrightclick',
- 'tog-showtoc',
- 'tog-rememberpassword',
- 'tog-watchcreations',
- 'tog-watchdefault',
- 'tog-watchmoves',
- 'tog-watchdeletion',
- 'tog-minordefault',
- 'tog-previewontop',
- 'tog-previewonfirst',
- 'tog-nocache',
- 'tog-enotifwatchlistpages',
- 'tog-enotifusertalkpages',
- 'tog-enotifminoredits',
- 'tog-enotifrevealaddr',
- 'tog-shownumberswatching',
- 'tog-oldsig',
- 'tog-fancysig',
- 'tog-uselivepreview',
- 'tog-forceeditsummary',
- 'tog-watchlisthideown',
- 'tog-watchlisthidebots',
- 'tog-watchlisthideminor',
- 'tog-watchlisthideliu',
- 'tog-watchlisthideanons',
- 'tog-watchlisthidepatrolled',
- 'tog-ccmeonemails',
- 'tog-diffonly',
- 'tog-showhiddencats',
- 'tog-noconvertlink',
- 'tog-norollbackdiff',
- 'tog-useeditwarning',
- 'tog-prefershttps'
- ),
- 'underline' => array(
- 'underline-always',
- 'underline-never',
- 'underline-default',
- ),
- 'editfont' => array(
- 'editfont-style',
- 'editfont-default',
- 'editfont-monospace',
- 'editfont-sansserif',
- 'editfont-serif',
- ),
- 'dates' => array(
- 'sunday',
- 'monday',
- 'tuesday',
- 'wednesday',
- 'thursday',
- 'friday',
- 'saturday',
- 'sun',
- 'mon',
- 'tue',
- 'wed',
- 'thu',
- 'fri',
- 'sat',
- 'january',
- 'february',
- 'march',
- 'april',
- 'may_long',
- 'june',
- 'july',
- 'august',
- 'september',
- 'october',
- 'november',
- 'december',
- 'january-gen',
- 'february-gen',
- 'march-gen',
- 'april-gen',
- 'may-gen',
- 'june-gen',
- 'july-gen',
- 'august-gen',
- 'september-gen',
- 'october-gen',
- 'november-gen',
- 'december-gen',
- 'jan',
- 'feb',
- 'mar',
- 'apr',
- 'may',
- 'jun',
- 'jul',
- 'aug',
- 'sep',
- 'oct',
- 'nov',
- 'dec',
- 'january-date',
- 'february-date',
- 'march-date',
- 'april-date',
- 'may-date',
- 'june-date',
- 'july-date',
- 'august-date',
- 'september-date',
- 'october-date',
- 'november-date',
- 'december-date',
- ),
- 'categorypages' => array(
- 'pagecategories',
- 'pagecategorieslink',
- 'category_header',
- 'subcategories',
- 'category-media-header',
- 'category-empty',
- 'hidden-categories',
- 'hidden-category-category',
- 'category-subcat-count',
- 'category-subcat-count-limited',
- 'category-article-count',
- 'category-article-count-limited',
- 'category-file-count',
- 'category-file-count-limited',
- 'listingcontinuesabbrev',
- 'index-category',
- 'noindex-category',
- 'broken-file-category',
- 'categoryviewer-pagedlinks',
- ),
- 'mainpage' => array(
- 'linkprefix',
- ),
- 'miscellaneous1' => array(
- 'about',
- 'article',
- 'newwindow',
- 'cancel',
- 'moredotdotdot',
- 'morenotlisted',
- 'mypage',
- 'mytalk',
- 'anontalk',
- 'navigation',
- 'and',
- ),
- 'cologneblue' => array(
- 'qbfind',
- 'qbbrowse',
- 'qbedit',
- 'qbpageoptions',
- 'qbmyoptions',
- 'qbspecialpages',
- 'faq',
- 'faqpage',
- 'sitetitle',
- 'sitesubtitle',
- ),
- 'vector' => array(
- 'vector-action-addsection',
- 'vector-action-delete',
- 'vector-action-move',
- 'vector-action-protect',
- 'vector-action-undelete',
- 'vector-action-unprotect',
- 'vector-simplesearch-preference',
- 'vector-view-create',
- 'vector-view-edit',
- 'vector-view-history',
- 'vector-view-view',
- 'vector-view-viewsource',
- 'actions',
- 'namespaces',
- 'variants',
- ),
- 'miscellaneous2' => array(
- 'navigation-heading',
- 'errorpagetitle',
- 'returnto',
- 'tagline',
- 'help',
- 'search',
- 'searchbutton',
- 'go',
- 'searcharticle',
- 'history',
- 'history_short',
- 'updatedmarker',
- 'printableversion',
- 'permalink',
- 'print',
- 'view',
- 'edit',
- 'create',
- 'editthispage',
- 'create-this-page',
- 'delete',
- 'deletethispage',
- 'undeletethispage',
- 'undelete_short',
- 'viewdeleted_short',
- 'protect',
- 'protect_change',
- 'protectthispage',
- 'unprotect',
- 'unprotectthispage',
- 'newpage',
- 'talkpage',
- 'talkpagelinktext',
- 'specialpage',
- 'personaltools',
- 'postcomment',
- 'addsection',
- 'articlepage',
- 'talk',
- 'views',
- 'toolbox',
- 'userpage',
- 'projectpage',
- 'imagepage',
- 'mediawikipage',
- 'templatepage',
- 'viewhelppage',
- 'categorypage',
- 'viewtalkpage',
- 'otherlanguages',
- 'redirectedfrom',
- 'redirectpagesub',
- 'talkpageheader',
- 'lastmodifiedat',
- 'viewcount',
- 'protectedpage',
- 'jumpto',
- 'jumptonavigation',
- 'jumptosearch',
- 'view-pool-error',
- 'pool-timeout',
- 'pool-queuefull',
- 'pool-errorunknown',
- ),
- 'links' => array(
- 'aboutsite',
- 'aboutpage',
- 'copyright',
- 'copyrightpage',
- 'currentevents',
- 'currentevents-url',
- 'disclaimers',
- 'disclaimerpage',
- 'edithelp',
- 'edithelppage',
- 'help',
- 'helppage',
- 'mainpage',
- 'mainpage-description',
- 'policy-url',
- 'portal',
- 'portal-url',
- 'privacy',
- 'privacypage',
- ),
- 'badaccess' => array(
- 'badaccess',
- 'badaccess-group0',
- 'badaccess-groups',
- ),
- 'versionrequired' => array(
- 'versionrequired',
- 'versionrequiredtext',
- ),
- 'miscellaneous3' => array(
- 'ok',
- 'pagetitle',
- 'pagetitle-view-mainpage',
- 'backlinksubtitle',
- 'retrievedfrom',
- 'youhavenewmessages',
- 'newmessageslink',
- 'newmessagesdifflink',
- 'youhavenewmessagesfromusers',
- 'youhavenewmessagesmanyusers',
- 'newmessageslinkplural',
- 'newmessagesdifflinkplural',
- 'youhavenewmessagesmulti',
- 'newtalkseparator',
- 'editsection',
- 'editold',
- 'viewsourceold',
- 'editlink',
- 'viewsourcelink',
- 'editsectionhint',
- 'toc',
- 'showtoc',
- 'hidetoc',
- 'collapsible-collapse',
- 'collapsible-expand',
- 'thisisdeleted',
- 'viewdeleted',
- 'restorelink',
- 'feedlinks',
- 'feed-invalid',
- 'feed-unavailable',
- 'site-rss-feed',
- 'site-atom-feed',
- 'page-rss-feed',
- 'page-atom-feed',
- 'feed-atom',
- 'feed-rss',
- 'sitenotice',
- 'anonnotice',
- 'newsectionheaderdefaultlevel',
- 'red-link-title',
- 'sort-descending',
- 'sort-ascending',
-
- ),
- 'nstab' => array(
- 'nstab-main',
- 'nstab-user',
- 'nstab-media',
- 'nstab-special',
- 'nstab-project',
- 'nstab-image',
- 'nstab-mediawiki',
- 'nstab-template',
- 'nstab-help',
- 'nstab-category',
- 'mainpage-nstab',
- ),
- 'main' => array(
- 'nosuchaction',
- 'nosuchactiontext',
- 'nosuchspecialpage',
- 'nospecialpagetext',
- ),
- 'errors' => array(
- 'error',
- 'databaseerror',
- 'databaseerror-text',
- 'databaseerror-textcl',
- 'databaseerror-query',
- 'databaseerror-function',
- 'databaseerror-error',
- 'laggedslavemode',
- 'readonly',
- 'enterlockreason',
- 'readonlytext',
- 'missing-article', // not used anymore in core, but kept for extensions
- 'missingarticle-rev', // not used anymore in core, but kept for extensions
- 'missingarticle-diff', // not used anymore in core, but kept for extensions
- 'readonly_lag',
- 'internalerror',
- 'internalerror_info',
- 'fileappenderrorread',
- 'fileappenderror',
- 'filecopyerror',
- 'filerenameerror',
- 'filedeleteerror',
- 'directorycreateerror',
- 'filenotfound',
- 'fileexistserror',
- 'unexpected',
- 'formerror',
- 'badarticleerror',
- 'cannotdelete',
- 'cannotdelete-title',
- 'delete-hook-aborted',
- 'no-null-revision',
- 'badtitle',
- 'badtitletext',
- 'perfcached',
- 'perfcachedts',
- 'querypage-no-updates',
- 'wrong_wfQuery_params',
- 'viewsource',
- 'viewsource-title',
- 'actionthrottled',
- 'actionthrottledtext',
- 'protectedpagetext',
- 'viewsourcetext',
- 'viewyourtext',
- 'protectedinterface',
- 'editinginterface',
- 'cascadeprotected',
- 'namespaceprotected',
- 'customcssprotected',
- 'customjsprotected',
- 'mycustomcssprotected',
- 'mycustomjsprotected',
- 'myprivateinfoprotected',
- 'mypreferencesprotected',
- 'ns-specialprotected',
- 'titleprotected',
- 'filereadonlyerror',
- 'invalidtitle-knownnamespace',
- 'invalidtitle-unknownnamespace',
- 'exception-nologin',
- 'exception-nologin-text',
- ),
- 'virus' => array(
- 'virus-badscanner',
- 'virus-scanfailed',
- 'virus-unknownscanner',
- ),
- 'login' => array(
- 'logouttext',
- 'welcomeuser',
- 'welcomecreation-msg',
- 'yourname',
- 'userlogin-yourname',
- 'userlogin-yourname-ph',
- 'createacct-another-username-ph',
- 'createacct-helpusername',
- 'yourpassword',
- 'userlogin-yourpassword',
- 'userlogin-yourpassword-ph',
- 'createacct-yourpassword-ph',
- 'yourpasswordagain',
- 'createacct-yourpasswordagain',
- 'createacct-yourpasswordagain-ph',
- 'remembermypassword',
- 'userlogin-remembermypassword',
- 'userlogin-signwithsecure',
- 'yourdomainname',
- 'password-change-forbidden',
- 'externaldberror',
- 'login',
- 'nav-login-createaccount',
- 'loginprompt',
- 'userlogin',
- 'userloginnocreate',
- 'logout',
- 'userlogout',
- 'userlogout-summary',
- 'notloggedin',
- 'userlogin-noaccount',
- 'userlogin-joinproject',
- 'nologin',
- 'nologinlink',
- 'createaccount',
- 'gotaccount',
- 'gotaccountlink',
- 'userlogin-resetlink',
- 'userlogin-resetpassword-link',
- 'helplogin-url',
- 'userlogin-helplink2',
- 'userlogin-loggedin',
- 'userlogin-createanother',
- 'createacct-join',
- 'createacct-another-join',
- 'createacct-emailrequired',
- 'createacct-emailoptional',
- 'createacct-email-ph',
- 'createacct-another-email-ph',
- 'createaccountmail',
- 'createacct-realname',
- 'createaccountreason',
- 'createacct-reason',
- 'createacct-reason-ph',
- 'createacct-captcha',
- 'createacct-imgcaptcha-help',
- 'createacct-imgcaptcha-ph',
- 'createacct-submit',
- 'createacct-another-submit',
- 'createacct-benefit-heading',
- 'createacct-benefit-icon1',
- 'createacct-benefit-head1',
- 'createacct-benefit-body1',
- 'createacct-benefit-icon2',
- 'createacct-benefit-head2',
- 'createacct-benefit-body2',
- 'createacct-benefit-icon3',
- 'createacct-benefit-head3',
- 'createacct-benefit-body3',
- 'badretype',
- 'userexists',
- 'loginerror',
- 'createacct-error',
- 'createaccounterror',
- 'nocookiesnew',
- 'nocookieslogin',
- 'nocookiesfornew',
- 'nocookiesforlogin',
- 'noname',
- 'loginsuccesstitle',
- 'loginsuccess',
- 'nosuchuser',
- 'nosuchusershort',
- 'nouserspecified',
- 'login-userblocked',
- 'wrongpassword',
- 'wrongpasswordempty',
- 'passwordtooshort',
- 'password-name-match',
- 'password-login-forbidden',
- 'mailmypassword',
- 'passwordremindertitle',
- 'passwordremindertext',
- 'noemail',
- 'noemailcreate',
- 'passwordsent',
- 'blocked-mailpassword',
- 'eauthentsent',
- 'throttled-mailpassword',
- 'loginstart',
- 'loginend',
- 'loginend-https',
- 'signupstart',
- 'signupend',
- 'signupend-https',
- 'mailerror',
- 'acct_creation_throttle_hit',
- 'emailauthenticated',
- 'emailnotauthenticated',
- 'noemailprefs',
- 'emailconfirmlink',
- 'invalidemailaddress',
- 'cannotchangeemail',
- 'emaildisabled',
- 'accountcreated',
- 'accountcreatedtext',
- 'createaccount-title',
- 'createaccount-text',
- 'usernamehasherror',
- 'login-throttled',
- 'login-abort-generic',
- 'loginlanguagelabel',
- 'loginlanguagelinks',
- 'suspicious-userlogout',
- 'createacct-another-realname-tip',
- ),
- 'mail' => array(
- 'pear-mail-error',
- 'php-mail-error',
- 'php-mail-error-unknown',
- 'user-mail-no-addy',
- 'user-mail-no-body',
- ),
- 'resetpass' => array(
- 'resetpass',
- 'resetpass_announce',
- 'resetpass_text',
- 'resetpass_header',
- 'oldpassword',
- 'newpassword',
- 'retypenew',
- 'resetpass_submit',
- 'changepassword-success',
- 'resetpass_forbidden',
- 'resetpass-no-info',
- 'resetpass-submit-loggedin',
- 'resetpass-submit-cancel',
- 'resetpass-wrong-oldpass',
- 'resetpass-temp-password',
- 'resetpass-abort-generic',
- ),
- 'passwordreset' => array(
- 'passwordreset',
- 'passwordreset-text-one',
- 'passwordreset-text-many',
- 'passwordreset-legend',
- 'passwordreset-disabled',
- 'passwordreset-emaildisabled',
- 'passwordreset-username',
- 'passwordreset-domain',
- 'passwordreset-capture',
- 'passwordreset-capture-help',
- 'passwordreset-email',
- 'passwordreset-emailtitle',
- 'passwordreset-emailtext-ip',
- 'passwordreset-emailtext-user',
- 'passwordreset-emailelement',
- 'passwordreset-emailsent',
- 'passwordreset-emailsent-capture',
- 'passwordreset-emailerror-capture',
- ),
- 'changeemail' => array(
- 'changeemail',
- 'changeemail-summary',
- 'changeemail-header',
- 'changeemail-text',
- 'changeemail-no-info',
- 'changeemail-oldemail',
- 'changeemail-newemail',
- 'changeemail-none',
- 'changeemail-password',
- 'changeemail-submit',
- 'changeemail-cancel',
- ),
- 'resettokens' => array(
- 'resettokens',
- 'resettokens-summary',
- 'resettokens-text',
- 'resettokens-no-tokens',
- 'resettokens-legend',
- 'resettokens-tokens',
- 'resettokens-token-label',
- 'resettokens-watchlist-token',
- 'resettokens-done',
- 'resettokens-resetbutton',
- ),
- 'toolbar' => array(
- 'bold_sample',
- 'bold_tip',
- 'italic_sample',
- 'italic_tip',
- 'link_sample',
- 'link_tip',
- 'extlink_sample',
- 'extlink_tip',
- 'headline_sample',
- 'headline_tip',
- 'nowiki_sample',
- 'nowiki_tip',
- 'image_sample',
- 'image_tip',
- 'media_sample',
- 'media_tip',
- 'sig_tip',
- 'hr_tip',
- ),
- 'edit' => array(
- 'summary',
- 'subject',
- 'minoredit',
- 'watchthis',
- 'savearticle',
- 'preview',
- 'showpreview',
- 'showlivepreview',
- 'showdiff',
- 'anoneditwarning',
- 'anonpreviewwarning',
- 'missingsummary',
- 'missingcommenttext',
- 'missingcommentheader',
- 'summary-preview',
- 'subject-preview',
- 'blockedtitle',
- 'blockedtext',
- 'autoblockedtext',
- 'blockednoreason',
- 'whitelistedittext',
- 'confirmedittext',
- 'nosuchsectiontitle',
- 'nosuchsectiontext',
- 'loginreqtitle',
- 'loginreqlink',
- 'loginreqpagetext',
- 'accmailtitle',
- 'accmailtext',
- 'newarticle',
- 'newarticletext',
- 'newarticletextanon',
- 'talkpagetext',
- 'anontalkpagetext',
- 'noarticletext',
- 'noarticletext-nopermission',
- 'noarticletextanon',
- 'missing-revision',
- 'userpage-userdoesnotexist',
- 'userpage-userdoesnotexist-view',
- 'blocked-notice-logextract',
- 'clearyourcache',
- 'usercssyoucanpreview',
- 'userjsyoucanpreview',
- 'usercsspreview',
- 'userjspreview',
- 'sitecsspreview',
- 'sitejspreview',
- 'userinvalidcssjstitle',
- 'updated',
- 'note',
- 'previewnote',
- 'continue-editing',
- 'previewconflict',
- 'session_fail_preview',
- 'session_fail_preview_html',
- 'token_suffix_mismatch',
- 'edit_form_incomplete',
- 'editing',
- 'creating',
- 'editingsection',
- 'editingcomment',
- 'editconflict',
- 'explainconflict',
- 'yourtext',
- 'storedversion',
- 'nonunicodebrowser',
- 'editingold',
- 'yourdiff',
- 'copyrightwarning',
- 'copyrightwarning2',
- 'editpage-head-copy-warn',
- 'editpage-tos-summary',
- 'longpage-hint',
- 'longpageerror',
- 'readonlywarning',
- 'protectedpagewarning',
- 'semiprotectedpagewarning',
- 'cascadeprotectedwarning',
- 'titleprotectedwarning',
- 'templatesused',
- 'templatesusedpreview',
- 'templatesusedsection',
- 'template-protected',
- 'template-semiprotected',
- 'hiddencategories',
- 'edittools',
- 'edittools-upload',
- 'nocreatetext',
- 'nocreate-loggedin',
- 'sectioneditnotsupported-title',
- 'sectioneditnotsupported-text',
- 'permissionserrors',
- 'permissionserrorstext',
- 'permissionserrorstext-withaction',
- 'recreate-moveddeleted-warn',
- 'moveddeleted-notice',
- 'log-fulllog',
- 'edit-hook-aborted',
- 'edit-gone-missing',
- 'edit-conflict',
- 'edit-no-change',
- 'postedit-confirmation',
- 'edit-already-exists',
- 'addsection-preload',
- 'addsection-editintro',
- 'defaultmessagetext',
- 'content-failed-to-parse',
- 'invalid-content-data',
- 'content-not-allowed-here',
- 'editwarning-warning',
- ),
- 'contentmodels' => array(
- 'content-model-wikitext',
- 'content-model-text',
- 'content-model-javascript',
- 'content-model-css',
- ),
- 'parserwarnings' => array(
- 'expensive-parserfunction-warning',
- 'expensive-parserfunction-category',
- 'post-expand-template-inclusion-warning',
- 'post-expand-template-inclusion-category',
- 'post-expand-template-argument-warning',
- 'post-expand-template-argument-category',
- 'parser-template-loop-warning',
- 'parser-template-recursion-depth-warning',
- 'language-converter-depth-warning',
- 'node-count-exceeded-category',
- 'node-count-exceeded-warning',
- 'expansion-depth-exceeded-category',
- 'expansion-depth-exceeded-warning',
- 'parser-unstrip-loop-warning',
- 'parser-unstrip-recursion-limit',
- 'converter-manual-rule-error',
- ),
- 'undo' => array(
- 'undo-success',
- 'undo-failure',
- 'undo-norev',
- 'undo-summary',
- 'undo-summary-username-hidden',
- ),
- 'cantcreateaccount' => array(
- 'cantcreateaccounttitle',
- 'cantcreateaccount-text',
- ),
- 'history' => array(
- 'viewpagelogs',
- 'nohistory',
- 'currentrev',
- 'currentrev-asof',
- 'revisionasof',
- 'revision-info',
- 'revision-info-current',
- 'revision-nav',
- 'previousrevision',
- 'nextrevision',
- 'currentrevisionlink',
- 'cur',
- 'next',
- 'last',
- 'page_first',
- 'page_last',
- 'histlegend',
- 'history-fieldset-title',
- 'history-show-deleted',
- 'history_copyright',
- 'histfirst',
- 'histlast',
- 'historysize',
- 'historyempty',
- ),
- 'history-feed' => array(
- 'history-feed-title',
- 'history-feed-description',
- 'history-feed-item-nocomment',
- 'history-feed-empty',
- ),
- 'revdelete' => array(
- 'rev-deleted-comment',
- 'rev-deleted-user',
- 'rev-deleted-event',
- 'rev-deleted-user-contribs',
- 'rev-deleted-text-permission',
- 'rev-deleted-text-unhide',
- 'rev-suppressed-text-unhide',
- 'rev-deleted-text-view',
- 'rev-suppressed-text-view',
- 'rev-deleted-no-diff',
- 'rev-suppressed-no-diff',
- 'rev-deleted-unhide-diff',
- 'rev-suppressed-unhide-diff',
- 'rev-deleted-diff-view',
- 'rev-suppressed-diff-view',
- 'rev-delundel',
- 'rev-showdeleted',
- 'revisiondelete',
- 'revdelete-nooldid-title',
- 'revdelete-nooldid-text',
- 'revdelete-nologtype-title',
- 'revdelete-nologtype-text',
- 'revdelete-nologid-title',
- 'revdelete-nologid-text',
- 'revdelete-no-file',
- 'revdelete-show-file-confirm',
- 'revdelete-show-file-submit',
- 'revdelete-selected',
- 'logdelete-selected',
- 'revdelete-text',
- 'revdelete-confirm',
- 'revdelete-suppress-text',
- 'revdelete-legend',
- 'revdelete-hide-text',
- 'revdelete-hide-image',
- 'revdelete-hide-name',
- 'revdelete-hide-comment',
- 'revdelete-hide-user',
- 'revdelete-hide-restricted',
- 'revdelete-radio-same',
- 'revdelete-radio-set',
- 'revdelete-radio-unset',
- 'revdelete-suppress',
- 'revdelete-unsuppress',
- 'revdelete-log',
- 'revdelete-submit',
- 'revdelete-success',
- 'revdelete-failure',
- 'logdelete-success',
- 'logdelete-failure',
- 'revdel-restore',
- 'revdel-restore-deleted',
- 'revdel-restore-visible',
- 'pagehist',
- 'deletedhist',
- 'revdelete-hide-current',
- 'revdelete-show-no-access',
- 'revdelete-modify-no-access',
- 'revdelete-modify-missing',
- 'revdelete-no-change',
- 'revdelete-concurrent-change',
- 'revdelete-only-restricted',
- 'revdelete-reason-dropdown',
- 'revdelete-otherreason',
- 'revdelete-reasonotherlist',
- 'revdelete-edit-reasonlist',
- 'revdelete-offender',
- ),
- 'suppression' => array(
- 'suppressionlog',
- 'suppressionlogtext',
- ),
- 'mergehistory' => array(
- 'mergehistory',
- 'mergehistory-header',
- 'mergehistory-box',
- 'mergehistory-from',
- 'mergehistory-into',
- 'mergehistory-list',
- 'mergehistory-merge',
- 'mergehistory-go',
- 'mergehistory-submit',
- 'mergehistory-empty',
- 'mergehistory-success',
- 'mergehistory-fail',
- 'mergehistory-no-source',
- 'mergehistory-no-destination',
- 'mergehistory-invalid-source',
- 'mergehistory-invalid-destination',
- 'mergehistory-autocomment',
- 'mergehistory-comment',
- 'mergehistory-same-destination',
- 'mergehistory-reason',
- 'mergehistory-revisionrow'
- ),
- 'mergelog' => array(
- 'mergelog',
- 'pagemerge-logentry',
- 'revertmerge',
- 'mergelogpagetext',
- ),
- 'diffs' => array(
- 'history-title',
- 'difference-title',
- 'difference-title-multipage',
- 'difference-multipage',
- 'lineno',
- 'compareselectedversions',
- 'showhideselectedversions',
- 'editundo',
- 'diff-empty',
- 'diff-multi',
- 'diff-multi-manyusers',
- 'difference-missing-revision',
- ),
- 'search' => array(
- 'search-summary',
- 'searchresults',
- 'searchresults-title',
- 'searchresulttext',
- 'searchsubtitle',
- 'searchsubtitleinvalid',
- 'toomanymatches',
- 'titlematches',
- 'notitlematches',
- 'textmatches',
- 'notextmatches',
- 'prevn',
- 'nextn',
- 'prevn-title',
- 'nextn-title',
- 'shown-title',
- 'viewprevnext',
- 'searchmenu-legend',
- 'searchmenu-exists',
- 'searchmenu-new',
- 'searchmenu-new-nocreate',
- 'searchmenu-prefix',
- 'searchprofile-articles',
- 'searchprofile-project',
- 'searchprofile-images',
- 'searchprofile-everything',
- 'searchprofile-advanced',
- 'searchprofile-articles-tooltip',
- 'searchprofile-project-tooltip',
- 'searchprofile-images-tooltip',
- 'searchprofile-everything-tooltip',
- 'searchprofile-advanced-tooltip',
- 'search-result-size',
- 'search-result-category-size',
- 'search-result-score',
- 'search-redirect',
- 'search-section',
- 'search-suggest',
- 'search-interwiki-caption',
- 'search-interwiki-default',
- 'search-interwiki-custom',
- 'search-interwiki-more',
- 'search-relatedarticle',
- 'mwsuggest-disable',
- 'searcheverything-enable',
- 'searchrelated',
- 'searchall',
- 'showingresults',
- 'showingresultsnum',
- 'showingresultsheader',
- 'nonefound',
- 'search-nonefound',
- 'powersearch',
- 'powersearch-legend',
- 'powersearch-ns',
- 'powersearch-redir',
- 'powersearch-field',
- 'powersearch-togglelabel',
- 'powersearch-toggleall',
- 'powersearch-togglenone',
- 'search-external',
- 'searchdisabled',
- 'googlesearch',
- 'search-error',
- ),
- 'opensearch' => array(
- 'opensearch-desc',
- ),
- 'preferences' => array(
- 'preferences',
- 'preferences-summary',
- 'mypreferences',
- 'prefs-edits',
- 'prefsnologin',
- 'prefsnologintext',
- 'changepassword',
- 'changepassword-summary',
- 'prefs-skin',
- 'skin-preview',
- 'datedefault',
- 'prefs-beta',
- 'prefs-datetime',
- 'prefs-labs',
- 'prefs-user-pages',
- 'prefs-personal',
- 'prefs-rc',
- 'prefs-watchlist',
- 'prefs-watchlist-days',
- 'prefs-watchlist-days-max',
- 'prefs-watchlist-edits',
- 'prefs-watchlist-edits-max',
- 'prefs-watchlist-token',
- 'prefs-misc', // continue checking if used from here on (r49916)
- 'prefs-resetpass',
- 'prefs-changeemail',
- 'prefs-setemail',
- 'prefs-email',
- 'prefs-rendering',
- 'saveprefs',
- 'resetprefs',
- 'restoreprefs',
- 'prefs-editing',
- 'rows',
- 'columns',
- 'searchresultshead',
- 'resultsperpage',
- 'stub-threshold',
- 'stub-threshold-disabled',
- 'recentchangesdays',
- 'recentchangesdays-max',
- 'recentchangescount',
- 'prefs-help-recentchangescount',
- 'prefs-help-watchlist-token2',
- 'savedprefs',
- 'timezonelegend',
- 'localtime',
- 'timezoneuseserverdefault',
- 'timezoneuseoffset',
- 'timezoneoffset',
- 'servertime',
- 'guesstimezone',
- 'timezoneregion-africa',
- 'timezoneregion-america',
- 'timezoneregion-antarctica',
- 'timezoneregion-arctic',
- 'timezoneregion-asia',
- 'timezoneregion-atlantic',
- 'timezoneregion-australia',
- 'timezoneregion-europe',
- 'timezoneregion-indian',
- 'timezoneregion-pacific',
- 'allowemail',
- 'prefs-searchoptions',
- 'prefs-namespaces',
- 'defaultns',
- 'default',
- 'defaultns',
- 'prefs-files',
- 'prefs-custom-css',
- 'prefs-custom-js',
- 'prefs-common-css-js',
- 'prefs-reset-intro',
- 'prefs-emailconfirm-label',
- 'youremail',
- 'username',
- 'uid',
- 'prefs-memberingroups',
- 'prefs-memberingroups-type',
- 'prefs-registration',
- 'prefs-registration-date-time',
- 'yourrealname',
- 'yourlanguage',
- 'yourvariant',
- 'prefs-help-variant',
- 'yournick',
- 'prefs-help-signature',
- 'badsig',
- 'badsiglength',
- 'yourgender',
- 'gender-unknown',
- 'gender-male',
- 'gender-female',
- 'prefs-help-gender',
- 'email',
- 'prefs-help-realname',
-
- # 3 messages depending upon $wgEmailConfirmToEdit and $wgEnableUserEmail
- 'prefs-help-email',
- 'prefs-help-email-others',
- 'prefs-help-email-required',
-
- 'prefs-info',
- 'prefs-i18n',
- 'prefs-signature',
- 'prefs-dateformat',
- 'prefs-timeoffset',
- 'prefs-advancedediting',
- 'prefs-editor',
- 'prefs-preview',
- 'prefs-advancedrc',
- 'prefs-advancedrendering',
- 'prefs-advancedsearchoptions',
- 'prefs-advancedwatchlist',
- 'prefs-displayrc',
- 'prefs-displaysearchoptions',
- 'prefs-displaywatchlist',
- 'prefs-tokenwatchlist',
- 'prefs-diffs',
- 'prefs-help-prefershttps',
- ),
- 'preferences-email' => array(
- 'email-address-validity-valid',
- 'email-address-validity-invalid',
- ),
- 'userrights' => array(
- 'userrights',
- 'userrights-summary',
- 'userrights-lookup-user',
- 'userrights-user-editname',
- 'editusergroup',
- 'editinguser',
- 'userrights-editusergroup',
- 'saveusergroups',
- 'userrights-groupsmember',
- 'userrights-groupsmember-auto',
- 'userrights-groupsmember-type',
- 'userrights-groups-help',
- 'userrights-reason',
- 'userrights-no-interwiki',
- 'userrights-nodatabase',
- 'userrights-nologin',
- 'userrights-notallowed',
- 'userrights-changeable-col',
- 'userrights-unchangeable-col',
- 'userrights-irreversible-marker',
- 'userrights-conflict',
- 'userrights-removed-self',
- ),
- 'group' => array(
- 'group',
- 'group-user',
- 'group-autoconfirmed',
- 'group-bot',
- 'group-sysop',
- 'group-bureaucrat',
- 'group-suppress',
- 'group-all',
- ),
- 'group-member' => array(
- 'group-user-member',
- 'group-autoconfirmed-member',
- 'group-bot-member',
- 'group-sysop-member',
- 'group-bureaucrat-member',
- 'group-suppress-member',
- ),
- 'grouppage' => array(
- 'grouppage-user',
- 'grouppage-autoconfirmed',
- 'grouppage-bot',
- 'grouppage-sysop',
- 'grouppage-bureaucrat',
- 'grouppage-suppress',
- ),
- 'right' => array(
- 'right-read',
- 'right-edit',
- 'right-createpage',
- 'right-createtalk',
- 'right-createaccount',
- 'right-minoredit',
- 'right-move',
- 'right-move-subpages',
- 'right-move-rootuserpages',
- 'right-movefile',
- 'right-suppressredirect',
- 'right-upload',
- 'right-reupload',
- 'right-reupload-own',
- 'right-reupload-shared',
- 'right-upload_by_url',
- 'right-purge',
- 'right-autoconfirmed',
- 'right-bot',
- 'right-nominornewtalk',
- 'right-apihighlimits',
- 'right-writeapi',
- 'right-delete',
- 'right-bigdelete',
- 'right-deletelogentry',
- 'right-deleterevision',
- 'right-deletedhistory',
- 'right-deletedtext',
- 'right-browsearchive',
- 'right-undelete',
- 'right-suppressrevision',
- 'right-suppressionlog',
- 'right-block',
- 'right-blockemail',
- 'right-hideuser',
- 'right-ipblock-exempt',
- 'right-proxyunbannable',
- 'right-unblockself',
- 'right-protect',
- 'right-editprotected',
- 'right-editsemiprotected',
- 'right-editinterface',
- 'right-editusercssjs',
- 'right-editusercss',
- 'right-edituserjs',
- 'right-editmyusercss',
- 'right-editmyuserjs',
- 'right-viewmywatchlist',
- 'right-editmywatchlist',
- 'right-viewmyprivateinfo',
- 'right-editmyprivateinfo',
- 'right-editmyoptions',
- 'right-rollback',
- 'right-markbotedits',
- 'right-noratelimit',
- 'right-import',
- 'right-importupload',
- 'right-patrol',
- 'right-autopatrol',
- 'right-patrolmarks',
- 'right-unwatchedpages',
- 'right-mergehistory',
- 'right-userrights',
- 'right-userrights-interwiki',
- 'right-siteadmin',
- 'right-override-export-depth',
- 'right-sendemail',
- 'right-passwordreset',
- ),
- 'newuserlog' => array(
- 'newuserlogpage',
- 'newuserlogpagetext',
- ),
- 'rightslog' => array(
- 'rightslog',
- 'rightslogtext',
- ),
- 'action' => array(
- 'action-read',
- 'action-edit',
- 'action-createpage',
- 'action-createtalk',
- 'action-createaccount',
- 'action-minoredit',
- 'action-move',
- 'action-move-subpages',
- 'action-move-rootuserpages',
- 'action-movefile',
- 'action-upload',
- 'action-reupload',
- 'action-reupload-shared',
- 'action-upload_by_url',
- 'action-writeapi',
- 'action-delete',
- 'action-deleterevision',
- 'action-deletedhistory',
- 'action-browsearchive',
- 'action-undelete',
- 'action-suppressrevision',
- 'action-suppressionlog',
- 'action-block',
- 'action-protect',
- 'action-rollback',
- 'action-import',
- 'action-importupload',
- 'action-patrol',
- 'action-autopatrol',
- 'action-unwatchedpages',
- 'action-mergehistory',
- 'action-userrights',
- 'action-userrights-interwiki',
- 'action-siteadmin',
- 'action-sendemail',
- 'action-editmywatchlist',
- 'action-viewmywatchlist',
- 'action-viewmyprivateinfo',
- 'action-editmyprivateinfo',
- ),
- 'recentchanges' => array(
- 'nchanges',
- 'enhancedrc-since-last-visit',
- 'enhancedrc-history',
- 'recentchanges',
- 'recentchanges-url',
- 'recentchanges-legend',
- 'recentchanges-summary',
- 'recentchangestext',
- 'recentchanges-noresult',
- 'recentchanges-feed-description',
- 'recentchanges-label-newpage',
- 'recentchanges-label-minor',
- 'recentchanges-label-bot',
- 'recentchanges-label-unpatrolled',
- 'rcnote',
- 'rcnotefrom',
- 'rclistfrom',
- 'rcshowhideminor',
- 'rcshowhidebots',
- 'rcshowhideliu',
- 'rcshowhideanons',
- 'rcshowhidepatr',
- 'rcshowhidemine',
- 'rclinks',
- 'diff',
- 'hist',
- 'hide',
- 'show',
- 'minoreditletter',
- 'newpageletter',
- 'boteditletter',
- 'unpatrolledletter',
- 'number_of_watching_users_RCview',
- 'number_of_watching_users_pageview',
- 'rc_categories',
- 'rc_categories_any',
- 'rc-change-size',
- 'rc-change-size-new',
- 'newsectionsummary',
- 'rc-enhanced-expand',
- 'rc-enhanced-hide',
- 'rc-old-title',
- ),
- 'recentchangeslinked' => array(
- 'recentchangeslinked',
- 'recentchangeslinked-feed',
- 'recentchangeslinked-toolbox',
- 'recentchangeslinked-title',
- 'recentchangeslinked-summary',
- 'recentchangeslinked-page',
- 'recentchangeslinked-to',
- ),
- 'upload' => array(
- 'upload',
- 'uploadbtn',
- 'reuploaddesc',
- 'upload-tryagain',
- 'uploadnologin',
- 'uploadnologintext',
- 'upload_directory_missing',
- 'upload_directory_read_only',
- 'uploaderror',
- 'upload-summary',
- 'upload-recreate-warning',
- 'uploadtext',
- 'upload-permitted',
- 'upload-preferred',
- 'upload-prohibited',
- 'uploadfooter',
- 'upload-default-description',
- 'uploadlog',
- 'uploadlogpage',
- 'uploadlogpagetext',
- 'filename',
- 'filedesc',
- 'fileuploadsummary',
- 'filereuploadsummary',
- 'filestatus',
- 'filesource',
- 'uploadedfiles',
- 'ignorewarning',
- 'ignorewarnings',
- 'minlength1',
- 'illegalfilename',
- 'filename-toolong',
- 'badfilename',
- 'filetype-mime-mismatch',
- 'filetype-badmime',
- 'filetype-bad-ie-mime',
- 'filetype-unwanted-type',
- 'filetype-banned-type',
- 'filetype-missing',
- 'empty-file',
- 'file-too-large',
- 'filename-tooshort',
- 'filetype-banned',
- 'verification-error',
- 'hookaborted',
- 'illegal-filename',
- 'overwrite',
- 'unknown-error',
- 'tmp-create-error',
- 'tmp-write-error',
- 'large-file',
- 'largefileserver',
- 'emptyfile',
- 'windows-nonascii-filename',
- 'fileexists',
- 'filepageexists',
- 'fileexists-extension',
- 'fileexists-thumbnail-yes',
- 'file-thumbnail-no',
- 'fileexists-forbidden',
- 'fileexists-shared-forbidden',
- 'file-exists-duplicate',
- 'file-deleted-duplicate',
- 'uploadwarning',
- 'uploadwarning-text',
- 'savefile',
- 'uploadedimage',
- 'overwroteimage',
- 'uploaddisabled',
- 'copyuploaddisabled',
- 'uploadfromurl-queued',
- 'uploaddisabledtext',
- 'php-uploaddisabledtext',
- 'uploadscripted',
- 'uploadvirus',
- 'uploadjava',
- 'upload-source',
- 'sourcefilename',
- 'sourceurl',
- 'destfilename',
- 'upload-maxfilesize',
- 'upload-description',
- 'upload-options',
- 'watchthisupload',
- 'filewasdeleted',
- 'filename-bad-prefix',
- 'filename-prefix-blacklist',
- 'upload-success-subj',
- 'upload-success-msg',
- 'upload-failure-subj',
- 'upload-failure-msg',
- 'upload-warning-subj',
- 'upload-warning-msg',
- ),
- 'upload-errors' => array(
- 'upload-proto-error',
- 'upload-proto-error-text',
- 'upload-file-error',
- 'upload-file-error-text',
- 'upload-misc-error',
- 'upload-misc-error-text',
- 'upload-too-many-redirects',
- 'upload-unknown-size',
- 'upload-http-error',
- 'upload-copy-upload-invalid-domain',
- ),
-
- 'filebackend-errors' => array(
- 'backend-fail-stream',
- 'backend-fail-backup',
- 'backend-fail-notexists',
- 'backend-fail-hashes',
- 'backend-fail-notsame',
- 'backend-fail-invalidpath',
- 'backend-fail-delete',
- 'backend-fail-describe',
- 'backend-fail-alreadyexists',
- 'backend-fail-store',
- 'backend-fail-copy',
- 'backend-fail-move',
- 'backend-fail-opentemp',
- 'backend-fail-writetemp',
- 'backend-fail-closetemp',
- 'backend-fail-read',
- 'backend-fail-create',
- 'backend-fail-maxsize',
- 'backend-fail-readonly',
- 'backend-fail-synced',
- 'backend-fail-connect',
- 'backend-fail-internal',
- 'backend-fail-contenttype',
- 'backend-fail-batchsize',
- 'backend-fail-usable'
- ),
-
- 'filejournal-errors' => array(
- 'filejournal-fail-dbconnect',
- 'filejournal-fail-dbquery'
- ),
-
- 'lockmanager-errors' => array(
- 'lockmanager-notlocked',
- 'lockmanager-fail-closelock',
- 'lockmanager-fail-deletelock',
- 'lockmanager-fail-acquirelock',
- 'lockmanager-fail-openlock',
- 'lockmanager-fail-acquirelock',
- 'lockmanager-fail-releaselock',
- 'lockmanager-fail-db-bucket',
- 'lockmanager-fail-db-release',
- 'lockmanager-fail-svr-acquire',
- 'lockmanager-fail-svr-release'
- ),
-
- 'zip' => array(
- 'zip-file-open-error',
- 'zip-wrong-format',
- 'zip-bad',
- 'zip-unsupported'
- ),
-
- 'uploadstash' => array(
- 'uploadstash',
- 'uploadstash-summary',
- 'uploadstash-clear',
- 'uploadstash-nofiles',
- 'uploadstash-badtoken',
- 'uploadstash-errclear',
- 'uploadstash-refresh',
- 'invalid-chunk-offset',
- ),
-
- 'img-auth' => array(
- 'img-auth-accessdenied',
- 'img-auth-desc',
- 'img-auth-nopathinfo',
- 'img-auth-notindir',
- 'img-auth-badtitle',
- 'img-auth-nologinnWL',
- 'img-auth-nofile',
- 'img-auth-isdir',
- 'img-auth-streaming',
- 'img-auth-public',
- 'img-auth-noread',
- 'img-auth-bad-query-string',
- ),
-
- 'http-errors' => array(
- 'http-invalid-url',
- 'http-invalid-scheme',
- 'http-request-error',
- 'http-read-error',
- 'http-timed-out',
- 'http-curl-error',
- 'http-bad-status',
- ),
-
- 'upload-curl-errors' => array(
- 'upload-curl-error6',
- 'upload-curl-error6-text',
- 'upload-curl-error28',
- 'upload-curl-error28-text',
- ),
- 'licenses' => array(
- 'license',
- 'license-header',
- 'nolicense',
- 'licenses',
- 'license-nopreview',
- 'upload_source_url',
- 'upload_source_file',
- ),
- 'filelist' => array(
- 'listfiles-summary',
- 'listfiles_search_for',
- 'imgfile',
- 'listfiles',
- 'listfiles_thumb',
- 'listfiles_date',
- 'listfiles_name',
- 'listfiles_user',
- 'listfiles_size',
- 'listfiles_description',
- 'listfiles_count',
- 'listfiles-show-all',
- 'listfiles-latestversion',
- 'listfiles-latestversion-yes',
- 'listfiles-latestversion-no',
- ),
- 'filedescription' => array(
- 'file-anchor-link',
- 'filehist',
- 'filehist-help',
- 'filehist-deleteall',
- 'filehist-deleteone',
- 'filehist-revert',
- 'filehist-current',
- 'filehist-datetime',
- 'filehist-thumb',
- 'filehist-thumbtext',
- 'filehist-nothumb',
- 'filehist-user',
- 'filehist-dimensions',
- 'filehist-filesize',
- 'filehist-comment',
- 'filehist-missing',
- 'imagelinks',
- 'linkstoimage',
- 'linkstoimage-more',
- 'nolinkstoimage',
- 'morelinkstoimage',
- 'linkstoimage-redirect',
- 'duplicatesoffile',
- 'sharedupload',
- 'sharedupload-desc-there',
- 'sharedupload-desc-here',
- 'sharedupload-desc-edit',
- 'sharedupload-desc-create',
- 'shareddescriptionfollows',
- 'filepage-nofile',
- 'filepage-nofile-link',
- 'uploadnewversion-linktext',
- 'shared-repo-from',
- 'shared-repo',
- 'shared-repo-name-wikimediacommons',
- 'filepage.css',
- 'upload-disallowed-here',
- ),
- 'filerevert' => array(
- 'filerevert',
- 'filerevert-legend',
- 'filerevert-intro',
- 'filerevert-comment',
- 'filerevert-defaultcomment',
- 'filerevert-submit',
- 'filerevert-success',
- 'filerevert-badversion',
- ),
- 'filedelete' => array(
- 'filedelete',
- 'filedelete-legend',
- 'filedelete-intro',
- 'filedelete-intro-old',
- 'filedelete-comment',
- 'filedelete-submit',
- 'filedelete-success',
- 'filedelete-success-old',
- 'filedelete-nofile',
- 'filedelete-nofile-old',
- 'filedelete-otherreason',
- 'filedelete-reason-otherlist',
- 'filedelete-reason-dropdown',
- 'filedelete-edit-reasonlist',
- 'filedelete-maintenance',
- 'filedelete-maintenance-title',
- ),
- 'mimesearch' => array(
- 'mimesearch',
- 'mimesearch-summary',
- 'mimetype',
- 'download',
- ),
- 'unwatchedpages' => array(
- 'unwatchedpages',
- 'unwatchedpages-summary',
- ),
- 'listredirects' => array(
- 'listredirects',
- 'listredirects-summary',
- ),
- 'unusedtemplates' => array(
- 'unusedtemplates',
- 'unusedtemplates-summary',
- 'unusedtemplatestext',
- 'unusedtemplateswlh',
- ),
- 'randompage' => array(
- 'randompage',
- 'randompage-nopages',
- 'randompage-url',
- ),
- 'randomincategory' => array(
- 'randomincategory',
- 'randomincategory-invalidcategory',
- 'randomincategory-nopages',
- 'randomincategory-selectcategory',
- 'randomincategory-selectcategory-submit',
- ),
- 'randomredirect' => array(
- 'randomredirect',
- 'randomredirect-nopages',
- ),
- 'statistics' => array(
- 'statistics',
- 'statistics-summary',
- 'statistics-header-pages',
- 'statistics-header-edits',
- 'statistics-header-views',
- 'statistics-header-users',
- 'statistics-header-hooks',
- 'statistics-articles',
- 'statistics-pages',
- 'statistics-pages-desc',
- 'statistics-files',
- 'statistics-edits',
- 'statistics-edits-average',
- 'statistics-views-total',
- 'statistics-views-total-desc',
- 'statistics-views-peredit',
- 'statistics-users',
- 'statistics-users-active',
- 'statistics-users-active-desc',
- 'statistics-mostpopular',
- 'statistics-footer',
- ),
- 'pageswithprop' => array(
- 'pageswithprop',
- 'pageswithprop-summary',
- 'pageswithprop-legend',
- 'pageswithprop-text',
- 'pageswithprop-prop',
- 'pageswithprop-submit',
- 'pageswithprop-prophidden-long',
- 'pageswithprop-prophidden-binary',
- ),
- 'doubleredirects' => array(
- 'doubleredirects',
- 'doubleredirects-summary',
- 'doubleredirectstext',
- 'double-redirect-fixed-move',
- 'double-redirect-fixed-maintenance',
- 'double-redirect-fixer',
- ),
- 'brokenredirects' => array(
- 'brokenredirects',
- 'brokenredirects-summary',
- 'brokenredirectstext',
- 'brokenredirects-edit',
- 'brokenredirects-delete',
- ),
- 'withoutinterwiki' => array(
- 'withoutinterwiki',
- 'withoutinterwiki-summary',
- 'withoutinterwiki-legend',
- 'withoutinterwiki-submit',
- ),
- 'fewestrevisions' => array(
- 'fewestrevisions',
- 'fewestrevisions-summary',
- ),
- 'specialpages' => array(
- 'nbytes',
- 'ncategories',
- 'ninterwikis',
- 'nlinks',
- 'nmembers',
- 'nrevisions',
- 'nviews',
- 'nchanges',
- 'nimagelinks',
- 'ntransclusions',
- 'specialpage-empty',
- 'lonelypages',
- 'lonelypages-summary',
- 'lonelypagestext',
- 'uncategorizedpages',
- 'uncategorizedpages-summary',
- 'uncategorizedcategories',
- 'uncategorizedcategories-summary',
- 'uncategorizedimages',
- 'uncategorizedimages-summary',
- 'uncategorizedtemplates',
- 'uncategorizedtemplates-summary',
- 'unusedcategories',
- 'unusedcategories-summary',
- 'unusedimages',
- 'unusedimages-summary',
- 'popularpages',
- 'popularpages-summary',
- 'wantedcategories',
- 'wantedcategories-summary',
- 'wantedpages',
- 'wantedpages-summary',
- 'wantedpages-badtitle',
- 'wantedfiles',
- 'wantedfiles-summary',
- 'wantedfiletext-cat',
- 'wantedfiletext-nocat',
- 'wantedtemplates',
- 'wantedtemplates-summary',
- 'mostlinked',
- 'mostlinked-summary',
- 'mostlinkedcategories',
- 'mostlinkedcategories-summary',
- 'mostlinkedtemplates',
- 'mostlinkedtemplates-summary',
- 'mostcategories',
- 'mostcategories-summary',
- 'mostimages',
- 'mostimages-summary',
- 'mostinterwikis',
- 'mostinterwikis-summary',
- 'mostrevisions',
- 'mostrevisions-summary',
- 'prefixindex',
- 'prefixindex-namespace',
- 'prefixindex-summary',
- 'prefixindex-strip',
- 'shortpages',
- 'shortpages-summary',
- 'longpages',
- 'longpages-summary',
- 'deadendpages',
- 'deadendpages-summary',
- 'deadendpagestext',
- 'protectedpages',
- 'protectedpages-indef',
- 'protectedpages-summary',
- 'protectedpages-cascade',
- 'protectedpagestext',
- 'protectedpagesempty',
- 'protectedtitles',
- 'protectedtitles-summary',
- 'protectedtitlestext',
- 'protectedtitlesempty',
- 'listusers',
- 'listusers-summary',
- 'listusers-editsonly',
- 'listusers-creationsort',
- 'listusers-desc',
- 'usereditcount',
- 'usercreated',
- 'newpages',
- 'newpages-summary',
- 'newpages-username',
- 'ancientpages',
- 'ancientpages-summary',
- 'move',
- 'movethispage',
- 'unusedimagestext',
- 'unusedcategoriestext',
- 'notargettitle',
- 'notargettext',
- 'nopagetitle',
- 'nopagetext',
- 'pager-newer-n',
- 'pager-older-n',
- 'suppress',
- 'querypage-disabled',
- ),
- 'booksources' => array(
- 'booksources',
- 'booksources-summary',
- 'booksources-search-legend',
- 'booksources-isbn',
- 'booksources-go',
- 'booksources-text',
- 'booksources-invalid-isbn',
- ),
- 'magicwords' => array(
- 'rfcurl',
- 'pubmedurl',
- ),
- 'logpages' => array(
- 'specialloguserlabel',
- 'speciallogtitlelabel',
- 'log',
- 'all-logs-page',
- 'alllogstext',
- 'logempty',
- 'log-title-wildcard',
- 'showhideselectedlogentries',
- ),
- 'allpages' => array(
- 'allpages',
- 'allpages-summary',
- 'alphaindexline',
- 'nextpage',
- 'prevpage',
- 'allpagesfrom',
- 'allpagesto',
- 'allarticles',
- 'allinnamespace',
- 'allnotinnamespace',
- 'allpagesprev',
- 'allpagesnext',
- 'allpagessubmit',
- 'allpagesprefix',
- 'allpagesbadtitle',
- 'allpages-bad-ns',
- 'allpages-hide-redirects',
- ),
- 'cachedspecial' => array(
- 'cachedspecial-viewing-cached-ttl',
- 'cachedspecial-viewing-cached-ts',
- 'cachedspecial-refresh-now',
- ),
- 'categories' => array(
- 'categories',
- 'categories-summary',
- 'categoriespagetext',
- 'categoriesfrom',
- 'special-categories-sort-count',
- 'special-categories-sort-abc',
- ),
- 'deletedcontribs' => array(
- 'deletedcontributions',
- 'deletedcontributions-summary',
- 'deletedcontributions-title',
- 'sp-deletedcontributions-contribs',
- ),
- 'linksearch' => array(
- 'linksearch',
- 'linksearch-summary',
- 'linksearch-pat',
- 'linksearch-ns',
- 'linksearch-ok',
- 'linksearch-text',
- 'linksearch-line',
- 'linksearch-error',
- ),
- 'listusers' => array(
- 'listusersfrom',
- 'listusers-submit',
- 'listusers-noresult',
- 'listusers-blocked',
- ),
- 'activeusers' => array(
- 'activeusers',
- 'activeusers-summary',
- 'activeusers-intro',
- 'activeusers-count',
- 'activeusers-from',
- 'activeusers-hidebots',
- 'activeusers-hidesysops',
- 'activeusers-submit',
- 'activeusers-noresult',
- ),
- 'listgrouprights' => array(
- 'listgrouprights',
- 'listgrouprights-summary',
- 'listgrouprights-key',
- 'listgrouprights-group',
- 'listgrouprights-rights',
- 'listgrouprights-helppage',
- 'listgrouprights-members',
- 'listgrouprights-right-display',
- 'listgrouprights-right-revoked',
- 'listgrouprights-addgroup',
- 'listgrouprights-removegroup',
- 'listgrouprights-addgroup-all',
- 'listgrouprights-removegroup-all',
- 'listgrouprights-addgroup-self',
- 'listgrouprights-removegroup-self',
- 'listgrouprights-addgroup-self-all',
- 'listgrouprights-removegroup-self-all',
-
- ),
- 'emailuser' => array(
- 'mailnologin',
- 'mailnologintext',
- 'emailuser',
- 'emailuser-title-target',
- 'emailuser-title-notarget',
- 'emailuser-summary',
- 'emailpage',
- 'emailpagetext',
- 'usermailererror',
- 'defemailsubject',
- 'usermaildisabled',
- 'usermaildisabledtext',
- 'noemailtitle',
- 'noemailtext',
- 'nowikiemailtitle',
- 'nowikiemailtext',
- 'emailnotarget',
- 'emailtarget',
- 'emailusername',
- 'emailusernamesubmit',
- 'email-legend',
- 'emailfrom',
- 'emailto',
- 'emailsubject',
- 'emailmessage',
- 'emailsend',
- 'emailccme',
- 'emailccsubject',
- 'emailsent',
- 'emailsenttext',
- 'emailuserfooter',
- ),
- 'usermessage' => array(
- 'usermessage-summary',
- 'usermessage-editor',
- 'usermessage-template',
- ),
- 'watchlist' => array(
- 'watchlist',
- 'watchlist-summary',
- 'mywatchlist',
- 'watchlistfor2',
- 'nowatchlist',
- 'watchlistanontext',
- 'watchnologin',
- 'watchnologintext',
- 'addwatch',
- 'addedwatchtext',
- 'removewatch',
- 'removedwatchtext',
- 'watch',
- 'watchthispage',
- 'unwatch',
- 'unwatchthispage',
- 'notanarticle',
- 'notvisiblerev',
- 'watchlist-details',
- 'wlheader-enotif',
- 'wlheader-showupdated',
- 'watchmethod-recent',
- 'watchmethod-list',
- 'watchlistcontains',
- 'iteminvalidname',
- 'wlnote',
- 'wlshowlast',
- 'watchlist-options',
- ),
- 'watching' => array(
- 'watching',
- 'unwatching',
- 'watcherrortext',
- ),
- 'enotif' => array(
- 'enotif_mailer',
- 'enotif_reset',
- 'enotif_impersonal_salutation',
- 'enotif_subject_deleted',
- 'enotif_subject_created',
- 'enotif_subject_moved',
- 'enotif_subject_restored',
- 'enotif_subject_changed',
- 'enotif_body_intro_deleted',
- 'enotif_body_intro_created',
- 'enotif_body_intro_moved',
- 'enotif_body_intro_restored',
- 'enotif_body_intro_changed',
- 'enotif_lastvisited',
- 'enotif_lastdiff',
- 'enotif_anon_editor',
- 'enotif_body',
- 'created',
- 'changed',
- ),
- 'delete' => array(
- 'deletepage',
- 'confirm',
- 'excontent',
- 'excontentauthor',
- 'exbeforeblank',
- 'exblank',
- 'delete-confirm',
- 'delete-legend',
- 'historywarning',
- 'confirmdeletetext',
- 'actioncomplete',
- 'actionfailed',
- 'deletedtext',
- 'dellogpage',
- 'dellogpagetext',
- 'deletionlog',
- 'reverted',
- 'deletecomment',
- 'deleteotherreason',
- 'deletereasonotherlist',
- 'deletereason-dropdown',
- 'delete-edit-reasonlist',
- 'delete-toobig',
- 'delete-warning-toobig',
- ),
- 'rollback' => array(
- 'rollback',
- 'rollback_short',
- 'rollbacklink',
- 'rollbacklinkcount',
- 'rollbacklinkcount-morethan',
- 'rollbackfailed',
- 'cantrollback',
- 'alreadyrolled',
- 'editcomment',
- 'revertpage',
- 'revertpage-nouser',
- 'rollback-success',
- ),
- 'edittokens' => array(
- 'sessionfailure-title',
- 'sessionfailure',
- ),
- 'protect' => array(
- 'protectlogpage',
- 'protectlogtext',
- 'protectedarticle',
- 'modifiedarticleprotection',
- 'unprotectedarticle',
- 'movedarticleprotection',
- 'protect-title',
- 'protect-title-notallowed',
- 'prot_1movedto2',
- 'protect-badnamespace-title',
- 'protect-badnamespace-text',
- 'protect-norestrictiontypes-text',
- 'protect-norestrictiontypes-title',
- 'protect-legend',
- 'protectcomment',
- 'protectexpiry',
- 'protect_expiry_invalid',
- 'protect_expiry_old',
- 'protect-unchain-permissions',
- 'protect-text',
- 'protect-locked-blocked',
- 'protect-locked-dblock',
- 'protect-locked-access',
- 'protect-cascadeon',
- 'protect-default',
- 'protect-fallback',
- 'protect-level-autoconfirmed',
- 'protect-level-sysop',
- 'protect-summary-desc',
- 'protect-summary-cascade',
- 'protect-expiring',
- 'protect-expiring-local',
- 'protect-expiry-indefinite',
- 'protect-cascade',
- 'protect-cantedit',
- 'protect-othertime',
- 'protect-othertime-op',
- 'protect-existing-expiry',
- 'protect-otherreason',
- 'protect-otherreason-op',
- 'protect-dropdown',
- 'protect-edit-reasonlist',
- 'protect-expiry-options',
- 'restriction-type',
- 'restriction-level',
- 'minimum-size',
- 'maximum-size',
- 'pagesize',
- ),
- 'restrictions' => array(
- 'restriction-edit',
- 'restriction-move',
- 'restriction-create',
- 'restriction-upload',
- ),
- 'restriction-levels' => array(
- 'restriction-level-sysop',
- 'restriction-level-autoconfirmed',
- 'restriction-level-all',
- ),
- 'undelete' => array(
- 'undelete',
- 'undelete-summary',
- 'undeletepage',
- 'undeletepagetitle',
- 'viewdeletedpage',
- 'undeletepagetext',
- 'undelete-fieldset-title',
- 'undeleteextrahelp',
- 'undeleterevisions',
- 'undeletehistory',
- 'undeleterevdel',
- 'undeletehistorynoadmin',
- 'undelete-revision',
- 'undeleterevision-missing',
- 'undelete-nodiff',
- 'undeletebtn',
- 'undeletelink',
- 'undeleteviewlink',
- 'undeletereset',
- 'undeleteinvert',
- 'undeletecomment',
- 'undeletedrevisions',
- 'undeletedrevisions-files',
- 'undeletedfiles',
- 'cannotundelete',
- 'undeletedpage',
- 'undelete-header',
- 'undelete-search-title',
- 'undelete-search-box',
- 'undelete-search-prefix',
- 'undelete-search-submit',
- 'undelete-no-results',
- 'undelete-filename-mismatch',
- 'undelete-bad-store-key',
- 'undelete-cleanup-error',
- 'undelete-missing-filearchive',
- 'undelete-error',
- 'undelete-error-short',
- 'undelete-error-long',
- 'undelete-show-file-confirm',
- 'undelete-show-file-submit',
- 'undelete-revisionrow',
- ),
- 'nsform' => array(
- 'namespace',
- 'invert',
- 'tooltip-invert',
- 'namespace_association',
- 'tooltip-namespace_association',
- 'blanknamespace',
- ),
- 'contributions' => array(
- 'contributions',
- 'contributions-summary',
- 'contributions-title',
- 'mycontris',
- 'contribsub2',
- 'nocontribs',
- 'uctop',
- 'month',
- 'year',
- ),
- 'sp-contributions' => array(
- 'sp-contributions-newbies',
- 'sp-contributions-newbies-sub',
- 'sp-contributions-newbies-title',
- 'sp-contributions-blocklog',
- 'sp-contributions-deleted',
- 'sp-contributions-uploads',
- 'sp-contributions-logs',
- 'sp-contributions-talk',
- 'sp-contributions-userrights',
- 'sp-contributions-blocked-notice',
- 'sp-contributions-blocked-notice-anon',
- 'sp-contributions-search',
- 'sp-contributions-username',
- 'sp-contributions-toponly',
- 'sp-contributions-submit',
- 'sp-contributions-explain',
- 'sp-contributions-footer',
- 'sp-contributions-footer-anon',
- 'sp-contributions-footer-newbies',
- ),
- 'whatlinkshere' => array(
- 'whatlinkshere',
- 'whatlinkshere-title',
- 'whatlinkshere-summary',
- 'whatlinkshere-page',
- 'linkshere',
- 'nolinkshere',
- 'nolinkshere-ns',
- 'isredirect',
- 'istemplate',
- 'isimage',
- 'whatlinkshere-prev',
- 'whatlinkshere-next',
- 'whatlinkshere-links',
- 'whatlinkshere-hideredirs',
- 'whatlinkshere-hidetrans',
- 'whatlinkshere-hidelinks',
- 'whatlinkshere-hideimages',
- 'whatlinkshere-filters',
- ),
- 'block' => array(
- 'autoblockid',
- 'block',
- 'unblock',
- 'unblock-summary',
- 'blockip',
- 'blockip-title',
- 'blockip-legend',
- 'blockiptext',
- 'ipadressorusername',
- 'ipbexpiry',
- 'ipbreason',
- 'ipbreasonotherlist',
- 'ipbreason-dropdown',
- 'ipb-hardblock',
- 'ipbcreateaccount',
- 'ipbemailban',
- 'ipbenableautoblock',
- 'ipbsubmit',
- 'ipbother',
- 'ipboptions',
- 'ipbotheroption',
- 'ipbotherreason',
- 'ipbhidename',
- 'ipbwatchuser',
- 'ipb-disableusertalk',
- 'ipb-change-block',
- 'ipb-confirm',
- 'badipaddress',
- 'blockipsuccesssub',
- 'blockipsuccesstext',
- 'ipb-blockingself',
- 'ipb-confirmhideuser',
- 'ipb-edit-dropdown',
- 'ipb-unblock-addr',
- 'ipb-unblock',
- 'ipb-blocklist',
- 'ipb-blocklist-contribs',
- 'unblockip',
- 'unblockiptext',
- 'ipusubmit',
- 'unblocked',
- 'unblocked-range',
- 'unblocked-id',
- 'blocklist',
- 'ipblocklist',
- 'ipblocklist-legend',
- 'blocklist-userblocks',
- 'blocklist-tempblocks',
- 'blocklist-addressblocks',
- 'blocklist-rangeblocks',
- 'blocklist-timestamp',
- 'blocklist-target',
- 'blocklist-expiry',
- 'blocklist-by',
- 'blocklist-params',
- 'blocklist-reason',
- 'blocklist-summary',
- 'ipblocklist-submit',
- 'ipblocklist-localblock',
- 'ipblocklist-otherblocks',
-
- 'infiniteblock',
- 'expiringblock',
- 'anononlyblock',
- 'noautoblockblock',
- 'createaccountblock',
- 'emailblock',
- 'blocklist-nousertalk',
- 'ipblocklist-empty',
- 'ipblocklist-no-results',
- 'blocklink',
- 'unblocklink',
- 'change-blocklink',
- 'contribslink',
- 'emaillink',
- 'autoblocker',
- 'blocklogpage',
- 'blocklog-showlog',
- 'blocklog-showsuppresslog',
- 'blocklogentry',
- 'reblock-logentry',
- 'blocklogtext',
- 'unblocklogentry',
- 'block-log-flags-anononly',
- 'block-log-flags-nocreate',
- 'block-log-flags-noautoblock',
- 'block-log-flags-noemail',
- 'block-log-flags-nousertalk',
- 'block-log-flags-angry-autoblock',
- 'block-log-flags-hiddenname',
- 'range_block_disabled',
- 'ipb_expiry_invalid',
- 'ipb_expiry_temp',
- 'ipb_hide_invalid',
- 'ipb_already_blocked',
- 'ipb-needreblock',
- 'ipb-otherblocks-header',
- 'unblock-hideuser',
- 'ipb_cant_unblock',
- 'ipb_blocked_as_range',
- 'ip_range_invalid',
- 'ip_range_toolarge',
- 'proxyblocker',
- 'proxyblockreason',
- 'sorbs',
- 'sorbsreason',
- 'sorbs_create_account_reason',
- 'xffblockreason',
- 'cant-block-while-blocked',
- 'cant-see-hidden-user',
- 'ipbblocked',
- 'ipbnounblockself',
- 'ipb-default-expiry',
- ),
- 'developertools' => array(
- 'lockdb',
- 'unlockdb',
- 'lockdbtext',
- 'unlockdbtext',
- 'lockconfirm',
- 'unlockconfirm',
- 'lockbtn',
- 'unlockbtn',
- 'locknoconfirm',
- 'lockdbsuccesssub',
- 'unlockdbsuccesssub',
- 'lockdbsuccesstext',
- 'unlockdbsuccesstext',
- 'lockfilenotwritable',
- 'databasenotlocked',
- 'lockedbyandtime',
- ),
- 'movepage' => array(
- 'move-page',
- 'movepage-summary',
- 'move-page-legend',
- 'movepagetext',
- 'movepagetext-noredirectfixer',
- 'movepagetalktext',
- 'movearticle',
- 'moveuserpage-warning',
- 'movenologin',
- 'movenologintext',
- 'movenotallowed',
- 'movenotallowedfile',
- 'cant-move-user-page',
- 'cant-move-to-user-page',
- 'newtitle',
- 'move-watch',
- 'movepagebtn',
- 'pagemovedsub',
- 'movepage-moved',
- 'movepage-moved-redirect',
- 'movepage-moved-noredirect',
- 'articleexists',
- 'cantmove-titleprotected',
- 'talkexists',
- 'movedto',
- 'movetalk',
- 'move-subpages',
- 'move-talk-subpages',
- 'movepage-page-exists',
- 'movepage-page-moved',
- 'movepage-page-unmoved',
- 'movepage-max-pages',
- 'movelogpage',
- 'movelogpagetext',
- 'movesubpage',
- 'movesubpagetext',
- 'movenosubpage',
- 'movereason',
- 'move-redirect-text',
- 'revertmove',
- 'delete_and_move',
- 'delete_and_move_text',
- 'delete_and_move_confirm',
- 'delete_and_move_reason',
- 'selfmove',
- 'immobile-source-namespace',
- 'immobile-target-namespace',
- 'immobile-target-namespace-iw',
- 'immobile-source-page',
- 'immobile-target-page',
- 'bad-target-model',
- 'immobile_namespace',
- 'imagenocrossnamespace',
- 'nonfile-cannot-move-to-file',
- 'imagetypemismatch',
- 'imageinvalidfilename',
- 'fix-double-redirects',
- 'move-leave-redirect',
- 'protectedpagemovewarning',
- 'semiprotectedpagemovewarning',
- 'move-over-sharedrepo',
- 'file-exists-sharedrepo',
- ),
- 'export' => array(
- 'export',
- 'export-summary',
- 'exporttext',
- 'exportall',
- 'exportcuronly',
- 'exportnohistory',
- 'exportlistauthors',
- 'export-submit',
- 'export-addcattext',
- 'export-addcat',
- 'export-addnstext',
- 'export-addns',
- 'export-download',
- 'export-templates',
- 'export-pagelinks',
- ),
- 'allmessages' => array(
- 'allmessages',
- 'allmessagesname',
- 'allmessagesdefault',
- 'allmessagescurrent',
- 'allmessagestext',
- 'allmessagesnotsupportedDB',
- 'allmessages-filter-legend',
- 'allmessages-filter',
- 'allmessages-filter-unmodified',
- 'allmessages-filter-all',
- 'allmessages-filter-modified',
- 'allmessages-prefix',
- 'allmessages-language',
- 'allmessages-filter-submit',
- ),
- 'thumbnails' => array(
- 'thumbnail-more',
- 'filemissing',
- 'thumbnail_error',
- 'thumbnail_error_remote',
- 'djvu_page_error',
- 'djvu_no_xml',
- 'thumbnail-temp-create',
- 'thumbnail-dest-create',
- 'thumbnail_invalid_params',
- 'thumbnail_dest_directory',
- 'thumbnail_image-type',
- 'thumbnail_gd-library',
- 'thumbnail_image-missing',
- ),
- 'import' => array(
- 'import',
- 'import-summary',
- 'importinterwiki',
- 'import-interwiki-text',
- 'import-interwiki-source',
- 'import-interwiki-history',
- 'import-interwiki-templates',
- 'import-interwiki-submit',
- 'import-interwiki-namespace',
- 'import-interwiki-rootpage',
- 'import-upload-filename',
- 'import-comment',
- 'importtext',
- 'importstart',
- 'import-revision-count',
- 'importnopages',
- 'imported-log-entries',
- 'importfailed',
- 'importunknownsource',
- 'importcantopen',
- 'importbadinterwiki',
- 'importnotext',
- 'importsuccess',
- 'importhistoryconflict',
- 'importnosources',
- 'importnofile',
- 'importuploaderrorsize',
- 'importuploaderrorpartial',
- 'importuploaderrortemp',
- 'import-parse-failure',
- 'import-noarticle',
- 'import-nonewrevisions',
- 'xml-error-string',
- 'import-upload',
- 'import-token-mismatch',
- 'import-invalid-interwiki',
- 'import-error-edit',
- 'import-error-create',
- 'import-error-interwiki',
- 'import-error-special',
- 'import-error-invalid',
- 'import-error-unserialize',
- 'import-options-wrong',
- 'import-rootpage-invalid',
- 'import-rootpage-nosubpage',
- ),
- 'importlog' => array(
- 'importlogpage',
- 'importlogpagetext',
- 'import-logentry-upload',
- 'import-logentry-upload-detail',
- 'import-logentry-interwiki',
- 'import-logentry-interwiki-detail',
- ),
- 'javaccripttest' => array(
- 'javascripttest',
- 'javascripttest-backlink',
- 'javascripttest-title',
- 'javascripttest-pagetext-noframework',
- 'javascripttest-pagetext-unknownframework',
- 'javascripttest-pagetext-frameworks',
- 'javascripttest-pagetext-skins',
- 'javascripttest-qunit-name',
- 'javascripttest-qunit-intro',
- 'javascripttest-qunit-heading',
- ),
- 'accesskeys' => array(
- 'accesskey-pt-userpage',
- 'accesskey-pt-anonuserpage',
- 'accesskey-pt-mytalk',
- 'accesskey-pt-anontalk',
- 'accesskey-pt-preferences',
- 'accesskey-pt-watchlist',
- 'accesskey-pt-mycontris',
- 'accesskey-pt-login',
- 'accesskey-pt-anonlogin',
- 'accesskey-pt-logout',
- 'accesskey-ca-talk',
- 'accesskey-ca-edit',
- 'accesskey-ca-addsection',
- 'accesskey-ca-viewsource',
- 'accesskey-ca-history',
- 'accesskey-ca-protect',
- 'accesskey-ca-unprotect',
- 'accesskey-ca-delete',
- 'accesskey-ca-undelete',
- 'accesskey-ca-move',
- 'accesskey-ca-watch',
- 'accesskey-ca-unwatch',
- 'accesskey-search',
- 'accesskey-search-go',
- 'accesskey-search-fulltext',
- 'accesskey-p-logo',
- 'accesskey-n-mainpage',
- 'accesskey-n-mainpage-description',
- 'accesskey-n-portal',
- 'accesskey-n-currentevents',
- 'accesskey-n-recentchanges',
- 'accesskey-n-randompage',
- 'accesskey-n-help',
- 'accesskey-t-whatlinkshere',
- 'accesskey-t-recentchangeslinked',
- 'accesskey-t-random',
- 'accesskey-feed-rss',
- 'accesskey-feed-atom',
- 'accesskey-t-contributions',
- 'accesskey-t-emailuser',
- 'accesskey-t-permalink',
- 'accesskey-t-print',
- 'accesskey-t-upload',
- 'accesskey-t-specialpages',
- 'accesskey-ca-nstab-main',
- 'accesskey-ca-nstab-user',
- 'accesskey-ca-nstab-media',
- 'accesskey-ca-nstab-special',
- 'accesskey-ca-nstab-project',
- 'accesskey-ca-nstab-image',
- 'accesskey-ca-nstab-mediawiki',
- 'accesskey-ca-nstab-template',
- 'accesskey-ca-nstab-help',
- 'accesskey-ca-nstab-category',
- 'accesskey-minoredit',
- 'accesskey-save',
- 'accesskey-preview',
- 'accesskey-diff',
- 'accesskey-compareselectedversions',
- 'accesskey-watch',
- 'accesskey-upload',
- 'accesskey-preferences-save',
- 'accesskey-summary',
- 'accesskey-userrights-set',
- 'accesskey-blockip-block',
- 'accesskey-export',
- 'accesskey-import',
- 'accesskey-watchlistedit-normal-submit',
- 'accesskey-watchlistedit-raw-submit',
- ),
- 'tooltips' => array(
- 'tooltip-pt-userpage',
- 'tooltip-pt-anonuserpage',
- 'tooltip-pt-mytalk',
- 'tooltip-pt-anontalk',
- 'tooltip-pt-preferences',
- 'tooltip-pt-watchlist',
- 'tooltip-pt-mycontris',
- 'tooltip-pt-login',
- 'tooltip-pt-anonlogin',
- 'tooltip-pt-logout',
- 'tooltip-ca-talk',
- 'tooltip-ca-edit',
- 'tooltip-ca-addsection',
- 'tooltip-ca-viewsource',
- 'tooltip-ca-history',
- 'tooltip-ca-protect',
- 'tooltip-ca-unprotect',
- 'tooltip-ca-delete',
- 'tooltip-ca-undelete',
- 'tooltip-ca-move',
- 'tooltip-ca-watch',
- 'tooltip-ca-unwatch',
- 'tooltip-search',
- 'tooltip-search-go',
- 'tooltip-search-fulltext',
- 'tooltip-p-logo',
- 'tooltip-n-mainpage',
- 'tooltip-n-mainpage-description',
- 'tooltip-n-portal',
- 'tooltip-n-currentevents',
- 'tooltip-n-recentchanges',
- 'tooltip-n-randompage',
- 'tooltip-n-help',
- 'tooltip-t-whatlinkshere',
- 'tooltip-t-recentchangeslinked',
- 'tooltip-t-random',
- 'tooltip-feed-rss',
- 'tooltip-feed-atom',
- 'tooltip-t-contributions',
- 'tooltip-t-emailuser',
- 'tooltip-t-upload',
- 'tooltip-t-specialpages',
- 'tooltip-t-print',
- 'tooltip-t-permalink',
- 'tooltip-ca-nstab-main',
- 'tooltip-ca-nstab-user',
- 'tooltip-ca-nstab-media',
- 'tooltip-ca-nstab-special',
- 'tooltip-ca-nstab-project',
- 'tooltip-ca-nstab-image',
- 'tooltip-ca-nstab-mediawiki',
- 'tooltip-ca-nstab-template',
- 'tooltip-ca-nstab-help',
- 'tooltip-ca-nstab-category',
- 'tooltip-minoredit',
- 'tooltip-save',
- 'tooltip-preview',
- 'tooltip-diff',
- 'tooltip-compareselectedversions',
- 'tooltip-watch',
- 'tooltip-watchlistedit-normal-submit',
- 'tooltip-watchlistedit-raw-submit',
- 'tooltip-recreate',
- 'tooltip-upload',
- 'tooltip-rollback',
- 'tooltip-undo',
- 'tooltip-preferences-save',
- 'tooltip-summary',
- 'interlanguage-link-title',
- ),
- 'stylesheets' => array(
- 'common.css',
- 'cologneblue.css',
- 'monobook.css',
- 'modern.css',
- 'vector.css',
- 'print.css',
- 'noscript.css',
- 'group-autoconfirmed.css',
- 'group-bot.css',
- 'group-sysop.css',
- 'group-bureaucrat.css',
- ),
- 'scripts' => array(
- 'common.js',
- 'cologneblue.js',
- 'monobook.js',
- 'modern.js',
- 'vector.js',
- 'group-autoconfirmed.js',
- 'group-bot.js',
- 'group-sysop.js',
- 'group-bureaucrat.js',
- ),
- 'metadata_cc' => array(
- 'notacceptable',
- ),
- 'attribution' => array(
- 'anonymous',
- 'siteuser',
- 'anonuser',
- 'lastmodifiedatby',
- 'othercontribs',
- 'others',
- 'siteusers',
- 'anonusers',
- 'creditspage',
- 'nocredits',
- ),
- 'spamprotection' => array(
- 'spamprotectiontitle',
- 'spamprotectiontext',
- 'spamprotectionmatch',
- 'spambot_username',
- 'spam_reverting',
- 'spam_blanking',
- 'spam_deleting',
- 'simpleantispam-label',
- ),
- 'info' => array(
- 'pageinfo-header',
- 'pageinfo-title',
- 'pageinfo-not-current',
- 'pageinfo-header-basic',
- 'pageinfo-header-edits',
- 'pageinfo-header-restrictions',
- 'pageinfo-header-properties',
- 'pageinfo-display-title',
- 'pageinfo-default-sort',
- 'pageinfo-length',
- 'pageinfo-article-id',
- 'pageinfo-language',
- 'pageinfo-robot-policy',
- 'pageinfo-robot-index',
- 'pageinfo-robot-noindex',
- 'pageinfo-views',
- 'pageinfo-watchers',
- 'pageinfo-few-watchers',
- 'pageinfo-redirects-name',
- 'pageinfo-redirects-value',
- 'pageinfo-subpages-name',
- 'pageinfo-subpages-value',
- 'pageinfo-firstuser',
- 'pageinfo-firsttime',
- 'pageinfo-lastuser',
- 'pageinfo-lasttime',
- 'pageinfo-edits',
- 'pageinfo-authors',
- 'pageinfo-recent-edits',
- 'pageinfo-recent-authors',
- 'pageinfo-magic-words',
- 'pageinfo-hidden-categories',
- 'pageinfo-templates',
- 'pageinfo-transclusions',
- 'pageinfo-footer',
- 'pageinfo-toolboxlink',
- 'pageinfo-redirectsto',
- 'pageinfo-redirectsto-info',
- 'pageinfo-contentpage',
- 'pageinfo-contentpage-yes',
- 'pageinfo-protect-cascading',
- 'pageinfo-protect-cascading-yes',
- 'pageinfo-protect-cascading-from',
- 'pageinfo-category-info',
- 'pageinfo-category-pages',
- 'pageinfo-category-subcats',
- 'pageinfo-category-files'
- ),
- 'skin' => array(
- 'skinname-cologneblue',
- 'skinname-monobook',
- 'skinname-modern',
- 'skinname-vector',
- ),
- 'patrolling' => array(
- 'markaspatrolleddiff',
- 'markaspatrolledlink',
- 'markaspatrolledtext',
- 'markedaspatrolled',
- 'markedaspatrolledtext',
- 'rcpatroldisabled',
- 'rcpatroldisabledtext',
- 'markedaspatrollederror',
- 'markedaspatrollederrortext',
- 'markedaspatrollederror-noautopatrol',
- 'markedaspatrollednotify',
- 'markedaspatrollederrornotify',
- ),
- 'patrol-log' => array(
- 'patrol-log-page',
- 'patrol-log-header',
- 'log-show-hide-patrol',
- ),
- 'imagedeletion' => array(
- 'deletedrevision',
- 'filedeleteerror-short',
- 'filedeleteerror-long',
- 'filedelete-missing',
- 'filedelete-old-unregistered',
- 'filedelete-current-unregistered',
- 'filedelete-archive-read-only',
- ),
- 'browsediffs' => array(
- 'previousdiff',
- 'nextdiff',
- ),
- 'media-info' => array(
- 'mediawarning',
- 'imagemaxsize',
- 'thumbsize',
- 'widthheight',
- 'widthheightpage',
- 'file-info',
- 'file-info-size',
- 'file-info-size-pages',
- 'file-nohires',
- 'svg-long-desc',
- 'svg-long-desc-animated',
- 'svg-long-error',
- 'show-big-image',
- 'show-big-image-preview',
- 'show-big-image-other',
- 'show-big-image-size',
- 'file-info-gif-looped',
- 'file-info-gif-frames',
- 'file-info-png-looped',
- 'file-info-png-repeat',
- 'file-info-png-frames',
- 'file-no-thumb-animation',
- 'file-no-thumb-animation-gif',
- ),
- 'newfiles' => array(
- 'newimages',
- 'imagelisttext',
- 'newimages-summary',
- 'newimages-legend',
- 'newimages-label',
- 'showhidebots',
- 'noimages',
- 'ilsubmit',
- 'bydate',
- 'sp-newimages-showfrom',
- ),
- 'video-info' => array(
- 'video-dims',
- 'seconds-abbrev',
- 'minutes-abbrev',
- 'hours-abbrev',
- 'days-abbrev',
- 'seconds',
- 'minutes',
- 'hours',
- 'days',
- 'weeks',
- 'months',
- 'years',
- 'ago',
- 'just-now',
- ),
- 'human-timestamps' => array(
- 'hours-ago',
- 'minutes-ago',
- 'seconds-ago',
- 'monday-at',
- 'tuesday-at',
- 'wednesday-at',
- 'thursday-at',
- 'friday-at',
- 'saturday-at',
- 'sunday-at',
- 'today-at',
- 'yesterday-at',
- ),
- 'badimagelist' => array(
- 'bad_image_list',
- ),
- 'variantname-zh' => array(
- 'variantname-zh-hans',
- 'variantname-zh-hant',
- 'variantname-zh-cn',
- 'variantname-zh-tw',
- 'variantname-zh-hk',
- 'variantname-zh-mo',
- 'variantname-zh-sg',
- 'variantname-zh-my',
- 'variantname-zh',
- ),
- 'variantname-gan' => array(
- 'variantname-gan-hans',
- 'variantname-gan-hant',
- 'variantname-gan',
- ),
- 'variantname-sr' => array(
- 'variantname-sr-ec',
- 'variantname-sr-el',
- 'variantname-sr',
- ),
- 'variantname-kk' => array(
- 'variantname-kk-kz',
- 'variantname-kk-tr',
- 'variantname-kk-cn',
- 'variantname-kk-cyrl',
- 'variantname-kk-latn',
- 'variantname-kk-arab',
- 'variantname-kk',
- ),
- 'variantname-ku' => array(
- 'variantname-ku-arab',
- 'variantname-ku-latn',
- 'variantname-ku',
- ),
- 'variantname-tg' => array(
- 'variantname-tg-cyrl',
- 'variantname-tg-latn',
- 'variantname-tg',
- ),
- 'variantname-iu' => array(
- 'variantname-ike-cans',
- 'variantname-ike-latn',
- 'variantname-iu',
- ),
- 'variantname-shi' => array(
- 'variantname-shi-tfng',
- 'variantname-shi-latn',
- 'variantname-shi',
- ),
- 'metadata' => array(
- 'metadata',
- 'metadata-help',
- 'metadata-expand',
- 'metadata-collapse',
- 'metadata-fields',
- 'metadata-langitem',
- 'metadata-langitem-default',
- ),
- 'exif' => array(
- 'exif-imagewidth',
- 'exif-imagelength',
- 'exif-bitspersample',
- 'exif-compression',
- 'exif-photometricinterpretation',
- 'exif-orientation',
- 'exif-samplesperpixel',
- 'exif-planarconfiguration',
- 'exif-ycbcrsubsampling',
- 'exif-ycbcrpositioning',
- 'exif-xresolution',
- 'exif-yresolution',
- 'exif-resolutionunit',
- 'exif-stripoffsets',
- 'exif-rowsperstrip',
- 'exif-stripbytecounts',
- 'exif-jpeginterchangeformat',
- 'exif-jpeginterchangeformatlength',
- 'exif-whitepoint',
- 'exif-primarychromaticities',
- 'exif-ycbcrcoefficients',
- 'exif-referenceblackwhite',
- 'exif-datetime',
- 'exif-imagedescription',
- 'exif-make',
- 'exif-model',
- 'exif-software',
- 'exif-artist',
- 'exif-copyright',
- 'exif-exifversion',
- 'exif-flashpixversion',
- 'exif-colorspace',
- 'exif-componentsconfiguration',
- 'exif-compressedbitsperpixel',
- 'exif-pixelydimension',
- 'exif-pixelxdimension',
- 'exif-usercomment',
- 'exif-relatedsoundfile',
- 'exif-datetimeoriginal',
- 'exif-datetimedigitized',
- 'exif-subsectime',
- 'exif-subsectimeoriginal',
- 'exif-subsectimedigitized',
- 'exif-exposuretime',
- 'exif-exposuretime-format',
- 'exif-fnumber',
- 'exif-fnumber-format',
- 'exif-exposureprogram',
- 'exif-spectralsensitivity',
- 'exif-isospeedratings',
- 'exif-shutterspeedvalue',
- 'exif-aperturevalue',
- 'exif-brightnessvalue',
- 'exif-exposurebiasvalue',
- 'exif-maxaperturevalue',
- 'exif-subjectdistance',
- 'exif-meteringmode',
- 'exif-lightsource',
- 'exif-flash',
- 'exif-focallength',
- 'exif-focallength-format',
- 'exif-subjectarea',
- 'exif-flashenergy',
- 'exif-focalplanexresolution',
- 'exif-focalplaneyresolution',
- 'exif-focalplaneresolutionunit',
- 'exif-subjectlocation',
- 'exif-exposureindex',
- 'exif-sensingmethod',
- 'exif-filesource',
- 'exif-scenetype',
- 'exif-customrendered',
- 'exif-exposuremode',
- 'exif-whitebalance',
- 'exif-digitalzoomratio',
- 'exif-focallengthin35mmfilm',
- 'exif-scenecapturetype',
- 'exif-gaincontrol',
- 'exif-contrast',
- 'exif-saturation',
- 'exif-sharpness',
- 'exif-devicesettingdescription',
- 'exif-subjectdistancerange',
- 'exif-imageuniqueid',
- 'exif-gpsversionid',
- 'exif-gpslatituderef',
- 'exif-gpslatitude',
- 'exif-gpslongituderef',
- 'exif-gpslongitude',
- 'exif-gpsaltituderef',
- 'exif-gpsaltitude',
- 'exif-gpstimestamp',
- 'exif-gpssatellites',
- 'exif-gpsstatus',
- 'exif-gpsmeasuremode',
- 'exif-gpsdop',
- 'exif-gpsspeedref',
- 'exif-gpsspeed',
- 'exif-gpstrackref',
- 'exif-gpstrack',
- 'exif-gpsimgdirectionref',
- 'exif-gpsimgdirection',
- 'exif-gpsmapdatum',
- 'exif-gpsdestlatituderef',
- 'exif-gpsdestlatitude',
- 'exif-gpsdestlongituderef',
- 'exif-gpsdestlongitude',
- 'exif-gpsdestbearingref',
- 'exif-gpsdestbearing',
- 'exif-gpsdestdistanceref',
- 'exif-gpsdestdistance',
- 'exif-gpsprocessingmethod',
- 'exif-gpsareainformation',
- 'exif-gpsdatestamp',
- 'exif-gpsdifferential',
- 'exif-coordinate-format',
- 'exif-jpegfilecomment',
- 'exif-keywords',
- 'exif-worldregioncreated',
- 'exif-countrycreated',
- 'exif-countrycodecreated',
- 'exif-provinceorstatecreated',
- 'exif-citycreated',
- 'exif-sublocationcreated',
- 'exif-worldregiondest',
- 'exif-countrydest',
- 'exif-countrycodedest',
- 'exif-provinceorstatedest',
- 'exif-citydest',
- 'exif-sublocationdest',
- 'exif-objectname',
- 'exif-specialinstructions',
- 'exif-headline',
- 'exif-credit',
- 'exif-source',
- 'exif-editstatus',
- 'exif-urgency',
- 'exif-fixtureidentifier',
- 'exif-locationdest',
- 'exif-locationdestcode',
- 'exif-objectcycle',
- 'exif-contact',
- 'exif-writer',
- 'exif-languagecode',
- 'exif-iimversion',
- 'exif-iimcategory',
- 'exif-iimsupplementalcategory',
- 'exif-datetimeexpires',
- 'exif-datetimereleased',
- 'exif-originaltransmissionref',
- 'exif-identifier',
- 'exif-lens',
- 'exif-serialnumber',
- 'exif-cameraownername',
- 'exif-label',
- 'exif-datetimemetadata',
- 'exif-nickname',
- 'exif-rating',
- 'exif-rightscertificate',
- 'exif-copyrighted',
- 'exif-copyrightowner',
- 'exif-usageterms',
- 'exif-webstatement',
- 'exif-originaldocumentid',
- 'exif-licenseurl',
- 'exif-morepermissionsurl',
- 'exif-attributionurl',
- 'exif-preferredattributionname',
- 'exif-pngfilecomment',
- 'exif-disclaimer',
- 'exif-contentwarning',
- 'exif-giffilecomment',
- 'exif-intellectualgenre',
- 'exif-subjectnewscode',
- 'exif-scenecode',
- 'exif-event',
- 'exif-organisationinimage',
- 'exif-personinimage',
- 'exif-originalimageheight',
- 'exif-originalimagewidth',
- ),
- 'exif-values' => array(
- 'exif-make-value',
- 'exif-model-value',
- 'exif-software-value',
- 'exif-software-version-value',
- 'exif-contact-value',
- 'exif-subjectnewscode-value',
- ),
- 'exif-compression' => array(
- 'exif-compression-1',
- 'exif-compression-2',
- 'exif-compression-3',
- 'exif-compression-4',
- 'exif-compression-5',
- 'exif-compression-6',
- 'exif-compression-7',
- 'exif-compression-8',
- 'exif-compression-32773',
- 'exif-compression-32946',
- 'exif-compression-34712',
- ),
- 'exif-copyrighted' => array(
- 'exif-copyrighted-true',
- 'exif-copyrighted-false',
- ),
- 'exif-photometricinterpretation' => array(
- 'exif-photometricinterpretation-2',
- 'exif-photometricinterpretation-6',
- ),
- 'exif-unknowndate' => array(
- 'exif-unknowndate',
- ),
- 'exif-orientation' => array(
- 'exif-orientation-1',
- 'exif-orientation-2',
- 'exif-orientation-3',
- 'exif-orientation-4',
- 'exif-orientation-5',
- 'exif-orientation-6',
- 'exif-orientation-7',
- 'exif-orientation-8',
- ),
- 'exif-planarconfiguration' => array(
- 'exif-planarconfiguration-1',
- 'exif-planarconfiguration-2',
- ),
- 'exif-xyresolution' => array(
- 'exif-xyresolution-i',
- 'exif-xyresolution-c',
- ),
- 'exif-colorspace' => array(
- 'exif-colorspace-1',
- 'exif-colorspace-65535',
- ),
- 'exif-componentsconfiguration' => array(
- 'exif-componentsconfiguration-0',
- 'exif-componentsconfiguration-1',
- 'exif-componentsconfiguration-2',
- 'exif-componentsconfiguration-3',
- 'exif-componentsconfiguration-4',
- 'exif-componentsconfiguration-5',
- 'exif-componentsconfiguration-6',
- ),
- 'exif-exposureprogram' => array(
- 'exif-exposureprogram-0',
- 'exif-exposureprogram-1',
- 'exif-exposureprogram-2',
- 'exif-exposureprogram-3',
- 'exif-exposureprogram-4',
- 'exif-exposureprogram-5',
- 'exif-exposureprogram-6',
- 'exif-exposureprogram-7',
- 'exif-exposureprogram-8',
- ),
- 'exif-subjectdistance-value' => array(
- 'exif-subjectdistance-value',
- ),
- 'exif-meteringmode' => array(
- 'exif-meteringmode-0',
- 'exif-meteringmode-1',
- 'exif-meteringmode-2',
- 'exif-meteringmode-3',
- 'exif-meteringmode-4',
- 'exif-meteringmode-5',
- 'exif-meteringmode-6',
- 'exif-meteringmode-255',
- ),
- 'exif-lightsource' => array(
- 'exif-lightsource-0',
- 'exif-lightsource-1',
- 'exif-lightsource-2',
- 'exif-lightsource-3',
- 'exif-lightsource-4',
- 'exif-lightsource-9',
- 'exif-lightsource-10',
- 'exif-lightsource-11',
- 'exif-lightsource-12',
- 'exif-lightsource-13',
- 'exif-lightsource-14',
- 'exif-lightsource-15',
- 'exif-lightsource-17',
- 'exif-lightsource-18',
- 'exif-lightsource-19',
- 'exif-lightsource-20',
- 'exif-lightsource-21',
- 'exif-lightsource-22',
- 'exif-lightsource-23',
- 'exif-lightsource-24',
- 'exif-lightsource-255',
- ),
- 'exif-flash' => array(
- 'exif-flash-fired-0',
- 'exif-flash-fired-1',
- 'exif-flash-return-0',
- 'exif-flash-return-2',
- 'exif-flash-return-3',
- 'exif-flash-mode-1',
- 'exif-flash-mode-2',
- 'exif-flash-mode-3',
- 'exif-flash-function-1',
- 'exif-flash-redeye-1',
- ),
- 'exif-focalplaneresolutionunit' => array(
- 'exif-focalplaneresolutionunit-2',
- ),
- 'exif-sensingmethod' => array(
- 'exif-sensingmethod-1',
- 'exif-sensingmethod-2',
- 'exif-sensingmethod-3',
- 'exif-sensingmethod-4',
- 'exif-sensingmethod-5',
- 'exif-sensingmethod-7',
- 'exif-sensingmethod-8',
- ),
- 'exif-filesource' => array(
- 'exif-filesource-3',
- ),
- 'exif-scenetype' => array(
- 'exif-scenetype-1',
- ),
- 'exif-customrendered' => array(
- 'exif-customrendered-0',
- 'exif-customrendered-1',
- ),
- 'exif-exposuremode' => array(
- 'exif-exposuremode-0',
- 'exif-exposuremode-1',
- 'exif-exposuremode-2',
- ),
- 'exif-whitebalance' => array(
- 'exif-whitebalance-0',
- 'exif-whitebalance-1',
- ),
- 'exif-scenecapturetype' => array(
- 'exif-scenecapturetype-0',
- 'exif-scenecapturetype-1',
- 'exif-scenecapturetype-2',
- 'exif-scenecapturetype-3',
- ),
- 'exif-gaincontrol' => array(
- 'exif-gaincontrol-0',
- 'exif-gaincontrol-1',
- 'exif-gaincontrol-2',
- 'exif-gaincontrol-3',
- 'exif-gaincontrol-4',
- ),
- 'exif-contrast' => array(
- 'exif-contrast-0',
- 'exif-contrast-1',
- 'exif-contrast-2',
- ),
- 'exif-saturation' => array(
- 'exif-saturation-0',
- 'exif-saturation-1',
- 'exif-saturation-2',
- ),
- 'exif-sharpness' => array(
- 'exif-sharpness-0',
- 'exif-sharpness-1',
- 'exif-sharpness-2',
- ),
- 'exif-subjectdistancerange' => array(
- 'exif-subjectdistancerange-0',
- 'exif-subjectdistancerange-1',
- 'exif-subjectdistancerange-2',
- 'exif-subjectdistancerange-3',
- ),
- 'exif-gpslatitude' => array(
- 'exif-gpslatitude-n',
- 'exif-gpslatitude-s',
- ),
- 'exif-gpslongitude' => array(
- 'exif-gpslongitude-e',
- 'exif-gpslongitude-w',
- ),
- 'exif-altituderef' => array(
- 'exif-gpsaltitude-above-sealevel',
- 'exif-gpsaltitude-below-sealevel',
- ),
- 'exif-gpsstatus' => array(
- 'exif-gpsstatus-a',
- 'exif-gpsstatus-v',
- ),
- 'exif-gpsmeasuremode' => array(
- 'exif-gpsmeasuremode-2',
- 'exif-gpsmeasuremode-3',
- ),
- 'exif-gpsspeed' => array(
- 'exif-gpsspeed-k',
- 'exif-gpsspeed-m',
- 'exif-gpsspeed-n',
- ),
- 'exif-gpsdestdistanceref' => array(
- 'exif-gpsdestdistance-k',
- 'exif-gpsdestdistance-m',
- 'exif-gpsdestdistance-n',
- ),
- 'exif-gdop' => array(
- 'exif-gpsdop-excellent',
- 'exif-gpsdop-good',
- 'exif-gpsdop-moderate',
- 'exif-gpsdop-fair',
- 'exif-gpsdop-poor',
- ),
- 'exif-objectcycle' => array(
- 'exif-objectcycle-a',
- 'exif-objectcycle-p',
- 'exif-objectcycle-b',
- ),
- 'exif-gpsdirection' => array(
- 'exif-gpsdirection-t',
- 'exif-gpsdirection-m',
- ),
- 'exif-ycbcrpositioning' => array(
- 'exif-ycbcrpositioning-1',
- 'exif-ycbcrpositioning-2',
- ),
- 'exif-dc' => array(
- 'exif-dc-contributor',
- 'exif-dc-coverage',
- 'exif-dc-date',
- 'exif-dc-publisher',
- 'exif-dc-relation',
- 'exif-dc-rights',
- 'exif-dc-source',
- 'exif-dc-type',
- ),
- 'exif-rating' => array(
- 'exif-rating-rejected',
- ),
- 'exif-isospeedratings' => array(
- 'exif-isospeedratings-overflow',
- ),
- 'exif-maxaperturevalue' => array(
- 'exif-maxaperturevalue-value',
- ),
- 'exif-iimcategory' => array(
- 'exif-iimcategory-ace',
- 'exif-iimcategory-clj',
- 'exif-iimcategory-dis',
- 'exif-iimcategory-fin',
- 'exif-iimcategory-edu',
- 'exif-iimcategory-evn',
- 'exif-iimcategory-hth',
- 'exif-iimcategory-hum',
- 'exif-iimcategory-lab',
- 'exif-iimcategory-lif',
- 'exif-iimcategory-pol',
- 'exif-iimcategory-rel',
- 'exif-iimcategory-sci',
- 'exif-iimcategory-soi',
- 'exif-iimcategory-spo',
- 'exif-iimcategory-war',
- 'exif-iimcategory-wea',
- ),
- 'exif-urgency' => array(
- 'exif-urgency-normal',
- 'exif-urgency-low',
- 'exif-urgency-high',
- 'exif-urgency-other',
- ),
- 'edit-externally' => array(
- 'edit-externally',
- 'edit-externally-help',
- ),
- 'all' => array(
- 'watchlistall2',
- 'namespacesall',
- 'monthsall',
- 'limitall',
- ),
- 'confirmemail' => array(
- 'confirmemail',
- 'confirmemail_noemail',
- 'confirmemail_text',
- 'confirmemail_pending',
- 'confirmemail_send',
- 'confirmemail_sent',
- 'confirmemail_oncreate',
- 'confirmemail_sendfailed',
- 'confirmemail_invalid',
- 'confirmemail_needlogin',
- 'confirmemail_success',
- 'confirmemail_loggedin',
- 'confirmemail_error',
- 'confirmemail_subject',
- 'confirmemail_body',
- 'confirmemail_body_changed',
- 'confirmemail_body_set',
- 'confirmemail_invalidated',
- 'invalidateemail',
- ),
- 'scarytransclusion' => array(
- 'scarytranscludedisabled',
- 'scarytranscludefailed',
- 'scarytranscludefailed-httpstatus',
- 'scarytranscludetoolong',
- ),
- 'deleteconflict' => array(
- 'deletedwhileediting',
- 'confirmrecreate',
- 'confirmrecreate-noreason',
- 'recreate',
- ),
- 'unit-pixel' => array(
- 'unit-pixel',
- ),
- 'purge' => array(
- 'confirm_purge_button',
- 'confirm-purge-top',
- 'confirm-purge-bottom',
- ),
- 'watch-unwatch' => array(
- 'confirm-watch-button',
- 'confirm-watch-top',
- 'confirm-unwatch-button',
- 'confirm-unwatch-top',
- ),
- 'separators' => array(
- 'semicolon-separator',
- 'comma-separator',
- 'colon-separator',
- 'autocomment-prefix',
- 'pipe-separator',
- 'word-separator',
- 'ellipsis',
- 'percent',
- 'parentheses',
- 'brackets',
- ),
- 'imgmulti' => array(
- 'imgmultipageprev',
- 'imgmultipagenext',
- 'imgmultigo',
- 'imgmultigoto',
- ),
- 'tablepager' => array(
- 'ascending_abbrev',
- 'descending_abbrev',
- 'table_pager_next',
- 'table_pager_prev',
- 'table_pager_first',
- 'table_pager_last',
- 'table_pager_limit',
- 'table_pager_limit_label',
- 'table_pager_limit_submit',
- 'table_pager_empty',
- ),
- 'autosumm' => array(
- 'autosumm-blank',
- 'autosumm-replace',
- 'autoredircomment',
- 'autosumm-new',
- ),
- 'autoblock_whitelist' => array(
- 'autoblock_whitelist',
- ),
- 'sizeunits' => array(
- 'size-bytes',
- 'size-kilobytes',
- 'size-megabytes',
- 'size-gigabytes',
- 'size-terabytes',
- 'size-petabytes',
- 'size-exabytes',
- 'size-zetabytes',
- 'size-yottabytes',
- ),
- 'bitrateunits' => array(
- 'bitrate-bits',
- 'bitrate-kilobits',
- 'bitrate-megabits',
- 'bitrate-gigabits',
- 'bitrate-terabits',
- 'bitrate-petabits',
- 'bitrate-exabits',
- 'bitrate-zetabits',
- 'bitrate-yottabits',
- ),
- 'livepreview' => array(
- 'livepreview-loading',
- 'livepreview-ready',
- 'livepreview-failed',
- 'livepreview-error',
- ),
- 'lagwarning' => array(
- 'lag-warn-normal',
- 'lag-warn-high',
- ),
- 'watch' => array(
- 'confirm-watch-button',
- ),
- 'watchlisteditor' => array(
- 'editwatchlist-summary',
- 'watchlistedit-numitems',
- 'watchlistedit-noitems',
- 'watchlistedit-normal-title',
- 'watchlistedit-normal-legend',
- 'watchlistedit-normal-explain',
- 'watchlistedit-normal-submit',
- 'watchlistedit-normal-done',
- 'watchlistedit-raw-title',
- 'watchlistedit-raw-legend',
- 'watchlistedit-raw-explain',
- 'watchlistedit-raw-titles',
- 'watchlistedit-raw-submit',
- 'watchlistedit-raw-done',
- 'watchlistedit-raw-added',
- 'watchlistedit-raw-removed',
- ),
- 'watchlisttools' => array(
- 'watchlisttools-view',
- 'watchlisttools-edit',
- 'watchlisttools-raw',
- ),
- 'iranian-dates' => array(
- 'iranian-calendar-m1',
- 'iranian-calendar-m2',
- 'iranian-calendar-m3',
- 'iranian-calendar-m4',
- 'iranian-calendar-m5',
- 'iranian-calendar-m6',
- 'iranian-calendar-m7',
- 'iranian-calendar-m8',
- 'iranian-calendar-m9',
- 'iranian-calendar-m10',
- 'iranian-calendar-m11',
- 'iranian-calendar-m12',
- ),
- 'hijri-dates' => array(
- 'hijri-calendar-m1',
- 'hijri-calendar-m2',
- 'hijri-calendar-m3',
- 'hijri-calendar-m4',
- 'hijri-calendar-m5',
- 'hijri-calendar-m6',
- 'hijri-calendar-m7',
- 'hijri-calendar-m8',
- 'hijri-calendar-m9',
- 'hijri-calendar-m10',
- 'hijri-calendar-m11',
- 'hijri-calendar-m12',
- ),
- 'hebrew-dates' => array(
- 'hebrew-calendar-m1',
- 'hebrew-calendar-m2',
- 'hebrew-calendar-m3',
- 'hebrew-calendar-m4',
- 'hebrew-calendar-m5',
- 'hebrew-calendar-m6',
- 'hebrew-calendar-m6a',
- 'hebrew-calendar-m6b',
- 'hebrew-calendar-m7',
- 'hebrew-calendar-m8',
- 'hebrew-calendar-m9',
- 'hebrew-calendar-m10',
- 'hebrew-calendar-m11',
- 'hebrew-calendar-m12',
- 'hebrew-calendar-m1-gen',
- 'hebrew-calendar-m2-gen',
- 'hebrew-calendar-m3-gen',
- 'hebrew-calendar-m4-gen',
- 'hebrew-calendar-m5-gen',
- 'hebrew-calendar-m6-gen',
- 'hebrew-calendar-m6a-gen',
- 'hebrew-calendar-m6b-gen',
- 'hebrew-calendar-m7-gen',
- 'hebrew-calendar-m8-gen',
- 'hebrew-calendar-m9-gen',
- 'hebrew-calendar-m10-gen',
- 'hebrew-calendar-m11-gen',
- 'hebrew-calendar-m12-gen',
- ),
- 'signatures' => array(
- 'signature',
- 'signature-anon',
- 'timezone-utc',
- ),
- 'CoreParserFunctions' => array(
- 'unknown_extension_tag',
- 'duplicate-defaultsort',
- ),
- 'version' => array(
- 'version',
- 'version-summary',
- 'version-extensions',
- 'version-specialpages',
- 'version-parserhooks',
- 'version-variables',
- 'version-antispam',
- 'version-skins',
- 'version-api',
- 'version-other',
- 'version-mediahandlers',
- 'version-hooks',
- 'version-parser-extensiontags',
- 'version-parser-function-hooks',
- 'version-hook-name',
- 'version-hook-subscribedby',
- 'version-version',
- 'version-svn-revision',
- 'version-license',
- 'version-poweredby-credits',
- 'version-poweredby-others',
- 'version-poweredby-translators',
- 'version-credits-summary',
- 'version-license-info',
- 'version-software',
- 'version-software-product',
- 'version-software-version',
- 'version-db-mysql-url',
- 'version-db-mariadb-url',
- 'version-db-percona-url',
- 'version-db-postgres-url',
- 'version-db-oracle-url',
- 'version-db-sqlite-url',
- 'version-db-mssql-url',
- 'version-entrypoints',
- 'version-entrypoints-header-entrypoint',
- 'version-entrypoints-header-url',
- 'version-entrypoints-articlepath',
- 'version-entrypoints-scriptpath',
- 'version-entrypoints-index-php',
- 'version-entrypoints-api-php',
- 'version-entrypoints-load-php',
- ),
- 'redirect' => array(
- 'redirect',
- 'redirect-legend',
- 'redirect-text',
- 'redirect-summary',
- 'redirect-submit',
- 'redirect-lookup',
- 'redirect-value',
- 'redirect-user',
- 'redirect-revision',
- 'redirect-file',
- 'redirect-not-exists',
- ),
- 'fileduplicatesearch' => array(
- 'fileduplicatesearch',
- 'fileduplicatesearch-summary',
- 'fileduplicatesearch-legend',
- 'fileduplicatesearch-filename',
- 'fileduplicatesearch-submit',
- 'fileduplicatesearch-info',
- 'fileduplicatesearch-result-1',
- 'fileduplicatesearch-result-n',
- 'fileduplicatesearch-noresults',
- ),
- 'special-specialpages' => array(
- 'specialpages',
- 'specialpages-summary',
- 'specialpages-note',
- 'specialpages-group-maintenance',
- 'specialpages-group-other',
- 'specialpages-group-login',
- 'specialpages-group-changes',
- 'specialpages-group-media',
- 'specialpages-group-users',
- 'specialpages-group-highuse',
- 'specialpages-group-pages',
- 'specialpages-group-pagetools',
- 'specialpages-group-wiki',
- 'specialpages-group-redirects',
- 'specialpages-group-spam',
- ),
- 'special-blank' => array(
- 'blankpage',
- 'intentionallyblankpage',
- ),
- 'external_images' => array(
- 'external_image_whitelist',
- ),
- 'special-tags' => array(
- 'tags',
- 'tags-summary',
- 'tag-filter',
- 'tag-filter-submit',
- 'tag-list-wrapper',
- 'tags-title',
- 'tags-intro',
- 'tags-tag',
- 'tags-display-header',
- 'tags-description-header',
- 'tags-active-header',
- 'tags-hitcount-header',
- 'tags-active-yes',
- 'tags-active-no',
- 'tags-edit',
- 'tags-hitcount',
- ),
- 'comparepages' => array(
- 'comparepages',
- 'comparepages-summary',
- 'compare-selector',
- 'compare-page1',
- 'compare-page2',
- 'compare-rev1',
- 'compare-rev2',
- 'compare-submit',
- 'compare-invalid-title',
- 'compare-title-not-exists',
- 'compare-revision-not-exists',
- ),
- 'db-error-messages' => array(
- 'dberr-header',
- 'dberr-problems',
- 'dberr-again',
- 'dberr-info',
- 'dberr-info-hidden',
- 'dberr-usegoogle',
- 'dberr-outofdate',
- 'dberr-cachederror',
- ),
- 'html-forms' => array(
- 'htmlform-invalid-input',
- 'htmlform-select-badoption',
- 'htmlform-int-invalid',
- 'htmlform-float-invalid',
- 'htmlform-int-toolow',
- 'htmlform-int-toohigh',
- 'htmlform-required',
- 'htmlform-submit',
- 'htmlform-reset',
- 'htmlform-selectorother-other',
- 'htmlform-no',
- 'htmlform-yes',
- 'htmlform-chosen-placeholder',
- ),
- 'sqlite' => array(
- 'sqlite-has-fts',
- 'sqlite-no-fts',
- ),
- 'unwatch' => array(
- 'confirm-unwatch-button',
- ),
- 'logging' => array(
- 'logentry-delete-delete',
- 'logentry-delete-restore',
- 'logentry-delete-event',
- 'logentry-delete-revision',
- 'logentry-delete-event-legacy',
- 'logentry-delete-revision-legacy',
- 'logentry-suppress-delete',
- 'logentry-suppress-event',
- 'logentry-suppress-revision',
- 'logentry-suppress-event-legacy',
- 'logentry-suppress-revision-legacy',
- 'revdelete-content-hid',
- 'revdelete-summary-hid',
- 'revdelete-uname-hid',
- 'revdelete-content-unhid',
- 'revdelete-summary-unhid',
- 'revdelete-uname-unhid',
- 'revdelete-restricted',
- 'revdelete-unrestricted',
- 'logentry-move-move',
- 'logentry-move-move-noredirect',
- 'logentry-move-move_redir',
- 'logentry-move-move_redir-noredirect',
- 'logentry-patrol-patrol',
- 'logentry-patrol-patrol-auto',
- 'logentry-newusers-newusers',
- 'logentry-newusers-create',
- 'logentry-newusers-create2',
- 'logentry-newusers-byemail',
- 'logentry-newusers-autocreate',
- 'logentry-rights-rights',
- 'logentry-rights-rights-legacy',
- 'logentry-rights-autopromote',
- 'rightsnone',
- ),
- 'logging-irc' => array(
- 'revdelete-logentry',
- 'logdelete-logentry',
- 'revdelete-content',
- 'revdelete-summary',
- 'revdelete-uname',
- 'revdelete-hid',
- 'revdelete-unhid',
- 'revdelete-log-message',
- 'logdelete-log-message',
- 'deletedarticle',
- 'suppressedarticle',
- 'undeletedarticle',
- 'patrol-log-line',
- 'patrol-log-auto',
- 'patrol-log-diff',
- '1movedto2',
- '1movedto2_redir',
- 'move-redirect-suppressed',
- 'newuserlog-create-entry',
- 'newuserlog-create2-entry',
- 'newuserlog-autocreate-entry',
- 'suppressedarticle',
- 'deletedarticle',
- // 'uploadedimage',
- // 'overwroteimage',
- 'rightslogentry',
- 'rightslogentry-autopromote',
- ),
- 'feedback' => array(
- 'feedback-bugornote',
- 'feedback-subject',
- 'feedback-message',
- 'feedback-cancel',
- 'feedback-submit',
- 'feedback-adding',
- 'feedback-error1',
- 'feedback-error2',
- 'feedback-error3',
- 'feedback-thanks',
- 'feedback-close',
- 'feedback-bugcheck',
- 'feedback-bugnew',
- ),
- 'searchsuggestions' => array(
- 'searchsuggest-search',
- 'searchsuggest-containing',
- ),
- 'apierrors' => array(
- 'api-error-badaccess-groups',
- 'api-error-badtoken',
- 'api-error-copyuploaddisabled',
- 'api-error-duplicate',
- 'api-error-duplicate-archive',
- 'api-error-duplicate-archive-popup-title',
- 'api-error-duplicate-popup-title',
- 'api-error-empty-file',
- 'api-error-emptypage',
- 'api-error-fetchfileerror',
- 'api-error-fileexists-forbidden',
- 'api-error-fileexists-shared-forbidden',
- 'api-error-file-too-large',
- 'api-error-filename-tooshort',
- 'api-error-filetype-banned',
- 'api-error-filetype-banned-type',
- 'api-error-filetype-missing',
- 'api-error-hookaborted',
- 'api-error-http',
- 'api-error-illegal-filename',
- 'api-error-internal-error',
- 'api-error-invalid-file-key',
- 'api-error-missingparam',
- 'api-error-missingresult',
- 'api-error-mustbeloggedin',
- 'api-error-mustbeposted',
- 'api-error-noimageinfo',
- 'api-error-nomodule',
- 'api-error-ok-but-empty',
- 'api-error-overwrite',
- 'api-error-stashfailed',
- 'api-error-publishfailed',
- 'api-error-timeout',
- 'api-error-unclassified',
- 'api-error-unknown-code',
- 'api-error-unknown-error',
- 'api-error-unknown-warning',
- 'api-error-unknownerror',
- 'api-error-uploaddisabled',
- 'api-error-verification-error',
- ),
- 'duration' => array(
- 'duration-seconds',
- 'duration-minutes',
- 'duration-hours',
- 'duration-days',
- 'duration-weeks',
- 'duration-years',
- 'duration-decades',
- 'duration-centuries',
- 'duration-millennia'
- ),
- 'rotation' => array(
- 'rotate-comment',
- ),
- 'limitreport' => array(
- 'limitreport-title',
- 'limitreport-cputime',
- 'limitreport-cputime-value',
- 'limitreport-walltime',
- 'limitreport-walltime-value',
- 'limitreport-ppvisitednodes',
- 'limitreport-ppvisitednodes-value',
- 'limitreport-ppgeneratednodes',
- 'limitreport-ppgeneratednodes-value',
- 'limitreport-postexpandincludesize',
- 'limitreport-postexpandincludesize-value',
- 'limitreport-templateargumentsize',
- 'limitreport-templateargumentsize-value',
- 'limitreport-expansiondepth',
- 'limitreport-expansiondepth-value',
- 'limitreport-expensivefunctioncount',
- 'limitreport-expensivefunctioncount-value',
- ),
-);
-
-/** Comments for each block */
-$wgBlockComments = array(
- 'sidebar' => "The sidebar for MonoBook is generated from this message, lines that do not
-begin with * or ** are discarded, furthermore lines that do begin with ** and
-do not contain | are also discarded, but do not depend on this behavior for
-future releases. Also note that since each list value is wrapped in a unique
-(X)HTML id it should only appear once and include characters that are legal
-(X)HTML id names.",
- 'toggles' => 'User preference toggles',
- 'underline' => '',
- 'editfont' => 'Font style option in Special:Preferences',
- 'dates' => 'Dates',
- 'categorypages' => 'Categories related messages',
- 'mainpage' => '',
- 'miscellaneous1' => '',
- 'cologneblue' => 'Cologne Blue skin',
- 'vector' => 'Vector skin',
- 'miscellaneous2' => '',
- 'links' => '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).',
- 'badaccess' => '',
- 'versionrequired' => '',
- 'miscellaneous3' => '',
- 'nstab' => "Short words for each namespace, by default used in the namespace tab in monobook",
- 'main' => 'Main script and global functions',
- 'errors' => 'General errors',
- 'virus' => 'Virus scanner',
- 'login' => 'Login and logout pages',
- 'mail' => 'Email sending',
- 'passwordstrength' => 'JavaScript password checks',
- 'resetpass' => 'Change password dialog',
- 'passwordreset' => 'Special:PasswordReset',
- 'changeemail' => 'Special:ChangeEmail',
- 'resettokens' => 'Special:ResetTokens',
- 'toolbar' => 'Edit page toolbar',
- 'edit' => 'Edit pages',
- 'parserwarnings' => 'Parser/template warnings',
- 'contentmodels' => 'Content models',
- 'undo' => '"Undo" feature',
- 'cantcreateaccount' => 'Account creation failure',
- 'history' => 'History pages',
- 'history-feed' => 'Revision feed',
- 'revdelete' => 'Revision deletion',
- 'suppression' => 'Suppression log',
- 'mergehistory' => 'History merging',
- 'mergelog' => 'Merge log',
- 'diffs' => 'Diffs',
- 'search' => 'Search results',
- 'opensearch' => 'OpenSearch description',
- 'preferences' => 'Preferences page',
- 'preferences-email' => 'User preference: email validation using jQuery',
- 'userrights' => 'User rights',
- 'group' => 'Groups',
- 'group-member' => '',
- 'grouppage' => '',
- 'right' => 'Rights',
- 'action' => 'Associated actions - in the sentence "You do not have permission to X"',
- 'rightslog' => 'User rights log',
- 'recentchanges' => 'Recent changes',
- 'recentchangeslinked' => 'Recent changes linked',
- 'upload' => 'Upload',
- 'zip' => 'ZipDirectoryReader',
- 'upload-errors' => '',
- 'filebackend-errors' => 'File backend',
- 'filejournal-errors' => 'File journal errors',
- 'lockmanager-errors' => 'Lock manager',
- 'uploadstash' => 'Special:UploadStash',
- 'img-auth' => 'img_auth script messages',
- 'http-errors' => 'HTTP errors',
- 'upload-curl-errors' => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
- 'licenses' => '',
- 'filelist' => 'Special:ListFiles',
- 'filedescription' => 'File description page',
- 'filerevert' => 'File reversion',
- 'filedelete' => 'File deletion',
- 'mimesearch' => 'MIME search',
- 'unwatchedpages' => 'Unwatched pages',
- 'listredirects' => 'List redirects',
- 'unusedtemplates' => 'Unused templates',
- 'randompage' => 'Random page',
- 'randomincategory' => 'Random page in category',
- 'randomredirect' => 'Random redirect',
- 'statistics' => 'Statistics',
- 'pageswithprop' => '',
- 'doubleredirects' => '',
- 'brokenredirects' => '',
- 'withoutinterwiki' => '',
- 'fewestrevisions' => '',
- 'specialpages' => 'Miscellaneous special pages',
- 'booksources' => 'Book sources',
- 'magicwords' => 'Magic words',
- 'logpages' => 'Special:Log',
- 'allpages' => 'Special:AllPages',
- 'categories' => 'Special:Categories',
- 'deletedcontribs' => 'Special:DeletedContributions',
- 'linksearch' => 'Special:LinkSearch',
- 'listusers' => 'Special:ListUsers',
- 'activeusers' => 'Special:ActiveUsers',
- 'newuserlog' => 'Special:Log/newusers',
- 'listgrouprights' => 'Special:ListGroupRights',
- 'emailuser' => 'Email user',
- 'usermessage' => 'User Messenger',
- 'watchlist' => 'Watchlist',
- 'watching' => 'Displayed when you click the "watch" button and it is in the process of watching',
- 'enotif' => '',
- 'delete' => 'Delete',
- 'rollback' => 'Rollback',
- 'edittokens' => 'Edit tokens',
- 'protect' => 'Protect',
- 'restrictions' => 'Restrictions (nouns)',
- 'restriction-levels' => 'Restriction levels',
- 'undelete' => 'Undelete',
- 'nsform' => 'Namespace form on various pages',
- 'contributions' => 'Contributions',
- 'sp-contributions' => '',
- 'whatlinkshere' => 'What links here',
- 'block' => 'Block/unblock',
- 'developertools' => 'Developer tools',
- 'movepage' => 'Move page',
- 'export' => 'Export',
- 'allmessages' => 'Namespace 8 related',
- 'thumbnails' => 'Thumbnails',
- 'import' => 'Special:Import',
- 'importlog' => 'Import log',
- 'javaccripttest' => 'JavaScriptTest',
- 'accesskeys' => 'Keyboard access keys for power users',
- 'tooltips' => 'Tooltip help for the actions',
- 'stylesheets' => 'Stylesheets',
- 'scripts' => 'Scripts',
- 'metadata_cc' => 'Metadata',
- 'attribution' => 'Attribution',
- 'spamprotection' => 'Spam protection',
- 'info' => 'Info page',
- 'skin' => 'Skin names',
- 'patrolling' => 'Patrolling',
- 'patrol-log' => 'Patrol log',
- 'imagedeletion' => 'Image deletion',
- 'browsediffs' => 'Browsing diffs',
- 'newfiles' => 'Special:NewFiles',
- 'video-info' => 'Video information, used by Language::formatTimePeriod() to format lengths in the above messages',
- 'human-timestamps' => 'Human-readable timestamps',
- 'badimagelist' => 'Bad image list',
- 'variantname-zh' => "Short names for language variants used for language conversion links.
-Variants for Chinese language",
- 'variantname-gan' => 'Variants for Gan language',
- 'variantname-sr' => 'Variants for Serbian language',
- 'variantname-kk' => 'Variants for Kazakh language',
- 'variantname-ku' => 'Variants for Kurdish language',
- 'variantname-tg' => 'Variants for Tajiki language',
- 'variantname-iu' => 'Variants for Inuktitut language',
- 'variantname-shi' => 'Variants for Tachelhit language',
- 'media-info' => 'Media information',
- 'metadata' => 'Metadata',
- 'exif' => 'Exif tags',
- 'exif-values' => 'Make & model, can be wikified in order to link to the camera and model name',
- 'exif-compression' => 'Exif attributes',
- 'exif-copyrighted' => '',
- 'exif-unknowndate' => '',
- 'exif-photometricinterpretation' => '',
- 'exif-orientation' => '',
- 'exif-planarconfiguration' => '',
- 'exif-xyresolution' => '',
- 'exif-colorspace' => '',
- 'exif-componentsconfiguration' => '',
- 'exif-exposureprogram' => '',
- 'exif-subjectdistance-value' => '',
- 'exif-meteringmode' => '',
- 'exif-lightsource' => '',
- 'exif-flash' => 'Flash modes',
- 'exif-focalplaneresolutionunit' => '',
- 'exif-sensingmethod' => '',
- 'exif-filesource' => '',
- 'exif-scenetype' => '',
- 'exif-customrendered' => '',
- 'exif-exposuremode' => '',
- 'exif-whitebalance' => '',
- 'exif-scenecapturetype' => '',
- 'exif-gaincontrol' => '',
- 'exif-contrast' => '',
- 'exif-saturation' => '',
- 'exif-sharpness' => '',
- 'exif-subjectdistancerange' => '',
- 'exif-gpslatitude' => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
- 'exif-gpslongitude' => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
- 'exif-altituderef' => 'Pseudotags used for GPSAltitudeRef',
- 'exif-gpsstatus' => '',
- 'exif-gpsmeasuremode' => '',
- 'exif-gpsspeed' => 'Pseudotags used for GPSSpeedRef',
- 'exif-gpsdestdistanceref' => 'Pseudotags used for GPSDestDistanceRef',
- 'exif-gdop' => '',
- 'exif-objectcycle' => '',
- 'exif-gpsdirection' => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
- 'exif-ycbcrpositioning' => '',
- 'exif-dc' => '',
- 'exif-rating' => '',
- 'exif-isospeedratings' => '',
- 'exif-maxaperturevalue' => '',
- 'exif-iimcategory' => '',
- 'exif-urgency' => '',
- 'edit-externally' => 'External editor support',
- 'all' => "'all' in various places, this might be different for inflected languages",
- 'confirmemail' => 'Email address confirmation',
- 'scarytransclusion' => 'Scary transclusion',
- 'deleteconflict' => 'Delete conflict',
- 'unit-pixel' => '',
- 'purge' => 'action=purge',
- 'watch-unwatch' => 'action=watch/unwatch',
- 'separators' => 'Separators for various lists, etc.',
- 'imgmulti' => 'Multipage image navigation',
- 'tablepager' => 'Table pager',
- 'autosumm' => 'Auto-summaries',
- 'autoblock_whitelist' => 'Autoblock whitelist',
- 'sizeunits' => 'Size units',
- 'bitrateunits' => 'Bitrate units',
- 'livepreview' => 'Live preview',
- 'lagwarning' => 'Friendlier slave lag warnings',
- 'watchlisteditor' => 'Watchlist editor',
- 'watchlisttools' => 'Watchlist editing tools',
- 'iranian-dates' => 'Iranian month names',
- 'hijri-dates' => 'Hijri month names',
- 'hebrew-dates' => 'Hebrew month names',
- 'signatures' => 'Signatures',
- 'CoreParserFunctions' => 'Core parser functions',
- 'version' => 'Special:Version',
- 'redirect' => 'Special:Redirect',
- 'fileduplicatesearch' => 'Special:FileDuplicateSearch',
- 'special-specialpages' => 'Special:SpecialPages',
- 'special-blank' => 'Special:BlankPage',
- 'external_images' => 'External image whitelist',
- 'special-tags' => 'Special:Tags',
- 'comparepages' => 'Special:ComparePages',
- 'db-error-messages' => 'Database error messages',
- 'html-forms' => 'HTML forms',
- 'sqlite' => 'SQLite database support',
- 'logging' => 'New logging system',
- 'logging-irc' => 'For IRC, see bug 34508. Do not change',
- 'feedback' => 'Feedback',
- 'searchsuggestions' => 'Search suggestions',
- 'apierrors' => 'API errors',
- 'duration' => 'Durations',
- 'cachedspecial' => 'SpecialCachedPage',
- 'rotation' => 'Image rotation',
- 'limitreport' => 'Limit report',
-);
diff --git a/maintenance/language/rebuildLanguage.php b/maintenance/language/rebuildLanguage.php
deleted file mode 100644
index 66948aeb..00000000
--- a/maintenance/language/rebuildLanguage.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Rewrite the messages array in the files languages/messages/MessagesXx.php.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- * @defgroup MaintenanceLanguage MaintenanceLanguage
- */
-
-require_once __DIR__ . '/../commandLine.inc';
-require_once 'languages.inc';
-require_once 'writeMessagesArray.inc';
-
-/**
- * Rewrite a messages array.
- *
- * @param $languages
- * @param $code string The language code.
- * @param bool $write Write to the messages file?
- * @param bool $listUnknown List the unknown messages?
- * @param bool $removeUnknown Remove the unknown messages?
- * @param bool $removeDupes Remove the duplicated messages?
- * @param $dupeMsgSource string The source file intended to remove from the array.
- * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
- */
-function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource, $messagesFolder ) {
- $messages = $languages->getMessages( $code );
- $messages = $messages['all'];
- if ( $removeDupes ) {
- $messages = removeDupes( $messages, $dupeMsgSource );
- }
- MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder );
-}
-
-/**
- * Remove duplicates from a message array.
- *
- * @param $oldMsgArray array The input message array.
- * @param $dupeMsgSource string The source file path for duplicates.
- * @return Array $newMsgArray The output message array, with duplicates removed.
- */
-function removeDupes( $oldMsgArray, $dupeMsgSource ) {
- if ( file_exists( $dupeMsgSource ) ) {
- include $dupeMsgSource;
- if ( !isset( $dupeMessages ) ) {
- echo "There are no duplicated messages in the source file provided.";
- exit( 1 );
- }
- } else {
- echo "The specified file $dupeMsgSource cannot be found.";
- exit( 1 );
- }
- $newMsgArray = $oldMsgArray;
- foreach ( $oldMsgArray as $key => $value ) {
- if ( array_key_exists( $key, $dupeMessages ) ) {
- unset( $newMsgArray[$key] );
- }
- }
- return $newMsgArray;
-}
-
-# Show help
-if ( isset( $options['help'] ) ) {
- echo <<<TEXT
-Run this script to rewrite the messages array in the files languages/messages/MessagesXX.php.
-Parameters:
- * lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
- * help: Show this help.
-Options:
- * dry-run: Do not write the array to the file.
- * no-unknown: Do not list the unknown messages.
- * remove-unknown: Remove unknown messages.
- * remove-duplicates: Remove duplicated messages based on a PHP source file.
- * messages-folder: An alternative folder with MediaWiki messages.
-
-TEXT;
- exit( 1 );
-}
-
-# Get the language code
-if ( isset( $options['lang'] ) ) {
- $wgCode = $options['lang'];
-} else {
- $wgCode = $wgContLang->getCode();
-}
-
-# Get the duplicate message source
-if ( isset( $options['remove-duplicates'] ) && ( strcmp( $options['remove-duplicates'], '' ) ) ) {
- $wgDupeMessageSource = $options['remove-duplicates'];
-} else {
- $wgDupeMessageSource = '';
-}
-
-# Get the options
-$wgWriteToFile = !isset( $options['dry-run'] );
-$wgListUnknownMessages = !isset( $options['no-unknown'] );
-$wgRemoveUnknownMessages = isset( $options['remove-unknown'] );
-$wgRemoveDuplicateMessages = isset( $options['remove-duplicates'] );
-$messagesFolder = isset( $options['messages-folder'] ) ? $options['messages-folder'] : false;
-
-# Get language objects
-$languages = new languages();
-
-# Write all the language
-if ( $wgCode == 'all' ) {
- foreach ( $languages->getLanguages() as $languageCode ) {
- rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
- }
-} else {
- rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
-}
diff --git a/maintenance/language/transstat.php b/maintenance/language/transstat.php
index 61b84a07..4a853b0f 100644
--- a/maintenance/language/transstat.php
+++ b/maintenance/language/transstat.php
@@ -24,7 +24,7 @@
* @author Antoine Musso <hashar at free dot fr>
*
* Output is posted from time to time on:
- * http://www.mediawiki.org/wiki/Localisation_statistics
+ * https://www.mediawiki.org/wiki/Localisation_statistics
*/
$optionsWithArgs = array( 'output' );
@@ -32,7 +32,6 @@ require_once __DIR__ . '/../commandLine.inc';
require_once 'languages.inc';
require_once __DIR__ . '/StatOutputs.php';
-
if ( isset( $options['help'] ) ) {
showUsage();
}
@@ -57,25 +56,23 @@ TEXT;
exit( 1 );
}
-
-
# Select an output engine
switch ( $options['output'] ) {
case 'wiki':
- $output = new wikiStatsOutput();
+ $output = new WikiStatsOutput();
break;
case 'text':
- $output = new textStatsOutput();
+ $output = new TextStatsOutput();
break;
case 'csv':
- $output = new csvStatsOutput();
+ $output = new CsvStatsOutput();
break;
default:
showUsage();
}
# Languages
-$wgLanguages = new languages();
+$wgLanguages = new Languages();
# Header
$output->heading();
@@ -97,7 +94,8 @@ $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
foreach ( $wgLanguages->getLanguages() as $code ) {
# Don't check English, RTL English or dummy language codes
if ( $code == 'en' || $code == 'enRTL' || ( is_array( $wgDummyLanguageCodes ) &&
- isset( $wgDummyLanguageCodes[$code] ) ) ) {
+ isset( $wgDummyLanguageCodes[$code] ) )
+ ) {
continue;
}
@@ -107,16 +105,33 @@ foreach ( $wgLanguages->getLanguages() as $code ) {
$messages = $wgLanguages->getMessages( $code );
$messagesNumber = count( $messages['translated'] );
$requiredMessagesNumber = count( $messages['required'] );
- $requiredMessagesPercent = $output->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
+ $requiredMessagesPercent = $output->formatPercent(
+ $requiredMessagesNumber,
+ $wgRequiredMessagesNumber
+ );
$obsoleteMessagesNumber = count( $messages['obsolete'] );
- $obsoleteMessagesPercent = $output->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
+ $obsoleteMessagesPercent = $output->formatPercent(
+ $obsoleteMessagesNumber,
+ $messagesNumber,
+ true
+ );
$messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
$emptyMessages = $wgLanguages->getEmptyMessages( $code );
$messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
$nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
$messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
- $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
- $problematicMessagesPercent = $output->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
+ $problematicMessagesNumber = count( array_unique( array_merge(
+ $messagesWithMismatchVariables,
+ $emptyMessages,
+ $messagesWithWhitespace,
+ $nonXHTMLMessages,
+ $messagesWithWrongChars
+ ) ) );
+ $problematicMessagesPercent = $output->formatPercent(
+ $problematicMessagesNumber,
+ $messagesNumber,
+ true
+ );
# Output them
$output->blockstart();
diff --git a/maintenance/language/validate.php b/maintenance/language/validate.php
deleted file mode 100644
index 63d9b847..00000000
--- a/maintenance/language/validate.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Check language files for unrecognised variables.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-if ( !isset( $argv[1] ) ) {
- print "Usage: php {$argv[0]} <filename>\n";
- exit( 1 );
-}
-array_shift( $argv );
-
-define( 'MEDIAWIKI', 1 );
-define( 'NOT_REALLY_MEDIAWIKI', 1 );
-
-$IP = __DIR__ . '/../..';
-
-require_once "$IP/includes/Defines.php";
-require_once "$IP/languages/Language.php";
-
-$files = array();
-foreach ( $argv as $arg ) {
- $files = array_merge( $files, glob( $arg ) );
-}
-
-foreach ( $files as $filename ) {
- print "$filename...";
- $vars = getVars( $filename );
- $keys = array_keys( $vars );
- $diff = array_diff( $keys, Language::$mLocalisationKeys );
- if ( $diff ) {
- print "\nWarning: unrecognised variable(s): " . implode( ', ', $diff ) . "\n";
- } else {
- print " ok\n";
- }
-}
-
-function getVars( $filename ) {
- require $filename;
- $vars = get_defined_vars();
- unset( $vars['filename'] );
- return $vars;
-}
diff --git a/maintenance/language/writeMessagesArray.inc b/maintenance/language/writeMessagesArray.inc
deleted file mode 100644
index fc0da3f5..00000000
--- a/maintenance/language/writeMessagesArray.inc
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
-/**
- * Write a messages array as a PHP text.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup MaintenanceLanguage
- */
-
-/**
- * @ingroup MaintenanceLanguage
- */
-class MessageWriter {
- static $optionalComment = 'only translate this message to other languages if you have to change it';
- static $ignoredComment = "do not translate or duplicate this message to other languages";
-
- static $messageStructure;
- static $blockComments;
- static $ignoredMessages;
- static $optionalMessages;
-
- /**
- * Write a messages array as a PHP text and write it to the messages file.
- *
- * @param $messages Array: the messages array.
- * @param $code String: the language code.
- * @param $write Boolean: write to the messages file?
- * @param $listUnknown Boolean: list the unknown messages?
- * @param $removeUnknown Boolean: whether to remove unkown messages
- * @param $messagesFolder String: path to a folder to store the MediaWiki messages. Defaults to the current install.
- */
- public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder = false ) {
- # Rewrite the messages array
- $messages = self::writeMessagesArray( $messages, $code == 'en', false, $removeUnknown );
- $messagesText = $messages[0];
- $sortedMessages = $messages[1];
-
- # Write to the file
- if ( $messagesFolder ) {
- $filename = Language::getFileName( "$messagesFolder/Messages", $code );
- } else {
- $filename = Language::getMessagesFileName( $code );
- }
-
- if ( file_exists( $filename ) ) {
- $contents = file_get_contents( $filename );
- } else {
- $contents = '<?php
-$messages = array(
-);
-';
- }
-
- if ( strpos( $contents, '$messages' ) !== false ) {
- $contents = explode( '$messages', $contents );
- if ( $messagesText == '$messages' . $contents[1] ) {
- echo "Generated messages for language $code. Same as the current file.\n";
- } else {
- if ( $write ) {
- $new = $contents[0];
- $new .= $messagesText;
- file_put_contents( $filename, $new );
- echo "Generated and wrote messages for language $code.\n";
- } else {
- echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
- }
- }
- if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
- if ( $removeUnknown ) {
- echo "\nThe following " . count( $sortedMessages['unknown'] ) . " unknown messages have been removed:\n";
- } else {
- echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
- }
- foreach ( $sortedMessages['unknown'] as $key => $value ) {
- echo "* " . $key . "\n";
- }
- }
- } else {
- echo "Generated messages for language $code. There seem to be no messages array in the file.\n";
- }
- }
-
- /**
- * Write a messages array as a PHP text.
- *
- * @param $messages Array: the messages array.
- * @param $ignoredComments Boolean: show comments about ignored and optional
- * messages? (For English.)
- * @param $prefix String: base path for messages.inc and messageTypes.inc files
- * or false for default path (this directory)
- * @param $removeUnknown Boolean: whether to remove unkown messages
- *
- * @return Array of the PHP text and the sorted messages array.
- */
- public static function writeMessagesArray( $messages, $ignoredComments = false, $prefix = false, $removeUnknown = false ) {
- # Load messages
- $dir = $prefix ? $prefix : __DIR__;
-
- require $dir . '/messages.inc';
- self::$messageStructure = $wgMessageStructure;
- self::$blockComments = $wgBlockComments;
-
- require $dir . '/messageTypes.inc';
- self::$ignoredMessages = $wgIgnoredMessages;
- self::$optionalMessages = $wgOptionalMessages;
-
- # Sort messages to blocks
- $sortedMessages['unknown'] = $messages;
- foreach ( self::$messageStructure as $blockName => $block ) {
- /**
- * @var $block array
- */
- foreach ( $block as $key ) {
- if ( array_key_exists( $key, $sortedMessages['unknown'] ) ) {
- $sortedMessages[$blockName][$key] = $sortedMessages['unknown'][$key];
- unset( $sortedMessages['unknown'][$key] );
- }
- }
- }
-
- # Write all the messages
- $messagesText = "\$messages = array(
-";
- foreach ( $sortedMessages as $block => $messages ) {
- # Skip if it's the block of unknown messages - handle that in the end of file
- if ( $block == 'unknown' ) {
- continue;
- }
-
- if ( $ignoredComments ) {
- $ignored = self::$ignoredMessages;
- $optional = self::$optionalMessages;
- } else {
- $ignored = array();
- $optional = array();
- }
- $comments = self::makeComments( array_keys( $messages ), $ignored, $optional );
-
- # Write the block
- $messagesText .= self::writeMessagesBlock( self::$blockComments[$block], $messages, $comments );
- }
-
- # Write the unknown messages, alphabetically sorted.
- # Of course, we don't have any comments for them, because they are unknown.
- if ( !$removeUnknown ) {
- ksort( $sortedMessages['unknown'] );
- $messagesText .= self::writeMessagesBlock( 'Unknown messages', $sortedMessages['unknown'] );
- }
- $messagesText .= ");
-";
- return array( $messagesText, $sortedMessages );
- }
-
- /**
- * Generates an array of comments for messages.
- *
- * @param $messages Array: key of messages.
- * @param $ignored Array: list of ingored message keys.
- * @param $optional Array: list of optional message keys.
- * @return array
- */
- public static function makeComments( $messages, $ignored, $optional ) {
- # Comment collector
- $commentArray = array();
-
- # List of keys only
- foreach ( $messages as $key ) {
- if ( in_array( $key, $ignored ) ) {
- $commentArray[$key] = ' # ' . self::$ignoredComment;
- } elseif ( in_array( $key, $optional ) ) {
- $commentArray[$key] = ' # ' . self::$optionalComment;
- }
- }
-
- return $commentArray;
- }
-
- /**
- * Write a block of messages to PHP.
- *
- * @param $blockComment String: the comment of whole block.
- * @param $messages Array: the block messages.
- * @param $messageComments Array: optional comments for messages in this block.
- * @param $prefix String: prefix for every line, for indenting purposes.
- *
- * @return string The block, formatted in PHP.
- */
- public static function writeMessagesBlock( $blockComment, $messages,
- $messageComments = array(), $prefix = '' ) {
-
- $blockText = '';
-
- # Skip the block if it includes no messages
- if ( empty( $messages ) ) {
- return '';
- }
-
- # Format the block comment (if exists); check for multiple lines comments
- if ( !empty( $blockComment ) ) {
- if ( strpos( $blockComment, "\n" ) === false ) {
- $blockText .= "$prefix# $blockComment
-";
- } else {
- $blockText .= "$prefix/*
-$blockComment
-*/
-";
- }
- }
-
- # Get max key length
- $maxKeyLength = max( array_map( 'strlen', array_keys( $messages ) ) );
-
- # Format the messages
- foreach ( $messages as $key => $value ) {
- # Add the key name
- $blockText .= "$prefix'$key'";
-
- # Add the appropriate block whitespace
- $blockText .= str_repeat( ' ', $maxKeyLength - strlen( $key ) );
-
- # Refer to the value
- $blockText .= ' => ';
-
- # Check for the appropriate apostrophe and add the value
- # Quote \ here, because it needs always escaping
- $value = addcslashes( $value, '\\' );
-
- # For readability
- $single = "'";
- $double = '"';
-
- if ( strpos( $value, $single ) === false ) {
- # Nothing ugly, just use '
- $blockText .= $single . $value . $single;
- } elseif ( strpos( $value, $double ) === false && !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value ) ) {
- # No "-quotes, no variables that need quoting, use "
- $blockText .= $double . $value . $double;
- } else {
- # Something needs quoting, pick the quote which causes less quoting
- $quote = substr_count( $value, $double ) + substr_count( $value, '$' ) >= substr_count( $value, $single ) ? $single : $double;
- if ( $quote === $double ) {
- $extra = '$';
- } else {
- $extra = '';
- }
- $blockText .= $quote . addcslashes( $value, $quote . $extra ) . $quote;
- }
-
- # Comma
- $blockText .= ',';
-
- # Add comments, if there is any
- if ( array_key_exists( $key, $messageComments ) ) {
- $blockText .= $messageComments[$key];
- }
-
- # Newline
- $blockText .= "
-";
- }
-
- # Newline to end the block
- $blockText .= "
-";
-
- return $blockText;
- }
-}
diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py
index 7e197945..f902e581 100644
--- a/maintenance/language/zhtable/Makefile.py
+++ b/maintenance/language/zhtable/Makefile.py
@@ -30,9 +30,9 @@ def unichr3( *args ):
return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
# DEFINE
-UNIHAN_VER = '6.2.0'
+UNIHAN_VER = '6.3.0'
SF_MIRROR = 'dfn'
-SCIM_TABLES_VER = '0.5.11'
+SCIM_TABLES_VER = '0.5.13'
SCIM_PINYIN_VER = '0.5.92'
LIBTABE_VER = '0.2.3'
# END OF DEFINE
@@ -59,7 +59,11 @@ def uncompress( fp, member, encoding = 'U8' ):
shutil.move( member, name )
if '/' in member:
shutil.rmtree( member.split( '/', 1 )[0] )
- return open( name, 'rb', encoding, 'ignore' )
+ if pyversion[:1] in ['2']:
+ fc = open( name, 'rb', encoding, 'ignore' )
+ else:
+ fc = open( name, 'r', encoding = encoding, errors = 'ignore' )
+ return fc
unzip = lambda path, member, encoding = 'U8': \
uncompress( zf.ZipFile( path ), member, encoding )
@@ -136,7 +140,10 @@ def unihanParser( path ):
def applyExcludes( mlist, path ):
""" Apply exclude rules from path to mlist. """
- excludes = open( path, 'rb', 'U8' ).read().split()
+ if pyversion[:1] in ['2']:
+ excludes = open( path, 'rb', 'U8' ).read().split()
+ else:
+ excludes = open( path, 'r', encoding = 'U8' ).read().split()
excludes = [word.split( '#' )[0].strip() for word in excludes]
excludes = '|'.join( excludes )
excptn = re.compile( '.*(?:%s).*' % excludes )
@@ -145,7 +152,7 @@ def applyExcludes( mlist, path ):
return mlist
def charManualTable( path ):
- fp = open( path, 'rb', 'U8' )
+ fp = open( path, 'r', encoding = 'U8' )
ret = {}
for line in fp:
elems = line.split( '#' )[0].split( '|' )
@@ -156,13 +163,18 @@ def charManualTable( path ):
def toManyRules( src_table ):
tomany = set()
- for ( f, t ) in src_table.iteritems():
- for i in range( 1, len( t ) ):
- tomany.add( t[i] )
+ if pyversion[:1] in ['2']:
+ for ( f, t ) in src_table.iteritems():
+ for i in range( 1, len( t ) ):
+ tomany.add( t[i] )
+ else:
+ for ( f, t ) in src_table.items():
+ for i in range( 1, len( t ) ):
+ tomany.add( t[i] )
return tomany
def removeRules( path, table ):
- fp = open( path, 'rb', 'U8' )
+ fp = open( path, 'r', encoding = 'U8' )
texc = list()
for line in fp:
elems = line.split( '=>' )
@@ -179,13 +191,18 @@ def removeRules( path, table ):
if t:
texc.append( t )
texcptn = re.compile( '^(?:%s)$' % '|'.join( texc ) )
- for (tmp_f, tmp_t) in table.copy().iteritems():
- if texcptn.match( tmp_t ):
- table.pop( tmp_f )
+ if pyversion[:1] in ['2']:
+ for (tmp_f, tmp_t) in table.copy().iteritems():
+ if texcptn.match( tmp_t ):
+ table.pop( tmp_f )
+ else:
+ for (tmp_f, tmp_t) in table.copy().items():
+ if texcptn.match( tmp_t ):
+ table.pop( tmp_f )
return table
def customRules( path ):
- fp = open( path, 'rb', 'U8' )
+ fp = open( path, 'r', encoding = 'U8' )
ret = dict()
for line in fp:
elems = line.split( '#' )[0].split()
@@ -210,7 +227,7 @@ def translate( text, conv_table ):
return text
def manualWordsTable( path, conv_table, reconv_table ):
- fp = open( path, 'rb', 'U8' )
+ fp = open( path, 'r', encoding = 'U8' )
reconv_table = {}
wordlist = [line.split( '#' )[0].strip() for line in fp]
wordlist = list( set( wordlist ) )
@@ -285,8 +302,12 @@ def main():
t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
- t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
- s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+ if pyversion[:1] in ['2']:
+ t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
+ s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+ else:
+ t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.items()] )
+ s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.items()] )
s_tomany = toManyRules( t2s_1tomany )
t_tomany = toManyRules( s2t_1tomany )
@@ -333,10 +354,16 @@ def main():
# Final tables
# sorted list toHans
- t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+ if pyversion[:1] in ['2']:
+ t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+ else:
+ t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.items() if f != t] )
toHans = dictToSortedList( t2s_1to1, 0 ) + dictToSortedList( t2s_word2word, 1 )
# sorted list toHant
- s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+ if pyversion[:1] in ['2']:
+ s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+ else:
+ s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.items() if f != t] )
toHant = dictToSortedList( s2t_1to1, 0 ) + dictToSortedList( s2t_word2word, 1 )
# sorted list toCN
toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
@@ -352,7 +379,7 @@ def main():
/**
* Simplified / Traditional Chinese conversion tables
*
- * Automatically generated using code and data in includes/zhtable/
+ * Automatically generated using code and data in maintenance/language/zhtable/
* Do not modify directly!
*
* @file
@@ -372,7 +399,10 @@ $zh2Hant = array(\n'''
+ PHPArray( toSG ) \
+ '\n);\n'
- f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+ if pyversion[:1] in ['2']:
+ f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+ else:
+ f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'w', buffering = 4096, encoding = 'utf8' )
print ('Writing ZhConversion.php ... ')
f.write( php )
f.close()
diff --git a/maintenance/language/zhtable/trad2simp_supp_unset.manual b/maintenance/language/zhtable/trad2simp_supp_unset.manual
deleted file mode 100644
index e69de29b..00000000
--- a/maintenance/language/zhtable/trad2simp_supp_unset.manual
+++ /dev/null
diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual
index e20ca05b..69b2c832 100644
--- a/maintenance/language/zhtable/tradphrases.manual
+++ b/maintenance/language/zhtable/tradphrases.manual
@@ -3991,6 +3991,7 @@
學裡
獄裡
館裡
+箱裡
系列裡
村子裡
艷后