PHP多语言

时间:2013-03-03 07:51:39

标签: php

我正在研究多语言项目。文章,产品描述等内容将从数据库中显示。这没问题。问题是存在一些“静态”描述,例如表格标签,错误信息等。

到目前为止,我以此结束了。我将语言存储在COOKIE中,并且我具有在set lanugeage中编写消息的功能。我有一个名为_lang.php的文件,内容如下:

$['empty_field']['sk'] = "Slovak description of error";
$['empty_field']['en'] = "English description of error";

等等。这是一个好的解决方案吗?还有其他方法吗?感谢

所以我尝试了gettext()并以此结束:(欢迎输出)

putenv("LANGUAGE=sk_SK");
setlocale(LC_ALL, 'sk_SK');
$dom = "roids";
bindtextdomain($dom, "www/roids/_locale");
textdomain($dom);
echo gettext('welcome');

我在此文件夹中创建了文件夹:_locale / sk_SK / roids.po

roids.po的内容:

msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "welcome"
msgstr "vitaj"

我'使用WAMP服务器,我不知道这条路径是否:www / roids / _locale是好的。 Wamp安装在这里:D:\ wamp和ww文件位于D:\ wamp \ www

3 个答案:

答案 0 :(得分:3)

我认为你应该看看一些资源。一个好的就是在堆栈交换网络上。 PHP Localization Best Practices? gettext?

另一个好资源是谷歌。只是谷歌php localization best practice有很多好的库可用于php和本地化

另一个好的资源是来自php本身的gettext函数。这就是我要做这样的事情的方式。

<强>更新

这是O'Reilly小组关于这个主题的非常好的教程。 Gettext - O'Reilly Media

答案 1 :(得分:2)

取决于您的情况而不是维护数组,例如

$['empty_field']['sk'] = "Slovak description of error";
$['empty_field']['en'] = "English description of error";

您可以使用ini文件和PHP parse_ini_file更轻松地管理字符串,或将它们分发给其他人:

[sk]
empty_field = "Slovak description of error";
; others in here ...

[en]
empty_field = "English description of error";
; others in here ...

Wouter J 的评论表示赞同,你将lang作为第一个数组。

答案 2 :(得分:1)

我会使用require_one加载特定语言的PHP文件。

require_once('/some/path/errors_'. $_SERVER['HTTP_ACCEPT_LANGUAGE'] . '.php');

该文件定义了该语言的相关错误消息数组/。