http://www.mediawiki.org/wiki/Special:Code/MediaWiki/66317

Revision: 66317
Author:   dale
Date:     2010-05-13 00:24:48 +0000 (Thu, 13 May 2010)

Log Message:
-----------
* Updated JS2 documentation
* Maintenance script for javascript msg JSON -> php localization files
* Moved mwEmbed.i18n to match other module conventions 

Modified Paths:
--------------
    trunk/extensions/JS2Support/README
    trunk/extensions/JS2Support/mwEmbed/includes/jsClassLoader.php

Added Paths:
-----------
    trunk/extensions/JS2Support/maintenance/
    trunk/extensions/JS2Support/maintenance/MergeJavascriptMsg.php
    trunk/extensions/JS2Support/mwEmbed/mwEmbed.i18n.php

Removed Paths:
-------------
    trunk/extensions/JS2Support/mwEmbed/languages/mwEmbed.i18n.php

Modified: trunk/extensions/JS2Support/README
===================================================================
--- trunk/extensions/JS2Support/README  2010-05-12 23:12:20 UTC (rev 66316)
+++ trunk/extensions/JS2Support/README  2010-05-13 00:24:48 UTC (rev 66317)
@@ -1,10 +1,8 @@
 = JS2 Support Extension =
 
-The JS2 Support svn:externals hosts the mwEmbed library. svn does not support 
-svn:externals on files so mwEmbed.js and jsScriptLoader.php are symbolically 
linked in the
-working directory and updates are manually committed to the JS2extension.  
+The JS2 Support extension includes a ScriptLoader and associated javascript 
helper library. 
 
-the js2-work branch has been depreciated.
+The js2-work branch has been depreciated.
 
 The stand-alone mwEmbed support contains all the the stand alone mwEmbed 
modules
 and these core mwEmbed libraries. You can learn more about mwEmbed stand alone 
in 
@@ -20,10 +18,10 @@
 To add the base js2 library support simply add the following to your 
LocalSettings.php: 
 require_once( "$IP/extensions/JS2Support/JS2Support.php" );
 
-By default js2 support groups script and css requests, disable script grouping 
for debugging set: 
+By default js2 support groups script and css requests. To disable script 
grouping in your localSettings.php set:  
 $wgEnableScriptLoader = false; 
 
-If you want a fresh copy of the scripts ( and to disable minification in when 
wgEnableScriptLoader= true you can set ) 
+If you want a fresh copy of all the scripts ( and to disable minification in 
when wgEnableScriptLoader= true you can set )  
 $wgDebugJavaScript = true;
 
 == LocalSettings.php to enable all js2 extensions == 
@@ -48,7 +46,7 @@
 To add a javascript or css to the named paths ( so that the script loader can 
load it by name )
 $wgScriptLoaderNamedPaths[ 'myExtension' ] = 
'extensions/myExtension/myExtension.js';
 
-Then in your php you can inclue your with the following line:   
+Then in your php you can include your with the following line:   
 $wgOut->addScriptClass( 'myExtension' /* scriptloader named path */ , 'page'/* 
group bucket id */ );
 This lets you use the named-path for includes and gives you control over 
script grouping with the 
 grouping argument. If for example your script is included on a set of special 
pages then you could
@@ -71,45 +69,54 @@
 == Using JS2 with JS-modules ==
 
 JS Modules are reusable sets of javascript that can be dynamically configured, 
loaded and executed in 
-arbitrary javascript contexts. These libraries should have a clean separation 
of configuration,
+arbitrary application contexts. Javascript modules promote a clean separation 
of configuration,
 interface, and application flow. These modules define relative paths for 
assets and can be hosted 
-inside extensions or optionally used in stand-alone javascript applications. 
They provide a means to cleanly
-"embed" mediaWiki interfaces into application contexts. 
+inside extensions or optionally used in stand-alone javascript interfaces. 
 
-Examples include embedding a video player with timed text subtitles pulled 
from an external wiki, to
-embedding a wikiEditor toolbar on a view page. The use of "loaders" enables 
dynamic packaging of 
-modules with the intent of avoiding multiple requests, at the cost of slightly 
larger server side cache of
-combined resources. 
+The use of "loaders" enables dynamic packaging of modules with the intent of 
avoiding multiple requests, 
+for dynamically loaded interfaces.    
 
-It enables the server to deliver static configuration files that drive 
interface customizations in
+JS2 enables the server to deliver static configuration files that drive 
interface customizations in
 javascript rather than costly dynamically html output from php.
  
-== JS-module components == 
+== JS Module Components == 
 
 The three components of a js-module are  "module loaders", "module activators" 
and "library code and assets". 
 
-* "module loaders"  build the request set of the javascript and css assets for 
a given interface "module" 
-in the context of user preferences or application configuration.  
+* "module loaders"  define named paths and build the request set of the 
javascript and css assets 
+for a given interface "module". The set of requested libraries can driven by 
site configuration, 
+and user preferences. The requested set of modules can include core libraries 
like jquery.ui helpers.   
 
-* "module activators" call the module loaders in a given application context. 
For example
-an edit page or a view page may call the wikiToolBar with different module 
configuration.
+* "module activators" Call the module loaders in a given application context 
and then 
+invoke the interface or application.  
 
 * "library code and assets" These consist of library code and assets that is 
the user interface or application. 
-These libs are driven by a given configuration.    
+These libraries are driven by a given configuration.    
 
 == Example Flow and File Contents == 
 
-When an application wants to use that interface component it calls the module 
loader.
-The module loader checks relevant configuration and javascript application 
state for existing
-satisfied dependencies or browser specific libraries, then issues a single 
script-loader
-request that retrieves all the needed javascript, css and localized message 
text for 
-that interface, the returned javascript will be minfied and gziped and cached 
on the server.  
+When an application wants to use a interface component it calls the module 
loader from its activator.
+The module loader checks relevant configuration, it then issues a single 
script-loader
+request that checks javascript application state for existing satisfied 
dependencies or native browser support
+it then retrieves all the needed javascript, css and localized message text 
for that interface. 
+The returned javascript will be minfied and gziped and cached on the server. 
+The activator gets a callback that the interface library is loaded, and can 
then use that interface.
 
