在用PHP创建多语言应用程序时,每个人都说gettext是最好的方法。我只是想知道为什么?
与下面的方法相比,使用gettext效率更低?
<?PHP
//Have seperate language files for each language I add, this would be english file
function lang($phrase){
static $lang = array(
'NO_PHOTO' => 'No photo\'s available',
'NEW_MEMBER' => 'This user is new'
);
return $lang[$phrase];
}
//Then in application where there is text from the site and not from users I would do something like this
echo lang('NO_PHOTO'); // No photo's available would show here
?>
答案 0 :(得分:13)
gettext的一个好处是它是一种事实上的标准:它被许多应用程序,许多语言使用 - 这意味着很多人都使用它。
另一件好事(可能是后果,或原因,或两者兼而有之)是存在多个工具,例如Poedit来编辑gettext文件:你不要必须通过一些PHP (或其他)源代码。这非常重要:
答案 1 :(得分:6)
您的“实施”存在一些缺点。
gettext
不同,它在php
中实施。 ; - )基本上,你的实施被广泛用于许多项目中,他们渴望获得国际化支持和高度创新的车轮发明,但不关心结果并且不了解坏事的好处。 / p>
答案 2 :(得分:4)
对于所有问题看起来都是一样的答案:
[经过证实的证据更好 和广泛使用的解决方案] 而不是[我的hacky骄傲的菜鸟 实施]
我并非批评,我们都这样做,试图说服自己,我们是聪明人,其他人是矫枉过正的程序员。这是学习方式的一部分。我实际上一直这样做,重新发明轮子或与我的朋友/同事一起展示我攻击的一些KISS代码。随着时间的推移,你最终会越来越少地做到这一点,我想你在实际应该这样做的那一天就停止这样做了: - )
答案 3 :(得分:1)
与其他解决方案(如您的Java字符串表或Windows资源)相比,gettext的优势在于它使源代码更具可读性。
比较一下:
printf(_("No photo available (error %d)."), err);
用这个:
printf(i18n(NO_PHOTO), err);
// or some variant of the same thing
在第一种情况下,您可以在代码中看到消息,并确切知道它的作用。在后一种情况下,您只能看到一个符号常量,并且必须查找确切的文本和格式说明符。