Flutter本地化插件zooper_flutter_localization的使用

Flutter本地化插件zooper_flutter_localization的使用

简介

zooper_flutter_localization 是一个简单的本地化库,旨在支持多个本地化文件。该库旨在与 get_itinjectable 配合使用,但也可以与其他框架一起工作。


示例

导入

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  zooper_flutter_localization: ^<latest_version>

然后在 Dart 文件中导入:

import 'package:zooper_flutter_localization/zooper_flutter_localization.dart';

使用 injectable 注册本地化服务

如果你希望为特定的视图(或 ViewModel)注册本地化服务,可以使用 injectable 模块来定义它。

定义模块

import 'package:injectable/injectable.dart';
import 'package:zooper_flutter_localization/zooper_flutter_localization.dart';

[@module](/user/module)
abstract class LocalizationModule {
  // 获取本地化服务实例
  LocalizationService get localizationService;

  // 注册一个名为 'Titles' 的本地化服务
  [@preResolve](/user/preResolve)
  [@Named](/user/Named)('Titles')
  Future<ZooperLocalizer> titlesLocalizations(LocalizationService localizationService) =>
      localizationService.loadAsync('assets/localizations/titles.csv');

  // 注册另一个名为 'Errors' 的本地化服务
  [@preResolve](/user/preResolve)
  [@Named](/user/Named)('Errors')
  Future<ZooperLocalizer> errorsLocalizations(LocalizationService localizationService) =>
      localizationService.loadAsync('assets/localizations/errors.csv');

  // 注册一个未命名的本地化服务,但指定类型
  [@preResolve](/user/preResolve)
  Future<ZooperLocalizer<MainViewModel>> viewModelLocalizations(LocalizationService localizationService) =>
      localizationService.loadAsync('assets/localizations/errors.csv');
}

注入到视图中

你可以通过注入的方式将本地化服务注入到视图中:

class TestView {
  final ZooperLocalizer<TestViewModel> _localizer;

  TestView(this._localizer);
}

或者注入未命名的本地化服务:

class TestView {
  final ZooperLocalizer _localizer;

  TestView([@Named](/user/Named)('YourName') this._localizer);
}

访问翻译内容

有多种方式可以访问翻译内容:

最简单的方式

_localizer['Hello'];

使用 getLocalization 方法

_localizer.getLocalization('Hello');

使用特定的本地化语言

_localizer.getLocalizationByLocale('Hello', Locale('de', 'DE'));

完整示例代码

以下是一个完整的示例,展示如何使用 zooper_flutter_localization 插件:

import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';
import 'package:zooper_flutter_localization/zooper_flutter_localization.dart';

// 定义本地化模块
[@module](/user/module)
abstract class LocalizationModule {
  LocalizationService get localizationService;

  [@preResolve](/user/preResolve)
  [@Named](/user/Named)('Titles')
  Future<ZooperLocalizer> titlesLocalizations(LocalizationService localizationService) =>
      localizationService.loadAsync('assets/localizations/titles.csv');

  [@preResolve](/user/preResolve)
  [@Named](/user/Named)('Errors')
  Future<ZooperLocalizer> errorsLocalizations(LocalizationService localizationService) =>
      localizationService.loadAsync('assets/localizations/errors.csv');
}

void main() {
  // 初始化 injectable
  configureInjection(Environment.prod);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LocalizedPage(),
    );
  }
}

class LocalizedPage extends StatelessWidget {
  final ZooperLocalizer _titlesLocalizer;

  LocalizedPage({
    required this._titlesLocalizer,
  });

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_titlesLocalizer['AppName']),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_titlesLocalizer['WelcomeMessage']),
            ElevatedButton(
              onPressed: () {
                print(_titlesLocalizer['ButtonLabel']);
              },
              child: Text(_titlesLocalizer['ButtonLabel']),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


zooper_flutter_localization 是一个用于 Flutter 应用本地化的插件。它可以帮助你轻松地管理和加载不同语言的翻译文件,并在应用中动态切换语言。以下是如何使用 zooper_flutter_localization 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  zooper_flutter_localization: ^1.0.0  # 请使用最新版本

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

2. 创建翻译文件

assets 目录下创建翻译文件。例如:

assets/
  translations/
    en.json
    es.json
    fr.json

每个文件包含对应语言的翻译键值对。例如 en.json

{
  "hello": "Hello",
  "welcome": "Welcome to the app"
}

es.json

{
  "hello": "Hola",
  "welcome": "Bienvenido a la aplicación"
}

3. 配置 pubspec.yaml

pubspec.yaml 中配置 assets 路径:

flutter:
  assets:
    - assets/translations/en.json
    - assets/translations/es.json
    - assets/translations/fr.json

4. 初始化 zooper_flutter_localization

在你的 main.dart 文件中初始化 zooper_flutter_localization

import 'package:flutter/material.dart';
import 'package:zooper_flutter_localization/zooper_flutter_localization.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await ZooperLocalization.init(
    supportedLocales: [
      const Locale('en', 'US'),
      const Locale('es', 'ES'),
      const Locale('fr', 'FR'),
    ],
    assetPath: 'assets/translations',
    fallbackLocale: const Locale('en', 'US'),
  );

  runApp(MyApp());
}

5. 使用 zooper_flutter_localization

在你的应用中使用 ZooperLocalization 来获取翻译文本:

import 'package:flutter/material.dart';
import 'package:zooper_flutter_localization/zooper_flutter_localization.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      locale: ZooperLocalization.locale,
      supportedLocales: ZooperLocalization.supportedLocales,
      localizationsDelegates: ZooperLocalization.localizationsDelegates,
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(ZooperLocalization.of(context).translate('welcome')),
      ),
      body: Center(
        child: Text(ZooperLocalization.of(context).translate('hello')),
      ),
    );
  }
}

6. 切换语言

你可以通过以下方式动态切换应用的语言:

ZooperLocalization.setLocale(const Locale('es', 'ES'));

7. 获取当前语言

你可以通过以下方式获取当前设置的语言:

Locale currentLocale = ZooperLocalization.locale;

8. 处理语言切换事件

你可以监听语言切换事件,以便在语言切换时更新 UI:

ZooperLocalization.onLocaleChanged.listen((Locale locale) {
  // 更新 UI 或执行其他操作
});
回到顶部