Flutter国际化翻译插件i10n_translator的使用
Flutter国际化翻译插件i10n_translator的使用
概述
本库包的目的是让你的应用程序能够轻松地显示任何数量的支持翻译文本。这些翻译存储在一个易于阅读和更新的格式中,供开发人员和非开发人员访问。
示例应用
有一个示例应用可以在GitHub上查看,以了解如何在你的Flutter应用中实现和使用这个库包:Shrine MVC
安装
我并不总是喜欢在Installing
页面中建议的版本号。
相反,当安装我的库包时,总是使用语义版本号中的重大
值。这意味着总是输入一个带有两个尾随零的版本号,重大.0.0
。这允许你接收任何次要
版本(引入新功能)或在这个案例中,任何补丁
版本(涉及错误修复)。语义版本号总是以重大.次要.补丁
的格式出现。
- 补丁 - 我已经进行了错误修复
- 次要 - 我已经引入了新功能
- 重大 - 我基本上创建了一个新的应用程序。它打破了向后兼容性并具有全新的用户体验。你不会得到这个版本,直到你在
pubspec.yaml
文件中增加重大
的数字。
因此,在这种情况下,将以下内容添加到你的包的pubspec.yaml
文件中:
dependencies:
i10n_translator:^2.0.0
CSV 文件
一个文本文件用于包含由逗号分隔的翻译。它通常被称为CSV文件,并且很容易被许多编辑器包括MS Excel识别。这使得例如非开发人员可以轻松地为你的Flutter应用输入文本翻译。下面是名为i10n.csv
的CSV文件在名为Notepad的简单Windows文本编辑器中显示的截图。
如你所见,此文本文件很容易被Microsoft Excel读取,以一种易于阅读的表格形式呈现文本及其翻译。你可以看到有英语列、法语列和西班牙语列。你可以自由插入空行,但每一列都必须填写,否则它将不会包含在你的Flutter应用中。另外注意,文本是区分大小写的。
以下是生成自CSV文件的结果代码的截图。请注意,你确实可以选择不生成代码,而是让Flutter应用直接在启动时读取此CSV文件。因此提供那些翻译!我将在稍后解释该选项。现在,让我们看看如何使用此生成的代码。
在上面的截图中,你现在可以看到一个名为i10nWords
的Map对象,它包含了当前可用给你的Flutter应用的所有翻译。下面的示例应用,例如,通过import
语句获取该对象,然后将该对象传递给库包的init()
函数。
示例应用
实际上,当你运行示例应用时,Shrine MVC,你有手动“切换”默认文本和两种翻译(法语和西班牙语)的能力。有一个菜单选项允许你这样做。下面的截图展示了从英语到法语的变化。注意照片标签名称会相应更改。
以下是示例应用中显示这些项目及其相应标签的代码截图。你可以看到默认字符串在此处是英语。但是,当你查看产品对象列表时,name
命名参数不是直接提供字符串值,而是提供来自库包i10n_translator
的静态函数s()
。这反过来又接收字符串。正是在那里执行翻译并返回给name
命名参数。
保持简单
再次强调,想法是提供翻译到一个简单的文本文件中,其列由逗号分隔。默认语言被认为是第一列。你会将这些文本字符串提供给应用本身到静态函数s()
或t()
。然而,它们作为读取此CSV文件时的“键”字段。同样作为键字段,第一列是区分大小写的。
一旦翻译准备就绪,你现在可以选择生成代码来提供这些翻译到你的Flutter应用。请注意,在你这样做的之前,你确实需要在你的pubspec.yaml
文件中引用库包。
运行命令
因此,现在使用你的IDE编辑器终端窗口,你可以引用库包中的特定类来生成结果的dart文件:
flutter pub run i10n_translator test.csv path/destination/dart file
只需引用类而不带任何参数,那么该类将假定以下输入文件和结果dart文件:
flutter pub run i10n_translator [i10n.csv] [i10nwords.dart]
更多关于Flutter国际化翻译插件i10n_translator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化翻译插件i10n_translator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用i10n_translator
插件来实现国际化翻译的示例代码。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加i10n_translator
依赖:
dependencies:
flutter:
sdk: flutter
i10n_translator: ^x.y.z # 请替换为最新版本号
然后在项目根目录下运行flutter pub get
来安装依赖。
2. 创建翻译文件
假设你希望支持英语(en)和中文(zh)两种语言,你需要在assets
目录下创建翻译文件,如strings_en.json
和strings_zh.json
。
assets/strings_en.json
{
"welcome": "Welcome",
"goodbye": "Goodbye"
}
assets/strings_zh.json
{
"welcome": "欢迎",
"goodbye": "再见"
}
3. 配置pubspec.yaml
中的assets
在pubspec.yaml
文件中添加你的翻译文件到assets:
flutter:
assets:
- assets/strings_en.json
- assets/strings_zh.json
4. 初始化i10n_translator
在你的主文件(如main.dart
)中,初始化并使用i10n_translator
插件。
import 'package:flutter/material.dart';
import 'package:i10n_translator/i10n_translator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
localizationsDelegates: [
// 添加 i10nTranslatorDelegate
I10nTranslatorDelegate(
// 设置默认语言
fallbackLocale: Locale('en', ''),
// 指定翻译文件路径
jsonAssetBasePath: 'assets/strings_',
),
// 添加全局的 MaterialLocalizations
GlobalMaterialLocalizations.delegate,
// 添加全局的 WidgetsLocalizations
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
Locale('en', ''),
Locale('zh', ''),
],
localeResolutionCallback: (Locale locale, Iterable<Locale> supportedLocales) {
// 根据用户设备语言选择合适的 locale
for (Locale supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale.languageCode ||
supportedLocale.countryCode == locale.countryCode) {
return supportedLocale;
}
}
// 默认返回英语
return Locale('en', '');
},
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
I10nTranslator _i10n;
@override
Widget build(BuildContext context) {
_i10n = I10nTranslator.of(context);
return Scaffold(
appBar: AppBar(
title: Text(_i10n.translate('welcome')),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_i10n.translate('welcome'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 切换语言示例
setState(() {
Locale myLocale = Localizations.localeOf(context);
if (myLocale.languageCode == 'en') {
Localizations.overrideLocaleOf(context, Locale('zh'));
} else {
Localizations.overrideLocaleOf(context, Locale('en'));
}
});
},
child: Text(_i10n.translate('goodbye')),
),
],
),
),
);
}
}
5. 运行项目
确保所有配置正确后,运行你的Flutter项目。你应该能够看到根据设备语言或手动切换语言后的文本变化。
注意事项
- 确保翻译文件的命名和路径与
I10nTranslatorDelegate
中的配置一致。 localeResolutionCallback
函数用于决定应用启动时使用的语言,可以根据实际需求进行调整。- 切换语言时,通过调用
Localizations.overrideLocaleOf
来动态改变当前上下文的语言环境。
这样,你就成功地在Flutter项目中使用了i10n_translator
插件来实现国际化翻译。