🗾
FlutterFire UIを日本語で表示
はじめに
2021年12月にFlutterFire UI(flutterfire_ui)が公開されました。
FlutterFire UIを使用すれば、ログイン画面(SignInScreen)やアカウント登録画面(RegisterScreen)など自分で構築することなく簡単に作成することができます。
ただ、日本語での表示は別途対応が必要なので、実際に試した内容を投稿します。
環境
- Flutter 2.8.1
- flutterfire_ui 0.3.0
画面イメージ
SignInScreen | RegisterScreen | |
---|---|---|
日本語 | ||
英語 |
日本語の表示方法
If you need to support multiple languages – follow the official flutter localization guide and make sure that your custom delegate extends LocalizationsDelegate<FlutterFireUILocalizations>.
公式ドキュメントにあるように、LocalizationsDelegate<FlutterFireUILocalizations>
を継承したクラスを作成し、それを使用します。
FlutterFireUIJaLocalizationsDelegate
class FlutterFireUIJaLocalizationsDelegate
extends LocalizationsDelegate<FlutterFireUILocalizations> {
bool isSupported(Locale locale) {
return locale.languageCode == 'ja';
}
Future<FlutterFireUILocalizations<FlutterFireUILocalizationLabels>> load(
Locale locale) {
final flutterFireUILocalizations =
FlutterFireUILocalizations(locale, FlutterFireUIJaLocalizationLabels());
return SynchronousFuture<FlutterFireUILocalizations>(
flutterFireUILocalizations);
}
bool shouldReload(
covariant LocalizationsDelegate<
FlutterFireUILocalizations<FlutterFireUILocalizationLabels>>
old) {
return false;
}
}
class FlutterFireUIJaLocalizationLabels
extends FlutterFireUILocalizationLabels {
String get emailInputLabel => 'メールアドレス';
String get passwordInputLabel => 'パスワード';
String get signInActionText => 'ログイン';
String get registerActionText => 'アカウント登録';
String get linkEmailButtonText => '次へ';
String get signInButtonText => 'ログイン';
String get registerButtonText => 'アカウント登録';
String get signInWithPhoneButtonText => '電話番号でログイン';
String get signInWithGoogleButtonText => 'Googleでログイン';
String get signInWithAppleButtonText => 'Appleでログイン';
String get signInWithFacebookButtonText => 'Facebookでログイン';
String get signInWithTwitterButtonText => 'Twitterでログイン';
String get phoneVerificationViewTitleText => '電話番号を入力';
String get verifyPhoneNumberButtonText => '次へ';
String get verifyCodeButtonText => '確認';
String get verifyingPhoneNumberViewTitle => 'SMSに記載されたコードを入力';
String get unknownError => '不明なエラーが発生しました';
String get smsAutoresolutionFailedError =>
'SMSコードの自動解決に失敗しました。コードを手動で入力してください。';
String get smsCodeSentText => 'SMSコード送信';
String get sendingSMSCodeText => 'SMSコード送信中...';
String get verifyingSMSCodeText => 'SMSコードの確認中...';
String get enterSMSCodeText => 'SMSコードを入力';
String get emailIsRequiredErrorText => 'メールアドレスは必須です';
String get isNotAValidEmailErrorText => '有効なメールアドレスを入力してください';
String get userNotFoundErrorText => 'アカウントは存在しません';
String get emailTakenErrorText => '入力されたメールアドレスのアカウントはすでに存在しています';
String get accessDisabledErrorText => 'このアカウントへのアクセスは一時的に無効化されました';
String get wrongOrNoPasswordErrorText => 'パスワードが無効です';
String get signInText => 'ログイン';
String get registerText => 'アカウント登録';
String get registerHintText => 'アカウントをお持ちでない方はこちら';
String get signInHintText => 'すでにアカウントをお持ちの方はこちら';
String get signOutButtonText => 'ログアウト';
String get phoneInputLabel => '電話番号';
String get phoneNumberIsRequiredErrorText => '電話番号は必須です';
String get phoneNumberInvalidErrorText => '電話番号が無効です';
String get profile => 'プロフィール';
String get name => '名前';
String get deleteAccount => 'アカウント削除';
String get passwordIsRequiredErrorText => 'パスワードは必須です';
String get confirmPasswordIsRequiredErrorText => 'パスワードを確認する';
String get confirmPasswordDoesNotMatchErrorText => 'パスワードが一致しません';
String get confirmPasswordInputLabel => 'パスワード(確認用)';
String get forgotPasswordButtonLabel => 'パスワードを忘れた方はこちら';
String get forgotPasswordViewTitle => 'パスワードを忘れた方';
String get resetPasswordButtonLabel => 'パスワードリセット';
String get verifyItsYouText => 'あなたであることを確認する';
String get differentMethodsSignInTitleText => '次のいずれかの方法でサインインしてください';
String get findProviderForEmailTitleText => '続行するには、メールアドレスを入力してください';
String get continueText => '続ける';
String get countryCode => 'コード';
String get codeRequiredErrorText => '国コードは必須です';
String get invalidCountryCode => '無効なコード';
String get chooseACountry => '国を選択してください';
String get enableMoreSignInMethods => 'より多くのログイン方法を有効にする';
String get signInMethods => 'ログイン方法';
String get provideEmail => 'メールアドレスとパスワードを入力してください';
String get goBackButtonLabel => '戻る';
String get passwordResetEmailSentText =>
'パスワードをリセットするためのリンクを記載したメールを送信しました。メールをご確認ください。';
String get forgotPasswordHintText => 'パスワードをリセットするためのリンクを送信します';
String get emailLinkSignInButtonLabel => 'マジックリンクでログイン';
String get signInWithEmailLinkViewTitleText => 'マジックリンクでログイン';
String get signInWithEmailLinkSentText =>
'マジックリンクが記載された電子メールを送信しました。メールをご確認の上、リンクからサインインしてください。';
String get sendLinkButtonLabel => 'マジックリンクの送信';
String get arrayLabel => 'array';
String get booleanLabel => 'boolean';
String get mapLabel => 'map';
String get nullLabel => 'null';
String get numberLabel => 'number';
String get stringLabel => 'string';
String get typeLabel => 'type';
String get valueLabel => 'value';
String get cancelLabel => 'キャンセル';
String get updateLabel => '更新';
String get northInitialLabel => 'N';
String get southInitialLabel => 'S';
String get westInitialLabel => 'W';
String get eastInitialLabel => 'E';
String get timestampLabel => 'timestamp';
String get latitudeLabel => 'longitude';
String get longitudeLabel => 'latitude';
String get geopointLabel => 'geopoint';
String get referenceLabel => 'reference';
}
日本語の内容は、適切な文言へ変更ください。
MaterialApp localizationsDelegatesに設定
MaterialApp.router(
localizationsDelegates: [
...L10n.localizationsDelegates,
FlutterFireUILocalizations.delegate,
FlutterFireUIJaLocalizationsDelegate()
],
supportedLocales: L10n.supportedLocales,
locale: locale,
// 以下省略
上記のように、localizationsDelegatesにFlutterFireUIJaLocalizationsDelegateを設定します。
(L10nは、flutter_localizationsで自動生成されたものです)
まとめ
FlutterFire UIで用意されたログイン画面・アカウント登録画面を日本語で表示することができました。
特別な要件などなければ、FlutterFire UI + 日本語表示もいかがでしょうか。
Discussion