-Example loader.js:
+=== Example Loader loader.js:  ===
 
+Loaders should define named class paths, named "module loader" functions and 
default configuration 
+if appropriate. Style sheet assets should be named mw.style[ {styleName} ] 
this is so we can 
+register the presence of style sheets in javascript and libraries can 
dynamically
+share style sheet components.
+
 /* 
 * First we define the named script class paths
 * Each class  "mw.myJsModuleUI" defines its class name in the javascript
+* Note these named paths should be in "JSON" not javascript 
+* The scriptLoader will parse these named paths.
+* 
+* By putting these in javascript instead of php we can develop the library 
+* in "raw" file mode ( by setting wgEnableScriptLoader = false )  
 */
 mw.addClassFilePaths( {
        "mw.myJsModuleHandler" : "js/mw.myJSModuleHandler.js", 
@@ -133,13 +140,14 @@
        $j( mw ).trigger( 'LoaderMyJsModuleAddFeatures', requestSet ); 
        
        // Load the request set and run the ModuleLoader callback. 
-       mw.load( requestSet, callback) 
+       mw.load( requestSet, callback ); 
        
 });
 
-Example "Activator" 
+=== Example "Activator" MyModulePage.js === 
 /* 
-* Anytime we want to use the module we simply call the module loader
+* MyModulePage.js is included on pages that we want via normal php extension 
hooks.
+* Once we want to use the module we simply call the module loader
 */ 
 var myModuleConfig = {
        'configOption1' : mw.getConfig( 'myJsModule.configOption1' )
@@ -153,46 +161,76 @@
        $j('#targetElement').myJsModule( myModuleConfig );       
 }
 
-Example Library Code
+=== Example Library Code ===
 
 The key thing to remember about library code is that it defines a named class 
ie: 
-mw.load( 'mw.Foo' ... 
-// will load a file that includes 
-mw.Foo = function(){ ...
+a file by name 'mw.Foo.js'  would define a object named 'mw.Foo' ie something 
like:
+  
+mw.Foo = function( options ){
+       this.init( options ); 
+}
 
+mw.Foo.prototype = { 
+       'init' : function(){ /* constructor */ }
+       'drawUI' : function(){ ... }  
+} 
+
 Library code should operate off of global configuration mw.getConfig( 
'configurationOption' ) 
 and or local configuration ( where appropriate ) ie the constructor gets 
passed an options object 
 that defines named value pairs of configuration or callbacks. 
 
+The other key thing to remember about library code is to handle localization 
in some way. 
+The localization options are presented bellow
+
 == Localization ==
 
-The JS2 Localization system works similar to its php counterpart. 
-( it includes support for {{PLURAL}} transforms )
+Each javascript module hosts a {moduleName}.i18n.php file that works with the 
+existing mediaWiki translate system. Note when the script-loader populates
+the msg replacements it uses mediaWiki's wfGetMsg function so any database
+MediaWiki namespace strings ''will be'' included in your javascript messages. 
 
-To get a msg simply issue the call: 
-gM( 'msg-key', 'replacement1', 'replacement2', 'etc' );
+You have three options for packaging messages in your javascript module
 
-Note you can pass jQuery replacements in the case of links ie: 
-gM( 'msg-key', $j('<a />').text( gM( 'link-text' ) );
+1) If your javascript module is simple and your interface is mostly set in a 
single
+file you may want to load all your msgs at once.  You can get all the msgs in 
your javascript
+module's localization file by simply isssuing the call: 
+mw.includeAllModuleMsgs(); 
 
-For full documentation see: mwEmbed/languages/mw.Language.js function: 
mw.getMsg
+Putting this function call at the top of your primary library code javascript 
file will be 
+replaced with all the msgs in your modules php localization file in the 
current language. 
 
+2 ) If your code includes many sub-modules and you may want fine grain control 
over what msgs 
+are packaged when. You can define the set of msg keys it at the top of any 
javascript file.
 
-If you want ~all~ of the msgs for your module php localization file you can 
simply issue
-a call mw.includeAllMsgs() near the top of your primary library code. This 
will 
-include be replaced with all the msgs in your php localization file for your 
selected language.  
+For example: 
+mw.addMessegeKeys( ['list', 'of', 'msg-keys' ] );
 
-If your code includes many sub-modules and you want fine grain control over 
what msgs 
-are packaged when you can define the set of msg keys it at the top of any 
javascript file.
+Will be replaced by the script-loader with the localized msgs for every listed 
key. 
+  
+3) If you are doing a lot of stand alone testing it can be faster to use a 
json array
+at the top of your javascript file.   
+mw.addMesseges( { "msg-key" : "English fallback" } );
 
-You can use a list of keys: 
+  Your javascript file then becomes your developer reference English messages. 
A maintenance scripts then
+copy your English fallbacks into the php localization file for the translate 
wiki scripts to work with.  
+Running the JS2Support maintenance script "mergeJavascriptMsgs.php" will sync 
javascript into phpt files. 
 
-mw.addMessegeKeys( ['list', 'of', 'msg-keys' ] );
+This is the most complicated setup, if your unsure use the first option: 
+mw.includeAllModuleMsgs(); 
+  
+=== Accessing Msgs in Javascript ===
 
-or if you are doing a lot of stand alone testing it can be faster and simpler 
to use a json array: 
-mw.addMesseges( { "msg-key" : "english fallback" } );
+The JS2 Localization system works similar to its php counterpart. It includes
+support for {{PLURAL}} transforms. 
 
-Either way the set of messages will be localized by the scriptLoader once the 
javascript class is requested.
+To get a message simply issue the call: 
+gM( 'msg-key', 'replacement1', 'replacement2', 'etc' );
 
