我正在使用CakePHP创建一个网站,该网站不仅需要翻译成多种语言,还需要根据登录用户的类型将每种语言翻译成多个短语。这将允许相同的功能,但使用更正式或更友好的语言而无需重复。
作为一个非常简单的例子:
这些类型中的每一种都有多种语言版本。
我在CakePHP中有标准的本地化工作(我之所以选择它的原因之一!)并且在/ Locale / [lang] / LC_MESSAGES /目录中有相应的default.po文件,所有这些都在那里正常工作(感谢用户在本网站上注意到ger需要deu才能工作;))。
在我进入应用程序太远之前,我想添加措辞,以便我可以设置,例如作为法语的语言和作为type2的措辞。如果我在框架之外做这个,我会有一个矩阵查找,根据语言和短语键找到正确的字符串但不确定如何在CakePHP的本地化中执行此操作。
目前我正在使用标准的__([string])约定,但由于这是开发周期的早期阶段,因此必要时可以进行更改。
我正在考虑使用__d([词组],[字符串])但是看不到如何在不创建我的应用程序作为插件的情况下设置此项,然后我又回到了与/ Locale /
我在搜索SO或cakePHP社区网站时无法找到任何此类示例,因此对任何建议都会感激不尽。
在cakePHP中有没有标准的方法可以做到这一点?如果没有,那么实施这个的最好的“最佳实践”方法是什么?
修改 - 按照下面的答案,这是如何实施的:
在/ app / Locale / [lang] / LC_MESSAGES /我创建了一个新的.po文件,其中新的措辞为phrase1.po,phrase2.po等。
在我设置语言的地方,我还设置了短语文件与po文件名称匹配的短语:
Configure::write('Config.language', 'deu');
Configure::write('App.langDomain', 'phrase1');
并且所有字符串都包含在:
__d(Configure::read('App.langDomain', 'string')
它只是有效。
答案 0 :(得分:0)
像这样使用__d():
__d(Configure::read('App.langDomain'), 'Some string');
在bootstrap.php中检查条件并根据您需要设置App.langDomain。
__ d()与插件无关,你可以在任何地方使用它。
另一种方法是使用自定义方法包装您的翻译,例如
__dd(Configure::read('App.langDomain'), array('foo' => __('String1', 'bar' => __('String2'));
该数组是langDomain =>的数组。 stringForThatDomain映射。你的__dd()方法将采用第一个参数中传递的方法。