在 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的警告。
---修正
您必须记住,语言环境与语言完全不同。语言环境指定如何格式化数字、时间、金钱、比较字符串并对其进行排序。是的,语言环境也有用于翻译的 LC_MESSAGES 类别。但听我说完。
一种语言可以在许多国家/地区使用,因此您认为您可以在所有这些国家/地区使用您的翻译。但是你很快就会遇到问题。例如,英国、美国、加拿大和许多其他国家都使用英语,但差异很小。但是打印日期是另一回事。美国使用月/日/年格式,而英国使用日/月/年。一些国家/地区在字段之间使用斜线,其他国家/地区使用破折号或圆点;有些使用月份的名称而不是数字。等等。
因此,本地化用于特定国家,而不是语言。但是,有些国家使用不止一种语言。这就是本地化字符串有两部分的原因:第一部分是语言,第二部分是国家(例如 de_BE、fr_BE、nl_BE 甚至 wa_BE)。
IMO 令人困惑的部分是消息翻译也是语言环境的一部分。对于某些语言,这是有道理的,例如葡萄牙语和巴西都使用葡萄牙语,但其差异足以保证不同的翻译文件(pt_PT 与 pt_BR)。另一方面,据我所知,法语在所有地方都有 99.99% 的相同,但是为法国、加拿大、瑞士、比利时和卢森堡复制相同的语言文件会相当麻烦。因此,大多数程序员在构建多语言站点时都会选择“语言”文件,然后将各个国家/地区联合起来。CakePHP 有一个类似的半生不熟(如果你原谅双关语的话……)方法:语言文件和本地化。
回到您的帖子:如果谈论本地化,您应该使用“de_DE”样式字符串。当仅谈论一种语言时,ISO 639:2 中的 3 个字母代码应该可以工作......这也可能有助于将两者分开。