20

私は自分のサイトを angularjs に移行することを考えています。静的なサーバー側のプレーンテキスト テンプレートをすべて django から angular に移行することで、非常に小さく始めたいと考えています (そうしないと、'{{}}' で構文の問題が発生します) )。

これを行う最善の方法は、次の 2 つのオプションのいずれかになるようです。

  1. サイトのすべてのテキストを含む JSON を返す ajax 呼び出しを行う。テキストは HTML 要素にバインドされた変数に格納されるため、angular がすべてを更新します。
  2. 静的 js ファイルをディクショナリと共に保存し、それを HTML に含めて、ディクショナリを angularjs にバインドします。

どちらのオプションでも、ページをリロードせずに言語を切り替えることができます。

どちらの方がよいですか?一般的に、これは良いアプローチですか、それとももっと正しい方法がありますか?

4

4 に答える 4

33

Angular Translate を含むいくつかの異なるオプションを試しましたが、Angular-gettextが今のところ一番気に入りました。

非常に役に立ったことの 1 つは、 angular-gettext-exampleと呼ばれる TodoMVC を i18n する作業デモがあることです。

ワークフローは簡単です。

  1. テンプレートに「translate」ディレクティブを追加します
  2. grunt を実行して .pot テンプレートを抽出します
  3. .pot を翻訳ベンダーに渡すか、POEdit または同様のソフトウェアを使用して DIY します。
  4. .po 翻訳ファイルをプロジェクトにドロップします。
  5. grunt を実行して .po ファイルをコンパイルします
  6. スコープに既定の言語を設定する
  7. マジックに注目!

ここに投稿された他のソリューションも同様に優れていると確信していますが、angular-gettext-example のようにうまく整理されたエンドツーエンドの例は見たことがありません。

乾杯、JD

于 2013-12-05T18:08:05.673 に答える
9

まず、ここで回答されているように、角度の区切り記号を他の記号に変更する方法があります: Angular JS custom delimiter

2. オプションの方が簡単です。一度含めると、ページの読み込み時にすべての翻訳が行われます。非同期呼び出しも約束もなく、素晴らしく簡単です。

それでも、私は最初のものに行きます。$translateのようなサービスは、オプション 1 に従うと本当に生活が楽になります。さらに、ロードされたデータを LocalStorage と Cookie にロードおよび保存するための多くのオプションがあるため、拡張とカスタマイズのための十分なスペースがあります。その後、$translate サービス、ディレクティブ、またはフィルターを使用してコンテンツを翻訳できます。

また、2 オプションを指定すると、キャッシュされたリクエストのオプションがすべて無効になることを忘れないでください。開始ページへの各リクエストで、サーバーは静的ファイルを読み取り、それを html に含める必要があります。最初のオプションを使用すると、ユーザーのブラウザは .json を好きなだけキャッシュできます。

于 2013-07-10T07:00:29.683 に答える
4

AngularJS は、通貨、日付、および数値のフィルターに対してのみ il8n/L10n をサポートします。この本によると:

ブックショット! (低画質でごめんなさい!携帯カメラ)

最初のアプローチに従って、翻訳を動的にロードします。手間はかかるが仕方がない

于 2013-07-10T06:58:54.807 に答える
4

angular-translateを見てください:)

両方のシナリオを解決します!

于 2013-08-01T05:43:42.933 に答える