So I was running into the problem of localizing the messages for the 
add_media_wizard & mv_embed & associated libraries. So I have taken a 
first pass at witting the script server (that I had previously 
described) http://tinyurl.com/ae44vd  Below is a description of how it 
works.  the code is in the svn http://tinyurl.com/darmme ...

I think it would be good to consider wider usage or at least turning it 
on sometime soon so I can deploy the add_media_wizard as a multi-lingual 
gadget. I am happy to volunteer to write a basic patch for putting it in 
the root.  MediaWiki folder. (since its another entry point I imagine it 
should go in the root)

I have put a copy of this desc on 
http://www.mediawiki.org/wiki/ScriptLoader  ... let me know if there is 
a better place to put that on mediaWiki

== Primary Motivation: ==
We need a script server to package language text into javascript. When a 
user invokes a interface component say the add media wizard we don't 
want to pull the entire interface code base and all the messages at 
once. Instead we just want to grab enough to display the current 
interface interaction. Once the user click on some tab say the 
'archive.org search' we then want to import the code to run the 
archive.org search and the localized messages specific to that interface 
component. In other words we don't want to package all the message text 
in the html output of the initial page because in their are lots of 
possible interface interactions from any given point of invoking the 
user interface.

== Secondary Benefits ==
If we are ruining all the javascript though a php script might as well 
group requests, minify; gzip; use the local file cache system; send 
headers to cache forever on the squids, and we make each javascript 
request unique based on svn version and avoid re-validate requests. All 
these combined do speed things up a good deal on the first time a user 
loads page.

== How to use==
In your Global settings you add to the global wgJSAutoloadClasses 
variable something like for every javascript class you want to load.
$wgJSAutoloadClasses['mv_embed'] =  
'/local/path/to/my/javascript/mv_embed.js';   

then at the top of mv_embed.js you would put something like:
loadGM({
    "msg_key":"Fall-back text if script server is disabled"
       ...
}
note the json variable that you pass to loadGM has to be valid JSON (not 
javascript)  or php will complain.

Then in your message file you put the normal msg key pairs:
"msg_key":"My localized text",

Right now we only support basic $1 replace ... obviously things get 
tricky with contextual wiki-text type replacements. (don't use that in 
js messages)

Then you can modify your head javascript include: with something like:
if( $wgEnableScriptLoader ){
    $unique_req_param   = SVN_VERSION
    $debug_param = ($mvgJSDebug) ? '&debug=true' : '';   
    $wgOut->addScript(... mvwScriptLoader.php?" .
                                
"class=all_the_class_i_need_separated_by_commas" .
                                '&urid=' .$unique_req_param . 
$debug_param . "\"></script>"
                         );

Note the use of a few config vars...here are the config vars:

===Configuration vars===
$wgEnableScriptLoader = true; //if the script loader should be used at all
$mvgJSDebug=false; // if set to true will send raw, fresh un-minified, 
localized javascript
$wgEnableScriptLoaderJsFile = true; //if you can use the script loader 
with js files based on the root script folder ie:
?file=/skin/common.js (rather than only js classes looked up with 
$wgEnableScriptLoader)
$wgEnableScriptMinify = true;


peace,
michael.




_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to