0

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

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

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

以德语为例,什么会取代?以下内容:

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

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

我的猜测是deu

po文件的路径

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

我的猜测是deu

以特定语言保存

根据文档。

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

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

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

4

1 回答 1

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的警告。

---修正

您必须记住,语言环境与语言完全不同。语言环境指定如何格式化数字、时间、金钱、比较字符串并对其进行排序。是的,语言环境也有用于翻译的 LC_MESSAGES 类别。但听我说完。

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

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

IMO 令人困惑的部分是消息翻译也是语言环境的一部分。对于某些语言,这是有道理的,例如葡萄牙语和巴西都使用葡萄牙语,但其差异足以保证不同的翻译文件(pt_PT 与 pt_BR)。另一方面,据我所知,法语在所有地方都有 99.99% 的相同,但是为法国、加拿大、瑞士、比利时和卢森堡复制相同的语言文件会相当麻烦。因此,大多数程序员在构建多语言站点时都会选择“语言”文件,然后将各个国家/地区联合起来。CakePHP 有一个类似的半生不熟(如果你原谅双关语的话……)方法:语言文件和本地化。

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

于 2013-10-30T00:46:25.073 回答