Flutter国际化字符串提取插件translation_string_extractor的使用
Flutter国际化字符串提取插件translation_string_extractor的使用
Translation String Extractor
从带有 .tr
或 .tr()
的字符串中提取用于翻译的文本,并将其写入 JSON 文件或返回一个 Map。
该工具会忽略以 .g.dart
结尾的文件名。
输入:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class TestClass extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(children: [
Text('Hello'.tr),
Text("""World""".tr),
]);
}
}
输出:
{
"Hello": "Hello",
"World": "World"
}
安装
在 pubspec.yaml
中添加依赖:
dev_dependencies:
translation_string_extractor: <latest>
或者全局安装:
dart pub global activate translation_string_extractor
使用
作为开发依赖项使用:
dart run translation_string_extractor:extract -d=lib -o=locale.json
全局使用:
translation_string_extractor -d=lib -o=locale.json
公共签名:
TranlationStringExtractor ...
static void extractStrings(String directory, String outputFile);
static Map<String, String> read(String directory) {
SplayTreeMap<String, String> map = SplayTreeMap<String, String>();
static void write(Map<String, String> map, String outputFile);
问题
如有任何问题,请访问 GitHub Issues。
许可证
此包根据 MIT 许可证授权。
示例Demo
以下是一个完整的示例,演示如何使用 translation_string_extractor
插件提取并保存国际化字符串到 JSON 文件中。
步骤 1: 创建项目
首先创建一个新的 Flutter 项目,并添加 translation_string_extractor
到 pubspec.yaml
文件中。
dev_dependencies:
flutter_test:
sdk: flutter
translation_string_extractor: <latest>
运行 flutter pub get
来获取新的依赖项。
步骤 2: 编写示例代码
在 lib/main.dart
文件中编写以下代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('国际化示例')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Hello'.tr),
Text('''World'''.tr),
],
),
),
),
);
}
}
extension Translate on String {
String get tr => this;
}
步骤 3: 提取字符串
在项目根目录下运行以下命令来提取并保存国际化字符串到 JSON 文件中:
dart run translation_string_extractor:extract -d=lib -o=locale.json
执行上述命令后,会在当前目录生成一个名为 locale.json
的文件,其内容如下:
{
"Hello": "Hello",
"World": "World"
}
更多关于Flutter国际化字符串提取插件translation_string_extractor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化字符串提取插件translation_string_extractor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
translation_string_extractor
是一个用于 Flutter 项目的插件,可以帮助你从代码中提取需要国际化的字符串,并将其导出为 JSON 或其他格式,以便进行翻译。这个插件可以大大简化国际化流程,尤其是在项目中需要管理大量字符串时。
安装 translation_string_extractor
首先,你需要在 Flutter 项目中安装 translation_string_extractor
。你可以在 pubspec.yaml
文件中添加依赖:
dev_dependencies:
translation_string_extractor: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用 translation_string_extractor
1. 在代码中标记需要国际化的字符串
在 Flutter 项目中,你可以使用 Intl.message
或 AppLocalizations
来标记需要国际化的字符串。例如:
import 'package:intl/intl.dart';
String get helloWorld => Intl.message(
'Hello, World!',
name: 'helloWorld',
desc: 'A simple greeting',
);
2. 运行 translation_string_extractor
在终端中运行以下命令来提取需要国际化的字符串:
flutter pub run translation_string_extractor:extract
这个命令会扫描你的项目代码,找出所有标记为需要国际化的字符串,并将它们导出为一个 JSON 文件或其他格式的文件。
3. 导出文件
默认情况下,translation_string_extractor
会将提取的字符串导出为 messages.json
文件。你可以通过命令行参数来指定输出文件的路径和格式。例如:
flutter pub run translation_string_extractor:extract --output=lib/l10n/messages.json
4. 翻译字符串
将生成的 messages.json
文件交给翻译团队或使用翻译工具进行翻译。你可以为每种语言创建一个对应的 JSON 文件,例如 messages_fr.json
表示法语翻译。
5. 在 Flutter 项目中使用翻译后的字符串
在 Flutter 项目中,你可以使用 flutter_localizations
和 intl
包来加载和使用翻译后的字符串。例如:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart';
import 'package:intl/intl_standalone.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await findSystemLocale();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', 'US'),
const Locale('fr', 'FR'),
],
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(Intl.message('Hello, World!')),
),
body: Center(
child: Text(Intl.message('Hello, World!')),
),
);
}
}