Flutter自动应用翻译插件auto_app_translate的使用

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

Flutter自动应用翻译插件auto_app_translate的使用

Pub

它是一个可以将应用程序翻译成80种语言并自动设置配置的库。

示例图片

Buy Me A Coffee

如何使用?

1. 设置配置文件

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

dependencies:
  easy_localization: ^3.0.3
  easy_localization_loader: ^2.0.0
  auto_app_translate:

flutter:
  assets:
    - assets/localization.csv

2. 创建资源文件夹并将localization.csv文件放入其中

在项目中创建一个名为assets的文件夹,并将localization.csv文件放入其中。示例如下:

资源文件夹示例

localization.csv文件下载地址:localization.csv

3. 配置easy_localization库

请参考官方文档:easy_localization官方文档

import 'package:auto_app_translate/callable/core_my/my_language_code/entity/flutter_support_language_locale.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization_loader/easy_localization_loader.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
  runApp(
    EasyLocalization(
        supportedLocales: flutterLocalizeSupportLanguagesLocale,
        path: 'assets/localization.csv',
        assetLoader: CsvAssetLoader(), // 这是实现应用翻译的重要部分
        fallbackLocale: const Locale('en', 'US'),
        child: MyApp()
    ),
  );
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,
        home: MyHomePage()
    );
  }
}

4. 填写本地化文件

localization.csv文件中填写键值和标准语言(开始翻译的语言)列。

本地化文件示例

5. 在代码中使用tr()进行本地化

import 'package:easy_localization/easy_localization.dart';

tr('hello world')

6. 在项目中创建一个dart文件并粘贴以下代码

在项目的根目录下创建一个名为auto_translation的文件夹,并在其中创建auto_translation.dart文件。然后复制并粘贴以下代码:

import 'package:auto_app_translate/auto_app_translate.dart';

main() {
  AutoAppTranslate.translateAppCsvFile(
    // 开始翻译的语言
    startLanguageCode: 'en',
    
    // 要跳过翻译的语言代码
    skipLanguageCodes: [],
    
    // 要跳过的字符串
    skipStr: [],
    
    // CSV文件路径
    appAssetsCsvPath: 'assets/localization.csv',
    
    // Google Translate API密钥 (https://translatepress.com/docs/automatic-translation/generate-google-api-key/)
    apiKey: 'INPUT_YOUR_GOOGLE_TRANSLATE_API_KEY');
}

如果没有输入Google Translate API密钥,它仍然可以工作,但很快会达到免费限制。有关获取Google Translate API密钥的指南,请参阅此文档

7. 运行该文件。翻译将在CSV文件中完成。

运行文件示例

8. 查看翻译成超过80种语言的应用程序 :)

以下是完整的示例代码:

import 'package:auto_app_translate/callable/core_my/my_language_code/entity/flutter_support_language_locale.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization_loader/easy_localization_loader.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
  runApp(
    EasyLocalization(
        supportedLocales: flutterLocalizeSupportLanguagesLocale,
        path: 'assets/localization.csv',
        assetLoader: CsvAssetLoader(), // 这是实现应用翻译的重要部分
        fallbackLocale: const Locale('en', 'US'),
        child: const MyApp()
    ),
  );
}

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

  // 这个小部件是你的应用程序的根。它是有状态的,这意味着
  // 它有一个包含影响其外观字段的状态对象。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // 这个小部件是你的应用程序的主页。它是有状态的,意味着
  // 它有一个状态对象(在下面定义),该状态对象包含影响其外观的字段。
  // 小部件子类中的字段总是标记为“final”。

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      // 这个setState调用告诉Flutter框架某些东西已经改变
      // 在这个状态下,导致重新运行构建方法以使显示反映更新的值。如果我们不调用setState()而改变_counter,
      // 构建方法就不会被再次调用,因此看起来什么都没有发生。
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 每次调用setState时都会重新运行这个方法
    //
    // Flutter框架已被优化为快速重新运行构建方法,
    // 因此你可以重建任何需要更新的东西,而不是逐个更改小部件实例。
    return Scaffold(
      appBar: AppBar(
        // 这里我们从MyHomePage对象中获取值
        // 由App.build方法创建,并用于设置我们的appbar标题。
        title: Text(tr('hello world')),
      ),
      body: Center(
        // Center是一个布局小部件。它接受一个子元素并将其定位在父元素中间。
        child: Column(
          // Column也是一个布局小部件。它接受一个子元素列表
          // 并垂直排列它们。默认情况下,它水平调整自己的大小以适应其
          // 子元素,并尝试与父元素一样高。
          //
          // 调试绘制(在控制台中按“p”,选择Android Studio中的“切换调试绘制”操作,
          // 或Visual Studio Code中的“切换调试绘制”命令)
          // 以查看每个小部件的线框。
          //
          // Column有几个属性可以控制它如何调整自己的大小
          // 和如何定位其子元素。这里我们使用mainAxisAlignment来
          // 垂直居中子元素;主轴在这里是垂直的(交叉轴将是水平的)。
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text("auto translate"),
            Text(
              tr('You have pushed the button this many times:'),
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: "Increment" ,
        child: const Icon(Icons.add),
      ), // 这个尾随逗号使得自动格式更美观
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用auto_app_translate插件的基本示例代码。这个插件可以帮助你实现应用的自动翻译功能。

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

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

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

接下来,在你的Flutter项目中,你可以按照以下步骤来配置和使用auto_app_translate插件。

1. 初始化插件

在你的应用入口文件(通常是main.dart)中,初始化AutoAppTranslate插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 初始化AutoAppTranslate
    AutoAppTranslate.init(
      apiKey: '你的Google翻译API密钥',  // 如果你使用Google翻译API,需要提供API密钥
      supportedLanguages: ['en', 'zh'],  // 支持的语言列表
      defaultLanguage: 'en',  // 默认语言
    );

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

注意:如果你使用的是Google翻译API,你需要在Google Cloud Platform上创建一个项目并启用翻译API,然后获取API密钥。

2. 使用翻译功能

你可以使用AutoAppTranslate.translate方法来翻译文本。以下是一个简单的示例,展示了如何在按钮点击时翻译文本:

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String translatedText = '';
  String originalText = 'Hello, World!';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Auto App Translate Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(originalText),
            SizedBox(height: 20),
            Text(translatedText),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                String result = await AutoAppTranslate.translate(
                  text: originalText,
                  fromLanguage: 'en',
                  toLanguage: 'zh',
                );
                setState(() {
                  translatedText = result;
                });
              },
              child: Text('Translate to Chinese'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,当用户点击“Translate to Chinese”按钮时,originalText将被翻译成中文,并显示在屏幕上。

3. 处理语言更改

你还可以监听语言更改事件,并相应地更新你的UI。你可以使用AutoAppTranslate.languageChanged流来监听语言更改:

class _MyHomePageState extends State<MyHomePage> {
  // ... 其他代码

  @override
  void initState() {
    super.initState();
    AutoAppTranslate.languageChanged.listen((languageCode) {
      // 在这里处理语言更改,例如重新加载翻译后的文本
      print('Language changed to: $languageCode');
    });
  }

  // ... 其他代码
}

这个示例展示了如何初始化auto_app_translate插件、翻译文本以及监听语言更改事件。根据你的具体需求,你可以进一步自定义和扩展这些功能。

回到顶部