Flutter微框架Nylo(五):本地化

403 阅读2分钟

本地化我们的项目为我们提供了一种为不同国家/地区的用户更改语言的简单方法。

如果应用的主要区域设置是 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. 设置默认区域设置

你可能希望在用户首次打开应用时更新默认区域设置,请按照以下步骤操作。

  1. 首先,打开 .env 文件。
  2. 接下来,将 DEFAULT_LOCALE 属性更新为区域设置,如以下示例所示。
DEFAULT_LOCALE="zh"