【发布时间】:2012-10-04 15:55:01
【问题描述】:
gettext 是用 php 本地化网站的最佳方式吗?我没有使用任何框架,也没有太多要翻译的单词,只有两个略有不同的英文版本。
【问题讨论】:
标签: php localization gettext
gettext 是用 php 本地化网站的最佳方式吗?我没有使用任何框架,也没有太多要翻译的单词,只有两个略有不同的英文版本。
【问题讨论】:
标签: php localization gettext
您可以只使用 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];
}
【讨论】:
gettext 是最好的方法。对于一个字符串很少且预计不会增长太多的小型网站,实施与已发布的解决方案类似的东西实际上可能比学习如何使用和配置 gettext 更快。
tl;博士:
多年来,人们一直在努力思考要创建一个有效的翻译系统,你可以花很长时间重新发明那个轮子,或者你可以花一点时间学习如何使用 gettext。
在开源世界中,gettext 实际上是一个事实上的标准。
以下是为什么 gettext 比维护大翻译数组列表的通常替代方法更好的一些原因
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; 【讨论】:
在性能方面,gettextExtension 比使用将字符串 id 映射到本地化文本的字符串数组更快(例如,"WelcomeText" => "Welcome to our homepage." 将使用 <?= $strings["WelcomeText"] > 包含在内。gettext 的纯 PHP 实现如果可以使用 PHP 扩展,则速度较慢,不推荐使用。更多详细信息请参见 Localizing PHP web sites using gettext 和 Benchmarking PHP Localization – Is gettext fast enough?
【讨论】:
对于永远不会/极少改变的静态内容,当然可以。
对于动态内容,一点也不。编译 .po 文件等是最重要的,我建议使用某种 JSON 或 XML 解决方案,并使用缓存的编译模板代替模板。
【讨论】: