2013-10-29 64 views
0

我正在开发使用以下CakePHP的功能的网站在CTP文件静态字符串CakePHP的翻译 - 如何引用语言

  • .po文件
  • 转换为数据库存储的字符串
  • 行为

即使我已阅读文档,我不确定的一件事是如何统一引用不同地方的语言。

以德国为例,什么将取代下面?

设置位置,这样的CakePHP知道要使用的PO文件

Configure::write('Config.language', '?'); 

我的猜测是申

po文件的路径

/app/locale/?/LC_MESSAGES/default.po 

我的猜测是在特定的语言申

节能

As per the docs.

$this->Post->locale = '?'; 

这一个混淆了我的例子显示de_DE这个。这是否会自动映射到我的Config.language

如果是这样,我在哪里可以找到这些映射?

+1

请务必提及您的确切CakePHP版本! – ndm

回答

1

在蛋糕1.3,我已经使用

Configure::write ('Config.language', 'ger'); 

期待此/locale/ger/LC_MESSAGES/default.po;事后看来,这是错误的,正如你所指出的那样,德语的“官方”编码是'deu'。但是,我认为只要它在适当的子目录中,您就可以使用您的语言的任何标识符。

setlocale (LC_TIME, 'de_DE'); 
    setlocale (LC_MONETARY, 'de_DE'); 

然而,在http://php.net/manual/en/function.setlocale.php听从警告有关使用的setlocale:

有趣的部分,当你想与使用locale()函数来格式化数字,日期等情况。

--- Amendement

你必须记住,一个区域是东西比语言完全不同。语言环境指定如何格式化数字,时间,金钱,比较字符串并对它们进行排序。当然,语言环境也有用于翻译的LC_MESSAGES类别。但是听我说。

一种语言可以在很多国家使用,所以你会认为你可以在所有这些国家使用你的翻译。但你很快遇到问题。例如,英国,英国,美国,加拿大以及其他许多国家有细微的差别。但是打印日期是另一回事。美国使用月/日/年格式,而英国使用日/月/年。有些国家在字段之间使用斜线,其他国家使用破折号或点;有些使用月份的名称而不是数字。等等。

所以,定位是用于特定国家,而不是语言。但是,有些国家会讲多种语言。这就是为什么一个本地化字符串有两部分:第一部分是语言,第二部分是国家(例如de_BE,fr_BE,nl_BE,甚至是wa_BE)。

IMO令人困惑的部分是消息翻译也是语言环境的一部分。对于某些语言而言,这是有道理的,例如葡萄牙语和葡萄牙语均使用葡萄牙语,但足以区分不同的翻译文件(pt_PT vs pt_BR)。另一方面,就我所知,法语在世界各地都是99.99%,但为法国,加拿大,瑞士,比利时和卢森堡复制相同的语言文件将会相当麻烦。因此,大多数程序员在构建多语言网站时将“语言”文件决定在一起,并将各个国家推到一起。 CakePHP有一个类似的halfbaked(如果你原谅双关语......)方法:语言文件和本地化。

要回到您的文章:如果有关于本地化的讨论,您应该使用'de_DE'风格字符串。当仅仅谈论一种语言时,来自ISO 639:2的3个字母代码应该起作用....它也可以帮助保持两者不同。

+0

谢谢你的回答。特别是对语言环境和语言区分的澄清。 – timstermatic