2016-04-01 19 views
3

ドットを含む言語ファイルから翻訳を取得できますか?例えばLaravel:ドットを含む言語ファイルからの翻訳を取得

言語ディレクトリが見え、

/lang 
     /en 
      pagination.php 
      phone.history.php 

    /es 
      pagination.php 
      phone.history.php 

ようphone.history.phpファイルには、ドットが含まれており、phone.history.phpファイルからキーの「name」の翻訳を取得したいです。

Lang::get('phone.history.name') 

これは機能しません。

+2

なぜlaravel intendsとしてサブディレクトリを使用しないのですか? – jardis

+1

@ Emn1ty実際にサブディレクトリにドット表記を使用すると、設定ファイルと同じ方法で変換ファイルを読み込むことができません。翻訳キーには1つの '.'しか指定できません。 – Bogdan

答えて

2

実際翻訳に使用Laravelキーのみ動作するために.に1個のドットを含むことができ、そのドットの機能は、翻訳配列のキーから(言語ディレクトリに対して)変換ファイルのパスを分離することです。 Translatorクラスには、次のロジックを使用してparses the keyIlluminate\Support\NamespacedItemResolverクラスを拡張するためにです:

  • 最初に、(::で示される)名前空間の存在があるかどうかを決定し、それを抽出します。
  • その後、鍵をgroup(相対ファイルパス)とitem(翻訳配列キー)に分割します。あなたがこれを使用する名前空間が存在しないので、あなたの場合、中のSO

は:

  • ファイル名がphone
  • 翻訳されます:

    Lang::get('phone.history.name') 
    

    結果は以下のとおりです。配列キーはnameの代わりにhistoryになります

言語ディレクトリにphone.phpが存在しないため、動作しません。


ですから、ここでは2つのオプションがあります。

  1. は1ドットのみが翻訳パラメータでありますので、あなたのファイル名に/lang/en/phone_history.phpのようなものを別の文字を使用して、Lang::get('phone_history.name')を使用しています。

  2. はあなたには、いくつかの翻訳ファイルグループにしたい場合は、/lang/en/phone/history.phpのようなものをサブディレクトリを使用して、私はあなたが複数のレベルを使用することはできませんので、あなただけの、セパレータとして1つのドットを使用することができる上に述べたように、残念ながらLang::get('phone/history.name')を(使用構成ファイルLang::get('phone.history.name')の場合と同じようにドット表記法)。

関連する問題