+Note you can pass jQuery replacements in the case of links ie: 
+gM( 'msg-key', $j('<a />').text( gM( 'link-text' ) );
 
+For full documentation see: mwEmbed/languages/mw.Language.js function: 
mw.getMsg
 
+  
+
+

Added: trunk/extensions/JS2Support/maintenance/MergeJavascriptMsg.php
===================================================================
--- trunk/extensions/JS2Support/maintenance/MergeJavascriptMsg.php              
                (rev 0)
+++ trunk/extensions/JS2Support/maintenance/MergeJavascriptMsg.php      
2010-05-13 00:24:48 UTC (rev 66317)
@@ -0,0 +1,136 @@
+<?php
+/**
+* Merges in JavaScript json msgs into respective module i18n.php file
+*
+* If your script uses JSON msg string with the This script helps merge msgs 
between javascript and php
+*
+*
+* @file
+* @ingroup Maintenance
+*/
+
+# Abort if called from a web server
+if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
+       print "This script must be run from the command line\n";
+       exit();
+}
+// Change to the core maintenance script directory:
+require_once( dirname( __FILE__ ) . '/../../../maintenance/Maintenance.php' );
+
+
+class MergeJavascriptMsg extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Merge Javascript JSON English messages 
to PHP";
+       }
+
+       public function execute() {
+               global $wgExtensionJavascriptLoader, $IP;
+               foreach ( $wgExtensionJavascriptLoader as $loaderPath ){
+
+                       $modulePath = dirname( $loaderPath );
+                       $i18nFilePath = false;
+                       $moduleAbsoultePath = $IP ."/". $modulePath;
+
+                       // Look for the i18n.php file next to the loader
+                       if ( $handle = opendir( $moduleAbsoultePath  ) ) {
+                           // Look for the i18n.php file
+                           while (false !== ($file = readdir($handle))) {
+                               if( substr( $file, -8 ) == 'i18n.php' ){
+                                       $i18nFilePath = $moduleAbsoultePath 
.'/'. $file;
+                               }
+                           }
+                           if( ! $i18nFilePath ) {
+                                       $this->error( "Could not find i18n file 
in directory: $moduleAbsoultePath \n" );
+                           }
+
+                       } else {
+                               $this->error( "Could not read path: 
$moduleAbsoultePath \n" );
+                       }
+
+                       // Clear the local message var
+                       $this->messages = array();
+
+                       // Load up the messages for the i18n file
+                       require_once( $i18nFilePath );
+
+                       //Update the local messages var
+                       $this->messages = $messages['en'];
+
+                       // Recurse on every file in the module directory
+                       $objects = new RecursiveIteratorIterator( new 
RecursiveDirectoryIterator( $moduleAbsoultePath ), 
RecursiveIteratorIterator::SELF_FIRST );
+                       foreach ( $objects as $fname => $object ) {
+                               $this->processFilePath( $fname );
+                       }
+
+                       // Merge the msg back into the module php file
+                       $this->mergeModuleMsg( $i18nFilePath );
+               }
+       }
+       /**
+       * mergeModuleMsg
+       */
+       function mergeModuleMsg( $i18nFilePath ) {
+               $mwSTART_MSG_KEY = '$messages[\'en\'] = array(';
+               $mwEND_MSG_KEY = ',
+);';
+
+               $rawLangFile = file_get_contents( $i18nFilePath );
+               $startInx = strpos( $rawLangFile, $mwSTART_MSG_KEY ) + strlen( 
$mwSTART_MSG_KEY );
+               $endInx = strpos( $rawLangFile, $mwEND_MSG_KEY ) + 1;
+               if ( $startInx === false || $endInx === false ) {
+                       $this->error( "Could not find $mwSTART_MSG_KEY or 
$mwEND_MSG_KEY in mwEmbed.i18n.php\n" );
+               }
+               $preFile = substr( $rawLangFile, 0, $startInx );
+               $postFile = substr( $rawLangFile, $endInx );
+
+               $outPhp="\n";
+               foreach($this->messages as $msgKey => $msgValue ){
+                       $outPhp .= "\t'{$msgKey}' => '" . str_replace( '\'', 
'\\\'', $msgValue ) . "',\n";
+               }
+               // update the file and report progress
+               file_put_contents( $i18nFilePath, $preFile . "\n\t". trim( 
$outPhp ) . $postFile );
+               $this->output( "Updated File: " . $i18nFilePath . "\n" );
+       }
+
+       /**
+        * Process a file path for msgs
+        */
+       function processFilePath( $fname ){
+               // Only work on javascript files:
+               if ( substr( $fname, - 3 ) != '.js' ){
+                       return false;
+               }
+               $jsFileText = file_get_contents( $fname );
+               // Grab all the javascript msgs
+               if ( preg_match( '/mw\.addMessages\s*\(\s*{(.*)}\s*\)\s*/siU',
+                       $jsFileText,
+                       $matches ) )
+               {
+                       $jsMsgs = json_decode( '{' . $matches[1] . '}', true );
+                       // Merge into the English  $messages var
+                       if( $jsMsgs ){
+                               foreach( $jsMsgs as $msgKey => $msgValue ){
+                                       if( isset( $this->messages[$msgKey] ) &&
+                                               $this->messages[$msgKey] != 
$msgValue
+                                        ) {
+                                               $this->output( "Warning:: 
$msgKey does not match \nphp:" .
+                                                       
$this->messages[$msgKey] . "\n != \njs:" . $msgValue . "\n\n");
+
+                                               // NOTE we could force merge 
from js here
+                                       } else {
+                                               $this->messages[ $msgKey ] = 
$msgValue;
+                                       }
+                               }
+                       } else {
+                               $this->output( "Error could not decode json in 
$fname \n");
+                       }
+               } else {
+                       // skip file no msgs
+               }
+               // Check against module messages
+       }
+}
+
+$maintClass = "MergeJavascriptMsg";
+require_once( DO_MAINTENANCE );

Modified: trunk/extensions/JS2Support/mwEmbed/includes/jsClassLoader.php
===================================================================
--- trunk/extensions/JS2Support/mwEmbed/includes/jsClassLoader.php      
2010-05-12 23:12:20 UTC (rev 66316)
+++ trunk/extensions/JS2Support/mwEmbed/includes/jsClassLoader.php      
2010-05-13 00:24:48 UTC (rev 66317)
@@ -37,6 +37,7 @@
                        return false;
                }
                self::$classesLoaded = true;
+
                // Start the profiler if running
                $fname = 'jsClassLoader::loadClassPaths';
                wfProfileIn( $fname );
@@ -44,7 +45,7 @@
 
                $mwEmbedAbsolutePath = ( $wgMwEmbedDirectory == '' ) ? $IP :  
$IP .'/' .$wgMwEmbedDirectory;
                // Add the mwEmbed localizations
-               $wgExtensionMessagesFiles[ 'mwEmbed' ] = $mwEmbedAbsolutePath . 
'/languages/mwEmbed.i18n.php';
+               $wgExtensionMessagesFiles[ 'mwEmbed' ] = $mwEmbedAbsolutePath . 
'/mwEmbed.i18n.php';
 
 
                // Load javascript classes from mwEmbed.js
@@ -75,6 +76,13 @@
                        $fileContent
                );
 
