私は現在、yii2の国際化モジュールを手に入れていますが、好奇心をそそられた振る舞いを見て、さまよっていました。yii2の国際化モジュールで大文字と小文字が区別されるのはなぜですか?
なぜYii::t('app','NEXT')
,Yii::t('app','next')
およびYii::t('app','Next')
は別々の翻訳が必要ですか?
私はデータベースに翻訳を保存しています。翻訳を大文字と小文字を区別することができますか?それともなぜこのような理由がありますか?
私は現在、yii2の国際化モジュールを手に入れていますが、好奇心をそそられた振る舞いを見て、さまよっていました。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);
}
}
そして代わりのYii::t('app', 'Next')
を呼び出すあなたはTranslator::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);
}
}
..Next、あなたのweb.php
設定ファイルを開き、次のように「I18N」コンポーネントのクラスを設定します。
'components' => [
'i18n' => [
'class' => 'app\components\NewI18N', // Here it is
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
],
],
],
...
それで全部です!この2番目のアプローチでは、サードパーティのTranslator
クラスを使用する必要はありません。おなじみのYii::t()
メソッドを呼び出すと、自動的に文字列が下がります。
ありがとう、それは多くを助けます;) – natral
あなたはようこそ=) – Yerke