CakePHP翻译 - 如何引用语言

时间:2013-10-29 09:18:08

标签: cakephp internationalization

我正在开发一个使用以下CakePHP功能的网站:

  • .t文件中的静态字符串.po文件
  • 翻译数据库存储字符串的行为

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

以德语为例,将替换下面的?

设置语言环境,以便CakePHP知道要使用哪个po文件

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

我的猜测是deu

po文件的路径

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

我的猜测是deu

以特定语言保存

As per the docs.

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

这个让我困惑,因为示例显示了de_de。这会自动映射到我的Config.language吗?

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

1 个答案:

答案 0 :(得分:1)

在Cake 1.3中,我使用了

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

查找/locale/ger/LC_MESSAGES/default.po;事后看来,这是错误的,因为德国的“官方”代码是'deu',正如你所指出的那样。但是,我认为您可以使用任何语言标识符,只要它位于正确的子目录中。

当您想使用locale()函数格式化数字,日期等时,会发生有趣的部分:

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

但是,请注意http://php.net/manual/en/function.setlocale.php关于使用setlocale的警告。

--- Amendement

您必须记住,语言环境与语言完全不同。区域设置指定如何格式化数字,时间,金钱,比较字符串和排序它们。是的,语言环境也有LC_MESSAGES类别,用于翻译。但是听我说。

许多国家/地区都可以使用某种语言,因此您认为可以将翻译用于所有这些国家/地区。但是你很快就会遇到问题。例如,在英国,美国,加拿大和许多其他国家使用英语,但差别很小。但是打印日期是另一回事。美国使用月/日/年格式,而英国使用日/月/年。有些国家在字段之间使用斜杠,其他国家则使用短划线或圆点;有些人使用月份名称而不是数字。等等。

因此,本地化用于特定的国家/地区,而不是语言。但是,有些国家/地区使用的语言不止一种。这就是本地化字符串有两部分的原因:第一部分是语言,第二部分是国家(例如de_BE,fr_BE,nl_BE甚至是wa_BE)。

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

回到你的帖子:如果有关于本地化的讨论,你应该使用'de_DE'样式字符串。当仅仅谈论一种语言时,ISO 639:2中的3个字母代码应该起作用......它也可能有助于使两者分开。