gettext是在php中本地化网站的最佳方式吗?(只需要轻微的本地化)

Ric*_*vin 8 php localization gettext

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

Pra*_*man 12

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

$lang = array(
    "welcome" => "Welcome",
    "bye" => "Bye"
);
Run Code Online (Sandbox Code Playgroud)

对于其他语言,比如说lang_fr.php,只需要:

$lang = array(
    "welcome" => "Accueil",
    "bye" => "Au revoir"
);
Run Code Online (Sandbox Code Playgroud)

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

function _($l)
{
    return $lang[$l];
}
Run Code Online (Sandbox Code Playgroud)

  • +1简单网站的良好解决方案 (6认同)
  • 虽然解决方案很好,但我仍然建议使用gettext路由.你永远不知道你的网站将去哪里.它可能会变得更快,您可能需要添加其他语言.Gettext不会比这个提出的解决方案花更长的时间来实现 (6认同)
  • 我选择了这个答案,因为我只需要在这里和那里本地化几个单词.对于更大的工作,我会探索gettext路线. (2认同)

dsa*_*sas 10

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;