Flutter国际化插件localize_it的使用

Flutter国际化插件 localize_it 的使用

localize_it 是一个用于简化Flutter应用国际化过程的插件。它通过自动化生成翻译文件和提供简单的API调用,极大地减少了手动配置的工作量。下面将详细介绍如何使用该插件。

1. 安装

首先,在你的项目中添加必要的依赖项。对于Flutter项目:

flutter pub add localize_it_annotation
flutter pub add --dev build_runner
flutter pub add --dev localize_it

对于纯Dart项目:

dart pub add localize_it_annotation
dart pub add --dev build_runner
dart pub add --dev localize_it

这会安装三个包:

  • build_runner: 代码生成工具。
  • localize_it: 代码生成器。
  • localize_it_annotation: 包含localize_it所需的注解。

2. 配置GetX(可选)

为了更好地利用localize_it的功能,建议同时集成GetX库。这样你可以直接在字符串后加上.tr来实现翻译功能。

dependencies:
  get: ^4.6.5

3. 设置配置文件

可以使用VSCode扩展来快速创建配置文件。安装扩展后,在lib/目录下运行命令localize_it: Create即可自动生成配置文件。

4. 配置说明

在配置文件中需要设置以下字段:

  • baseLanguageCode: 基础语言代码,默认为'de'(德语)。
  • supportedLanguageCodes: 支持的语言代码列表,默认为['en', 'es'](英语、西班牙语)。
  • deepLAuthKey: DeepL API密钥,用于自动翻译文本。
  • useGetX: 是否使用GetX,默认为true
  • preferDoubleQuotes: 是否优先使用双引号,默认为false

示例配置文件:

localize_it:
  baseLanguageCode: 'zh'
  supportedLanguageCodes: ['en', 'fr']
  deepLAuthKey: 'your-deep-l-api-key'
  useGetX: true
  preferDoubleQuotes: false

5. 禁用自动生成

确保在pubspec.yaml中禁用自动生成:

flutter:
  # generate: true

6. 开始本地化

执行以下命令清理并构建项目:

flutter clean
flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs

这将查找所有以.tr结尾的字符串,并根据配置进行翻译。

示例代码

以下是使用localize_it的一个简单示例:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'localize_it Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: '这是一个标题'.tr),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '你点击了按钮这么多次:'.tr,
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment'.tr,
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用localize_it插件进行国际化的代码案例。localize_it是一个方便的工具,可以帮助你管理和使用应用中的本地化资源。

1. 添加依赖

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

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

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

2. 设置资源文件

在项目的assets文件夹下创建一个locales文件夹,然后在locales文件夹中为每个支持的语言创建对应的JSON文件。例如:

assets/
  locales/
    en.json
    zh.json

en.json的内容可能如下:

{
  "welcome_message": "Welcome",
  "goodbye_message": "Goodbye"
}

zh.json的内容可能如下:

{
  "welcome_message": "欢迎",
  "goodbye_message": "再见"
}

3. 配置pubspec.yaml

pubspec.yaml中添加对资源文件的引用:

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

4. 初始化localize_it

在你的主文件(通常是main.dart)中初始化localize_it

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

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

  // 初始化LocalizeIt
  final localizeIt = LocalizeIt();

  // 设置默认语言(可选)
  await localizeIt.load(Locale('en'));

  // 将LocalizeIt实例传递给MaterialApp
  runApp(MyApp(localizeIt: localizeIt));
}

class MyApp extends StatelessWidget {
  final LocalizeIt localizeIt;

  MyApp({required this.localizeIt});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      localizationsDelegates: [
        // 添加LocalizeItDelegate
        localizeIt.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: localizeIt.delegate.supportedLocales,
      locale: localizeIt.locale,
      home: MyHomePage(),
    );
  }
}

5. 使用本地化文本

在你的页面或组件中使用本地化文本:

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

class MyHomePage extends StatelessWidget {
  final LocalizeIt localizeIt;

  MyHomePage({required this.localizeIt});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(localizeIt.translate('welcome_message')),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              localizeIt.translate('welcome_message'),
              style: TextStyle(fontSize: 20),
            ),
            Text(
              localizeIt.translate('goodbye_message'),
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 示例:切换到中文
          localizeIt.load(Locale('zh')).then((_) {
            // 更新UI
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Locale changed to zh')),
            );
          });
        },
        tooltip: 'Change Locale',
        child: Icon(Icons.translate),
      ),
    );
  }
}

在这个示例中,点击浮动按钮会切换应用的语言到中文,并显示一个SnackBar提示。

通过这些步骤,你就可以在Flutter项目中使用localize_it插件进行国际化了。希望这个示例对你有所帮助!

回到顶部