外部ライブラリを使用せずにReactで言語を切り替える

アンブロ

外部ライブラリを使用せずにReactで言語を変更する方法を提案できますか?私の方法は、三項演算子を使用すること{language === 'en'? 'title': 'titre'}です。言語がの場合はen表示しtitle、そうでない場合は表示しますtitre他にどのような方法をお勧めできますか。たとえば、翻訳は別のjsonファイルに配置する必要があります。

ここのコード:https//stackblitz.com/edit/react-eu9myn

class App extends Component {
  constructor() {
    super();
    this.state = {
      language: 'en'
    };
  }

  changeLanguage = () => {
    this.setState({
      language:  'fr'
    })
  }

  render() {
    const {language} = this.state;
    return (
      <div>
        <p>
          {language === 'en' ? 'title' : 'titre'}
        </p>
        <button onClick={this.changeLanguage}>change language</button>
      </div>
    );
  }
}
ふわふわ

国際i18n)は、世界中の言語の癖の幅を説明するために、専門の翻訳者や言語学者によって設計されたいくつかの既存の標準ソリューションでは難しい問題です。すべての対象言語に堪能であっても、通常は独自の解決策を考え出そうとすべきではありません。

これは、ライブラリが必要であることを意味するわけではありませんが(これらの標準のいずれかを自分で実装できます)、i18nロジックをインラインで作成しても拡張性がなく、おそらくうまく機能しません。

i18nの最も簡単なケースは、コンテキストに依存せず、補間のない完全な文である文字列を翻訳する場合です。大きな翻訳辞書を使用して、その中の各文字列を検索するなど、非常に基本的なアプローチで済ますことができます。それはあなたの三項のように見えますが、少なくともそれは多くの言語に対応するでしょう、そしてそれをライブラリなしで行うのは合理的でしょう:

l10n = {
    'title': {en: 'title', fr: 'titre'}
}

<p>
    {l10n['title'][lang]}
</p>

ただし、Webサイト/アプリケーションなどで文字列補間が行われる場合は、ICUなどを実装するライブラリを検討してください

それでは、なぜそれが悪い考えになるのかをお見せしましょう。(n)を実際の数に置き換えたい文字列「(n)岩が見える」があり、文を文法的に正しくしたいので、数の一致を計算する必要があるとしましょう。つまり、「0 rocks」、「1 rock」、「2+ rocks」…英語の複数形は「s」を追加しているように見えます(真実ではありませんが、今のところ仮定しましょう)。これは3値で実装できます。あなたの例ではフランス語を使っていると思いますが、それはどうですか?「0カイユー」、「1カイユー」、「2+カイユー」。そうです、フランス語には複数形があります。それを説明するためにどのようにコードを書きますか?また、ドイツ語の翻訳が必要な場合はどうなりますか?多分、翻訳者は、オブジェクトが文の最後ではなく最初に行くべきであると決定するでしょう。

これらの問題はすべて、ICU文字列にエンコードする翻訳者に委任する必要があります。翻訳者は、正しい翻訳を取得するために、コンテキストが与えられたコードによって評価されます。ライブラリを使用する場合でも、自分で実装する場合でも、最終的に必要なのは関数localize(string, context)です。Reactからほとんど独立しており、次のようにコンポーネントで使用する関数と呼びましょう

import localize from './somewhere'

<p>
    {localize('title')}
</p>

本当に必要な場合は、ロケールを引数として渡して、何らかの方法でReactの状態に格納することができます。このライブラリは、実際のユーザーが言語を切り替えることはめったになく、その場合はアプリケーション全体をリロードしても問題ないため、必要ないと判断しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

codeigniterエラーで言語を切り替える

分類Dev

i18nextプラグインで言語を切り替える方法は?

分類Dev

プログラムを再コンパイルせずにBLASライブラリを切り替えることはできますか?

分類Dev

Chromeブラウザでウェブサイトが表示される言語を切り替えるにはどうすればよいですか?

分類Dev

.htaccessで言語を切り替える

分類Dev

EclipseGit-マージせずにブランチを切り替える

分類Dev

git:ブランチの変更をコミットせずに別のブランチに切り替える

分類Dev

文字列ライブラリ関数を使用せずに文字列を並べ替えて比較する

分類Dev

Polylangプラグインを使用して、WordpressWebサイトで異なる言語のフッターを切り替えます

分類Dev

作業ディレクトリ内のファイルを変更せずにブランチを切り替える

