生成翻译文件
准备好你的语言 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);