Inu?

功能

Inu 是一个简单的 Flutter 应用本地化工具。它基于从包含应用所有字符串的结构化 YAML 文件生成类。

每个语言环境文件都会生成一个语言环境类。生成后,您可以从 Inu 类实例访问字符串。

入门

所有本地化文件都应具有相同的 YAML-Map 结构。每个键的值都应包含每种语言的翻译字符串。

  • 将所有本地化文件放在 assets/translations/ 目录中
  • 使用 flutter pub add inuInu 添加到您的 Flutter 应用的依赖项中
  • 首次运行时,执行 dart run inu:init 来生成语言环境类

用法

Inu 会创建一个名为 Inu 的抽象类,所有其他语言环境类都将实现它。该类是从开发过程中使用的主要语言(最可能是英语)生成的。

如果您不提供任何翻译,Inu 类中的字符串将被用作“回退语言环境”。

如果您在语言环境文件中添加了更多字符串,您可以运行

dart run inu:gen_classes

或者

just inu

如果您使用 just

Inu 在生成过程中会检查语言环境文件的完整性。一旦发现未翻译的字符串,您可以立即在终端提示符下进行翻译,或跳过该过程。

类生成后,您就可以通过使用 Inu 的实例作为所有字符串的容器来继续。

您可以编写一个类似的方法,并将返回的值存储为全局变量或存储在状态管理系统(如 get_it)中。

Inu chooseLocale() {
  final String langCode =
      Locale(Platform.localeName).languageCode.replaceAll('_', '-');

  switch (langCode) {
    case 'de-DE':
      return DeDE();
    default:
      return EnUS();
  }
}

您还可以通过 List<String> 形式的参数,或者使用 Map<String, String> 的命名参数,并结合 StringText() 扩展方法 tr()。只需像这样在语言环境文件中的字符串值中添加花括号即可。

arguments: this String contains {} and {}
namedArguments: Hello, my name is {firstname} {surname}

然后像这样使用 tr() 扩展方法。

Text(inu.arguments).tr(['letters', 'numbers']);
String greeting = inu.namedArguments.tr(namedArgs: { 
    'firstname' : 'Ryan',
    'surname' : 'Stecken'});

请查看 示例,了解 Flutter 演示应用的翻译版本!

语言环境文件结构

您应该将文件结构化为简单的 map(无列表或纯文本)。所有文件的 map 结构必须相同。

示例

英语语言环境文件

title: app
section1:
  undersection1:
    key1 : Value
    key2: "great value"
  anotherKey : another value

section2:
  supriseKey: ""Boo!""
  arguments: this String contains {} and {}
  namedArguments: Hello, my name is {firstname} {surname}

end: this is the end

德语语言环境文件

title: App
section1:
  undersection1:
    key1 : Wert
    key2: "toller Wert"
  anotherKey : weiterer Wert

section2:
  supriseKey: ""Buuh!""
  arguments: dieser String beinhaltet {} und {}
  namedArguments: Hallo, mein Name ist {firstname} {surname}

end: das ist das Ende

GitHub

查看 Github