+               // Change to the root mediawiki directory ( loader.js paths are 
relative to root mediawiki directory )
+               // ( helpful for when running maintenance scripts )
+               if( defined( 'DO_MAINTENANCE' ) ) {
+                       $initialPath = getcwd();
+                       chdir( $IP );
+               }
+
                // Get all the classes from the enabled mwEmbed modules folder
                foreach( self::$moduleList as  $na => $moduleName){
                        $relativeSlash = ( $wgMwEmbedDirectory == '' )? '' : 
'/';
@@ -88,6 +96,10 @@
                        self::proccessModulePath( $modulePath );
                }
 
+               if( defined( 'DO_MAINTENANCE' ) ) {
+                       chdir( $initialPath );
+               }
+
                wfProfileOut( $fname );
        }
        /**

Deleted: trunk/extensions/JS2Support/mwEmbed/languages/mwEmbed.i18n.php
===================================================================
--- trunk/extensions/JS2Support/mwEmbed/languages/mwEmbed.i18n.php      
2010-05-12 23:12:20 UTC (rev 66316)
+++ trunk/extensions/JS2Support/mwEmbed/languages/mwEmbed.i18n.php      
2010-05-13 00:24:48 UTC (rev 66317)
@@ -1,272 +0,0 @@
-<?php
-/**
- * Localization file for mwEmbed.js
- */
-$messages['en'] = array(
-       'mwe-loading_txt' => 'Loading ...',
-       'mwe-size-gigabytes' => '$1 GB',
-       'mwe-size-megabytes' => '$1 MB',
-       'mwe-size-kilobytes' => '$1 K',
-       'mwe-size-bytes' => '$1 B',
-       'mwe-error_load_lib' => 'Error: JavaScript $1 was not retrievable or 
does not define $2',
-       'mwe-apiproxy-setup' => 'Setting up API proxy',
-       'mwe-load-drag-item' => 'Loading dragged item',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Cancel',
-       'mwe-enable-gadget' => 'Enable multimedia beta ( mwEmbed ) for all 
pages',
-       'mwe-enable-gadget-done' => 'multimedia beta gadget has been enabled',
-       'mwe-must-login-gadget' => 'To enable gadget you must <a target="_new" 
href="$1">login</a>',
-       'mwe-test-plural' => 'I ran {{PLURAL:$1|$1 test|$1 tests}}',
-);
-$messages['af'] = array(
-       'mwe-loading_txt' => 'laai ...',
-       'mwe-error_load_lib' => 'Fout: JavaScript $1 kon nie gevind word of 
definieer nie $2 nie',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Kanselleer',
-);
-$messages['ar'] = array(
-       'mwe-loading_txt' => 'يحمل...',
-       'mwe-cancel' => 'ألغِ',
-);
-$messages['be-tarask'] = array(
-       'mwe-loading_txt' => 'загрузка …',
-       'mwe-error_load_lib' => 'Памылка: JavaScript $1 не даступны альбо не 
вызначае $2',
-       'mwe-apiproxy-setup' => 'Устаноўка API-проксі',
-       'mwe-load-drag-item' => 'Загрузка перанесенага элемэнту',
-       'mwe-ok' => 'Добра',
-       'mwe-cancel' => 'Адмяніць',
-);
-$messages['br'] = array(
-       'mwe-loading_txt' => 'o kargañ...',
-       'mwe-ok' => 'Mat eo',
-       'mwe-cancel' => 'Nullañ',
-);
-$messages['bs'] = array(
-       'mwe-loading_txt' => 'učitavam ...',
-       'mwe-apiproxy-setup' => 'Postavljanje API proksija',
-       'mwe-ok' => 'U redu',
-       'mwe-cancel' => 'Odustani',
-);
-$messages['cs'] = array(
-       'mwe-loading_txt' => 'Načítá se …',
-       'mwe-cancel' => 'Storno',
-);
-$messages['cy'] = array(
-       'mwe-loading_txt' => 'wrthi\'n llwytho ...',
-);
-$messages['de'] = array(
-       'mwe-loading_txt' => 'lade …',
-       'mwe-error_load_lib' => 'Fehler: JavaScript $1 war nicht abrufbar oder 
lässt $2 nicht zu',
-       'mwe-apiproxy-setup' => 'API-Proxy-Konfiguration',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Abbrechen',
-);
-$messages['diq'] = array(
-       'mwe-loading_txt' => 'bar beno...',
-       'mwe-error_load_lib' => 'xeta: $1 JavaScript re nêresiyeno ya zi pê 
$2yi şınasnaye niyo.',
-       'mwe-apiproxy-setup' => 'proxyê APIyi eyar beno',
-       'mwe-load-drag-item' => 'unsur bar beno',
-       'mwe-ok' => 'temam',
-       'mwe-cancel' => 'iptal',
-);
-$messages['dsb'] = array(
-       'mwe-loading_txt' => 'zacytujo se ...',
-       'mwe-error_load_lib' => 'Zmólka: JavaScript $1 njejo wótwołujobny był 
abo njedefiněrujo $2',
-       'mwe-apiproxy-setup' => 'Proksy API zarědowaś',
-       'mwe-load-drag-item' => 'Wlecony zapisk se zacytujo',
-       'mwe-ok' => 'W pórědku',
-       'mwe-cancel' => 'Pśetergnuś',
-);
-$messages['el'] = array(
-       'mwe-loading_txt' => 'φόρτωση ...',
-);
-$messages['eo'] = array(
-       'mwe-loading_txt' => 'ŝarĝante ...',
-       'mwe-cancel' => 'Nuligi',
-);
-$messages['es'] = array(
-       'mwe-loading_txt' => 'cargando ...',
-       'mwe-load-drag-item' => 'Cargando el objeto arrastrado',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Cancelar',
-);
-$messages['eu'] = array(
-       'mwe-loading_txt' => 'Kargatzen ...',
-       'mwe-ok' => 'Ados',
-       'mwe-cancel' => 'Ezeztatu',
-);
-$messages['fi'] = array(
-       'mwe-cancel' => 'Peruuta',
-);
-$messages['fr'] = array(
-       'mwe-loading_txt' => 'chargement ...',
-       'mwe-error_load_lib' => 'Erreur : JavaScript $1 n\'a pas pu être trouvé 
ou ne définit pas $2',
-       'mwe-apiproxy-setup' => 'Configuration du proxy API',
-       'mwe-load-drag-item' => 'Chargement de l’élément dépose',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Annuler',
-);
-$messages['gl'] = array(
-       'mwe-loading_txt' => 'cargando...',
-       'mwe-error_load_lib' => 'Erro: o JavaScript $1 non se puido atopar ou 
non definía $2',
-       'mwe-apiproxy-setup' => 'Configurando o proxy API',
-       'mwe-load-drag-item' => 'Cargando o elemento arrastrado',
-       'mwe-ok' => 'De acordo',
-       'mwe-cancel' => 'Cancelar',
-);
-$messages['gsw'] = array(
-       'mwe-loading_txt' => 'Am Lade ...',
-       'mwe-error_load_lib' => 'Fähler: s JavaScript $1 het nit chenne glade 
wäre oder s losst $2 nit zue',
-       'mwe-apiproxy-setup' => 'API-Proxy-Konfiguration',
-       'mwe-load-drag-item' => 'Am Lade vu mitgschleipfte Poschte',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Abbräche',
-);
-$messages['he'] = array(
-       'mwe-loading_txt' => 'בטעינה ...',
-       'mwe-error_load_lib' => 'שגיאה: לא ניתן היה לטעון את ספריית 
ה־JavaScript בשם $1 או שהיא אינה מגדירה את $2',
-);
-$messages['hsb'] = array(
-       'mwe-loading_txt' => 'začituje so ...',
-       'mwe-size-gigabytes' => '$1 GB',
-       'mwe-size-megabytes' => '$1 MB',
-       'mwe-size-kilobytes' => '$1 KB',
-       'mwe-size-bytes' => '$1 B',
-       'mwe-error_load_lib' => 'Zmylk: JavaScript $1 njeda so wotwołać abo 
njedefinuje $2',
-       'mwe-apiproxy-setup' => 'Proksy API zarjadować',
-       'mwe-load-drag-item' => 'Wlečeny zapisk so začituje',
-       'mwe-ok' => 'W porjadku',
-       'mwe-cancel' => 'Přetorhnyć',
-);
-$messages['hu'] = array(
-       'mwe-loading_txt' => 'betöltés…',
-       'mwe-error_load_lib' => 'Hiba: a(z) $1 JavaScript-fájl nem elérhető, 
vagy nem definiálja a(z) $2 osztályt.',
-       'mwe-apiproxy-setup' => 'API proxy beállítása',
-       'mwe-load-drag-item' => 'Vonszolt elem betöltése',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Mégse',
-);
-$messages['ia'] = array(
-       'mwe-loading_txt' => 'cargamento ...',
-       'mwe-error_load_lib' => 'Error: JavaScript $1 non esseva recuperabile o 
non defini $2',
-       'mwe-apiproxy-setup' => 'Configuration del proxy pro le API',
-       'mwe-load-drag-item' => 'Cargamento del file trahite',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Cancella',
-);
-$messages['id'] = array(
-       'mwe-loading_txt' => 'memuat...',
-       'mwe-error_load_lib' => 'Kesalahan: JavaScript $1 tidak dapat diambil 
atau tidak mendefinisikan $2',
-       'mwe-apiproxy-setup' => 'Menyiapkan proksi API',
-       'mwe-load-drag-item' => 'Memuat butir terseret',
-       'mwe-ok' => 'Oke',
-       'mwe-cancel' => 'Batalkan',
-);
-$messages['it'] = array(
-       'mwe-cancel' => 'Annulla',
-);
-$messages['ja'] = array(
-       'mwe-loading_txt' => '読み込み中 …',
-       'mwe-error_load_lib' => 'エラー:JavaScript $1 は参照不能か、$2 を定義していません。',
-       'mwe-apiproxy-setup' => 'API プロキシーをセットアップ中',
-       'mwe-load-drag-item' => 'ドラッグされた項目を読み込み中',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => '中止',
-);
-$messages['ko'] = array(
-       'mwe-loading_txt' => '불러오는 중...',
-       'mwe-cancel' => '취소',
-);
-$messages['ksh'] = array(
-       'mwe-loading_txt' => 'aam Laade …',
-       'mwe-size-gigabytes' => '$1&nbsp;GB',
-       'mwe-size-megabytes' => '$1&nbsp;MB',
-       'mwe-size-kilobytes' => '$1&nbsp;KB',
-       'mwe-size-bytes' => '$1&nbsp;Bytes',
-       'mwe-error_load_lib' => 'Fähler: Dat JavaSkrep „<code 
lang="en">$1</code>“ wohr nit ze laade udder et leiht „<code 
lang="en">$2</code>“ nit faß.',
-       'mwe-cancel' => 'Affbräsche',
-);
-$messages['lb'] = array(
-       'mwe-loading_txt' => 'lueden ...',
-       'mwe-apiproxy-setup' => 'API-Proxy astellen',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Ofbriechen',
-);
-$messages['ml'] = array(
-       'mwe-loading_txt' => 'ശേഖരിക്കുന്നു ...',
-       'mwe-error_load_lib' => 'പിശക്: ജാവാസ്ക്രിപ്റ്റ് $1 ശേഖരിക്കാൻ 
കഴിഞ്ഞില്ല അല്ലെങ്കിൽ $2 നിർവ്വചിച്ചിട്ടില്ല',
-       'mwe-apiproxy-setup' => 'എ.പി.ഐ. പ്രോക്സി സജ്ജീകരിക്കുക',
-       'mwe-load-drag-item' => 'വലിച്ചിട്ടത് ശേഖരിക്കുന്നു',
-       'mwe-ok' => 'ശരി',
-       'mwe-cancel' => 'റദ്ദാക്കുക',
-);
-$messages['nl'] = array(
-       'mwe-loading_txt' => 'bezig met laden ...',
-       'mwe-error_load_lib' => 'Fout: JavaScript $1 kon niet opgehaald worden 
of definieert $2 niet',
-       'mwe-apiproxy-setup' => 'Bezig met het opzetten van een API-proxy',
-       'mwe-load-drag-item' => 'Bezig met het laden van het gesleepte bestand',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Annuleren',
-);
-$messages['oc'] = array(
-       'mwe-loading_txt' => 'cargament ...',
-       'mwe-error_load_lib' => 'Error : JavaScript $1 a pas pogut èsser trobat 
o definís pas $2',
-       'mwe-apiproxy-setup' => 'Configuracion del proxy API',
-       'mwe-load-drag-item' => 'Cargament de l’element depausat',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Anullar',
-);
-$messages['pdc'] = array(
-       'mwe-ok' => 'OK',
-);
-$messages['pl'] = array(
-       'mwe-loading_txt' => 'ładowanie ...',
-       'mwe-error_load_lib' => 'Błąd – W plik JavaScript $1 brak jest 
możliwości pobrania oraz definicji $2',
-);
-$messages['pt'] = array(
-       'mwe-loading_txt' => 'A carregar ...',
-       'mwe-error_load_lib' => 'Erro: O JavaScript $1 não pode ser importado 
ou não define $2',
-       'mwe-apiproxy-setup' => 'A preparar o \'\'proxy\'\' da API',
-       'mwe-load-drag-item' => 'Carregando o objecto arrastado',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Cancelar',
-);
-$messages['ru'] = array(
-       'mwe-loading_txt' => 'загрузка …',
-       'mwe-error_load_lib' => 'Ошибка. JavaScript $1 не доступен или не 
определяет $2',
-       'mwe-apiproxy-setup' => 'Настройка API-прокси',
-       'mwe-load-drag-item' => 'Загрузка перетащенного элемента',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Отмена',
-);
-$messages['sk'] = array(
-       'mwe-loading_txt' => 'načítava sa ...',
-       'mwe-error_load_lib' => 'Error: JavaScript $1 nebolo možné získať alebo 
neobsahuje definíciu $2',
-);
-$messages['sv'] = array(
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Avbryt',
-);
-$messages['te'] = array(
-       'mwe-ok' => 'సరే',
-       'mwe-cancel' => 'రద్దుచేయి',
-);
-$messages['tr'] = array(
-       'mwe-loading_txt' => 'yükleniyor ...',
-       'mwe-error_load_lib' => 'Hata: $1 JavaScripti erişilebilir değil ya da 
$2 tanımlı değil',
-       'mwe-apiproxy-setup' => 'API vekili ayarlanıyor',
-       'mwe-load-drag-item' => 'Sürüklenen öğe yükleniyor',
-       'mwe-ok' => 'Tamam',
-       'mwe-cancel' => 'İptal',
-);
-$messages['vec'] = array(
-       'mwe-loading_txt' => 'so\' drio cargar ...',
-       'mwe-ok' => 'Va ben',
-       'mwe-cancel' => 'Anula',
-);
-$messages['vi'] = array(
-       'mwe-loading_txt' => 'đang tải …',
-       'mwe-size-kilobytes' => '$1 kB',
-       'mwe-ok' => 'OK',
-       'mwe-cancel' => 'Hủy bỏ',
-);

