关于语言文件的gettext有什么好处?

时间:2009-09-12 17:29:29

标签: php gettext

在用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
?>

4 个答案:

答案 0 :(得分:13)

gettext的一个好处是它是一种事实上的标准:它被许多应用程序,许多语言使用 - 这意味着很多人都使用它。

另一件好事(可能是后果,或原因,或两者兼而有之)是存在多个工具,例如Poedit来编辑gettext文件:你不要必须通过一些PHP (或其他)源代码。这非常重要:

  • 这意味着非技术人员可以编辑gettext本地化文件
    • 也许这对你来说似乎并不重要,
    • 但是如果你正在开发一个大型的开源应用程序,那么如果它成功并且很多人用他们自己的语言需要它将变得很重要。
  • 这意味着他们没有风险破坏应用程序(因为引号不匹配而认为是“解析错误”,例如;-))

答案 1 :(得分:6)

您的“实施”存在一些缺点。

  • gettext不同,它在php中实施。 ; - )
  • 无论你是否使用它,它都会将整个翻译保存在记忆中
  • 更糟糕的是,无论何时需要一行,它都会实例化整个数据数组(在PHP中确实需要一段时间和相当多的内存)。
  • 它无法处理多种语言的复数形式
  • 使用此翻译的代码难以阅读
  • 使用此翻译的代码在没有翻译的情况下无法使用嵌入式回退。

基本上,你的实施被广泛用于许多项目中,他们渴望获得国际化支持和高度创新的车轮发明,但不关心结果并且不了解坏事的好处。 / p>

答案 2 :(得分:4)

对于所有问题看起来都是一样的答案:

  

[经过证实的证据更好   和广泛使用的解决方案]   而不是[我的hacky骄傲的菜鸟   实施]

  • 它已经存在了很长一段时间,不管你信不信,如果经验丰富的开发人员使用它,使用它并称赞它,这可能是有原因的。
  • 这是一个标准,所以即使你的解决方案会更好,打破它的代价可能也不值得。
  • 它可以比你的实现做1000多,因为它是在全球范围内开发的,而你的想法只是为了解决你的问题。

我并非批评,我们都这样做,试图说服自己,我们是聪明人,其他人是矫枉过正的程序员。这是学习方式的一部分。我实际上一直这样做,重新发明轮子或与我的朋友/同事一起展示我攻击的一些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

在第一种情况下,您可以在代码中看到消息,并确切知道它的作用。在后一种情况下,您只能看到一个符号常量,并且必须查找确切的文本和格式说明符。