仅使用JQuery处理多语言

我在我的网络应用程序中使用JQuery,我想知道在这种情况下处理多语言的最佳方法是什么。
我在想创建一个像这样的文件:

label["login"]["fr"]="Connection" label["login"]["en"]="Login" 

一旦文件加载,我将(对于每个标签)a:

 $('#login').text(label["login"][selected_language]); 

在HTML中,我将使用:

  

这是正确的方法吗?

我认为你使用类和一个发明的属性而不是id来控制多语言会更好,因为如果你在同一个页面中有两次相同的文本,那么id会破坏它,因为它是唯一的。

你可以尝试这种方法:

 $(function() { $(".is_ml").each(function() { $(this).html(label[$(this).attr("ml_label")]["en"]) }) }); 

例如,多语言文本的所有内容必须具有class =“is_ml”和ml_label =“label”,其中label可以是“login”。 你有我的方法吗?

如果你关闭标签是正确的:-)你也可以给合适的“id”值。

像这样的方案适用于非常小的站点,但是一旦你有很多页面,许多表单和许多消息,就很难跟踪消息。 您可能希望查看模板解决方案,以便将数据合并到国际化消息(金额,日期等)中。

当然,存在一个问题,即禁用JavaScript的观看者只会获得服务器提供的默认语言。

salut luc。

我认为最好的方法是在某种后端进行:P但是因为你要求使用jQuery版本,我会使用HTML中最常用的语言并用其他语言替换它。 我会这样做:

在这里演示: http //jsfiddle.net/mHAHz/1/ (点击fr或de更改语言)

 var translation, translate; translation = { //store your translations in a object. "fr": { "div > a:eq(0)": "un lien", // this way you are flexible (don't need to use abd id for all you contents you want to translate) "div h1" : "un title", "p" : "du contenu" }, "de": { "div > a:eq(0)": "ein Link", "div h1" : "ein Titel", "p" : "eigen Inhalt" } } translate = function( lng,translationObj ){ //check if lng is provided and if it acually exists in the object. if( lng && translationObj[lng] ) { return $.each(translationObj[lng], function(k,v){ $(k).text(v); }); }else{ return $.error("make the language (lng) exists in your object"); } } translate("fr", translation); 

我想我会懒得用语言来维护这些对象,所以我只想在我要翻译的元素上使用一个语言类…(正如我在这里所做的那样: http : //alainbenoit.com/ )

我喜欢Bernardo Mendes的方法(答案#6),但是因为需要初始化子对象更好地切换ml_label和语言字段以最小化必须初始化为每种语言一个的子对象的数量。

使用Javascript:

 var label = {}; label['fr'] = {}; label['en'] = {}; label["fr"]["login"]="Connection"; label["en"]["login"]="Login"; label["fr"]["firstname"]="Prénom"; label["en"]["firstname"]="First Name"; label["fr"]["lastname"]="Nom de Famille"; label["en"]["lastname"]="Last Name"; $(function() { $(".is_ml").each(function() { $(this).html(label["en"][$(this).attr("ml_label")]) }) }); 

HTML: