<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Client-side i18n</title> </head> <body> <div class="container"> <header> <ul id="i18n-menu"> <li><a href="#" id="fi-FI">FI</a></li> <li><a href="#" id="en-GB">EN</a></li> </ul> </header> <section> <p id="p1"></p> <p id="p2"></p> </section> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script> window.i18n = ( function( window, document, $ ) { var app = { locales: { fi: { p1: "Ensimmäinen kappale.", p2: "Toinen kappale." }, en: { p1: "First paragraph.", p2: "Second paragraph." } } }; app.cache = function() { app.$menu = $("#i18n-menu"); }; app.init = function() { app.cache(); var locale = app.getLocale(); if (locale) app.localize(locale); else app.localize("fi-FI"); // fallback to fi-FI app.$menu.on("click", "a", app.toggleLocale); }; app.toggleLocale = function(e) { e.preventDefault(); app.localize(e.target.id); }; app.localize = function(locale) { switch(locale) { case "fi-FI": $.each( app.locales.fi, function( key, value ) { var elem = $("#" + key); elem.html(value); }); break; case "en": case "en-GB": case "en-US": // etc $.each( app.locales.en, function( key, value ) { var elem = $("#" + key); elem.html(value); }); break; }; }; app.getLocale = function() { return window.navigator.userLanguage || window.navigator.language; }; $(document).ready( app.init ); return app; })( window, document, jQuery ); </script> </body> </html>