ReactJSを使用して多言語アプリケーションを構築する必要があります。アプリケーションには、さまざまな言語のカスタム辞書と、日付/時刻、数字、通貨の自動フォーマットが必要です。
私が見たすべてから、2つの非常に人気のあるライブラリがあります:
相互の利点は何でしょうか?最もサポートされ人気のあるものは何ですか?
複数の言語をサポートするReactJSアプリケーションの一般的な選択は何ですか?
@whypの応答は考慮されていません。react-i18nextはi18nextの一部であり、追加の2100スターがあります(背後に巨大な会社はありません)。
react-intlはかなり混乱する可能性があります(個人的な意見)。 i18nextは確かに統合が簡単で、より多くの機能(リソースのロード、ユーザー言語の検出)を提供します
i18nextは反応するだけではありません-どこでも使用できます( https://www.i18next.com/supported-frameworks.html )
i18nextにはサービスレイヤーとして追加機能があります。 http://locize.com/ 国際化(i18n)のほかにローカライズプロセスを解決します。
私が開発した代替i18nライブラリを提示したいと思います。
lingui-i18n
_)とReact(_lingui-react
_)の両方で動作しますlingui-react
_は、インラインコンポーネントと豊富な書式設定を完全にサポートする唯一のライブラリです(以下を参照)lingui-cli
_)も含まれていますICU MessageFormatは、変数、複数形、序数、選択肢、数値/日付のフォーマットをサポートし、拡張も可能なため、非常に柔軟です。ただし、複雑なメッセージを書くのは少し難しいです。
_lingui-i18n
_はES6タグ付きテンプレートリテラルを使用して便利な構文を提供し、_lingui-react
_はReactコンポーネントを使用して同様の構文を提供します
_import { i18n } from 'lingui-i18n'
i18n.t`Hello World`
i18n.t`Hello, my name is ${name}`
i18n.plural({ value: count, one: "# book", other: "# books" })
_
lingui-i18n docs のその他の例
_import React from 'react'
import { Trans, Plural } from 'lingui-react'
class App extends React.Component {
render() {
const name = "Fred"
const count = 42
return (
<div>
// Static text
<Trans>January</Trans>
// Variables
<Trans>Hello, my name is {name}</Trans>
// Components
<Trans>See the <a href="/more">description</a> below.</Trans>
// Plurals
<Plural
value={count}
zero={<strong>No books</strong>}
one="# book"
other="# books"
/>
</div>
)
}
}
_
docs は_js-lingui
_メインドキュメントの一部です。
私はこのライブラリを書き始めました。a)より簡単な構文とb)インラインコンポーネントの完全なサポートが必要だからです。
_react-intl
_と_react-i18next
_の両方は、リッチテキストとインラインコンポーネントのサポートが非常に限られています。コンポーネント内で基本的なhtmlタグ(_This is <strong>bold</strong> text.
_)を使用するか、コンポーネントを変数として挿入する(_This is {el} text.
_ where _el = <strong>bold</strong>
_)ことができます。
1番目のアプローチの問題は、カスタムReactコンポーネントを使用できないことです。2番目のアプローチの問題は、トランスレーターが1つではなく2つのメッセージを処理することです(_This is {el} text.
_およびbold
)。コンテキストを維持するために文全体を翻訳する必要があるため、これは実際にはかなり悪いです。
_lingui-react
_を使用すると、anyReact翻訳内のコンポーネントを使用でき、メッセージは1つの部分に抽出されます。
_<Trans>See the <Link to="/more">description</Link> below.</Trans>
// for translator: See the <0>description</0> below.
_
このソリューションのもう1つの利点は、抽出されたメッセージにコンポーネント名と小道具が隠れていることです。内側の要素のclass
を変更した後にのみ、翻訳の更新に多くの時間を費やしたことを覚えています。
react-i18next または react-intl の補間と比較してください。
_lingui-i18n
_と_lingui-react
_の両方には、すべてを機能させるためのプリセットが必要です。 _react-scripts
_をイジェクトまたはフォークする必要があるため、Create React Appで使用する場合、これは問題です。
一般的な選択はreact-intlであり、react-i18nextよりも広く普及しています。現在、githubに4.5k対react-i18nextの300スターがあります。これは、Reactでローカライズするための重要なソリューションです。
始めるためのチュートリアルは次のとおりです。 https://medium.freecodecamp.com/internationalization-in-react-7264738274a
https://github.com/alibaba/react-intl-universal をお試しください。これはAlibaba Groupによって開発されています。 yahoo/react-intlは、React.Componentなどのビューレイヤーでのみ適用できます。 Vanilla JSファイルの場合、国際化する方法はありません。たとえば、次のスニペットは、アプリの多くのReact.Componentで使用される一般的なフォームバリデーターです。
export default const rules = {
noSpace(value) {
if (value.includes(' ')) {
return 'Space is not allowed.';
}
}
};
alibaba/react-intl-universal はシンプルですが強力です。コンポーネントの動作は変わりません。 JSXおよび通常のJSファイルで使用できます。