[SOLVED] Yii::t() 源和目标语言相同时,是否可以不忽略获取变量?

Yii::t(‘a’,‘a’);

如果当前是英文,源也是英文,

即使我配置了 en_us/a.php 中有 a=>‘aaaa’

也不会返回 "aaa" ?

有没有办法让它返回 "aaa" ?

不行,但是你可以将源文件写成一个没有存在的语言。

这不太好吧~

我觉得 Yii::t() 应该有个接口可以强制不忽略源语言的对照~

顶起来啊,qiang,给个答复啊~

这主要是出于性能考虑。

正如dongbeta建议的,你可以把sourceLanguage设成一个不存在的语言,这样就能强制翻译了。

嗯,我也是很在乎性能~

可是我觉得,可以多开一个参数,作为接口~~ 就可以实现了。

更改 sourceLanguage是一个bad idea,至少在我的多语模型行为插件中,这个suorceLanguage是非常重要的参考依据~

你可以配置messageSource的language属性,而不用变动application的sourceLanguage。

这样始终还是有点麻烦,因为需求是很简单的,假如还需要这么麻烦的配置来实现,还不如另外想办法

其实我感觉我这个需求应该还是蛮普遍的。

举个例子:

有一段留言后提示成功的message,因为我不太确定英文的内容,假如直接使用 Yii::t(‘app’,’%^%$^#’),然后再定义 ‘%^%$^#’ 的对应翻译内容的话,将来会对这句话进行改动,我就必须改动至少两个地方。

假如可以使用key模式的话, 我就只需要改动 message里面对应的翻译即可~

这不麻烦啊。就是在main.php里把messages的messageSource属性配置成一个不存在的locale id而已。这样就完全达到你的目的了,而且没有副作用。

关键是我也非常在乎效率~~

我只是在偶尔一两处会希望使用key=>value的模式~其余还是默认情况

怎么是好?

你可以考虑override message source的translate函数。比如当category是某些特定值时你强制翻译(或者message以某些特定字串开始时)。

ok~ 看了只能够这样了~

你可以重写Yii::t()