looks cool. Although maybe think a bit more about scalability. ie calling a php script from toolserver on every page load won't scale. Better would be an api hit with public expire: ( ie letting the result be cached in the shared squid cache for a few hours ) http://commons.wikimedia.org/w/api.php?action=query&meta=siteinfo&siprop=languages&format=json&smaxage=3600
or just hard code the list of languages into the script. Also the script itself should ideally be hosted as a commons mediawiki page instead of imported from toolserver ( this is so hot fixes can be done by any admin ) Minor fixme ( that I would add if it was a mediawiki page ) return language = language.replace(/(-.*)+/, '').toLowerCase();// convert 'AA-BB' to 'aa' etc. Should check if the lang key already exists ie 'zh-classical' at least in firefox we get en-US so i look for lower case keys in "getBrowserLang" I don't know if it works the same in other browsers. Also you can test anonymous usage withJS param: http://commons.wikimedia.org/wiki/Main_Page?withJS=MediaWiki:AnonymousI18N.js I imagine you saw the recent persistantUseLang that got turned on that does some similar stuff: http://commons.wikimedia.org/wiki/Commons:Village_pump#Localization_for_anonymous_users Adding a select language + cookie sounds like a great idea to me :) peace, --michael On 12/07/2010 05:06 AM, Krinkle wrote: > Hi all, > > Over the past weekend I've been looking at a decent solution for the > localization towards our anonymous users. > Currently there are two solutions being used. > * Template:mld > :: This template renders all translations, and by means of javascript > only shows the desired choosen translation > * ?uselang > :: Albeit used only a little but it is linked on several Main-pages[1] > to show the interface in the correct language > > The problem with Template:Mld is that it's use is limited, it can't be > used in all ocasions (ie. it would be hard to use for License- > templates or for [[Template:Information]]). Also due to ineffeciency > (bandwidth wise, it sends everything). > > And not to forget that things localized in Messages (ie. translatewiki > or MediaWiki-namespace) can't be fetched via javascript inside the > page when the wikitext only shows {{int:Message}}. > > And lastly, lots of things are localized with {{LangSwitch}}, which is > very smart (because of fallbacks etc.) and effecient (only sends the > needed translation to the browser) but is currently only usable for > registered users. > > Which means that anonymous users get talkpage messages in English and > see the overal interface in English. > > For that reason I've combined bits and pieces of other scripts and re- > wrote things and came up with the AnonymousI18N-script. > You can check it out by adding the following to your vector.js[2] > > importScriptURI( 'MediaWiki:AnonymousI18N.js' ); > > Keep in mind that this is ofcourse not meant for registered users, in > the final version an if()-statement will prevent it from being loaded > if the user is logged in, but during development this will work only > for logged in users. > > The script itself uses the toolserver to fetch a list of available > languages and other data (as soon as development is fairly done I will > move the script fully on-wiki - as it would not be handy (and not > required) to require a toolserver-request on all pageloads for > anonymous users, this is purely temporarily hosted on the Toolserver > for now. The list of available languages doesn't change often anyway > and can be updated manually when needed). > > Once the script is loaded it checks if a cookie has been set and as > fallback (default for most new users) it checks the browser language. > If the language is not set already to this language and it is > available in MediaWiki it puts up a (declinable) localized notice[3] > on top asking the user to "View Wikimedia Commons in (language)". > Clicking that will set a cookie and redirect the user to the current > page with ?uselang set to that language. > > The page also shows a dropdown menu in the Sidebar for hand-picking a > language of choise. This can be used if the suggestion is wrong, or if > the user declined the notice and wishes to pick a language later. > > When a language other than the default ('en') is choosen, clicking any > link linking to the same or another wikimedia-wiki will get the > uselang= query string attached. > > The script makes the language setting globally available as > wgAnonUserLanguage. Other scripts would in the future use this > variable whenever something language dependant os needed (for example > in the MLD-javascript) to avoid having to write cookie-things up again > and again for each script. > > Please let me know what you think and if there are any issues. > So far it's been tested in Safari 5 and Firefox 3.6 (Mac). Testing on > Windows and (older versions of) Internet Explorer is grealty > appreciated. > > PS: Since it is built for anonymous users it will only work in the > Vector-skin. > > -- > Krinkle > > > [1] Example: http://commons.wikimedia.org/wiki/Hoofdpagina > the link "Herlaad deze pagina met Nederlandstalige menupagina's" > [2] http://commons.wikimedia.org/wiki/Special:Mypage/vector.js > [3] A screenshot of what it looks like: > http://meta.wikimedia.org/wiki/User:Krinkle/Scripts/AnonymousI18N > > > -- > Greetings, > Krinkle > > _______________________________________________ > Commons-l mailing list > [email protected] > https://lists.wikimedia.org/mailman/listinfo/commons-l _______________________________________________ Commons-l mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/commons-l
