web-dev-qa-db-ja.com

Angular 5国際化

私は最新のAngular5を使用してアプリケーションを構築していますが、ユーザーが言語を切り替えることができるようにする必要があります。これをAngular2 +で実装する必要はありませんでした(実際にはAngular5を使用しています)。

2つの場所で翻訳を設定する必要があります。

  • コンポーネントのテンプレートhtml-ラベルを指定された言語に変更します
  • Component.tsファイル内のコード-コード内の特定の条件下で動的に構築されるいくつかの文字列を翻訳する必要がある場合があります

ngx-translation を見ていましたが、コードを再構築せずに言語を変更できるように、必要なすべてを行うように見えます here を参照してください。しかし、私は おそらく非推奨になるでしょう を読みました。主な開発者がangularチームに移動してi18nコードを開発したためです。

また、現在の i18n が現在必要なすべてをサポートしていないことも理解しています。 here を参照してください。

私の質問-Angularの最新バージョンでの翻訳の状況はどうですか?本当に、Angular自体がまだ完全にサポートされていない場合(再コンパイルせずに言語を変更する場合)、代わりに推奨される他のライブラリはありますか? ngx-translateは将来に向いていますか?

この分野のガイダンスは大歓迎です!

43
Rob McCabe

これを調べて時間を過ごした後、 ngx-translateAngular-i18n の間に見つかった主な違いを投稿すると思いました。

  • Angularは一度に1つの言語でのみ機能します。言語を変更するには、アプリケーションを完全にリロードする必要があります。 JITサポートは、JITで動作することを意味しますが、コンパイル中にテンプレートのテキストを置き換えるので、このライブラリはバインディングを使用するため、bootstrapで翻訳を提供する必要があります。翻訳はいつでも変更できます。欠点は、バインディングがメモリを消費するため、Angularの方がパフォーマンスが高いことです。ただし、コンポーネントにOnPushを使用すると、おそらく違いに気付かないでしょう。
  • 現在のところ、Angularはテンプレートでi18nの使用のみをサポートしています。コードで使用できるようにする機能に取り組んでいますが、まだ開発中です。このライブラリは、コードとテンプレートの両方で機能します
  • AngularはXLIFFまたはXMB(どちらもXML形式)をサポートしますが、このlibはデフォルトでJSONをサポートしますが、必要な形式をサポートする独自のローダーを作成できます(たとえば、POファイルのローダーがあります)。個人的には、Jsonファイルはこれらの他の形式よりも読みやすいのですが、それは大きな欠点ではありません。
  • AngularはICU式(複数および選択)をサポートしていますが、このライブラリはサポートしていません
  • Angularはangularコードを含むhtmlプレースホルダーをサポートしますが、このライブラリーは通常のhtmlのみをサポートします(コンパイル時にではなく、実行時に実行されるため、Angularには$ compileがありません) AngularJSで)
  • このライブラリのAPIは、実行時に実行されるため、Angularにないもの(オブザーバブル、イベントなど)を提供できる(ただし、実際には必要ないので)より完全です。翻訳を変更することはできません)ngx-translateの作成者はこう言っています:

Ocombe (ngxの開発者):@joserslealはまさに彼らがしたことです。angularチームは私のためにi18nを改善しましたが、私のlibを直接統合する方法はありませんコア、コアチームで3か月働いた後、Angular i18nは私のライブラリよりもはるかに複雑で手の込んだものであることがわかります。それはより多くのより複雑なものを処理し、私のlibにあるすべてのバグや欠点なしで処理します。コアがライブラリでできるほど速く進化しないのはイライラすることを理解していますが、それには理由があり、最初の理由は、何かを実装することを忘れたときは、何かを実装して変更できないことです使用事例。すべてを徹底的に計画し、考えなければなりません。それでも、あなたはこのライブラリが将来コアでできることのほとんどを持っているでしょうが、残念ながらそこに着くまでに1年かかるかもしれません。良いニュースは、それが私の素朴な実装よりもはるかに良くなるということです。

これは、ngx-translateとAngularのi18nの主な違いについて説明する良い記事です。 https://github.com/ngx-translate/core/issues/495

I18nの変更は、angularのバージョン6で発生します。今日、私たちは現在バージョン5にいます:

いくつかの考え…

  • Angular-i18nは、実行時に翻訳が行われるのではなく、必要な言語でアプリケーションをコンパイルする方がパフォーマンスが向上します。異なる言語でアプリケーションの複数のビルドを作成する必要がある場合もあるため、欠点になる可能性があります。
  • SEOを使用している場合、URLブラウジングのために、angular-i18nが前に進むでしょう。私の場合、これはまったく必要ありません。
  • 複数の切り替えなどが必要な場合も、これは必要ありません。テンプレートとコードで、かなり単純なランタイム言語の切り替えが必要なだけです。
  • Angular-i18nは少なくとも2018年3月までリリースされません。私にとっては、今すぐアプリを作成する必要があるので、それまで待つことができません。
  • ngx-translateには、angular-i18nほど包括的な機能セットはありませんが、単純なランタイム変換のみが必要なので、私たちが必要とするものに対してはうまくいくと思います。
  • ngx-translateはオープンソースであり、開発が中止された日になります。深刻な問題がある場合は、自分で解決できると思います(できれば、発生する可能性のある問題は解決されます)。

また、Angular-l10nライブラリも非常に見栄えが良いので、見ていきます。

55
Rob McCabe

はい。 ngx-translateはこれまでのところ良好であり、将来的にもそうであることを願っています。

現在のAngular 5プロジェクトで5つ以上の言語で ngx-translate を使用しています。

これまでのところ私にとってはうまく機能しています。カスタムの変更を加える必要はありませんでした。プラグアンドプレイのように機能しました。

このプラグインを使用しました https://github.com/ngx-translate/core

5
Sangwin Gawande

ロブ・マッケイブ、あなたが上に挙げたものの他に、他の重要な懸念があります。説明しました ここ

0
Wildhammer