2014-01-08 39 views
4

我想開發一個支持多種語言的php和javascript(jquery)網站。我試圖獲得的東西是:如何將條款從gettext字典提供給JavaScript?

  • 高效:我需要儘可能減少此操作的後端處理。
  • 擴展:它必須是簡單實用的添加新的字符串翻譯

的問題是:我的javascript代碼生成的DOM動態的各種元素,需要打印一些字符串是在語言文件。

我實際的解決辦法是,在PHP中使用gettext,在文檔中打印必須由JavaScript使用的字符串:

<?php 
... some kind of gettext initialization ... 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title><?php echo _("My page Title"); ?></title> 
    ... 
</head> 
<body> 

    ... 

    <script type="text/javascript"> 
     var LANG = { 
      "string1" : "<?php echo _("string1"); ?>", 
      "string2" : "<?php echo _("string2"); ?>", 
      "string3" : "<?php echo _("string3"); ?>", 
      ... 
     }; 
    </script> 
</body> 
</html> 

然後我訪問到我的js源LANG,但我不認爲這是最好的解決辦法...

我的問題是:

  • 什麼是應用翻譯到JavaScript文件的正確方法,U唱一樣的「數據庫」的PHP?
  • gettext庫的效率如何?在生成的頁面上實現某種形式的緩存機制可能很有用?

回答

2

gettext被許多行業標準應用程序使用。除了我認爲它不能很好地處理(因爲它往往取決於安裝在系統上的語言環境和廢話),沒有什麼根本性的錯誤。

一個更復雜但更靈活的替代方案可以是Zend_Translate,它可以連接到不同的字典後端 - .po/mo文件,比如gettext(這很好,因爲您擁有所有平臺的整個編輯工具)還包括數據庫。

顯示的方法(將字典提供到主文檔中的JavaScript中)很好,因爲您應該已經使用PHP在該點執行動態處理,並且JavaScript文件可以保持靜態,這非常棒。

但是,如果您有一個巨大的字典,那麼在HTML文件上可能有點沉重,因爲您在每個請求上傳輸所有數據。在這種情況下,畢竟您應該考慮外部JavaScript資源。您有兩種選擇:

  • 服務一個PHP生成的JavaScript文件 - 一個包含所有字典定義的文件。使用某種形式的If-modified-since caching,所以你必須重新渲染字典,只有當某些事情已經發生變化時,或者發送帶有一輩子時間的緩存頭。

  • 或者:每當字典被更新時,運行一個PHP腳本(自動或手動)生成一個包含所有字典定義的靜態JavaScript文件。這可能是兩個世界中最好的。

0

您應該查看Poedit,據我所知它是最好的本地化軟件,它在wordpress等廣泛使用。您還可以將所有不同的翻譯存儲在數據庫中,並根據地理位置。

1

我使用定義,語言php文件和會話來告訴要顯示的語言。

index.php 

    <?php 
    session_start(); 
    if (isset($_SESSION['lang'])){ 
     require('language/' . $_SESSION['lang'] . '.php'); 
    }else{ 
     require('language/english.php'); 
    } 
    <html> 
    <?= HELLO_WORLD ; ?> 
    </html> 

然後讓你的語言文件是這樣的。

language/english.php 

    define("HELLO_WORLD", "Hello world!"); 
相關問題