本地化我们的项目为我们提供了一种为不同国家/地区的用户更改语言的简单方法。
如果应用的主要区域设置是 en(英语),但你还希望为中国用户提供汉语版本,则本地化应用将是最佳选择。
下面是使用 Nylo 本地化应用中的文本的示例。
本地化文件的示例: lang/en.json
{
"documentation": "documentation",
"changelog": "changelog"
}
组件:
ListView(
children: [
Text(
"documentation".tr()
),
// 或者
Text(
trans("documentation")
)
]
)
以上将显示 lang/en.json 文件中的文本。如果您支持不止一种本地语言,请添加另一个文件,如 lang/es.json,并复制键值,但更改值以匹配本地语言。下面是一个例子。
lang/en.json
{
"documentation": "documentation",
"changelog": "changelog"
}
lang/zh.json
{
"documentation": "文档",
"changelog": "日志"
}
1. 添加本地化文件
将所有本地化文件添加到 lang/ 目录中。在这里,您将能够包含不同的区域设置。
添加 .json 文件后,您需要将它们包含在 pubspec.yaml 文件中assets 部分。
2. 使用
"documentation".tr()
// 或者
trans("documentation");
您还可以在 json 文件中使用嵌套对象。下面是一个示例。
{
"changelog": "changelog",
"intros": {
"hello": "hello"
}
}
使用嵌套 JSON 键的示例:
"intros.hello".tr()
// 或者
trans("intros.hello");
2. 参数
您可以提供参数,使用时传入参数。在下面的示例中,我们有一个名为 "intros.hello_name "的key。它有一个名为 "first_name "的可填写值,要填写这个值,请向下面的方法传递一个值。
{
"changelog": "changelog",
"intros": {
"hello_name": "hello {{first_name}}",
}
}
在 JSON 文件中填充参数的示例。
"intros.hello_name".tr(arguments: {"first_name": "Anthony"}) // Hello Anthony
// or
trans("intros.hello_name", arguments: {"first_name": "Anthony"}); // Hello Anthony
3. 更新区域设置
在 Nylo 中更新应用程序中的区域设置很简单,可以在小部件中使用以下方法。
String language = 'es'; // 国家代码必须与您的 json 文件匹配,例如 zh.json 将是 "zh
await NyLocalization.instance.setLanguage(context, language: language); // 切换语言
这会将区域设置更新为汉语。
如果小组件扩展了 NyState 类,则可以通过调用 changeLanguage 来设置区域。
class _MyHomePageState extends NyState<MyHomePage> {
...
InkWell(
child: Text("切换到汉语"),
onTap: () async {
await changeLanguage('zh');
},
)
如果您需要为用户提供菜单以选择要在应用程序中使用的语言,这将非常有用。
4. 设置默认区域设置
你可能希望在用户首次打开应用时更新默认区域设置,请按照以下步骤操作。
- 首先,打开
.env文件。 - 接下来,将
DEFAULT_LOCALE属性更新为区域设置,如以下示例所示。
DEFAULT_LOCALE="zh"