gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:40:26 25 4
gpt4 key购买 nike

我目前一直在研究 yii2 的国际化模块,但遇到了一个奇怪的行为,并且在徘徊。

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

我将翻译存储在数据库中。有什么办法可以使翻译不区分大小写吗?或者有什么具体原因吗?

最佳答案

我相信这是预期的行为,因为在某些页面中打印“NEXT”和“next”看起来肯定不同。因此,例如,如果我想在某个地方看到“КЕЛЕСІ”而不是“келесі”,并且我只会收到小写的结果,这首先会让我感到困惑。

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

简单但不推荐

最简单的方法是定义一个带有静态函数的类,您可以在其中降低任何输入,然后调用前一个 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);
}
}

然后您将使用 Translator::t('app', 'Next') 而不是调用 Yii::t('app', 'Next') > 它将为您获取“下一个”一词的翻译


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

是覆盖在 web.php 设置中配置的主要 I18N 组件。首先你应该创建一个类并从 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);
}
}

..接下来,打开您的 web.php 设置文件并配置“i18n”组件类,如下所示:

'components' => [
'i18n' => [
'class' => 'app\components\NewI18N', // Here it is
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
],
],
],
...

就是这样!在第二种方法中,您不必使用第三方 Translator 类,只需调用您熟悉的 Yii::t() 方法,它会自动降低字符串。

关于php - 为什么yii2的国际化模块区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44765779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com