Nikerabbit has submitted this change and it was merged.

Change subject: Migrate to JSON i18n
......................................................................


Migrate to JSON i18n

Procedure per https://www.mediawiki.org/wiki/Manual:GenerateJsonI18n.php
with shim.

Change-Id: Ie3369ec6efe4d0e911bef151005e8c23578f60e8
---
M Loops.i18n.php
M Loops.php
A i18n/ast.json
A i18n/be-tarask.json
A i18n/de.json
A i18n/dsb.json
A i18n/en.json
A i18n/es.json
A i18n/fa.json
A i18n/fr.json
A i18n/gl.json
A i18n/he.json
A i18n/hsb.json
A i18n/ia.json
A i18n/it.json
A i18n/ja.json
A i18n/ko.json
A i18n/ksh.json
A i18n/lb.json
A i18n/mk.json
A i18n/ms.json
A i18n/mt.json
A i18n/nl.json
A i18n/pl.json
A i18n/pms.json
A i18n/pt-br.json
A i18n/pt.json
A i18n/qqq.json
A i18n/roa-tara.json
A i18n/ru.json
A i18n/tl.json
A i18n/tzm.json
A i18n/uk.json
A i18n/zh-hans.json
34 files changed, 382 insertions(+), 332 deletions(-)

Approvals:
  Nikerabbit: Verified; Looks good to me, approved



diff --git a/Loops.i18n.php b/Loops.i18n.php
index 0c53416..eeb2776 100644
--- a/Loops.i18n.php
+++ b/Loops.i18n.php
@@ -1,270 +1,31 @@
 <?php
 /**
- * Internationalization file of the 'Loops' extension.
+ * This is a backwards-compatibility shim, generated by:
+ * 
https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
  *
- * @since 0.4
+ * Beginning with MediaWiki 1.23, translation strings are stored in json files,
+ * and the EXTENSION.i18n.php file only exists to provide compatibility with
+ * older releases of MediaWiki. For more information about this migration, see:
+ * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
  *
- * @file Loops.i18n.php
- * @ingroup Loops
- * @author Daniel Werner < [email protected] >
+ * This shim maintains compatibility back to MediaWiki 1.17.
  */
-
 $messages = array();
