Skip to content

生成翻译文件

准备好你的语言 json 文件,将其放入 assets/locales

例如

pt_BR.json

json
{
  "buttons": {
    "login": "Entrar",
    "sign_in": "Cadastrar-se",
    "logout": "Sair",
    "sign_in_fb": "Entrar com o Facebook",
    "sign_in_google": "Entar com o Google",
    "sign_in_apple": "Entar com a  Apple"
  }
}

en_US.json

json
{
  "buttons": {
    "login": "Login",
    "sign_in": "Sign-in",
    "logout": "Logout",
    "sign_in_fb": "Sign-in with Facebook",
    "sign_in_google": "Sign-in with Google",
    "sign_in_apple": "Sign-in with Apple"
  }
}

然后执行生成命令

shell
get generate locales assets/locales

这将会为你生成一份翻译文件

dart
abstract class AppTranslation {

  static Map<String, Map<String, String>> translations = {
    'en_US' : Locales.en_US,
    'pt_BR' : Locales.pt_BR,
  };

}
abstract class LocaleKeys {
  static const buttons_login = 'buttons_login';
  static const buttons_sign_in = 'buttons_sign_in';
  static const buttons_logout = 'buttons_logout';
  static const buttons_sign_in_fb = 'buttons_sign_in_fb';
  static const buttons_sign_in_google = 'buttons_sign_in_google';
  static const buttons_sign_in_apple = 'buttons_sign_in_apple';
}

abstract class Locales {

  static const en_US = {
   'buttons_login': 'Login',
   'buttons_sign_in': 'Sign-in',
   'buttons_logout': 'Logout',
   'buttons_sign_in_fb': 'Sign-in with Facebook',
   'buttons_sign_in_google': 'Sign-in with Google',
   'buttons_sign_in_apple': 'Sign-in with Apple',
  };
  static const pt_BR = {
   'buttons_login': 'Entrar',
   'buttons_sign_in': 'Cadastrar-se',
   'buttons_logout': 'Sair',
   'buttons_sign_in_fb': 'Entrar com o Facebook',
   'buttons_sign_in_google': 'Entar com o Google',
   'buttons_sign_in_apple': 'Entar com a  Apple',
  };

接入翻译功能

在你的 GetMaterialApp 中新增一行

dart
GetMaterialApp(
      ...
      translationsKeys: AppTranslation.translations,
      locale: Locale('en', 'US'), // 将会按照此处指定的语言翻译
      fallbackLocale: Locale('pt', 'BR'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
      ...
    )

使用

dart
Text(
  'buttons_login'.tr
)
// or
Text(
  LocaleKeys.button_login.tr
)

系统语言

要读取系统语言,可以使用window.locale。

dart
import 'dart:ui' as ui;

return GetMaterialApp(
    locale: ui.window.locale,
);

改变语言

调用Get.updateLocale(locale)来更新语言环境。然后翻译会自动使用新的locale。

dart
var locale = Locale('en', 'US');
Get.updateLocale(locale);