Flutter翻译弹窗插件flutter_translation_sheet的使用
Flutter翻译弹窗插件flutter_translation_sheet的使用
flutter_translation_sheet
是一个强大的工具,用于管理Flutter应用中的多语言支持。它通过Google Sheets进行自动翻译和同步,并生成相应的代码文件。以下是如何使用该插件的详细指南。
安装步骤
1. 添加依赖
在你的 pubspec.yaml
文件中添加 flutter_translation_sheet
作为开发依赖:
dev_dependencies:
flutter_translation_sheet: ^1.0.31
或者全局安装:
flutter pub global activate flutter_translation_sheet
如果你使用的是开发依赖,请在项目根目录运行:
dart run flutter_translation_sheet:main
默认情况下,运行时会执行 run
命令。例如,如果你想运行 fetch
命令:
dart run flutter_translation_sheet:main fetch
2. 创建配置文件
在项目根目录运行 fts
来创建模板配置文件 trconfig.yaml
:
fts
配置文件示例
trconfig.yaml
示例:
fts:
entry_file: strings/app.yaml
param_output_pattern: "{{*}}"
dart:
output_dir: lib/i18n
keys_id: Strings
translations_id: Translations
use_maps: false
output_fts_utils: true
locales:
- en
- es
gsheets:
use_iterative_cache: false
credentials_path: "PATH_TO_YOUR_CREDENTIALS"
spreadsheet_id: "SPREADSHEET_ID"
worksheet: Sheet1
Google 凭证配置
有两种方式可以配置凭证:
- 使用路径:
gsheets:
credentials_path: c:/my_project/credentials.json or ./credentials.json
注意:Windows用户请使用双反斜杠或正斜杠。
- 直接嵌入凭证内容:
gsheets:
credentials: {
"type": "service_account",
"project_id": "project-id",
"private_key_id": "",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCB-----END PRIVATE KEY-----\n",
"client_email": "gsheets@project.iam.gserviceaccount.com",
"client_id": "123456",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gsheets%40evolution-cp-calculator.iam.gserviceaccount.com"
}
使用命令
运行命令
在终端中进入你的Flutter项目目录并运行:
fts run
第一次运行会创建一个模板,并要求你提供Google凭证json文件。
监听文件变化
你可以让 fts
监听文件变化:
fts run --watch
退出监听器使用 q
然后按 Enter
。
提取字符串
提取Dart代码中的字符串:
fts extract --path path/to/dart/files --output path/to/output
下载最新数据
从Google Sheets下载最新数据并生成文件:
fts fetch
示例Demo
以下是一个简单的Flutter应用示例,展示如何使用生成的翻译文件:
import 'package:flutter/material.dart';
import 'package:flutter_translation_sheet/flutter_translation_sheet.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(title: 'Flutter Demo Home Page'),
localizationsDelegates: const [Fts.delegate],
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
actions: [
LangPickerMaterial(
onSelected: (locale) {
Fts.locale = locale;
},
selected: Fts.locale,
),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Hello world'.tr()),
Text('Welcome back {{user}}, today is {{date}}.'.tr(namedArgs: {'user': 'John', 'date': '2023-10-10'})),
],
),
),
);
}
}
以上示例展示了如何集成 flutter_translation_sheet
并使用生成的翻译文件来实现多语言支持。希望这个指南对你有所帮助!如果有任何问题,请参考官方文档或社区资源。
更多关于Flutter翻译弹窗插件flutter_translation_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter翻译弹窗插件flutter_translation_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用flutter_translation_sheet
插件的示例代码。这个插件允许你在应用中显示一个翻译弹窗,让用户能够轻松地在不同语言之间切换。
首先,你需要在你的pubspec.yaml
文件中添加flutter_translation_sheet
依赖:
dependencies:
flutter:
sdk: flutter
flutter_translation_sheet: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
接下来是一个简单的示例,展示如何使用flutter_translation_sheet
:
- 导入必要的包:
import 'package:flutter/material.dart';
import 'package:flutter_translation_sheet/flutter_translation_sheet.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
- 设置支持的语言:
final List<Locale> supportedLocales = [
Locale('en', 'US'),
Locale('es', 'ES'),
Locale('fr', 'FR'),
// 添加更多语言支持
];
- 创建翻译映射:
final Map<Locale, Map<String, String>> translations = {
Locale('en', 'US'): {
'hello': 'Hello',
'goodbye': 'Goodbye',
// 添加更多翻译
},
Locale('es', 'ES'): {
'hello': 'Hola',
'goodbye': 'Adiós',
// 添加更多翻译
},
Locale('fr', 'FR'): {
'hello': 'Bonjour',
'goodbye': 'Au revoir',
// 添加更多翻译
},
// 添加更多语言的翻译
};
- 创建主应用:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Translation Sheet Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
// 添加 Flutter 本地化委托
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: supportedLocales,
home: TranslationSheetDemo(),
);
}
}
- 实现翻译弹窗:
class TranslationSheetDemo extends StatefulWidget {
@override
_TranslationSheetDemoState createState() => _TranslationSheetDemoState();
}
class _TranslationSheetDemoState extends State<TranslationSheetDemo> {
Locale _currentLocale = Locale('en', 'US');
void _showTranslationSheet(BuildContext context) {
showTranslationSheet(
context: context,
supportedLocales: supportedLocales,
currentLocale: _currentLocale,
translations: translations,
onLocaleChanged: (Locale newLocale) {
setState(() {
_currentLocale = newLocale;
});
},
);
}
@override
Widget build(BuildContext context) {
final String hello = translations[_currentLocale]!['hello'] ?? 'Hello';
final String goodbye = translations[_currentLocale]!['goodbye'] ?? 'Goodbye';
return Scaffold(
appBar: AppBar(
title: Text('Flutter Translation Sheet Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(hello),
Text(goodbye),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _showTranslationSheet(context),
child: Text('Change Language'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个Flutter应用,它使用flutter_translation_sheet
插件来显示一个翻译弹窗。用户可以通过点击按钮来打开弹窗,然后选择不同的语言。选择语言后,应用会更新界面以显示相应的翻译文本。
请确保你已经按照插件的文档进行了所有必要的配置,并替换示例中的最新版本号为实际的插件版本号。