cakephp中每种语言有多个短语

时间:2013-05-29 16:07:09

标签: cakephp localization

我正在使用CakePHP创建一个网站,该网站不仅需要翻译成多种语言,还需要根据登录用户的类型将每种语言翻译成多个短语。这将允许相同的功能,但使用更正式或更友好的语言而无需重复。

作为一个非常简单的例子:

  • 类型1:“客户”,“购买”,“购物车”
  • 类型2:“客户”,“购买”,“购物篮”
  • 类型3:“用户”,“订单”,“发票”

这些类型中的每一种都有多种语言版本。

我在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') 

它只是有效。

1 个答案:

答案 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()方法将采用第一个参数中传递的方法。