Flutter翻译功能插件flappy_translator的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter翻译功能插件flappy_translator的使用

flappy_translator 是一个工具,可以从CSV和Excel文件自动生成Flutter本地化资源。团队成员可以编辑CSV/Excel文件,并通过终端命令将后续的翻译导入到项目中。基本变量(字符串和整数)是支持的,但不计划支持性别或复数形式。如果需要这种功能,请考虑使用 arb_generator

开始使用

添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_localizations:
    sdk: flutter
    
dev_dependencies: 
  flappy_translator: ^最新版本号

定义设置

flappy_translator 的设置必须在项目的 pubspec.yaml 文件中定义。input_file_path 是唯一必需的参数。

flappy_translator:
  input_file_path: "test.csv"
  output_dir: "lib"
  file_name: "i18n"
  class_name: "I18n"
  delimiter: ","
  start_index: 1
  depend_on_context: true
  use_single_quotes: false
  replace_no_break_spaces: false
  expose_get_string: false
  expose_loca_strings: false
  expose_locale_maps: false
  generate_comments: false
  comment_languages: []

运行包

确保当前工作目录是项目根目录,然后运行以下命令:

flutter pub get
dart run flappy_translator

更新iOS Info.plist

对于iOS,ios/Runner/Info.plist 需要更新以包含应用程序支持的语言数组:

<key>CFBundleLocalizations</key>
<array>
  <string>fr</string>
  <string>en</string>
  <string>de</string>
</array>

更多信息请参阅 Internationalizing Flutter apps

使用生成的i18n文件

包使用您的输入文件生成一个名为 file_name 的文件,位于您提供的 output_dir 中。以下示例使用默认的 class_name I18n,并且依赖于 BuildContext

首先,将 I18nDelegate 添加到您的委托列表中:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'i18n.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: const [
        I18nDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: I18nDelegate.supportedLocals,
      home: const Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('flappy_translator'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(I18n.of(context).plainText),
            Text(I18n.of(context).welcome(name: 'Dash')),
            Text(I18n.of(context).favoriteColor),
          ],
        ),
      ),
    );
  }
}

示例Demo

以下是一个完整的示例demo,展示如何使用 flappy_translator 插件进行多语言支持:

// lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'i18n.dart'; // 自动生成的文件

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: const [
        I18nDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: I18nDelegate.supportedLocals,
      home: const Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('flappy_translator Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(I18n.of(context).plainText),
            Text(I18n.of(context).welcome(name: 'John')),
            Text(I18n.of(context).favoriteColor),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,展示了如何使用 flappy_translator 插件来支持多语言文本显示。通过编辑CSV或Excel文件并运行生成命令,您可以轻松地为应用添加新的语言支持。

希望这个教程能帮助您快速上手 flappy_translator 插件的使用!更多详细信息请参考 官方文档


更多关于Flutter翻译功能插件flappy_translator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter翻译功能插件flappy_translator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flappy_translator插件来实现翻译功能的示例代码。flappy_translator插件允许你轻松地在Flutter应用中实现多语言支持。

首先,你需要在pubspec.yaml文件中添加依赖项:

dependencies:
  flutter:
    sdk: flutter
  flappy_translator: ^最新版本号 # 请替换为实际最新版本号

然后,运行flutter pub get来安装依赖项。

接下来,让我们看一下如何在Flutter应用中使用flappy_translator

1. 配置翻译文件

在项目的assets目录下创建一个translations文件夹,并在其中创建不同语言的JSON文件。例如,创建en.jsonzh.json文件:

assets/translations/en.json:

{
  "hello": "Hello",
  "goodbye": "Goodbye"
}

assets/translations/zh.json:

{
  "hello": "你好",
  "goodbye": "再见"
}

2. 初始化FlappyTranslator

在你的主文件(例如main.dart)中,初始化FlappyTranslator

import 'package:flutter/material.dart';
import 'package:flappy_translator/flappy_translator.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Translation Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TranslatorProvider(
        supportedLocales: [Locale('en'), Locale('zh')],
        fallbackLocale: Locale('en'),
        assets: {
          Locale('en'): 'assets/translations/en.json',
          Locale('zh'): 'assets/translations/zh.json',
        },
        child: MyHomePage(),
      ),
    );
  }
}

3. 使用翻译功能

现在,你可以在任何小部件中使用翻译功能。例如,在MyHomePage中:

import 'package:flutter/material.dart';
import 'package:flappy_translator/flappy_translator.dart';
import 'package:provider/provider.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final translator = Provider.of<FlappyTranslator>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Translation Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(translator.translate('hello')),
            ElevatedButton(
              onPressed: () {
                translator.setLocale(Locale('zh'));
              },
              child: Text('切换到中文'),
            ),
            ElevatedButton(
              onPressed: () {
                translator.setLocale(Locale('en'));
              },
              child: Text('切换到英文'),
            ),
            Text(translator.translate('goodbye')),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中有两个按钮用于切换语言,并且有两个文本小部件显示翻译后的文本。

4. 运行应用

确保你的assets目录和JSON文件路径正确,然后运行你的Flutter应用:

flutter run

这样,你就可以看到应用中的文本根据选择的语言进行切换。

希望这个示例代码能帮助你理解如何在Flutter项目中使用flappy_translator插件来实现翻译功能。

回到顶部