CakePHP 3.1:用于翻译行为的语言字母代码(i18n)

时间:2015-10-03 15:32:52

标签: cakephp internationalization multilingual cakephp-3.1

不一致?在关于translate behaviour in the CakePHP 3 book的章节中,使用了三个字母的代码,这些代码源自英文名称,而不是像ISO 639-2这样的语言的本地名称:

eng (english)
spa (spanish)

使用此示例更改语言:

I18n::locale('spa');

但在chapter about Internationalization and Localization中说

  

翻译文件夹可以是该语言的双字母ISO代码,也可以是完整的语言环境名称,例如fr_FR,es_AR,da_DK,其中包含语言和使用该语言的国家/地区。

更改语言的示例如下所示:

use Cake\I18n\I18n;
I18n::locale('de_DE');

关于translate behaviour过时的章节或所有方法都是正确的吗?我认为最好是保持一致并在Translate behaviourInternationalization and Localization使用相同的语言代码?

此外,i18n架构表示例将字段locale定义为varchar(6) ...如果需要3个字母代码varchar(3)应该足够......但即使我使用像fr_FR varchar(5)这样的完整本地代码就足够了。为什么示例模式使用varchar(6)

1 个答案:

答案 0 :(得分:3)

我不会说Translate behvaiour章已经过时了,因为它可以正常工作。翻译行为不会对语言标识符施加任何限制,可能的值仅受locale列类型/大小的限制,即使用spa将正常工作。 6的长度可能只是一个错字,或者它可能会考虑UN M.49es-419),谁知道。

但翻译文件夹名称确实受到限制,仅限于ext-intl应用的规则。确切地说,文件夹名称来自Locale::parseLocale()的返回值,例如,它将为es返回spa

参见 Source > \Cake\I18n\MessagesFileLoader::translationsFolders()

因此,您可以在应用和翻译表中使用spa这样的三个字母代码,但翻译文件夹必须使用双字母代码,即es

我同意在整本书中保持这种一致性可能会很好,也许还有一些关于后台会发生什么的额外信息。您可能想要创建一个问题(甚至通过PR自己修复)over at GitHub