Flutter国际化插件flutter_google_i18n的使用
Flutter国际化插件flutter_google_i18n的使用
简介
flutter-google-i18n
是一个用于使用Google表格进行Flutter应用国际化的小型库。
示例
您可以查看演示应用:https://github.com/macav/flutter-google-i18n-demo
如何获取表格JSON链接
- 打开包含翻译的表格,其结构应与示例相同。
- 发布文档到网络。
- 点击文件 -> 发布到网络 -> 发布。您可以忽略提供的链接。
- 获取可分享的链接。
- 点击文件 -> 共享 -> 获取链接。 您将得到如下格式的链接:
https://docs.google.com/spreadsheets/d/<SPREADSHEET_IDENTIFIER>/edit?usp=sharing
- 将标识符替换到以下链接:
您应该会得到表格数据的JSON格式。 示例链接如下:https://spreadsheets.google.com/feeds/list/<SPREADSHEET_IDENTIFIER>/1/public/values?alt=json
https://spreadsheets.google.com/feeds/list/1TGbtKpdNRptYwUVtqmkI2L7Ix00i-fQMnrChGHx2Ajk/1/public/values?alt=json
完整示例代码
import 'package:flutter/material.dart';
import 'package:flutter_google_i18n/flutter_google_i18n.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(MyApp());
class MyAppState extends State<MyApp> {
Locale locale;
[@override](/user/override)
void initState() {
super.initState();
locale = Locale('en'); // 初始化为英语
}
onLocaleChange(Locale locale) {
setState(() {
this.locale = locale;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Google I18n Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
GoogleI18nLocalizationsDelegate(
'https://spreadsheets.google.com/feeds/list/1TGbtKpdNRptYwUVtqmkI2L7Ix00i-fQMnrChGHx2Ajk/1/public/values?alt=json'), // 替换为您的表格链接
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
locale: locale,
home: MyHomePage(onLocaleChange), // 传递onLocaleChange回调
);
}
}
class MyApp extends StatefulWidget {
[@override](/user/override)
State<StatefulWidget> createState() {
return new MyAppState();
}
}
class MyHomePage extends StatelessWidget {
final void Function(Locale locale) onLocaleSwitch;
MyHomePage(this.onLocaleSwitch);
[@override](/user/override)
Widget build(BuildContext context) {
GoogleI18nLocalizations i18n = GoogleI18nLocalizations.of(context); // 获取本地化对象
return Scaffold(
appBar: AppBar(
title: Text('Flutter Google I18n'), // 应用标题
),
body: Center(
child: Column(
children: <Widget>[
Text(i18n.t('title')), // 显示翻译后的标题
Padding(padding: EdgeInsets.only(top: 30)), // 添加顶部间距
Row(
mainAxisAlignment: MainAxisAlignment.center, // 居中对齐
children: <Widget>[
DropdownButton(
items: i18n.supportedLocales.map((locale) { // 创建下拉菜单项
return DropdownMenuItem(
child: Text(locale.toUpperCase()), value: locale);
}).toList(),
value: i18n.locale.languageCode, // 设置当前语言
onChanged: (String value) { // 更改语言时的回调
Locale newLocale = Locale(value);
GoogleI18nLocalizations.setLocale(context, newLocale); // 更新上下文中的语言
this.onLocaleSwitch(newLocale); // 触发回调
},
),
Padding(padding: EdgeInsets.symmetric(horizontal: 5)), // 添加水平间距
ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: TextStyle(color: Colors.white),
primary: Colors.blue,
onPrimary: Colors.white,
),
child: Text(
"Switch to ${i18n.locale.languageCode == 'en' ? 'DE' : 'EN'}"), // 切换语言按钮文本
onPressed: () {
Locale newLocale = i18n.locale.languageCode == 'en' // 判断当前语言并切换
? const Locale('de')
: const Locale('en');
GoogleI18nLocalizations.setLocale(context, newLocale); // 更新上下文中的语言
this.onLocaleSwitch(newLocale); // 触发回调
})
],
)
],
)),
);
}
}
更多关于Flutter国际化插件flutter_google_i18n的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化插件flutter_google_i18n的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 flutter_google_i18n
插件进行 Flutter 应用国际化的代码案例。这个插件可以简化国际化(i18n)和本地化(l10n)的过程。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 flutter_google_i18n
依赖:
dependencies:
flutter:
sdk: flutter
flutter_google_i18n: ^x.y.z # 请替换为最新版本号
然后在你的项目根目录下运行 flutter pub get
来获取依赖。
2. 创建翻译文件
在你的项目根目录下创建一个 assets/i18n
文件夹,并在其中创建 JSON 格式的翻译文件。例如,创建 en.json
和 zh.json
文件:
assets/i18n/en.json:
{
"welcome_message": "Welcome to our app!",
"goodbye_message": "Goodbye!"
}
assets/i18n/zh.json:
{
"welcome_message": "欢迎来到我们的应用!",
"goodbye_message": "再见!"
}
3. 配置 pubspec.yaml
在 pubspec.yaml
中添加这些 JSON 文件到 assets 部分:
flutter:
assets:
- assets/i18n/en.json
- assets/i18n/zh.json
4. 初始化 FlutterGoogleI18n
在你的 main.dart
文件中初始化 FlutterGoogleI18n
:
import 'package:flutter/material.dart';
import 'package:flutter_google_i18n/flutter_google_i18n.dart';
void main() {
// 初始化 FlutterGoogleI18n
final FlutterGoogleI18n i18n = FlutterGoogleI18n(
pathToJson: 'assets/i18n',
defaultLocale: Locale('en', 'US'),
supportedLocales: [
Locale('en', 'US'),
Locale('zh', 'CN'),
],
);
runApp(MyApp(i18n: i18n));
}
class MyApp extends StatelessWidget {
final FlutterGoogleI18n i18n;
MyApp({required this.i18n});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter I18n Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
i18n.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: i18n.supportedLocales,
locale: i18n.locale,
home: MyHomePage(i18n: i18n),
);
}
}
5. 使用翻译文本
在你的 MyHomePage
或其他页面中使用翻译文本:
import 'package:flutter/material.dart';
import 'package:flutter_google_i18n/flutter_google_i18n.dart';
class MyHomePage extends StatefulWidget {
final FlutterGoogleI18n i18n;
MyHomePage({required this.i18n});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.i18n.translate('welcome_message')),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(widget.i18n.translate('welcome_message')),
ElevatedButton(
onPressed: () {
// 示例:更改语言
setState(() {
widget.i18n.changeLocale(Locale('zh', 'CN'));
});
},
child: Text(widget.i18n.translate('change_to_chinese')),
),
Text(widget.i18n.translate('goodbye_message')),
],
),
),
);
}
}
注意:在上面的代码中,widget.i18n.translate('change_to_chinese')
可能会导致一个错误,因为我们在 JSON 文件中没有定义这个键。你需要确保在 JSON 文件中定义了所有要翻译的键。
总结
通过上述步骤,你可以在你的 Flutter 应用中使用 flutter_google_i18n
插件进行国际化。这包括添加依赖、创建翻译文件、配置 pubspec.yaml
、初始化插件以及在 Widget 中使用翻译文本。