Flutter-internationalization
Flutter-国際化
現在、モバイルアプリケーションはさまざまな国のお客様によって使用されており、その結果、アプリケーションはさまざまな言語でコンテンツを表示する必要があります。 アプリケーションを複数の言語で動作させることを、アプリケーションの国際化と呼びます。
アプリケーションが異なる言語で動作するためには、まずアプリケーションが実行されているシステムの現在のロケールを見つけてから、その特定のロケールでコンテンツを表示する必要があります。このプロセスはローカリゼーションと呼ばれます。
Flutterフレームワークは、ローカライズ用の3つの基本クラスと、アプリケーションをローカライズするための基本クラスから派生した広範なユーティリティクラスを提供します。
基本クラスは次のとおりです-
- Locale-ロケールは、ユーザーの言語を識別するために使用されるクラスです。 たとえば、en-usはアメリカ英語を識別し、次のように作成できます。
ここで、最初の引数は言語コードであり、2番目の引数は国コードです。 _Argentinaスペイン語(es-ar)_ロケールを作成する別の例は次のとおりです-
- Localizations-Localizationsは、Localeとその子のローカライズされたリソースを設定するために使用される一般的なウィジェットです。
ここで、CustomLocalizationsは、ウィジェットの特定のローカライズされたコンテンツ(タイトルとメッセージ)を取得するために特別に作成された新しいカスタムクラスです。 ofメソッドは、Localizationsクラスを使用して新しいCustomLocalizationsクラスを返します。
LocalizationsDelegate <T>-LocalizationsDelegate <T>は、Localizationsウィジェットがロードされるファクトリクラスです。 それは3つのオーバーライド可能なメソッドを持っています-
- isSupported-ロケールを受け入れ、指定されたロケールがサポートされているかどうかを返します。
- load-ロケールを受け入れ、指定されたロケールのリソースのロードを開始します。
- shouldReload-Localizationsウィジェットの再構築時にCustomLocalizationsの再読み込みが必要かどうかを指定します。
- CustomLocalizationDelegateの完全なコードは次のとおりです-
一般的に、Flutterアプリケーションは2つのルートレベルウィジェット、MaterialAppまたはWidgetsAppに基づいています。 Flutterは、両方のウィジェットに既製のローカライズを提供し、それらはMaterialLocalizationsとWidgetsLocaliationsです。 さらに、FlutterはMaterialLocalizationsとWidgetsLocaliationsをロードするデリゲートも提供します。これらはそれぞれGlobalMaterialLocalizations.delegateとGlobalWidgetsLocalizations.delegateです。
概念をテストして理解するために、簡単な国際化対応アプリケーションを作成しましょう。
- 新しいflutterアプリケーションflutter_localization_appを作成します。
- Flutterは、専用flutterパッケージflutter_localizationsを使用した国際化をサポートしています。 ローカライズされたコンテンツをメインSDKから分離するという考え方です。 pubspec.yamlを開き、以下のコードを追加して国際化パッケージを有効にします-
- Androidスタジオは、pubspec.yamlが更新されたことを示す次のアラートを表示します。
- [依存関係の取得]オプションをクリックします。 Androidスタジオはインターネットからパッケージを取得し、アプリケーション用に適切に構成します。
- 次のようにmain.dartにflutter_localizationsパッケージをインポートします-
- ここで、SynchronousFutureの目的は、カスタムローカリゼーションを同期的にロードすることです。
- 以下に指定されているように、カスタムローカリゼーションとそれに対応するデリゲートを作成します-
- ここでは、アプリケーションのタイトルとメッセージのローカライズをサポートするためにCustomLocalizationsが作成され、CustomLocalizationsをロードするためにCustomLocalizationsDelegateが使用されます。
- MaterialAppプロパティ、localizationsDelegates、supportedLocalesを使用して、下で指定されているように、MaterialApp、WidgetsApp、およびCustomLocalizationのデリゲートを追加します-
- CustomLocalizationsメソッドを使用して、ローカライズされたタイトルとメッセージの値を取得し、以下に指定されている適切な場所で使用します-
- ここでは、簡単にするためにMyHomePageクラスをStatefulWidgetからStatelessWidgetに変更し、CustomLocalizationsを使用してタイトルとメッセージを取得しました。
- アプリケーションをコンパイルして実行します。 アプリケーションは、コンテンツを英語で表示します。 アプリケーションを閉じます。 設定→システム→言語と入力→言語**に移動します。
- [言語の追加]オプションをクリックして、スペイン語を選択します。 これにより、スペイン語がインストールされ、オプションの1つとしてリストされます。
- スペイン語を選択し、英語の上に移動します。 これは、第一言語としてスペイン語に設定され、すべてがスペイン語のテキストに変更されます。
- 国際化アプリケーションを再起動すると、タイトルとメッセージがスペイン語で表示されます。
- 設定で英語オプションをスペイン語オプションの上に移動することにより、言語を英語に戻すことができます。
- アプリケーションの結果(スペイン語)は、以下のスクリーンショットに示されています-
intlパッケージの使用
Flutterは、ローカライズされたモバイルアプリケーションの開発をさらに簡素化するintlパッケージを提供します。 intlパッケージは、言語固有のメッセージを半自動生成するための特別なメソッドとツールを提供します。
intlパッケージを使用して新しいローカライズアプリケーションを作成し、概念を理解しましょう。
- 新しいflutterアプリケーションflutter_intl_appを作成します。
- pubspec.yamlを開き、パッケージの詳細を追加します。
- Androidスタジオは、pubspec.yamlが更新されたことを通知する以下のアラートを表示します。
- [依存関係の取得]オプションをクリックします。 Androidスタジオはインターネットからパッケージを取得し、アプリケーション用に適切に構成します。
- 前のサンプルflutter_internationalization_appからmain.dartをコピーします。
- 以下に示すように、国際パッケージをインポートします-
- 以下に示すコードに示すように、CustomLocalizationクラスを更新します-
ここでは、カスタムメソッドの代わりにintlパッケージの3つのメソッドを使用しました。 それ以外は、概念は同じです。
Intl.canonicalizedLocale-正しいロケール名を取得するために使用されます。
Intl.defaultLocale-現在のロケールを設定するために使用
Intl.message-新しいメッセージを定義するために使用されます。
- 次に、フォルダーlib/l10nを作成します
- コマンドプロンプトを開き、アプリケーションのルートディレクトリ(pubspec.yamlが利用可能)に移動し、次のコマンドを実行します-
- ここで、コマンドは、異なるロケールでメッセージを作成するためのテンプレートintl_message.arbファイルを生成します。 ファイルの内容は次のとおりです-
- intl_message.arbをコピーして、新しいファイルintl_en.arbを作成します。
- intl_message.arbをコピーし、新しいファイルintl_es.arbを作成して、以下に示すようにコンテンツをスペイン語に変更します-
- 次に、次のコマンドを実行して、最終的なメッセージファイルmessages_all.dartを作成します。
- アプリケーションをコンパイルして実行します。 上記のアプリケーションflutter_localization_appと同様に機能します。