2011-04-14 104 views
8

我想知道哪些是不同的,哪些是设置一些多语言JavaScript应用程序的最佳方法。我想在一个文件中使用所有使用的字符串来轻松更改字符串或稍后添加更多的语言。什么是多语言JavaScript应用程序的不同方法

thnx!

+1

你的意思是独立的JavaScript的解决方案?像在Node.js中一样?他们正在研究解决方案。您能否介绍一下您想要使用的技术? – 2011-04-28 12:53:56

+0

@PawełDyda:更像是sencha touch或简单的JS框架。 – headkit 2011-04-28 14:08:09

+0

刚刚发现这个https://github.com/fwg/jsgettext。这是GNU Gettext的JavaScript实现,为javascript提供 国际化支持。 – RRG 2011-08-24 13:09:33

回答

23

你可以简单地做一个大对象树:

var languages = { 
    english:{ 
     Save:"Save" 
    }, 
    german:{ 
     Save:"Speichern" 
    } 
}; 

在您的应用程序:

var l = languages.german; 
alert(l.Save); //Alerts "Speicher" 

该系统的好处是,可以使子对象将一些值加在一起。

+0

thx!使用看起来不错,但对象树包含大量冗余信息,重复“指针”... – headkit 2011-04-14 15:30:53

1

我喜欢使用“语言字典数组”,您可以使用JSON或简单的数组。

这很容易实现:

var lang = 0 //0 = english, 1=french 

var phrases=[] 
phrases['cancel'] = "cancel,annuler".split(",") 

alert(phrases['cancel'][lang]) 
4

不管你做什么,最重要的是独立的代码和文本之间。

如果代码和文本混杂在一起,维护将是不可能的,你很快就会放弃它。

必须轻松扫描可翻译文本,以便翻译人员只能翻译文本。然后,您应该可以方便地插入翻译。

我们使用包含字符串映射的JS文件。我们有一个简单的Python脚本,从中提取可翻译的字符串。同样的脚本也构建了输出JS文件,其中包含与翻译后的字符串相同的标签。

结果是:

  • 当应用程序的发展,这是 方便地添加新的字符串。
  • 该脚本自动查找新字符串 ,我们可以将其翻译。
  • 已完成翻译没有手工翻译回到JS档案 。
1

这里是一个函数我放在一起处理基于对这个问题的答案接受语言的翻译:

/** 
Core script to handle language translations 
**/ 
var Language = function() { 

    var activeLanguage = 'en'; 

    var languagePack = { 

     'en': { 
      'hello-world': 'Hello World', 
      'show-variants': 'Show Variants', 
      'hide-variants': 'Hide Variants' 
     }, 
     'fr': { 
      'hello-world': 'Bonjour World', 
      'show-variants': 'représentent des variantes', 
      'hide-variants': 'masquer variantes' 
     } 

    } 
    var translate = function(key, language) 
    { 
     if (typeof languagePack[language] == 'undefined') 
     { 
      return; 
     }else { 
      return languagePack[language][key]; 
     } 
    }; 

    return { 
     init: function(language) 
     { 
      activeLanguage = language; 
     }, 
     getString: function(key, defaultText) 
     { 
      var text = translate(key, activeLanguage); 
      if (typeof(text) === 'undefined' || text.length == 0 || text == null) 
      { 
       text = defaultText; 
      } 
      return text; 
     } 


    } 


}(); 

然后初始化它在普通页面的代码,其中${language.language}是JSP代码设置语言从服务器端配置。

<script type="text/javascript"> 
jQuery(document).ready(function() { 
     Language.init('${language.language}'); 

    }); 
</script> 

然后,每当你需要一个消息使用

Language.getString('hello-world', 'Hi World');