我正在开发一个使用以下CakePHP功能的网站:
我不确定的一件事,即使我已阅读文档,也是如何统一引用不同地方的语言。
以德语为例,将替换下面的?
:
设置语言环境,以便CakePHP知道要使用哪个po文件
Configure::write('Config.language', '?');
我的猜测是deu
po文件的路径
/app/locale/?/LC_MESSAGES/default.po
我的猜测是deu
以特定语言保存
$this->Post->locale = '?';
这个让我困惑,因为示例显示了de_de。这会自动映射到我的Config.language
吗?
如果是这样,我在哪里可以找到这些映射?
答案 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个字母代码应该起作用......它也可能有助于使两者分开。