Inu?
功能
Inu 是一个简单的 Flutter 应用本地化工具。它基于从包含应用所有字符串的结构化 YAML 文件生成类。
每个语言环境文件都会生成一个语言环境类。生成后,您可以从 Inu 类实例访问字符串。
入门
所有本地化文件都应具有相同的 YAML-Map 结构。每个键的值都应包含每种语言的翻译字符串。
- 将所有本地化文件放在
assets/translations/目录中 - 使用
flutter pub add inu将 Inu 添加到您的 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> 的命名参数,并结合 String 和 Text() 扩展方法 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