Flutter自动应用翻译插件auto_app_translate的使用
Flutter自动应用翻译插件auto_app_translate的使用
它是一个可以将应用程序翻译成80种语言并自动设置配置的库。
- 如果你对商店翻译感兴趣,请查看auto_store_translate库。
- 如果你对商店截图生成器感兴趣,请查看auto_screenshot_translate库。
如何使用?
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 回复