+$GLOBALS['wgHooks']['LocalisationCacheRecache'][] = function ( $cache, $code, 
&$cachedData ) {
+       $codeSequence = array_merge( array( $code ), 
$cachedData['fallbackSequence'] );
+       foreach ( $codeSequence as $csCode ) {
+               $fileName = __DIR__ . "/i18n/$csCode.json";
+               if ( is_readable( $fileName ) ) {
+                       $data = FormatJson::decode( file_get_contents( 
$fileName ), true );
+                       foreach ( array_keys( $data ) as $key ) {
+                               if ( $key === '' || $key[0] === '@' ) {
+                                       unset( $data[$key] );
+                               }
+                       }
+                       $cachedData['messages'] = array_merge( $data, 
$cachedData['messages'] );
+               }
 
-/** English
- * @author David M. Sledge
- */
-$messages['en'] = array(
-       'loops-desc' => 'Parser functions for performing loops',
-       'loops_max' => 'Maximum number of loops have been performed'
-);
-
-/** Message documentation (Message documentation)
- * @author Purodha
- * @author Shirayuki
- */
-$messages['qqq'] = array(
-       'loops-desc' => 
'{{desc|name=Loops|url=http://www.mediawiki.org/wiki/Extension:Loops}}',
-       'loops_max' => 'Used as error message.',
-);
-
-/** Asturian (asturianu)
- * @author Xuacu
- */
-$messages['ast'] = array(
-       'loops-desc' => "Funciones d'analís pa facer xeres cícliques",
-       'loops_max' => "Algamóse'l númberu máximu de ciclos",
-);
-
-/** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца)‎)
- * @author Wizardist
- */
-$messages['be-tarask'] = array(
-       'loops-desc' => 'Функцыі парсэра для стварэньня цыклаў',
-       'loops_max' => 'Максымальная колькасьць цыклаў',
-);
-
-/** German (Deutsch)
- * @author Daniel Werner
- */
-$messages['de'] = array(
-       'loops-desc' => 'Parser-Funktionen zur Schleifen-Ausführung',
-       'loops_max' => 'Die maximal erlaubte Anzahl an Schleifen wurde 
ausgeführt',
-);
-
-/** Lower Sorbian (dolnoserbski)
- * @author Michawiki
- */
-$messages['dsb'] = array(
-       'loops-desc' => 'Parserowe funkcije za wuwjeźenje kokulow',
-       'loops_max' => 'Maksimalna licba kokulow jo se wuwjadła',
-);
-
-/** Spanish (español)
- * @author Armando-Martin
- */
-$messages['es'] = array(
-       'loops-desc' => 'Funciones de analizador (parser) para realizar bucles',
-       'loops_max' => 'Se ha realizado el número máximo de bucles',
-);
-
-/** Persian (فارسی)
- * @author Armin1392
- */
-$messages['fa'] = array(
-       'loops-desc' => 'توابع تجزیه کننده برای انجام حلقه‌ها',
-       'loops_max' => 'حداکثر تعداد حلقه‌هایی که انجام شده‌است',
-);
-
-/** French (français)
- * @author DavidL
- */
-$messages['fr'] = array(
-       'loops-desc' => "Fonctions de l'interpréteur pour effectuer des 
boucles",
-       'loops_max' => 'Le nombre maximal de boucles a été effectué',
-);
-
-/** Galician (galego)
- * @author Toliño
- */
-$messages['gl'] = array(
-       'loops-desc' => 'Funcións analíticas para levar a cabo bucles',
-       'loops_max' => 'Levouse a cabo o número máximo de bucles',
-);
-
-/** Hebrew (עברית)
- * @author Amire80
- */
-$messages['he'] = array(
-       'loops-desc' => 'פונקציות מפענח לביצוע לולאות',
-       'loops_max' => 'בוצע מספר מרבי של לולאות',
-);
-
-/** Upper Sorbian (hornjoserbsce)
- * @author Michawiki
- */
-$messages['hsb'] = array(
-       'loops-desc' => 'Parserowe funkcije za wuwjedźenje seklow',
-       'loops_max' => 'Maksimalna ličba seklow je so wuwjedła',
-);
-
-/** Interlingua (interlingua)
- * @author McDutchie
- */
-$messages['ia'] = array(
-       'loops-desc' => 'Functiones de analysator syntactic pro executar 
iterationes',
-       'loops_max' => 'Le numero maxime de iterationes ha essite executate',
-);
-
-/** Italian (italiano)
- * @author Beta16
- */
-$messages['it'] = array(
-       'loops-desc' => "Funzioni parser per l'esecuzione di cicli",
-       'loops_max' => "E' stato eseguito il numero massimo di cicli",
-);
-
-/** Japanese (日本語)
- * @author Fryed-peach
- */
-$messages['ja'] = array(
-       'loops-desc' => 'ループを実行するためのパーサー関数',
-       'loops_max' => 'ループの最大実行回数に達しました',
-);
-
-/** Korean (한국어)
- * @author 아라
- */
-$messages['ko'] = array(
-       'loops-desc' => '루프를 수행하는 것에 대한 파서 함수',
-       'loops_max' => '루프의 최대 수가 수행되었습니다',
-);
-
-/** Colognian (Ripoarisch)
- * @author Purodha
- */
-$messages['ksh'] = array(
-       'loops-desc' => 'Paaser-Funxjuhne för Schleife ußzeföhre.',
-       'loops_max' => 'De jrüüßte müjjelesche Zahl vun Schleife es dorschloufe 
woode.',
-);
-
-/** Luxembourgish (Lëtzebuergesch)
- * @author Robby
- * @author Soued031
- */
-$messages['lb'] = array(
-       'loops-desc' => 'Parser-Funktioune fir Schleefen auszeféieren',
-       'loops_max' => 'Déi maximal Zuel vun erlaabte Schleefe gouf 
ausgefouert',
-);
-
-/** Macedonian (македонски)
- * @author Bjankuloski06
- */
-$messages['mk'] = array(
-       'loops-desc' => 'Rасчленувачки функции за вршење на повторувања 
(јамки)',
-       'loops_max' => 'Извршен е максималниот број на повторувања',
-);
-
-/** Malay (Bahasa Melayu)
- * @author Anakmalaysia
- */
-$messages['ms'] = array(
-       'loops-desc' => 'Fungsi parser untuk melakukan gelung',
-       'loops_max' => 'Bilangan gelung maksimum telah dilakukan',
-);
-
-/** Maltese (Malti)
- * @author Chrisportelli
- */
-$messages['mt'] = array(
-       'loops_max' => "Ġew esegwiti n-numru massimu ta' ċikli",
-);
-
-/** Dutch (Nederlands)
- * @author Siebrand
- */
-$messages['nl'] = array(
-       'loops-desc' => 'Parserfuncties voor het uitvoeren van herhalingen',
-       'loops_max' => 'Het maximum aantal herhalingen is uitgevoerd',
-);
-
-/** Polish (polski)
- * @author BeginaFelicysym
- */
-$messages['pl'] = array(
-       'loops-desc' => 'Funkcje analizatora składni do wykonywania pętli',
-       'loops_max' => 'Została wykonana maksymalna liczba pętli',
-);
-
-/** Piedmontese (Piemontèis)
- * @author Borichèt
- * @author Dragonòt
- */
-$messages['pms'] = array(
-       'loops-desc' => "Funsion dl'analisator për fé dij sicl",
-       'loops_max' => "Màssim nùmer ëd sicl ch'a son stàit fàit",
-);
-
-/** Portuguese (português)
- * @author Cainamarques
- */
-$messages['pt'] = array(
-       'loops-desc' => 'Funções sintáticas para executar ciclos',
-       'loops_max' => 'O número máximo de ciclos foi atingido',
-);
-
-/** Brazilian Portuguese (português do Brasil)
- * @author Cainamarques
- */
-$messages['pt-br'] = array(
-       'loops-desc' => 'Funções sintáticas para executar ciclos',
-       'loops_max' => 'O número máximo de ciclos foi atingido',
-);
-
-/** tarandíne (tarandíne)
- * @author Joetaras
- */
-$messages['roa-tara'] = array(
-       'loops-desc' => 'Funziune analizzatrice pe fà le cicle',
-       'loops_max' => 'Massime numere de cicle onne state fatte',
-);
-
-/** Russian (русский)
- * @author Okras
- */
-$messages['ru'] = array(
-       'loops-desc' => 'Функции анализатора для выполнения циклов',
-       'loops_max' => 'Максимальное количество циклов для выполнения',
-);
-
-/** Tagalog (Tagalog)
- * @author AnakngAraw
- */
-$messages['tl'] = array(
-       'loops-desc' => 'Mga tungkuling pambanghay para sa pagsasagawa ng mga 
pagsilo',
-       'loops_max' => 'Naisagawa na ang pinakamataas na bilang ng mga pagsilo',
-);
-
-/** Central Atlas Tamazight (ⵜⴰⵎⴰⵣⵉⵖⵜ)
- * @author Tifinaghes
- */
-$messages['tzm'] = array(
-       'loops-desc' => 'Parser functions for performing loops',
-       'loops_max' => 'Maximum number of loops have been performed',
-);
-
-/** Ukrainian (українська)
- * @author Base
- */
-$messages['uk'] = array(
-       'loops-desc' => 'Функції парсеру для створення циклів',
-       'loops_max' => 'Максимальне число циклів, що може бути створено',
-);
-
-/** Simplified Chinese (中文(简体)‎)
- * @author Yfdyh000
- */
-$messages['zh-hans'] = array(
-       'loops-desc' => '执行循环的解析器函数',
-       'loops_max' => '循环执行次数的最大值',
-);
+               $cachedData['deps'][] = new FileDependency( $fileName );
+       }
+       return true;
+};
diff --git a/Loops.php b/Loops.php
index 866b943..b75ffb1 100644
--- a/Loops.php
+++ b/Loops.php
@@ -2,12 +2,11 @@
 
 /**
  * 'Loops' is a MediaWiki extension expanding the parser with loops functions
- * 
+ *
  * Documentation: http://www.mediawiki.org/wiki/Extension:Loops
  * Support:       http://www.mediawiki.org/wiki/Extension_talk:Loops
  * Source code:   
http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Loops
- * 
- * @version: 0.4
+ *
  * @license: GNU GPL v2 or higher
  * @author:  David M. Sledge
  * @author:  Daniel Werner < [email protected] >
@@ -17,7 +16,7 @@
  */
 
 if ( ! defined( 'MEDIAWIKI' ) ) { die( ); }
