Flutter国际化翻译插件translatron的使用
Flutter国际化翻译插件translatron的使用
欢迎使用Translatron!
安装
在你的 pubspec.yaml
文件中添加以下内容:
dependencies:
translatron: [最新版本]
将包导入到你的 Dart 文件中:
import 'package:translatron/translatron.dart';
描述
Translatron 包是为 Flutter 应用程序设计的一个翻译工具。它提供了一个简单易用的界面来管理翻译,无论是从自定义 API 还是从本地翻译文件。
该包包括加载和保存语言文件的功能,将 .json
字符串转换为映射,以及处理异常。
该包支持多种语言和自定义 API 头部。
它还提供了向应用中添加自定义委托的方法,并可以使用提供者来更改语言。
此外,该包还提供了一些与翻译相关的功能,如翻译字符串、检查语言是否活动、获取支持的语言列表以及获取或设置选定的语言区域。
设置与使用
设置
你必须在项目根目录下创建一个名为 lang/
的文件夹,并在其中添加多个 .json
文件,例如:en.json
, hu.json
等等。
每个 .json
文件中至少需要添加一个键值对,例如:
{
"key_in_the_json_file": "这将在你的应用中作为翻译文本"
}
否则,当你运行应用时会收到错误消息。
确保将此文件夹添加到你的 pubspec.yaml
文件中:
flutter:
assets:
- lang/
初始化
你必须在主函数中初始化 Translatron 以运行应用程序,但有多种方式可以进行初始化。你可以根据需求选择使用哪种方法。
初始化参数
String
hostname: 你的 API 的主机名。String
versionPath: 你的 API 版本端点的路径。String
translationsPath: 你的 API 翻译端点的路径。bool
hasWebServer: 是否使用 Web 服务器。List<Locale>
supportedLocales: 支持的语言列表。Map<String, String>?
apiHeaders: 要添加到 API 请求中的头部。
默认值
String hostname = "",
String versionPath = "",
String translationsPath = "",
List<Locale> supportedLocales = const [Locale('hu')],
Map<String, String>? apiHeaders,
bool hasWebServer = false,
bool reLoadAtStart = false,
初始化
你可以像下面这样不设置任何参数来初始化 Translatron:
void main() async {
await Translatron.init();
}
或者,你可以单独设置每个参数,例如:
void main() async {
await Translatron.init(
hostname: "https://example.com",
versionPath: "/api/translation/version",
translationsPath: "/api/translation/translations",
hasWebServer: true,
supportedLocales: const [
Locale('hu'),
Locale('en'),
],
apiHeaders: const {
"Authorization": "Bearer $token",
"Content-Type: application/json"
});
}
注意事项
- 如果你在
supportedLocales
中添加了一个新的语言代码,你还需要在同一文件夹中添加同名的.json
文件。 - 如果你设置了
hasWebServer
参数为true
,你还必须设置hostname
,versionPath
和translationsPath
参数。 - 你应该始终检查日志,以查看是否有任何设置错误。
添加自定义委托到应用
你需要向应用中添加自定义委托使其工作。可以通过在 MaterialApp
小部件中添加以下代码来实现:
return MaterialApp.router(
title: 'DemoApp',
localizationsDelegates: const [
Translatron.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
// 根据你的状态管理来更改
locale: Provider.of<LocaleProvider>(context, listen: true).getLocale,
supportedLocales: Translatron.getSupportedLocales,
);
示例提供者
你可以使用或修改以下提供者类来管理应用中的语言:
class LocaleProvider with ChangeNotifier {
Locale? locale = Translatron.getSelectedLanguageLocale;
Locale? get getLocale {
return locale;
}
void changeLocale(Locale newLocale) {
locale = newLocale;
Translatron.setSelectedLanguageLocale = locale!;
notifyListeners();
}
}
使用提供者更改语言
你可以使用以下代码通过提供者来更改应用中的语言:
Provider.of<LocaleProvider>(context, listen: false)
.changeLocale(const Locale('en', 'EN'));
函数
翻译
此函数用于将给定的键从 .json
文件中的键翻译成当前选定的语言。它接受一个参数:
String
translation_key: 要翻译的字符串的键。
String translation_key = "key_in_the_json_file";
Translatron.of(context)!.translate(translation_key);
检查语言是否活动
此函数用于检查给定的语言是否当前处于活动状态,它将返回一个布尔值。它接受一个参数:
languageCode
: 要检查的语言代码。
String languageCode = "en";
Translatron.isLanguageActive(languageCode);
获取支持的语言列表
此函数用于获取所有支持的语言列表。它返回一个包含所有支持语言的 List<Locale>
。
Translatron.getSupportedLocales;
获取选定的语言区域
此函数用于获取当前选定的语言区域。它返回一个包含当前选定语言区域的 Locale
,但在某些情况下可能是可空的。
Translatron.getSelectedLanguageLocale;
设置选定的语言区域
此函数用于设置当前选定的语言区域。它接受一个参数:
Locale
locale: 要设置为当前选定语言区域的语言区域。
Locale locale = const Locale('en');
Translatron.setSelectedLanguageLocale = locale!;
命令行辅助工具
该包还包括一个命令行工具,帮助你管理翻译。你可以使用以下命令来管理翻译:
检查未使用的翻译
此命令用于查找项目中的未使用翻译。如果找到任何未使用的翻译,命令将在控制台中打印出这些翻译的列表并关联语言代码。
application % dart run translatron --unused
统计信息
此命令将为你提供项目中翻译文件的统计信息。它将打印每种语言文件中的翻译数量以及项目中的总翻译数量。
dart run translatron --stat
检查
此命令用于检查项目中的翻译文件。它将在控制台中打印出翻译文件中发现的任何错误或警告。
dart run translatron --check
更多关于Flutter国际化翻译插件translatron的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化翻译插件translatron的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用translatron
插件进行国际化翻译的一个基本示例。translatron
是一个用于Flutter应用的国际化翻译插件,但需要注意的是,由于插件的更新和API的变化,以下代码可能需要根据实际插件版本进行调整。
首先,确保你已经在pubspec.yaml
文件中添加了translatron
依赖:
dependencies:
flutter:
sdk: flutter
translatron: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们将展示如何在Flutter应用中使用translatron
进行国际化设置。
1. 初始化Translatron
在你的应用的主入口文件(通常是main.dart
)中,初始化Translatron
:
import 'package:flutter/material.dart';
import 'package:translatron/translatron.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Translatron
await Translatron.init(
apiKey: '你的Translatron API密钥', // 请替换为你的Translatron API密钥
projectId: '你的项目ID', // 请替换为你的Translatron项目ID
languageCode: 'en', // 默认语言代码
fallbackLanguageCode: 'en', // 回退语言代码
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
localizationsDelegates: [
// 添加Translatron的localizationsDelegate
Translatron.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: Translatron.supportedLocales,
locale: Translatron.locale,
);
}
}
2. 使用翻译文本
在你的UI组件中,使用Translatron.tr
方法来获取翻译后的文本:
import 'package:flutter/material.dart';
import 'package:translatron/translatron.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(Translatron.tr('app_name')), // 假设'app_name'是你的翻译键
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
Translatron.tr('hello_world'), // 假设'hello_world'是你的翻译键
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 切换语言示例
String newLanguageCode = 'zh'; // 假设要切换到中文
await Translatron.setLocale(Locale(newLanguageCode));
setState(() {}); // 触发UI重建以显示新语言
},
tooltip: 'Change Language',
child: Icon(Icons.translate),
),
);
}
}
3. 在Translatron平台管理翻译
确保你已经在Translatron平台上为你的项目添加了相应的翻译键值对。例如,你可能会有以下翻译:
-
app_name
:- English: My Flutter App
- Chinese: 我的Flutter应用
-
hello_world
:- English: Hello, World!
- Chinese: 你好,世界!
注意
- 请确保你已经正确配置了Translatron API密钥和项目ID。
- 根据你的项目需求,你可能需要调整UI和逻辑。
- 由于
translatron
插件的具体实现和API可能会随时间变化,请参考最新的官方文档和示例代码。
这个示例展示了如何在Flutter应用中集成和使用translatron
插件进行国际化翻译。希望这对你有所帮助!