Copied: trunk/extensions/JS2Support/mwEmbed/mwEmbed.i18n.php (from rev 66306, 
trunk/extensions/JS2Support/mwEmbed/languages/mwEmbed.i18n.php)
===================================================================
--- trunk/extensions/JS2Support/mwEmbed/mwEmbed.i18n.php                        
        (rev 0)
+++ trunk/extensions/JS2Support/mwEmbed/mwEmbed.i18n.php        2010-05-13 
00:24:48 UTC (rev 66317)
@@ -0,0 +1,272 @@
+<?php
+/**
+ * Localization file for mwEmbed.js
+ */
+$messages['en'] = array(
+       'mwe-loading_txt' => 'Loading ...',
+       'mwe-size-gigabytes' => '$1 GB',
+       'mwe-size-megabytes' => '$1 MB',
+       'mwe-size-kilobytes' => '$1 K',
+       'mwe-size-bytes' => '$1 B',
+       'mwe-error_load_lib' => 'Error: JavaScript $1 was not retrievable or 
does not define $2',
+       'mwe-apiproxy-setup' => 'Setting up API proxy',
+       'mwe-load-drag-item' => 'Loading dragged item',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Cancel',
+       'mwe-enable-gadget' => 'Enable multimedia beta ( mwEmbed ) for all 
pages',
+       'mwe-enable-gadget-done' => 'multimedia beta gadget has been enabled',
+       'mwe-must-login-gadget' => 'To enable gadget you must <a target="_new" 
href="$1">login</a>',
+       'mwe-test-plural' => 'I ran {{PLURAL:$1|$1 test|$1 tests}}',
+);
+$messages['af'] = array(
+       'mwe-loading_txt' => 'laai ...',
+       'mwe-error_load_lib' => 'Fout: JavaScript $1 kon nie gevind word of 
definieer nie $2 nie',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Kanselleer',
+);
+$messages['ar'] = array(
+       'mwe-loading_txt' => 'يحمل...',
+       'mwe-cancel' => 'ألغِ',
+);
+$messages['be-tarask'] = array(
+       'mwe-loading_txt' => 'загрузка …',
+       'mwe-error_load_lib' => 'Памылка: JavaScript $1 не даступны альбо не 
вызначае $2',
+       'mwe-apiproxy-setup' => 'Устаноўка API-проксі',
+       'mwe-load-drag-item' => 'Загрузка перанесенага элемэнту',
+       'mwe-ok' => 'Добра',
+       'mwe-cancel' => 'Адмяніць',
+);
+$messages['br'] = array(
+       'mwe-loading_txt' => 'o kargañ...',
+       'mwe-ok' => 'Mat eo',
+       'mwe-cancel' => 'Nullañ',
+);
+$messages['bs'] = array(
+       'mwe-loading_txt' => 'učitavam ...',
+       'mwe-apiproxy-setup' => 'Postavljanje API proksija',
+       'mwe-ok' => 'U redu',
+       'mwe-cancel' => 'Odustani',
+);
+$messages['cs'] = array(
+       'mwe-loading_txt' => 'Načítá se …',
+       'mwe-cancel' => 'Storno',
+);
+$messages['cy'] = array(
+       'mwe-loading_txt' => 'wrthi\'n llwytho ...',
+);
+$messages['de'] = array(
+       'mwe-loading_txt' => 'lade …',
+       'mwe-error_load_lib' => 'Fehler: JavaScript $1 war nicht abrufbar oder 
lässt $2 nicht zu',
+       'mwe-apiproxy-setup' => 'API-Proxy-Konfiguration',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Abbrechen',
+);
+$messages['diq'] = array(
+       'mwe-loading_txt' => 'bar beno...',
+       'mwe-error_load_lib' => 'xeta: $1 JavaScript re nêresiyeno ya zi pê 
$2yi şınasnaye niyo.',
+       'mwe-apiproxy-setup' => 'proxyê APIyi eyar beno',
+       'mwe-load-drag-item' => 'unsur bar beno',
+       'mwe-ok' => 'temam',
+       'mwe-cancel' => 'iptal',
+);
+$messages['dsb'] = array(
+       'mwe-loading_txt' => 'zacytujo se ...',
+       'mwe-error_load_lib' => 'Zmólka: JavaScript $1 njejo wótwołujobny był 
abo njedefiněrujo $2',
+       'mwe-apiproxy-setup' => 'Proksy API zarědowaś',
+       'mwe-load-drag-item' => 'Wlecony zapisk se zacytujo',
+       'mwe-ok' => 'W pórědku',
+       'mwe-cancel' => 'Pśetergnuś',
+);
+$messages['el'] = array(
+       'mwe-loading_txt' => 'φόρτωση ...',
+);
+$messages['eo'] = array(
+       'mwe-loading_txt' => 'ŝarĝante ...',
+       'mwe-cancel' => 'Nuligi',
+);
+$messages['es'] = array(
+       'mwe-loading_txt' => 'cargando ...',
+       'mwe-load-drag-item' => 'Cargando el objeto arrastrado',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Cancelar',
+);
+$messages['eu'] = array(
+       'mwe-loading_txt' => 'Kargatzen ...',
+       'mwe-ok' => 'Ados',
+       'mwe-cancel' => 'Ezeztatu',
+);
+$messages['fi'] = array(
+       'mwe-cancel' => 'Peruuta',
+);
+$messages['fr'] = array(
+       'mwe-loading_txt' => 'chargement ...',
+       'mwe-error_load_lib' => 'Erreur : JavaScript $1 n\'a pas pu être trouvé 
ou ne définit pas $2',
+       'mwe-apiproxy-setup' => 'Configuration du proxy API',
+       'mwe-load-drag-item' => 'Chargement de l’élément dépose',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Annuler',
+);
+$messages['gl'] = array(
+       'mwe-loading_txt' => 'cargando...',
+       'mwe-error_load_lib' => 'Erro: o JavaScript $1 non se puido atopar ou 
non definía $2',
+       'mwe-apiproxy-setup' => 'Configurando o proxy API',
+       'mwe-load-drag-item' => 'Cargando o elemento arrastrado',
+       'mwe-ok' => 'De acordo',
+       'mwe-cancel' => 'Cancelar',
+);
+$messages['gsw'] = array(
+       'mwe-loading_txt' => 'Am Lade ...',
+       'mwe-error_load_lib' => 'Fähler: s JavaScript $1 het nit chenne glade 
wäre oder s losst $2 nit zue',
+       'mwe-apiproxy-setup' => 'API-Proxy-Konfiguration',
+       'mwe-load-drag-item' => 'Am Lade vu mitgschleipfte Poschte',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Abbräche',
+);
+$messages['he'] = array(
+       'mwe-loading_txt' => 'בטעינה ...',
+       'mwe-error_load_lib' => 'שגיאה: לא ניתן היה לטעון את ספריית 
ה־JavaScript בשם $1 או שהיא אינה מגדירה את $2',
+);
+$messages['hsb'] = array(
+       'mwe-loading_txt' => 'začituje so ...',
+       'mwe-size-gigabytes' => '$1 GB',
+       'mwe-size-megabytes' => '$1 MB',
+       'mwe-size-kilobytes' => '$1 KB',
+       'mwe-size-bytes' => '$1 B',
+       'mwe-error_load_lib' => 'Zmylk: JavaScript $1 njeda so wotwołać abo 
njedefinuje $2',
+       'mwe-apiproxy-setup' => 'Proksy API zarjadować',
+       'mwe-load-drag-item' => 'Wlečeny zapisk so začituje',
+       'mwe-ok' => 'W porjadku',
+       'mwe-cancel' => 'Přetorhnyć',
+);
+$messages['hu'] = array(
+       'mwe-loading_txt' => 'betöltés…',
+       'mwe-error_load_lib' => 'Hiba: a(z) $1 JavaScript-fájl nem elérhető, 
vagy nem definiálja a(z) $2 osztályt.',
+       'mwe-apiproxy-setup' => 'API proxy beállítása',
+       'mwe-load-drag-item' => 'Vonszolt elem betöltése',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Mégse',
+);
+$messages['ia'] = array(
+       'mwe-loading_txt' => 'cargamento ...',
+       'mwe-error_load_lib' => 'Error: JavaScript $1 non esseva recuperabile o 
non defini $2',
+       'mwe-apiproxy-setup' => 'Configuration del proxy pro le API',
+       'mwe-load-drag-item' => 'Cargamento del file trahite',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Cancella',
+);
+$messages['id'] = array(
+       'mwe-loading_txt' => 'memuat...',
+       'mwe-error_load_lib' => 'Kesalahan: JavaScript $1 tidak dapat diambil 
atau tidak mendefinisikan $2',
+       'mwe-apiproxy-setup' => 'Menyiapkan proksi API',
+       'mwe-load-drag-item' => 'Memuat butir terseret',
+       'mwe-ok' => 'Oke',
+       'mwe-cancel' => 'Batalkan',
+);
+$messages['it'] = array(
+       'mwe-cancel' => 'Annulla',
+);
+$messages['ja'] = array(
+       'mwe-loading_txt' => '読み込み中 …',
+       'mwe-error_load_lib' => 'エラー:JavaScript $1 は参照不能か、$2 を定義していません。',
+       'mwe-apiproxy-setup' => 'API プロキシーをセットアップ中',
+       'mwe-load-drag-item' => 'ドラッグされた項目を読み込み中',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => '中止',
+);
+$messages['ko'] = array(
+       'mwe-loading_txt' => '불러오는 중...',
+       'mwe-cancel' => '취소',
+);
+$messages['ksh'] = array(
+       'mwe-loading_txt' => 'aam Laade …',
+       'mwe-size-gigabytes' => '$1&nbsp;GB',
+       'mwe-size-megabytes' => '$1&nbsp;MB',
+       'mwe-size-kilobytes' => '$1&nbsp;KB',
+       'mwe-size-bytes' => '$1&nbsp;Bytes',
+       'mwe-error_load_lib' => 'Fähler: Dat JavaSkrep „<code 
lang="en">$1</code>“ wohr nit ze laade udder et leiht „<code 
lang="en">$2</code>“ nit faß.',
+       'mwe-cancel' => 'Affbräsche',
+);
+$messages['lb'] = array(
+       'mwe-loading_txt' => 'lueden ...',
+       'mwe-apiproxy-setup' => 'API-Proxy astellen',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Ofbriechen',
+);
+$messages['ml'] = array(
+       'mwe-loading_txt' => 'ശേഖരിക്കുന്നു ...',
+       'mwe-error_load_lib' => 'പിശക്: ജാവാസ്ക്രിപ്റ്റ് $1 ശേഖരിക്കാൻ 
കഴിഞ്ഞില്ല അല്ലെങ്കിൽ $2 നിർവ്വചിച്ചിട്ടില്ല',
+       'mwe-apiproxy-setup' => 'എ.പി.ഐ. പ്രോക്സി സജ്ജീകരിക്കുക',
+       'mwe-load-drag-item' => 'വലിച്ചിട്ടത് ശേഖരിക്കുന്നു',
+       'mwe-ok' => 'ശരി',
+       'mwe-cancel' => 'റദ്ദാക്കുക',
+);
+$messages['nl'] = array(
+       'mwe-loading_txt' => 'bezig met laden ...',
+       'mwe-error_load_lib' => 'Fout: JavaScript $1 kon niet opgehaald worden 
of definieert $2 niet',
+       'mwe-apiproxy-setup' => 'Bezig met het opzetten van een API-proxy',
+       'mwe-load-drag-item' => 'Bezig met het laden van het gesleepte bestand',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Annuleren',
+);
+$messages['oc'] = array(
+       'mwe-loading_txt' => 'cargament ...',
+       'mwe-error_load_lib' => 'Error : JavaScript $1 a pas pogut èsser trobat 
o definís pas $2',
+       'mwe-apiproxy-setup' => 'Configuracion del proxy API',
+       'mwe-load-drag-item' => 'Cargament de l’element depausat',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Anullar',
+);
+$messages['pdc'] = array(
+       'mwe-ok' => 'OK',
+);
+$messages['pl'] = array(
+       'mwe-loading_txt' => 'ładowanie ...',
+       'mwe-error_load_lib' => 'Błąd – W plik JavaScript $1 brak jest 
możliwości pobrania oraz definicji $2',
+);
+$messages['pt'] = array(
+       'mwe-loading_txt' => 'A carregar ...',
+       'mwe-error_load_lib' => 'Erro: O JavaScript $1 não pode ser importado 
ou não define $2',
+       'mwe-apiproxy-setup' => 'A preparar o \'\'proxy\'\' da API',
+       'mwe-load-drag-item' => 'Carregando o objecto arrastado',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Cancelar',
+);
+$messages['ru'] = array(
+       'mwe-loading_txt' => 'загрузка …',
+       'mwe-error_load_lib' => 'Ошибка. JavaScript $1 не доступен или не 
определяет $2',
+       'mwe-apiproxy-setup' => 'Настройка API-прокси',
+       'mwe-load-drag-item' => 'Загрузка перетащенного элемента',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Отмена',
+);
+$messages['sk'] = array(
+       'mwe-loading_txt' => 'načítava sa ...',
+       'mwe-error_load_lib' => 'Error: JavaScript $1 nebolo možné získať alebo 
neobsahuje definíciu $2',
+);
+$messages['sv'] = array(
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Avbryt',
+);
+$messages['te'] = array(
+       'mwe-ok' => 'సరే',
+       'mwe-cancel' => 'రద్దుచేయి',
+);
+$messages['tr'] = array(
+       'mwe-loading_txt' => 'yükleniyor ...',
+       'mwe-error_load_lib' => 'Hata: $1 JavaScripti erişilebilir değil ya da 
$2 tanımlı değil',
+       'mwe-apiproxy-setup' => 'API vekili ayarlanıyor',
+       'mwe-load-drag-item' => 'Sürüklenen öğe yükleniyor',
+       'mwe-ok' => 'Tamam',
+       'mwe-cancel' => 'İptal',
+);
+$messages['vec'] = array(
+       'mwe-loading_txt' => 'so\' drio cargar ...',
+       'mwe-ok' => 'Va ben',
+       'mwe-cancel' => 'Anula',
+);
+$messages['vi'] = array(
+       'mwe-loading_txt' => 'đang tải …',
+       'mwe-size-kilobytes' => '$1 kB',
+       'mwe-ok' => 'OK',
+       'mwe-cancel' => 'Hủy bỏ',
+);


Property changes on: trunk/extensions/JS2Support/mwEmbed/mwEmbed.i18n.php
___________________________________________________________________
Added: svn:mergeinfo
   + 



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to