2015-10-03 45 views
1

不一致?在约translate behaviour in the CakePHP 3 book章有使用三字母代码,从英文名称,而不是语言为母语的名字衍生像ISO 639-2CakePHP 3.1:用于翻译行为的语言字母代码(i18n)

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之间保持一致并使用相同的语言代码可能更好?

另外,国际化模式表格例如现场locale定义为varchar(6) ...如果3个字母的代码需要varchar(3)应该是足够了...但是,即使我用完整的本地代码一样fr_FR VARCHAR(5)将足够。为什么使用varchar(6)的示例模式?

+1

有6个字母的语言代码正在使用中,例如'es-419' – AD7six

回答

3

我不会说翻译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

+2

谢谢,我按照您的建议并提出了一个请求,3.x文档中的章节已更新:) –