1

不一致?在CakePHP 3 书中关于翻译行为的章节中,使用了三个字母的代码,这些代码来自英文名称,而不是像ISO 639-2这样的语言的本地名称:

eng (english)
spa (spanish)

用这个例子来改变语言:

I18n::locale('spa');

但是在关于国际化和本地化的章节中它说

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

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

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

那么关于translate behaviour过时的章节还是所有方法都正确?我认为保持一致并在两者中使用相同的语言代码可能会更好,Translate behaviour并且Internationalization and Localization

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

4

1 回答 1

3

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

然而,翻译文件夹名称确实受到限制,仅限于ext-intl. 确切地说,文件夹名称是根据 的返回值计算的,Locale::parseLocale()例如将返回esspa

参见源代码 > \Cake\I18n\MessagesFileLoader::translationsFolders()

因此,您实际上可以spa在您的应用程序和翻译表中使用三个字母代码,但翻译文件夹必须使用两个字母代码,即es.

我同意在整本书中保持一致是很好的,也许还有一些关于背景发生的事情的额外信息。你可能想在 GitHub 上创建一个问题(或者甚至通过 PR 自己修复它) 。

于 2015-10-03T16:11:02.177 回答