在蛋糕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个字母代码应该起作用....它也可以帮助保持两者不同。
来源
2013-10-30 00:46:25
JvO
请务必提及您的确切CakePHP版本! – ndm