为什么yii2的国际化模块区分大小写?

时间:2017-06-26 17:58:55

标签: php yii2 internationalization

我目前正在使用yii2的国际化模块,但遇到了一种奇怪的行为并且正在徘徊。

为什么Yii::t('app','NEXT')Yii::t('app','next')Yii::t('app','Next')需要单独翻译?

我将翻译存储在数据库中。有什么办法可以让翻译不区分大小写吗?或者有一个特定的原因,为什么会这样?

1 个答案:

答案 0 :(得分:6)

我认为这是一种预期的行为,因为在某些页面中打印“NEXT”和“next”看起来确实不同。所以,例如,如果我想看某个地方'КЕЛЕСІ'而不是'келесі',而且我只收到小写的结果,那么首先会让我感到困惑。

无论如何,最好将该功能初始化区分大小写,并且您可以根据需要使其不区分大小写(或制作任何字符串运算符)。

轻松但不推荐

最简单的方法是使用静态函数定义一个类,在这里你可以降低任何输入,然后调用前 public double[] GetTrainingValues(int index) { double[] values = new double[TrainingSet.Count]; values[index] = 1.0; return values; } 函数。

Yii::t()

然后,您不会致电namespace app\components; // your namespace here class Translator { public static function t($category, $message, $params = [], $language = null) { return \Yii::t($category, strtolower($message), $params, $language); } } ,而是使用Yii::t('app', 'Next'),而是会为您提取“下一个”字词的翻译

第二个(更优雅)的解决方案:

将覆盖在Translator::t('app', 'Next')设置中配置的主I18N组件。 首先,您应该创建一个类并从web.php组件继承它:

yii\i18n\I18N

..接下来,打开您的namespace app\components; use yii\i18n\I18N; class NewI18N extends I18N { public function translate($category, $message, $params, $language) { return parent::translate($category, strtolower($message), $params, $language); } } 设置文件并配置'i18n'组件类如下:

web.php

这就是全部!在第二种方法中,您不必使用第三方'components' => [ 'i18n' => [ 'class' => 'app\components\NewI18N', // Here it is 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', ], ], ], ... 类,只需调用熟悉的Translator方法,它就会自动降低字符串。