2016-11-21 17 views
1

私はangular-translateを使用して、Webアプリケーションを多言語化しています。すべてが正常に動作し、私が持っているように、今では私は私の翻訳を構造化している:いくつかの等しい翻訳を含む角度翻訳オブジェクト

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    } 
}); 

はのは、私がLANGUAGE.ENGLISHの同じ定義でBUTTONS.ENGLISHを追加したいとしましょう。それはBUTTONS.ENGLISH = this.LANGUAGE.ENGLISHのように何らかの方法で参照することは可能ですか? JavaScriptで

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    }, 
    "BUTTONS": { 
     "ENGLISH": this["LANGUAGE"]["ENGLISH"] // ??? 
    } 
}); 

答えて

1

JavaScriptのスコープの問題のために、あなたがしようとしている方法は不可能ですが、翻訳内で補間を使用して、次の例のように別の翻訳を呼び出すことはいつでも可能です。

"ENGLISH": "{{ 'LANGUAGE.ENGLISH' | translate }}" 

あなたの鍵は多分それが簡単に維持することができます別のキー値に対応することを保証することができますこの方法。

全コード:私はそれはプレーンな文字列よりも高価だということにもかかわらず、それがどんな巨大なパフォーマンスの問題は発生しませんと思うが、それは次のようになります。パフォーマンスについての

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    }, 
    "BUTTONS": { 
     "ENGLISH": "{{ 'LANGUAGE.ENGLISH' | translate }}" 
    } 
}); 

FURTHER注問題可変置換を使用するのと同じコストですが、プレーンな文字列よりも高価です(私はテストしましたが、通常は補間された文字列より25%安い)ので、大規模に使用しないでください。

+0

これは機能し、実行可能な唯一の方法だと思われるので、答えに感謝します。これは効率的だと思いますか? – Naigel

+1

@Naigel普通の文字列よりも高価であるにもかかわらず、大きなパフォーマンス上の問題は発生しないと思いますが、可変置換を使用するのと同じコストですが、プレーンな文字列よりも高価です(テストしました通常は補間された文字列よりも25%安い)ので、大規模に使用しないでください。 –

+0

完全な答えと説明をありがとうございました。多分この情報を将来の参考資料として答えに含めることができますか? – Naigel

1

、あなたは(thisはそれが前に手なかったことリテラルの初期化中に同じ値を持つ)thisを持つオブジェクトリテラル他のプロパティにアクセスすることはできません。

+0

この場合、 'this'は常に' window'オブジェクトでしょうか? –

+0

まあ、通常はい、それはコンテキストに依存します... – MarcoS

+0

どうやら簡単に現在のオブジェクトに何とかアクセスする方法はありませんか? – Naigel

関連する問題