首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多语言网站中使用PHP扩展与PHP数组?

问在多语言网站中使用PHP扩展与PHP数组?
EN

Stack Overflow用户
提问于 2010-02-23 14:58:20
回答 5查看 10.1K关注 0票数 11

到目前为止,我看到的关于使用gettext而不是数组的唯一优点是,我不需要创建“问候”“子数组”(或者它调用的任何东西)。我不需要为“默认语言”创建一个文件夹。

在多语言网站上使用gettext和php数组还有其他优点和优点吗?

使用GETTEXT的:

spanish/messages.po:

代码语言:javascript
复制
#: test.php:3
msgid "Hello World!"
msgstr "Hola Mundo"

index.php:

代码语言:javascript
复制
<?php echo _("Hello World!"); ?>

index.php?lang=spanish:

代码语言:javascript
复制
<?php echo _("Hello World!"); ?> turns to Hola Mundo

使用PHP数组的:

lang.en.php

代码语言:javascript
复制
<?php
$lang = array(
    "greeting" => "Hello World",
);
?>

lang.es.php

代码语言:javascript
复制
<?php
$lang = array(
    "greeting" => "Hola Mundo",
);
?>

index.php:

代码语言:javascript
复制
<?php echo $lang['greeting']; ?> greeting turns to Hello World

index.php?lang=spanish

代码语言:javascript
复制
<?php echo $lang['greeting']; ?> greeting turns to Hola Mundo

(我最初是从gettext开始的,但在我共享的免费主机Zymic中却不支持它。我不想使用Zend_translate,我发现它对我的简单任务来说太复杂了,所以我最终使用了php define,但是后来有人告诉我我应该使用数组)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-23 15:13:28

使用gettext,您可以获得对占位符的支持,比如printf和国际复数形式。占位符顺序可以在翻译中更改或跳过。

PHP文档中的示例:

代码语言:javascript
复制
<?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。

票数 7
EN

Stack Overflow用户

发布于 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/可以做到这一点),您甚至不会再有这个问题了。

票数 8
EN

Stack Overflow用户

发布于 2010-03-25 08:59:32

当然,使用gettext()最明显的好处是源字符串位于它所属的位置。也就是说,写这个更有意义。

代码语言:javascript
复制
echo _("This is a string");

比

代码语言:javascript
复制
echo $lang['a_string'];

更不用说,您必须为每个可能的翻译创建一个新的变量占位符。对于gettext(),转换字符串本身充当索引。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2319060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档