我正在使用 CakePHP 创建一个网站,该网站不仅需要翻译成多种语言,还需要根据登录用户的类型翻译每种语言的多个短语。这将允许相同的功能,但使用更正式或更友好的语言而不会重复。
作为一个非常简单的例子:
- 类型 1:“客户”、“购买”、“购物车”
- 类型 2:“客户”、“购买”、“篮子”
- 类型 3:“用户”、“订单”、“发票”
这些类型中的每一种都将提供多种语言。
我已经在 CakePHP 中使用了标准本地化(我选择它的原因之一!),并且在 /Locale/[lang]/LC_MESSAGES/ 目录中有适当的 default.po 文件,并且一切正常(谢谢在此站点上指出 ger 需要 deu 才能工作的用户 ;) )。
在深入了解应用程序之前,我想添加短语,以便我可以将语言设置为法语,将短语设置为 type2。如果我在框架之外执行此操作,我将进行矩阵查找以根据语言和短语键找到正确的字符串,但不确定如何在 CakePHP 的本地化中执行此操作。
目前我正在使用标准的 __([string]) 约定,但由于这是在开发周期的早期,因此在必要时进行更改将是微不足道的。
我正在考虑使用 __d([phrase],[string]) 但如果不将我的应用程序创建为插件,则看不到如何设置它,然后我又回到 /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')
它只是工作。