Flutter本地化管理插件jimtl_localazy的使用
Flutter本地化管理插件jimtl_localazy的使用
本文档将详细介绍如何在Flutter项目中使用jimtl_localazy
插件进行本地化管理。此插件可以帮助你处理缓存和远程更新你的ARB文件。
安装
首先,在项目的pubspec.yaml
文件中添加以下依赖:
dependencies:
jimtl_localazy:
flutter_jimtl:
然后运行flutter pub get
以安装这些依赖。
初始化LocalazyCdnManager
在Dart侧,你需要创建一个LocalazyCdnManager
实例:
import 'package:path/path.dart' as path;
import 'package:flutter/services.dart' show rootBundle;
import 'package:localazy/localazy.dart';
import 'package:jimtl/jimtl.dart';
import 'package:jimtl_localazy/jimtl_localazy.dart';
final manager = LocalazyCdnManager(
cdnId: '_a860213072234234453319c546',
getFileName: (String locale, String flavor) {
return 'myFile_$flavor.arb';
},
cacheFolder: path.join((await getTemporaryDirectory()).path, 'translations'),
);
cdnId
可以通过运行localazy cdn
命令来获取,例如:
Metadata:
- JSON: https://delivery.localazy.com/_a860213072234234453319c546/_e0.json
- Javascript: https://delivery.localazy.com/_a860213072234234453319c546/_e0.js
- Typescript: https://delivery.localazy.com/_a860213072234234453319c546/_e0.ts
在这个例子中,cdnId
为_a860213072234234453319c546
。
使用
如果你已经有一个支持本地化的Flutter项目,那么你需要在应用中声明一个LocalizationDelegate
。以下是一个示例:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:jimtl/jimtl.dart';
import 'package:jimtl_localazy/jimtl_localazy.dart';
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
DefaultMaterialLocalizations.delegate,
TranslationsDelegate<Translations>.withRemoteManager(
defaultLocale: 'en',
supportedLocales: ['en', 'fr'],
defaultFlavor: 'default',
currentFlavor: 'flavor1',
localizationManager: manager,
dataLoader: (locale, flavor) async {
print('local load $locale and $flavor');
if (flavor == 'default') {
return await rootBundle.loadString('assets/arb/translations_$locale.arb');
}
return await rootBundle.loadString('assets/arb/translations_${flavor}_$locale.arb');
},
onTranslationsUpdated: () {
print('TX updated, need rebuild');
setState(() {});
},
translationsBuilder: () => Translations(),
),
],
supportedLocales: [Locale('en'), Locale('fr')],
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context).title),
),
body: Center(
child: Text(AppLocalizations.of(context).helloWorld),
),
);
}
}
示例代码
以下是一个完整的示例代码,展示了如何使用jimtl_localazy
插件:
import 'package:flutter/material.dart';
import 'package:jimtl/jimtl.dart';
import 'package:jimtl_localazy/jimtl_localazy.dart';
void main() async {
final manager = LocalazyCdnManager(
cdnId: '_a860213072234234453319c546',
cacheFolder: '.',
getFileName: (String locale, String flavor) {
return 'myFile_$flavor.arb';
},
);
runApp(MyApp(manager: manager));
}
class MyApp extends StatelessWidget {
final LocalazyCdnManager manager;
MyApp({required this.manager});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
DefaultMaterialLocalizations.delegate,
TranslationsDelegate<Translations>.withRemoteManager(
defaultLocale: 'en',
supportedLocales: ['en', 'fr'],
defaultFlavor: 'default',
currentFlavor: 'flavor1',
localizationManager: manager,
dataLoader: (locale, flavor) async {
print('local load $locale and $flavor');
if (flavor == 'default') {
return await rootBundle.loadString('assets/arb/translations_$locale.arb');
}
return await rootBundle.loadString('assets/arb/translations_${flavor}_$locale.arb');
},
onTranslationsUpdated: () {
print('TX updated, need rebuild');
setState(() {});
},
translationsBuilder: () => Translations(),
),
],
supportedLocales: [Locale('en'), Locale('fr')],
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context).title),
),
body: Center(
child: Text(AppLocalizations.of(context).helloWorld),
),
);
}
}
更多关于Flutter本地化管理插件jimtl_localazy的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地化管理插件jimtl_localazy的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,jimtl_localazy
是一个用于本地化管理的插件,它可以帮助开发者轻松地管理和应用多语言支持。以下是如何使用 jimtl_localazy
插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 jimtl_localazy
插件的依赖。
dependencies:
flutter:
sdk: flutter
jimtl_localazy: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 Localazy
在你的 main.dart
文件中,初始化 Localazy
插件。
import 'package:flutter/material.dart';
import 'package:jimtl_localazy/jimtl_localazy.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Localazy.initialize(
apiKey: 'YOUR_API_KEY', // 替换为你的 Localazy API Key
projectId: 'YOUR_PROJECT_ID', // 替换为你的 Localazy Project ID
supportedLocales: [
const Locale('en', 'US'),
const Locale('es', 'ES'),
// 添加其他支持的语言
],
fallbackLocale: const Locale('en', 'US'),
);
runApp(MyApp());
}
3. 配置 MaterialApp
在 MaterialApp
中配置 localizationsDelegates
和 supportedLocales
。
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Localazy Demo',
localizationsDelegates: Localazy.localizationsDelegates,
supportedLocales: Localazy.supportedLocales,
locale: Localazy.locale,
home: MyHomePage(),
);
}
}
4. 使用本地化字符串
在你的应用中,你可以使用 Localazy.of(context).translate('key')
来获取本地化字符串。
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(Localazy.of(context).translate('app_title')),
),
body: Center(
child: Text(Localazy.of(context).translate('welcome_message')),
),
);
}
}
5. 在 Localazy 平台管理翻译
你需要登录 Localazy 平台,创建一个项目并上传你的翻译文件。你可以通过 Localazy 的 API Key 和 Project ID 来同步翻译内容。
6. 同步翻译
在 Localazy.initialize
中配置的 API Key 和 Project ID 会自动同步翻译内容。你也可以手动触发同步。
await Localazy.sync();
7. 动态切换语言
你可以使用 Localazy.setLocale
方法来动态切换语言。
Localazy.setLocale(const Locale('es', 'ES'));
8. 处理语言切换事件
你可以在 MaterialApp
中监听语言切换事件,并更新 UI。
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
Localazy.onLocaleChanged.listen((locale) {
setState(() {});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Localazy Demo',
localizationsDelegates: Localazy.localizationsDelegates,
supportedLocales: Localazy.supportedLocales,
locale: Localazy.locale,
home: MyHomePage(),
);
}
}