分類Dev

タブバーコントローラーを使用せずにストーリーボードを切り替える方法

分類Dev

スーパー+スペースで言語を切り替えると、Numlockライトがオフになります

分類Dev

.activateを使用せずに異なるブックを切り替える

分類Dev

新しいテンプレートを使用せずに、ブートストラップのようにタブを切り替えるだけで、Ionicタブにコンテンツをレンダリングする方法

分類Dev

jQueryを使用せずにHTML要素のクラスを切り替えます

分類Dev

Jqueryを使用せずにJavaScriptでaddEventListenerを使用して画像を切り替える

分類Dev

作業コードをコミットせずにブランチを切り替える

分類Dev

あるブラウザから別のブラウザに切り替えて、再び(コードを変更せずに)切り替えると、「2番目の参照...を追加できません」と表示されるのはなぜですか?

分類Dev

言語ごとにdrupal7の2つのレイヤースライダーを切り替えます

分類Dev

複数のサイトに展開された単一のアプリケーションで言語/単語/用語を切り替える

分類Dev

webrtc MediaDevicesを使用してreactアプリケーションでカメラを(前面から背面に)切り替えることができません

分類Dev

切り替えずに別のGitブランチをプルする

分類Dev

Unityでパブリック変数とプライベート変数を動的に切り替える方法

分類Dev

jinjaテンプレートで言語を切り替える

分類Dev

VBAでキーボード言語を切り替える

分類Dev

PHP:手動で言語を切り替える方法は?

分類Dev

agularjs1.4.9で言語を切り替える

分類Dev

JPListライブラリで「AND」の代わりに「OR」を並べ替える

分類Dev

Codeigniterで言語を切り替えた後、同じページにリダイレクトします

Related 関連記事

  1. 1

    codeigniterエラーで言語を切り替える

  2. 2

    i18nextプラグインで言語を切り替える方法は?

  3. 3

    プログラムを再コンパイルせずにBLASライブラリを切り替えることはできますか?

  4. 4

    Chromeブラウザでウェブサイトが表示される言語を切り替えるにはどうすればよいですか?

  5. 5

    .htaccessで言語を切り替える

  6. 6

    EclipseGit-マージせずにブランチを切り替える

  7. 7

    git:ブランチの変更をコミットせずに別のブランチに切り替える

  8. 8

    文字列ライブラリ関数を使用せずに文字列を並べ替えて比較する

  9. 9

    Polylangプラグインを使用して、WordpressWebサイトで異なる言語のフッターを切り替えます

  10. 10

    作業ディレクトリ内のファイルを変更せずにブランチを切り替える

  11. 11

    タブバーコントローラーを使用せずにストーリーボードを切り替える方法

  12. 12

    スーパー+スペースで言語を切り替えると、Numlockライトがオフになります

  13. 13

    .activateを使用せずに異なるブックを切り替える

  14. 14

    新しいテンプレートを使用せずに、ブートストラップのようにタブを切り替えるだけで、Ionicタブにコンテンツをレンダリングする方法

  15. 15

    jQueryを使用せずにHTML要素のクラスを切り替えます

  16. 16

    Jqueryを使用せずにJavaScriptでaddEventListenerを使用して画像を切り替える

  17. 17

    作業コードをコミットせずにブランチを切り替える

  18. 18

    あるブラウザから別のブラウザに切り替えて、再び(コードを変更せずに)切り替えると、「2番目の参照...を追加できません」と表示されるのはなぜですか?

  19. 19

    言語ごとにdrupal7の2つのレイヤースライダーを切り替えます

  20. 20

    複数のサイトに展開された単一のアプリケーションで言語/単語/用語を切り替える

  21. 21

    webrtc MediaDevicesを使用してreactアプリケーションでカメラを(前面から背面に)切り替えることができません

  22. 22

    切り替えずに別のGitブランチをプルする

  23. 23

    Unityでパブリック変数とプライベート変数を動的に切り替える方法

  24. 24

    jinjaテンプレートで言語を切り替える

  25. 25

    VBAでキーボード言語を切り替える

  26. 26

    PHP:手動で言語を切り替える方法は?

  27. 27

    agularjs1.4.9で言語を切り替える

  28. 28

    JPListライブラリで「AND」の代わりに「OR」を並べ替える

  29. 29

    Codeigniterで言語を切り替えた後、同じページにリダイレクトします

ホットタグ

アーカイブ