Flutter本地化翻译插件json_translation的使用
Flutter本地化翻译插件json_translation的使用
特性
- 使用JSON文件来翻译您的应用程序。
开始
在你的项目中添加json_translation
依赖包:
flutter pub add json_translation
使用
查看示例。
按语言添加JSON文件
在locales
路径下为每种支持的语言添加一个JSON文件,并在pubspec.yaml
中描述它。
路径必须为./locales
flutter:
assets:
- locales/
使用一个JSON文件/对象来表示应用本地化的键:String
/值:String
对。
示例项目树
JSON文件名必须与supportedLocales
中描述的语言代码完全匹配。
lib/
locales/
en.json
fr.json
示例JSON文件
// en.json
{
"hello-world": "Hello World."
}
// fr.json
{
"hello-world": "Bonjour à tous."
}
示例MaterialApp
在MaterialApp
的localizationsDelegates
中添加JsonTranslation.delegate
。
MaterialApp(
localizationsDelegates: const [
JsonTranslation.delegate,
...GlobalMaterialLocalizations.delegates,
],
supportedLocales: const [
Locale('en'),
Locale('fr'),
],
);
示例
使用$()
函数进行关键词翻译。
import 'package:json_translation/json_translation.dart';
Container(
child: Text($("hello-world"))
)
贡献
您可以以多种方式为本项目做出贡献!您可以:
完整示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:json_translation/json_translation.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
static void setLocale(BuildContext context, Locale locale) {
_MyAppState state = context.findAncestorStateOfType<_MyAppState>()!;
state.setLocale(locale);
}
}
class _MyAppState extends State<MyApp> {
// 这个小部件是您的应用程序的根节点。
Locale _locale = const Locale.fromSubtags(languageCode: 'en');
void setLocale(Locale locale) {
setState(() {
_locale = locale;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'JSON Translation Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'JSON Translation Demo'),
localizationsDelegates: const [
JsonTranslation.delegate,
...GlobalMaterialLocalizations.delegates,
],
supportedLocales: const [
Locale('en'),
Locale('fr'),
],
locale: _locale,
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int index = 0;
[@override](/user/override)
Widget build(BuildContext context) {
// 初始化插件
JsonTranslation.init(context);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 显示翻译文本
Text($("hello-world")),
],
),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: index,
onTap: (value) {
setState(() {
index = value;
});
String lang;
switch (index) {
case 0:
lang = 'en';
break;
case 1:
lang = 'fr';
break;
default:
lang = 'en';
}
MyApp.setLocale(context, Locale.fromSubtags(languageCode: lang));
},
items: const [
BottomNavigationBarItem(
icon: Text("EN"),
label: 'English',
),
BottomNavigationBarItem(
icon: Text("FR"),
label: 'French',
),
],
),
);
}
}
更多关于Flutter本地化翻译插件json_translation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地化翻译插件json_translation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,json_translation
是一个用于管理应用程序本地化翻译的插件。它允许你将翻译字符串存储在 JSON 文件中,并在应用程序中使用这些翻译。下面是使用 json_translation
插件的详细步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 json_translation
依赖:
dependencies:
flutter:
sdk: flutter
json_translation: ^1.1.0
然后运行 flutter pub get
来安装依赖。
2. 创建 JSON 翻译文件
在项目的 assets
目录下创建一个 translations
文件夹,并在其中为每种语言创建一个 JSON 文件。例如:
assets/translations/en.json
assets/translations/es.json
assets/translations/fr.json
每个 JSON 文件应包含键值对,其中键是翻译的标识符,值是翻译的文本。例如,en.json
文件可能如下所示:
{
"hello": "Hello",
"goodbye": "Goodbye"
}
es.json
文件可能如下所示:
{
"hello": "Hola",
"goodbye": "Adiós"
}
3. 配置 pubspec.yaml
在 pubspec.yaml
文件中,确保你已经将 assets
文件夹包含在 flutter
部分:
flutter:
assets:
- assets/translations/
4. 生成翻译文件
json_translation
插件提供了一个命令行工具来生成 Dart 代码,以便在应用程序中使用翻译。
首先,确保你已经安装了 json_translation
命令行工具:
flutter pub global activate json_translation
然后在项目根目录下运行以下命令来生成 Dart 文件:
flutter pub global run json_translation:generate
这将在 lib/generated
目录下生成一个 translations.dart
文件。
5. 在应用程序中使用翻译
在生成的 translations.dart
文件中,你会看到一些生成的类和方法。你可以在应用程序中使用这些类来获取翻译。
首先,在 main.dart
文件中初始化翻译:
import 'package:flutter/material.dart';
import 'generated/translations.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Translations.load(Locale('en')); // 设置默认语言为英语
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
locale: Locale('en'), // 设置默认语言为英语
localizationsDelegates: Translations.localizationsDelegates,
supportedLocales: Translations.supportedLocales,
home: MyHomePage(),
);
}
}
然后在你的 widget 中使用翻译:
import 'package:flutter/material.dart';
import 'generated/translations.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(Translations.of(context).hello),
),
body: Center(
child: Text(Translations.of(context).goodbye),
),
);
}
}
6. 切换语言
你可以通过调用 Translations.load(Locale('es'))
来动态切换语言。例如:
FlatButton(
onPressed: () {
Translations.load(Locale('es')); // 切换到西班牙语
},
child: Text('Switch to Spanish'),
)