flappy_translator
一个Flutter国际化字符串生成器。其理念是从CSV文件中自动生成静态字符串。这样,任何人都可以创建一个包含所有翻译的CSV文件,并自动生成相应的Dart代码。
入门
要使用flappy_translator包,您需要提供CSV文件中的翻译(使用逗号分隔)。
创建CSV并导出为“逗号分隔”格式
这是我们的CSV示例

导出的文件 myFile.csv
keys,fr,en,es
appTitle,Ma super application,My awesome application,Mi gran application
subtitle,Un sous titre,A subtitle,Un subtitulò
description,Un texte avec une variable : %1$s,A text with a variable : %1$s,Un texto con una variable : %1$s
littleTest,"Voici, pour l'exemple, ""un test"" avec la variable %age$d","Here is, for the example, ""a test"" with variable %age$d","Aqui esta, por ejemplo, ""una prueba"" con la variable %age$d"
添加依赖
dependencies:
flutter_localizations:
sdk: flutter
dev_dependencies:
flappy_translator:
运行包
flutter pub get
flutter pub run flappy_translator test.csv path/to/destination
使用i18n生成的文件
该包使用您的CV文件,在您提供的path/to/destination生成一个名为i18n.dart的文件。
一旦您的项目中有了这个文件,您只需要
- 将I18nDelegate添加到您的delegate中
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
const I18nDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('fr', ''),
const Locale('es', ''),
],
home: Home(),
);
}
}
- 使用您生成的I18n类!:)
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: Column(
children: <Widget>[
Text(I18n.of(context).appTitle),
Text(I18n.of(context).description(var1: 2)),
Text(I18n.of(context).littleTest(age: 32)),
],
),
),
),
);
}
}
规则和功能
默认语言
您的CSV文件中的第一个语言列将被视为默认语言。
这意味着
-
如果其他语言没有特定词汇的翻译,它将采用默认语言中对应的翻译。
-
第一列必须完全填写!否则将无法工作。
在字符串中添加变量
我们增加了处理字符串中变量的可能性。
这意味着需要遵循一些规则
- 为了能够识别它们,您必须这样写
- %myVariable$d (
d代表整数类型) - %myVariable$s (
s代表字符串类型)
- 如果您的变量名以数字开头,生成的名称将是
varmyVariable
否则,生成的变量名将是您提供的名称。
%1$d变为var1%age$d变为age
- 生成的Dart代码中的变量是可选的
让我们以我们使用的CSV文件中的description字符串为例。
生成的函数签名将是
String description({String var1,})
如果未提供变量,字符串将不替换变量占位符。