2013-03-03 120 views
0

我正在开发多语言项目。文章,产品说明等内容将从数据库中显示出来。这没有问题。问题是有一些“静态”的描述,例如表格标签,错误信息等。PHP多国语言

到目前为止,我以此结束。我将语言存储在COOKIE中,并且我有功能可以在集合语言中编写消息。我已将此文件命名为_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

+0

我会这样做:'$ ['sk'] ['empty_field'] ='...'' – 2013-03-03 07:53:59

+2

使用框架。 Symfony,Zend等...提供了许多公用事业来处理国际化和本地化。 – mpm 2013-03-03 07:55:02

+0

试过。不工作 – 2013-03-03 08:57:18

回答

3

我想你应该看看几个资源。堆栈交换网络就是一个很好的例子。 PHP Localization Best Practices? gettext?

另一个好的资源是谷歌。只是谷歌php localization best practice有很多好的图书馆用于使用PHP和本地化

另一个很好的资源是从PHP本身的gettext功能。这就是我会这样做的方式。

UPDATE

这是O'Reilly出版集团一个非常非常好的教程上的对象。 Gettext - O'Reilly Media

+0

我期待着taht gettext函数,但我做不一定udnerstand它如何工作 - 如何使这些.mo文件等你能告诉我更多? – 2013-03-03 08:10:38

+0

请耐心等待更新。 – bretterer 2013-03-03 08:14:20

+0

编辑问题 – 2013-03-03 08:49:34

1

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

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

和文件定义的错误消息/等用于该语言的相关联的阵列。

+0

请谨慎使用此选项,因为您需要对'$ _SERVER ['HTTP_ACCEPT_LANGUAGE']'进行一些解析以获得您的期望。当我打印出来的时候,它给了我'en-US,en; q = 0.8'; – bretterer 2013-03-03 08:06:17

+0

@bretterer - 好点。我相信海报可以改进解决方案。 – 2013-03-03 08:08:38

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成为第一个数组。

+0

谢谢。我想我会用这个解决方案:) – 2013-03-03 10:13:53