flappy_translator

一个Flutter国际化字符串生成器。其理念是从CSV文件中自动生成静态字符串。这样,任何人都可以创建一个包含所有翻译的CSV文件,并自动生成相应的Dart代码。

入门

要使用flappy_translator包,您需要提供CSV文件中的翻译(使用逗号分隔)。

创建CSV并导出为“逗号分隔”格式

这是我们的CSV示例
csv_example

导出的文件 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的文件。

一旦您的项目中有了这个文件,您只需要

  1. 将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(),
    );
  }
}
  1. 使用您生成的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文件中的第一个语言列将被视为默认语言。
这意味着

  • 如果其他语言没有特定词汇的翻译,它将采用默认语言中对应的翻译。

  • 第一列必须完全填写!否则将无法工作。

在字符串中添加变量

我们增加了处理字符串中变量的可能性。
这意味着需要遵循一些规则

  1. 为了能够识别它们,您必须这样写
  • %myVariable$d (d 代表整数类型)
  • %myVariable$s (s 代表字符串类型)
  1. 如果您的变量名以数字开头,生成的名称将是varmyVariable
    否则,生成的变量名将是您提供的名称。
  • %1$d 变为 var1
  • %age$d 变为 age
  1. 生成的Dart代码中的变量是可选的

让我们以我们使用的CSV文件中的description字符串为例。

生成的函数签名将是

String description({String var1,})

如果未提供变量,字符串将不替换变量占位符。

GitHub

https://github.com/smartnsoft/FlappyTranslator