2011-04-14 103 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');