如何将gettext字典中的术语提供给JavaScript?

时间:2014-01-08 23:25:34

标签: javascript php jquery internationalization gettext

我正在尝试使用支持多种语言的php和javascript(jquery)开发一个网站。我正试图获得以下内容:

  • 高效:我需要尽可能减少此操作的后端处理。
  • 可扩展:为翻译添加新字符串必须简单实用

问题是:我的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,但我不认为这是最好的解决方案......

我的问题是:

  • 使用相同的“数据库”php将翻译应用于javascript文件的正确方法是什么?
  • gettext库的效率如何?在生成的页面上实现某种形式的缓存机制可能很有用吗?

3 个答案:

答案 0 :(得分:2)

gettext被许多行业标准应用程序使用。它没有任何根本性的错误,除了我认为它处理得不好(因为它往往依赖于安装在系统上的语言环境和类似的垃圾)。

更复杂但也更灵活的替代方案可以Zend_Translate可以连接到不同的字典后端 - .po / mo文件,如gettext(这很棒,因为你有一整套编辑工具供所有人使用)平台),还有数据库。

你展示的方法(将字典送入主文档中的JavaScript)很好,因为据说你应该已经在那时使用PHP进行动态处理,而且JavaScript文件可以保持静态,这很棒。

如果您有一个庞大的字典,那么HTML文件可能会有点沉重,因为您要在每个请求上传输所有数据。在这种情况下,您应该考虑外部JavaScript资源。您有两种选择:

  • 提供PHP生成的JavaScript文件 - 包含所有字典定义的文件。使用某种形式的If-modified-since caching,因此只有在实际发生了某些变化时才需要重新呈现字典,或者发送具有较长生命周期的缓存标题。

  • 或:每当字典更新时,运行PHP脚本(自动或手动),生成包含所有字典定义的静态JavaScript文件。这可能是两个世界中最好的。

答案 1 :(得分: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!");

答案 2 :(得分:0)

你应该查看Poedit,据我所知它是最好的本地化软件,它广泛用于wordpress等。你也可以将所有不同的翻译存储在数据库中,并根据地理位置提供服务。