Flutter本地化管理插件localization_lite的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter本地化管理插件localization_lite的使用

简介

Localization Lite 是一个轻量级且简单的Flutter本地化包,允许您通过JSON文件轻松管理翻译。

logo Localization Lite

特性

  • 🔎 自动检测并应用设备语言设置
  • 📝 使用JSON语言文件进行简单设置
  • ⚡ 轻量级且快速
  • 🌍 支持多种语言而没有地区划分(例如:enar…)

入门指南

  1. 设置:在项目中的 assets 目录下创建一个新的文件夹,命名为 localization
  2. 添加语言文件:在 localization 文件夹中,为每种支持的语言添加JSON文件(例如:en.jsonar.json)。
  3. 配置资源:将本地化文件添加到您的 pubspec.yaml 中:
dependencies:
  localization_lite: ^latest_version 

flutter:
  assets:
    - assets/localization/

使用方法

  1. 初始化:在您的 main.dart 文件中初始化翻译系统:
await WidgetsFlutterBinding.ensureInitialized();
await Translation.init(defaultLang: "en"); // 初始化默认语言为英语

📝 注意:您也可以通过在 init 函数中添加 path 参数来自定义JSON路径。但是,当添加自定义路径时,请不要忘记将其添加到 pubspec.yaml 文件中:

await WidgetsFlutterBinding.ensureInitialized();
await Translation.init(defaultLang: "en", path: "myCustomPath"); // 自定义路径
flutter:
  assets:
    - myCustomPath/
  1. 访问翻译:使用 Translation 类来检索翻译字符串:
String greeting = Translation("greetingKey").toString(); // 使用Translation类获取翻译

String greeting = tr("greetingKey"); // 使用tr函数获取翻译

示例

以下是完整的示例演示如何设置和使用该包:

import 'package:flutter/material.dart';
import 'package:localization_lite/translate.dart'; // 导入本地化包

void main() async {
  await WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter绑定已初始化
  await Translate.init(defaultLangCode: "ar"); // 初始化默认语言为阿拉伯语
  runApp(
    MaterialApp(
      theme: ThemeData(
        primaryColor: Colors.blue, // 设置主题颜色
      ),
      home: MyApp(), // 设置主页面
    ),
  );
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
            tr("hello_world") + " or " + Translate("hello_world").toString()), // 显示翻译文本
      ),
    );
  }
}

更多关于Flutter本地化管理插件localization_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地化管理插件localization_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用localization_lite插件进行本地化管理的代码示例。localization_lite是一个轻量级的本地化插件,可以帮助你更方便地管理应用的本地化资源。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加localization_lite依赖:

dependencies:
  flutter:
    sdk: flutter
  localization_lite: ^x.y.z  # 请将x.y.z替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 创建本地化资源文件

在你的项目根目录下创建一个assets文件夹,并在其中创建一个locales文件夹。在locales文件夹中,为每个语言创建对应的JSON文件,例如:

  • locales/en.json
  • locales/zh.json

en.json内容示例:

{
  "app_name": "My App",
  "welcome_message": "Welcome to My App!"
}

zh.json内容示例:

{
  "app_name": "我的应用",
  "welcome_message": "欢迎来到我的应用!"
}

3. 配置pubspec.yaml

pubspec.yaml中配置资源文件路径:

flutter:
  assets:
    - assets/locales/en.json
    - assets/locales/zh.json

4. 设置LocalizationDelegate

在你的项目中创建一个localization_service.dart文件,并配置LocalizationDelegate

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:localization_lite/localization_lite.dart';
import 'package:your_app/assets/locales/localizations.dart'; // 假设你生成了一个localizations.dart文件

class LocalizationService {
  static LocalizationService? _instance;
  final LocalizationLite _localizationLite;

  LocalizationService._(this._localizationLite);

  factory LocalizationService() {
    _instance ??= LocalizationService._(LocalizationLite(
      supportedLocales: [
        Locale('en', ''),
        Locale('zh', ''),
      ],
      localizationsDelegate: AppLocalizationsDelegate(),
      fallbackLocale: Locale('en', ''),
    ));
    return _instance!;
  }

  Locale get currentLocale => _localizationLite.currentLocale!;

  String translate(String key) {
    return AppLocalizations.of(Localizations.localeOf(Localizations.rootContext!)).translate(key);
  }

  Future<void> loadLocale(Locale locale) async {
    await _localizationLite.load(locale);
  }
}

5. 生成localizations.dart文件

使用localization_lite提供的命令行工具生成localizations.dart文件。假设你安装了localization_lite的命令行工具,可以通过以下命令生成:

flutter pub run localization_lite:generate --input-dir=assets/locales --output-file=assets/locales/localizations.dart

6. 使用本地化

在你的main.dart文件中使用LocalizationService,并设置MaterialApp的localelocalizationsDelegates

import 'package:flutter/material.dart';
import 'package:your_app/localization_service.dart';

void main() {
  final localizationService = LocalizationService();
  runApp(MyApp(localizationService: localizationService));
}

class MyApp extends StatelessWidget {
  final LocalizationService localizationService;

  MyApp({required this.localizationService});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: localizationService.translate('app_name'),
      locale: localizationService.currentLocale,
      supportedLocales: localizationService._localizationLite.supportedLocales,
      localizationsDelegates: [
        ...GlobalMaterialLocalizations.delegates,
        ...GlobalWidgetsLocalizations.delegates,
        localizationService._localizationLite.localizationsDelegate,
      ],
      localeResolutionCallback: (locale, supportedLocales) {
        for (var supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale.languageCode ||
              supportedLocale.countryCode == locale.countryCode) {
            return supportedLocale;
          }
        }
        return supportedLocales.first;
      },
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final localizationService = LocalizationService();
    return Scaffold(
      appBar: AppBar(
        title: Text(localizationService.translate('app_name')),
      ),
      body: Center(
        child: Text(localizationService.translate('welcome_message')),
      ),
    );
  }
}

注意:在真实应用中,通常会在MyApp的顶层组件中持有LocalizationService的实例,而不是在每次需要时重新创建。

这个示例展示了如何在Flutter项目中使用localization_lite插件进行本地化资源的管理。你可以根据实际需求进一步调整和扩展这个示例。

回到顶部