到目前为止,我看到的关于使用gettext而不是数组的唯一优点是,我不需要创建“问候”“子数组”(或者它调用的任何东西)。我不需要为“默认语言”创建一个文件夹。
在多语言网站上使用gettext和php数组还有其他优点和优点吗?
使用GETTEXT的:
spanish/messages.po:
#: test.php:3
msgid "Hello World!"
msgstr "Hola Mundo"index.php:
<?php echo _("Hello World!"); ?>index.php?lang=spanish:
<?php echo _("Hello World!"); ?> turns to Hola Mundo使用PHP数组的:
lang.en.php
<?php
$lang = array(
"greeting" => "Hello World",
);
?>lang.es.php
<?php
$lang = array(
"greeting" => "Hola Mundo",
);
?>index.php:
<?php echo $lang['greeting']; ?> greeting turns to Hello Worldindex.php?lang=spanish
<?php echo $lang['greeting']; ?> greeting turns to Hola Mundo(我最初是从gettext开始的,但在我共享的免费主机Zymic中却不支持它。我不想使用Zend_translate,我发现它对我的简单任务来说太复杂了,所以我最终使用了php define,但是后来有人告诉我我应该使用数组)
发布于 2010-02-23 15:13:28
使用gettext,您可以获得对占位符的支持,比如printf和国际复数形式。占位符顺序可以在翻译中更改或跳过。
PHP文档中的示例:
<?php
setlocale(LC_ALL, 'cs_CZ');
printf(ngettext("%d window", "%d windows", 1), 1); // gives "1 okno"
printf(ngettext("%d window", "%d windows", 2), 2); // gives "2 okna"
printf(ngettext("%d window", "%d windows", 5), 5); // gives "5 oke"
?>另一个好处是,您可以使用标准工具进行术语管理、翻译内存和机器翻译,如@middus所指出的那样。
对于共享环境,有一个伟大的php-gettext库来自Danilo。
发布于 2010-10-08 15:13:49
我推荐使用gettext,我在PHP中使用了5年,取得了很好的效果。
首先,如果您使用echo _('my text to translate')而没有翻译,您将在输出中看到原始字符串,这是很好的。使用像echo $translation['were is my translation']这样的数组,而没有任何数组,您将什么也看不到。但是请注意,使用po编辑并执行echo _('');并不是一个好主意,poedit使用msgid ""来获取项目信息,这些信息很可能不想向观众显示,所以必须注意不要试图翻译空字符串:)
此外,它速度非常快,并为复数和其他东西提供了一些额外的功能,例如,poedit还通过使用翻译数据库使生活变得更容易,所以您不能一次又一次地翻译相同的东西,您已经做过的部分将被预先填充并标记为“检查它是否正确”。非常舒服。
the it middus提到的缺点是,您必须编译po文件,而在使用数组时可以轻松地覆盖php文件--好吧,您也只是覆盖了mo文件,如果使用po编辑,则在保存文件后进行编译。所以实际上,您点击保存并复制文件,sam就像编辑php文件一样。
但一个真正的缺点是,如果你使用mod_php。请注意,使用mod_php并不是线程安全,尽管我从来没有遇到过任何困难。
大多数情况下,您必须在使用mod_php时重新启动apache,否则gettext调用就会失败(有时不返回翻译,有时会得到心爱的没有内容的白色页面)。但是通过使用像mod_itk这样的东西(我相信cgi/可以做到这一点),您甚至不会再有这个问题了。
发布于 2010-03-25 08:59:32
当然,使用gettext()最明显的好处是源字符串位于它所属的位置。也就是说,写这个更有意义。
echo _("This is a string");比
echo $lang['a_string'];更不用说,您必须为每个可能的翻译创建一个新的变量占位符。对于gettext(),转换字符串本身充当索引。
https://stackoverflow.com/questions/2319060
复制相似问题