- 
+
 $wgExtensionCredits['parserhook'][] = array(
        'path'           => __FILE__,
        'author'         => array( 'David M. Sledge', 
'[http://www.mediawiki.org/wiki/User:Danwe Daniel Werner]' ),
@@ -28,6 +27,7 @@
 );
 
 // language files:
+$wgMessagesDirs['Loops'] = __DIR__ . '/i18n';
 $wgExtensionMessagesFiles['Loops'     ] = ExtLoops::getDir() . 
'/Loops.i18n.php';
 $wgExtensionMessagesFiles['LoopsMagic'] = ExtLoops::getDir() . 
'/Loops.i18n.magic.php';
 
@@ -45,13 +45,12 @@
  * extension logic stuff.
  */
 class ExtLoops {
-               
-       const VERSION = '0.4';
-       
+       const VERSION = '0.5.0';
+
        /**
         * Configuration variable defining maximum allowed number of loops 
('-1' => no limit).
         * '#forargs' and '#fornumargs' are not limited by this.
-        * 
+        *
         * @var int
         */
        public static $maxLoops = 100;
@@ -60,7 +59,7 @@
         * Returns the extensions base installation directory.
         *
         * @since 0.4
-        * 
+        *
         * @return boolean
         */
        public static function getDir() {
@@ -74,11 +73,11 @@
 
        /**
        * Sets up parser functions
-       * 
+       *
        * @since 0.4
        */
        public static function init( Parser &$parser ) {
-               
+
                if( ! class_exists( 'ExtVariables' ) ) {
                        /*
                         * If Variables extension not defined, we can't use 
certain functions.
@@ -88,7 +87,7 @@
                        $disabledFunctions = array( 'loop', 'forargs', 
'fornumargs' );
                        $egLoopsEnabledFunctions = array_diff( 
$egLoopsEnabledFunctions, $disabledFunctions );
                }
-               
+
                /*
                 * store for loops count per parser object. This will solve 
several bugs related to
                 * 'ParserClearState' hook resetting the count early in 
combination with certain
@@ -101,22 +100,22 @@
                self::initFunction( $parser, 'loop' );
                self::initFunction( $parser, 'forargs' );
                self::initFunction( $parser, 'fornumargs' );
-               
+
                return true;
        }
        private static function initFunction( Parser &$parser, $name ) {
                global $egLoopsEnabledFunctions;
-               
+
                // don't register parser function if disabled by configuration:
                if( ! in_array( $name, $egLoopsEnabledFunctions ) ) {
                        return;
                }
-               
+
                $functionCallback = array( __CLASS__, 'pfObj_' . $name );
                $parser->setFunctionHook( $name, $functionCallback, 
SFH_OBJECT_ARGS );
        }
-       
-       
+
+
        ####################
        # Parser Functions #
        ####################
@@ -124,11 +123,11 @@
        public static function pfObj_while( Parser &$parser, $frame, $args ) {
                return self::perform_while( $parser, $frame, $args, false );
        }
-       
+
        public static function pfObj_dowhile( Parser &$parser, $frame, $args ) {
                return self::perform_while( $parser, $frame, $args, true );
        }
-       
+
        /**
         * Generic function handling '#while' and '#dowhile' as one
         */
@@ -136,7 +135,7 @@
                // #(do)while: | condition | code
                $rawCond = isset( $args[1] ) ? $args[1] : ''; // unexpanded 
condition
                $rawCode = isset( $args[2] ) ? $args[2] : ''; // unexpanded 
loop code
-               
+
                if(
                        $dowhile === false
                        && trim( $frame->expand( $rawCond ) ) === ''
@@ -144,70 +143,70 @@
                        // while, but condition not fullfilled from the start
                        return '';
                }
-               
+
                $output = '';
-               
+
                do {
                        // limit check:
                        if( ! self::incrCounter( $parser ) ) {
                                return self::msgLoopsLimit( $output );
                        }
                        $output .= trim( $frame->expand( $rawCode ) );
-                       
+
                } while( trim( $frame->expand( $rawCond ) ) );
-               
+
                return $output;
        }
-       
+
        public static function pfObj_loop( Parser &$parser, PPFrame $frame, 
$args ) {
                // #loop: var | start | count | code
                $varName  = isset( $args[0] ) ?      trim( $frame->expand( 
$args[0] ) ) : '';
                $startVal = isset( $args[1] ) ? (int)trim( $frame->expand( 
$args[1] ) ) : 0;
                $loops    = isset( $args[2] ) ? (int)trim( $frame->expand( 
$args[2] ) ) : 0;
                $rawCode  = isset( $args[3] ) ? $args[3] : ''; // unexpanded 
loop code
-               
+
                if( $loops === 0 ) {
                        // no loops to perform
                        return '';
                }
-                               
+
                $output = '';
                $endVal = $startVal + $loops;
                $i = $startVal;
-               
+
                while( $i !== $endVal ) {
                        // limit check:
                        if( ! self::incrCounter( $parser ) ) {
                                return self::msgLoopsLimit( $output );
                        }
-                       
+
                        // set current position as variable:
                        self::setVariable( $parser, $varName, (string)$i );
-                       
+
                        $output .= trim( $frame->expand( $rawCode ) );
-                       
+
                        // in-/decrease loop count (count can be negative):
                        ( $i < $endVal ) ? $i++ : $i--;
                }
                return $output;
        }
-       
+
        /**
         * #forargs: filter | keyVarName | valVarName | code
         */
-       public static function pfObj_forargs( Parser &$parser, $frame, $args ) 
{                
+       public static function pfObj_forargs( Parser &$parser, $frame, $args ) {
                // The first arg is already expanded, but this is a good habit 
to have...
                $filter = array_shift( $args );
                $filter = $filter !== null ? trim( $frame->expand( $filter ) ) 
: '';
-               
+
                // if prefix contains numbers only or isn't set, get all 
arguments, otherwise just non-numeric
                $tArgs = ( preg_match( '/^([1-9][0-9]*)?$/', $filter ) > 0 )
                                ? $frame->getArguments()
                                : $frame->getNamedArguments();
-               
+
                return self::perform_forargs( $parser, $frame, $args, $tArgs, 
$filter );
        }
-       
+
        /**
         * #fornumargs: keyVarName | valVarName | code
         * or (since 0.4 for more consistency)
@@ -226,16 +225,16 @@
                        }
                }
                ksort( $tNumArgs ); // sort from lowest to highest
-               
+
                if( count( $args ) > 3 ) {
                        // compatbility to pre 0.4 but consistency with other 
Loop functions.
                        // this way the first argument can be ommitted like 
'#fornumargs: |varKey |varVal |code'
                        array_shift( $args );
                }
-               
+
                return self::perform_forargs( $parser, $frame, $args, 
$tNumArgs, '' );
        }
-       
+
        /**
         * Generic function handling '#forargs' and '#fornumargs' as one
         */
@@ -244,7 +243,7 @@
                if( !( $frame->isTemplate() ) ) {
                        return '';
                }
-               
+
                // name of the variable to store the argument name:
                $keyVar  = array_shift( $funcArgs );
                $keyVar  = $keyVar  !== null ? trim( $frame->expand( $keyVar ) 
)  : '';
@@ -254,16 +253,16 @@
                // unexpanded code:
                $rawCode = array_shift( $funcArgs );
                $rawCode = $rawCode !== null ? $rawCode : '';
-                               
+
                $output = '';
-               
+
                // if prefix contains numbers only or isn't set, get all 
arguments, otherwise just non-numeric
                $tArgs = preg_match( '/^([1-9][0-9]*)?$/', $prefix ) > 0
                                ? $frame->getArguments() : 
$frame->getNamedArguments();
-               
+
                foreach( $templateArgs as $argName => $argVal ) {
                        // if no filter or prefix in argument name:
-                       if( $prefix !== '' && strpos( $argName, $prefix ) !== 0 
) {             
+                       if( $prefix !== '' && strpos( $argName, $prefix ) !== 0 
) {
                                continue;
                        }
                        if ( $keyVar !== $valVar ) {
@@ -274,29 +273,29 @@
                        self::setVariable( $parser, $valVar, $argVal );
 
                        // expand current run:
-                       $output .= trim( $frame->expand( $rawCode ) );          
        
+                       $output .= trim( $frame->expand( $rawCode ) );
                }
-               
+
                return $output;
        }
-       
+
        /**
         * Connects to 'Variables' extension and sets a variable. Handles 
different versions of
         * 'Variables' extension since there have changed some things along the 
way.
-        * 
+        *
         * @param Parser $parser
         * @param string $varName
         * @param string $varValue
         */
        private static function setVariable( Parser &$parser, $varName, 
$varValue ) {
                global $wgExtVariables;
-               
+
                static $newVersion = null;
                if( $newVersion === null ) {
                        // find out whether local wiki is using variables 
extension 2.0 or higher
                        $newVersion = ( defined( 'ExtVariables::VERSION' ) && 
version_compare( ExtVariables::VERSION, '1.9999', '>' ) );
                }
-               
+
                if( $newVersion ) {
                        // clean way since Variables 2.0:
                        ExtVariables::get( $parser )->setVarValue( $varName, 
$varValue );
@@ -306,42 +305,42 @@
                        $wgExtVariables->vardefine( $parser, trim( $varName ), 
trim( $varValue ) );
                }
        }
-       
-       
+
+
        ###############
        # Loops Count #
        ###############
-       
+
        /**
         * Returns how many loops have been performed for a given Parser 
instance.
-        * 
+        *
         * @since 0.4
-        * 
+        *
         * @param Parser $parser
         * @return int
         */
        public static function getLoopsCount( Parser &$parser ) {
                return $parser->mExtLoopsCounter;
        }
-       
+
        /**
         * Returns whether the maximum number of loops for the given Parser 
instance have
         * been performed already.
-        * 
+        *
         * @since 0.4
-        * 
+        *
         * @param Parser $parser
-        * @return bool 
+        * @return bool
         */
        public static function maxLoopsPerformed( Parser &$parser ) {
                $count = $parser->mExtLoopsCounter;
                return $count > -1 && $count >= self::$maxLoops;
        }
-       
+
        /**
         * If limit has not been exceeded already, this will increase the 
counter. If
         * exceeded false will be returned, otherwise the new counter value
-        * 
+        *
         * @return false|int
         */
        protected static function incrCounter( Parser &$parser ) {
@@ -350,7 +349,7 @@
                }
                return ++$parser->mExtLoopsCounter;
        }
-       
+
        /**
         * div wrapped error message stating maximum number of loops have been 
performed.
         */
@@ -360,29 +359,29 @@
                }
                return $output .= '<div class="error">' . wfMsgForContent( 
'loops_max' ) . '</div>';
        }
-       
-       
+
+
        ##################
        # Hooks handling #
        ##################
-       
+
        public static function onParserClearState( Parser &$parser ) {
                // reset loops counter since the parser process finished one 
page
                $parser->mExtLoopsCounter = 0;
                return true;
        }
-       
+
        public static function onParserLimitReport( $parser, &$report ) {
                // add performed loops to limit report:
                $report .= 'ExtLoops count: ' . self::getLoopsCount( $parser );
-               
+
                if( self::$maxLoops > -1 ) {
                        // if limit is set, communicate the limit as well:
                        $report .= '/' . self::$maxLoops;
                }
                $report .= "\n";
-               
+
                return true;
        }
-       
+
 }
diff --git a/i18n/ast.json b/i18n/ast.json
new file mode 100644
index 0000000..6e46ec7
--- /dev/null
+++ b/i18n/ast.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Xuacu"
+        ]
+    },
+    "loops-desc": "Funciones d'analís pa facer xeres cícliques",
+    "loops_max": "Algamóse'l númberu máximu de ciclos"
+}
\ No newline at end of file
diff --git a/i18n/be-tarask.json b/i18n/be-tarask.json
new file mode 100644
index 0000000..f35fb65
--- /dev/null
+++ b/i18n/be-tarask.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Wizardist"
+        ]
+    },
+    "loops-desc": "Функцыі парсэра для стварэньня цыклаў",
+    "loops_max": "Максымальная колькасьць цыклаў"
+}
\ No newline at end of file
diff --git a/i18n/de.json b/i18n/de.json
new file mode 100644
index 0000000..1170998
--- /dev/null
+++ b/i18n/de.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Daniel Werner"
+        ]
+    },
+    "loops-desc": "Parser-Funktionen zur Schleifen-Ausführung",
+    "loops_max": "Die maximal erlaubte Anzahl an Schleifen wurde ausgeführt"
+}
\ No newline at end of file
diff --git a/i18n/dsb.json b/i18n/dsb.json
new file mode 100644
index 0000000..5ec8d3a
--- /dev/null
+++ b/i18n/dsb.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Michawiki"
+        ]
+    },
+    "loops-desc": "Parserowe funkcije za wuwjeźenje kokulow",
+    "loops_max": "Maksimalna licba kokulow jo se wuwjadła"
+}
\ No newline at end of file
diff --git a/i18n/en.json b/i18n/en.json
new file mode 100644
index 0000000..92be1ac
--- /dev/null
+++ b/i18n/en.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "David M. Sledge"
+        ]
+    },
+    "loops-desc": "Parser functions for performing loops",
+    "loops_max": "Maximum number of loops have been performed"
+}
\ No newline at end of file
diff --git a/i18n/es.json b/i18n/es.json
new file mode 100644
index 0000000..e2cd3fe
--- /dev/null
+++ b/i18n/es.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Armando-Martin"
+        ]
+    },
+    "loops-desc": "Funciones de analizador (parser) para realizar bucles",
+    "loops_max": "Se ha realizado el número máximo de bucles"
+}
\ No newline at end of file
diff --git a/i18n/fa.json b/i18n/fa.json
new file mode 100644
index 0000000..a05d18b
--- /dev/null
+++ b/i18n/fa.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Armin1392"
+        ]
+    },
+    "loops-desc": "توابع تجزیه کننده برای انجام حلقه‌ها",
+    "loops_max": "حداکثر تعداد حلقه‌هایی که انجام شده‌است"
+}
\ No newline at end of file
diff --git a/i18n/fr.json b/i18n/fr.json
new file mode 100644
index 0000000..81d4fba
--- /dev/null
+++ b/i18n/fr.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "DavidL"
+        ]
+    },
+    "loops-desc": "Fonctions de l'interpréteur pour effectuer des boucles",
+    "loops_max": "Le nombre maximal de boucles a été effectué"
+}
\ No newline at end of file
diff --git a/i18n/gl.json b/i18n/gl.json
new file mode 100644
index 0000000..9afc940
--- /dev/null
+++ b/i18n/gl.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Toliño"
+        ]
+    },
+    "loops-desc": "Funcións analíticas para levar a cabo bucles",
+    "loops_max": "Levouse a cabo o número máximo de bucles"
+}
\ No newline at end of file
diff --git a/i18n/he.json b/i18n/he.json
new file mode 100644
index 0000000..ec4dbcd
--- /dev/null
+++ b/i18n/he.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80"
+        ]
+    },
+    "loops-desc": "פונקציות מפענח לביצוע לולאות",
+    "loops_max": "בוצע מספר מרבי של לולאות"
+}
\ No newline at end of file
diff --git a/i18n/hsb.json b/i18n/hsb.json
new file mode 100644
index 0000000..bbc63cc
--- /dev/null
+++ b/i18n/hsb.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Michawiki"
+        ]
+    },
+    "loops-desc": "Parserowe funkcije za wuwjedźenje seklow",
+    "loops_max": "Maksimalna ličba seklow je so wuwjedła"
+}
\ No newline at end of file
diff --git a/i18n/ia.json b/i18n/ia.json
new file mode 100644
index 0000000..064d799
--- /dev/null
+++ b/i18n/ia.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "McDutchie"
+        ]
+    },
+    "loops-desc": "Functiones de analysator syntactic pro executar 
iterationes",
+    "loops_max": "Le numero maxime de iterationes ha essite executate"
+}
\ No newline at end of file
diff --git a/i18n/it.json b/i18n/it.json
new file mode 100644
index 0000000..cb8a128
--- /dev/null
+++ b/i18n/it.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beta16"
+        ]
+    },
+    "loops-desc": "Funzioni parser per l'esecuzione di cicli",
+    "loops_max": "E' stato eseguito il numero massimo di cicli"
+}
\ No newline at end of file
diff --git a/i18n/ja.json b/i18n/ja.json
new file mode 100644
index 0000000..78d7f5f
--- /dev/null
+++ b/i18n/ja.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Fryed-peach"
+        ]
+    },
+    "loops-desc": "ループを実行するためのパーサー関数",
+    "loops_max": "ループの最大実行回数に達しました"
+}
\ No newline at end of file
diff --git a/i18n/ko.json b/i18n/ko.json
new file mode 100644
index 0000000..4edf3ba
--- /dev/null
+++ b/i18n/ko.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "아라"
+        ]
+    },
+    "loops-desc": "루프를 수행하는 것에 대한 파서 함수",
+    "loops_max": "루프의 최대 수가 수행되었습니다"
+}
\ No newline at end of file
diff --git a/i18n/ksh.json b/i18n/ksh.json
new file mode 100644
index 0000000..b2070a5
--- /dev/null
+++ b/i18n/ksh.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Purodha"
+        ]
+    },
+    "loops-desc": "Paaser-Funxjuhne för Schleife ußzeföhre.",
+    "loops_max": "De jrüüßte müjjelesche Zahl vun Schleife es dorschloufe 
woode."
+}
\ No newline at end of file
diff --git a/i18n/lb.json b/i18n/lb.json
new file mode 100644
index 0000000..6320fb0
--- /dev/null
+++ b/i18n/lb.json
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Robby",
+            "Soued031"
+        ]
+    },
+    "loops-desc": "Parser-Funktioune fir Schleefen auszeféieren",
+    "loops_max": "Déi maximal Zuel vun erlaabte Schleefe gouf ausgefouert"
+}
\ No newline at end of file
diff --git a/i18n/mk.json b/i18n/mk.json
new file mode 100644
index 0000000..e3efc9f
--- /dev/null
+++ b/i18n/mk.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bjankuloski06"
+        ]
+    },
+    "loops-desc": "Rасчленувачки функции за вршење на повторувања (јамки)",
+    "loops_max": "Извршен е максималниот број на повторувања"
+}
\ No newline at end of file
diff --git a/i18n/ms.json b/i18n/ms.json
new file mode 100644
index 0000000..9203047
--- /dev/null
+++ b/i18n/ms.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anakmalaysia"
+        ]
+    },
+    "loops-desc": "Fungsi parser untuk melakukan gelung",
+    "loops_max": "Bilangan gelung maksimum telah dilakukan"
+}
\ No newline at end of file
diff --git a/i18n/mt.json b/i18n/mt.json
new file mode 100644
index 0000000..9629fb1
--- /dev/null
+++ b/i18n/mt.json
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chrisportelli"
+        ]
+    },
+    "loops_max": "Ġew esegwiti n-numru massimu ta' ċikli"
+}
\ No newline at end of file
diff --git a/i18n/nl.json b/i18n/nl.json
new file mode 100644
index 0000000..a2867ba
--- /dev/null
+++ b/i18n/nl.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Siebrand"
+        ]
+    },
+    "loops-desc": "Parserfuncties voor het uitvoeren van herhalingen",
+    "loops_max": "Het maximum aantal herhalingen is uitgevoerd"
+}
\ No newline at end of file
diff --git a/i18n/pl.json b/i18n/pl.json
new file mode 100644
index 0000000..cdbdf27
--- /dev/null
+++ b/i18n/pl.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "BeginaFelicysym"
+        ]
+    },
+    "loops-desc": "Funkcje analizatora składni do wykonywania pętli",
+    "loops_max": "Została wykonana maksymalna liczba pętli"
+}
\ No newline at end of file
diff --git a/i18n/pms.json b/i18n/pms.json
new file mode 100644
index 0000000..a32866b
--- /dev/null
+++ b/i18n/pms.json
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Borichèt",
+            "Dragonòt"
+        ]
+    },
+    "loops-desc": "Funsion dl'analisator për fé dij sicl",
+    "loops_max": "Màssim nùmer ëd sicl ch'a son stàit fàit"
+}
\ No newline at end of file
diff --git a/i18n/pt-br.json b/i18n/pt-br.json
new file mode 100644
index 0000000..fd98de3
--- /dev/null
+++ b/i18n/pt-br.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cainamarques"
+        ]
+    },
+    "loops-desc": "Funções sintáticas para executar ciclos",
+    "loops_max": "O número máximo de ciclos foi atingido"
+}
\ No newline at end of file
diff --git a/i18n/pt.json b/i18n/pt.json
new file mode 100644
index 0000000..fd98de3
--- /dev/null
+++ b/i18n/pt.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cainamarques"
+        ]
+    },
+    "loops-desc": "Funções sintáticas para executar ciclos",
+    "loops_max": "O número máximo de ciclos foi atingido"
+}
\ No newline at end of file
diff --git a/i18n/qqq.json b/i18n/qqq.json
new file mode 100644
index 0000000..272d3a0
--- /dev/null
+++ b/i18n/qqq.json
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Purodha",
+            "Shirayuki"
+        ]
+    },
+    "loops-desc": 
"{{desc|name=Loops|url=http://www.mediawiki.org/wiki/Extension:Loops}}";,
+    "loops_max": "Used as error message."
+}
\ No newline at end of file
diff --git a/i18n/roa-tara.json b/i18n/roa-tara.json
new file mode 100644
index 0000000..3c7fd5f
--- /dev/null
+++ b/i18n/roa-tara.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Joetaras"
+        ]
+    },
+    "loops-desc": "Funziune analizzatrice pe fà le cicle",
+    "loops_max": "Massime numere de cicle onne state fatte"
+}
\ No newline at end of file
diff --git a/i18n/ru.json b/i18n/ru.json
new file mode 100644
index 0000000..ea8ba29
--- /dev/null
+++ b/i18n/ru.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Okras"
+        ]
+    },
+    "loops-desc": "Функции анализатора для выполнения циклов",
+    "loops_max": "Максимальное количество циклов для выполнения"
+}
\ No newline at end of file
diff --git a/i18n/tl.json b/i18n/tl.json
new file mode 100644
index 0000000..47aecd3
--- /dev/null
+++ b/i18n/tl.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "AnakngAraw"
+        ]
+    },
+    "loops-desc": "Mga tungkuling pambanghay para sa pagsasagawa ng mga 
pagsilo",
+    "loops_max": "Naisagawa na ang pinakamataas na bilang ng mga pagsilo"
+}
\ No newline at end of file
diff --git a/i18n/tzm.json b/i18n/tzm.json
new file mode 100644
index 0000000..23a3d05
--- /dev/null
+++ b/i18n/tzm.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Tifinaghes"
+        ]
+    },
+    "loops-desc": "Parser functions for performing loops",
+    "loops_max": "Maximum number of loops have been performed"
+}
\ No newline at end of file
diff --git a/i18n/uk.json b/i18n/uk.json
new file mode 100644
index 0000000..8da5c6a
--- /dev/null
+++ b/i18n/uk.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Base"
+        ]
+    },
+    "loops-desc": "Функції парсеру для створення циклів",
+    "loops_max": "Максимальне число циклів, що може бути створено"
+}
\ No newline at end of file
diff --git a/i18n/zh-hans.json b/i18n/zh-hans.json
new file mode 100644
index 0000000..dbf07a5
--- /dev/null
+++ b/i18n/zh-hans.json
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Yfdyh000"
+        ]
+    },
+    "loops-desc": "执行循环的解析器函数",
+    "loops_max": "循环执行次数的最大值"
+}
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/122692
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie3369ec6efe4d0e911bef151005e8c23578f60e8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Loops
Gerrit-Branch: master
Gerrit-Owner: Siebrand <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to