【问题标题】:Is gettext the best way to localise a website in php? (only mild localisation needed) [closed]gettext 是在 php 中本地化网站的最佳方式吗? (只需要轻微的本地化)[关闭]
【发布时间】:2012-10-04 15:55:01
【问题描述】:

gettext 是用 php 本地化网站的最佳方式吗?我没有使用任何框架,也没有太多要翻译的单词,只有两个略有不同的英文版本。

【问题讨论】:

    标签: php localization gettext


    【解决方案1】:

    您可以只使用 lang_XX.php 并将其包含在您的应用程序中。

    $lang = array(
        "welcome" => "Welcome",
        "bye" => "Bye"
    );
    

    对于其他语言,比如lang_fr.php,只需类似:

    $lang = array(
        "welcome" => "Accueil",
        "bye" => "Au revoir"
    );
    

    对于一个小用例,这应该没问题,不需要使用.po 文件。此外,您可以这样定义它:

    function _($l)
    {
        return $lang[$l];
    }
    

    【讨论】:

    • +1 简单网站的好解决方案
    • 虽然解决方案很好,但我仍然建议使用 gettext 路线。你永远不知道你的网站要去哪里。它可能会快速变大,您可能需要添加其他语言。 Gettext 不会比这个提议的解决方案花费更长的时间来实施
    • 更好的是@NatlsGleek,因为这样翻译文件可以发送给其他人完成
    • 我选择了这个答案,因为我只需要在这里和那里本地化几个单词。对于更大的工作,我会探索 gettext 路线。
    • 我建议它们也应该来自单独的文件,但为了便于阅读,我在示例中没有这样做。我说数组来自 JSON 文件。老实说,JSON 可能比 PHP 数组更易于阅读……
    【解决方案2】:

    gettext 是最好的方法。对于一个字符串很少且预计不会增长太多的小型网站,实施与已发布的解决方案类似的东西实际上可能比学习如何使用和配置 gettext 更快。

    tl;博士:

    多年来,人们一直在努力思考要创建一个有效的翻译系统,你可以花很长时间重新发明那个轮子,或者你可以花一点时间学习如何使用 gettext。

    在开源世界中,gettext 实际上是一个事实上的标准。

    以下是为什么 gettext 比维护大翻译数组列表的通常替代方法更好的一些原因

    1. 更快
    2. 它不需要每个线程将每个字符串加载到内存中一次
    3. 它为翻译人员提供了大量工具支持,例如 poedit,因此您不必依赖翻译人员了解如何编辑 PHP 代码。
    4. 它为您提供工具支持、msgmerge 等,这意味着您可以在继续工作的同时发送文件进行翻译,并添加新的可翻译文本并轻松将它们合并在一起
    5. 需要向翻译人员提供有关字符串上下文的注释吗? gettext 将从使用它的代码中获取注释并将其复制到翻译文件中
    6. 翻译键是英文文本,如果尚未翻译,则文本仍以纯英文显示,到目前为止,此答案中给出的解决方案都没有正确。
    7. 它支持复数,如果一个字符串依赖一个整数,在英文中只有if n != 1 "There was a person" else "There were n people"两种形式。对于其他语言,规则并不像 (n!=1) 那样简单,俄语有 3 种不同的变体,规则是 n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;

    【讨论】:

    • 对于大型翻译,我认为这是最好的选择,但在我的情况下,它是矫枉过正的。
    • 截至今天(2015 年 2 月),您是否仍然坚持您的建议?自 2012 年以来还出现过其他情况吗?
    • symfony 翻译组件看起来设计得很周到,不过我没用过。
    【解决方案3】:

    在性能方面,gettextExtension 比使用将字符串 id 映射到本地化文本的字符串数组更快(例如,"WelcomeText" => "Welcome to our homepage." 将使用 <?= $strings["WelcomeText"] > 包含在内。gettext 的纯 PHP 实现如果可以使用 PHP 扩展,则速度较慢,不推荐使用。更多详细信息请参见 Localizing PHP web sites using gettextBenchmarking PHP Localization – Is gettext fast enough?

    【讨论】:

    • 仅供参考,由于 WordPress 中缺少 MySQL 扩展名,自 2019 开始,两个底部链接都已损坏安装...
    • @War10ck 感谢您告诉我,我已经更新了使用 Wayback 机器的链接
    【解决方案4】:

    对于永远不会/极少改变的静态内容,当然可以。

    对于动态内容,一点也不。编译 .po 文件等是最重要的,我建议使用某种 JSON 或 XML 解决方案,并使用缓存的编译模板代替模板。

    【讨论】:

    • 您能否详细说明“编译 .po 文件太过分了”的意思?
    • 对我来说,这是一个静态内容的案例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多