在PHP中,gettext是本地化网站的最佳方式吗?我没有使用任何框架,并且需要翻译的单词不多,只有两个略有不同的英文版本。
在PHP中,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并配置它更快。
简而言之:
多年来,人们一直在努力创建一个可行的翻译系统,您可以花费很长时间重新发明轮子,或者您可以花费一些时间学习如何使用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;
gettext
扩展比使用类似于字符串ID到本地化文本的字符串数组映射(例如"WelcomeText" => "欢迎来到我们的主页。"
将使用<?= $strings["WelcomeText"] >
进行包含)要快。纯PHP实现的gettext较慢,如果可以使用PHP扩展则不推荐使用。详细信息请参见使用gettext本地化PHP网站和基准测试PHP本地化——gettext足够快吗?。对于永远不会/极少更改的静态内容,可以使用。
对于动态内容,则完全不适用。编译.po文件等操作过于繁琐,建议采用JSON或XML解决方案和模板,同时缓存已编译的模板。