Flutter自动翻译插件arb_gen的使用

Flutter未知功能插件arb_gen的潜在用途探索

ARB Gen 是一个强大的 Dart 包,专为 Flutter 项目设计,通过 ARB(应用程序资源包)文件简化翻译和本地化流程。这个包自动生成功能化的 ARB 文件,使开发者能够专注于翻译方面。以下是关于 ARB Gen 的详细介绍和示例。

功能

  • 自动翻译:轻松将内容从基础语言翻译成多种目标语言。
  • 与Flutter集成:轻松将生成的翻译集成到您的 Flutter 项目中。
  • 灵活配置:通过配置文件或命令行参数自定义翻译过程。
  • 动态更新:在无需手动干预的情况下动态更新 Flutter 应用程序的新翻译。

安装

pubspec.yaml 文件中添加以下依赖项:

dev_dependencies:
  arb_gen:

然后运行:

flutter pub get

使用方法

1. 配置

创建一个配置文件 arb.gen/config.json。这是一个示例配置文件:

{
  "translateTo": ["fr", "es"],
  "ignored": ["appName"],
  "pathToFile": "arb.gen/content.json",
  "outputFolder": "lib/l10n/",
  "arbName": "localization",
  "baseLanguage": "en",
  "translater": null,
  "apiKey":null,
  "allAtOnce": true
}

注意:默认情况下我们首选 Google 翻译器,这种方法不需要任何 API-key,如果字段 translater 为空,则与 ‘google’ 相同。

输出目录用于所有生成的 .arb 文件,默认值为 ‘lib/l10n’。

2. 运行 ARB Gen

运行以下命令以执行翻译过程:

dart run arb_gen
3. 与 Flutter 集成

如果在配置中将 allAtOnce 设置为 false,请按照以下步骤将生成的翻译集成到您的 Flutter 项目中:

3.1 更新 pubspec.yaml
flutter:
  generate: true

dependencies:
  flutter_localizations:
    sdk: flutter
  intl:
3.2 创建 l10n.yaml
arb-dir: lib/l10n
template-arb-file: localization_en.arb
output-localization-file: app_localizations.dart
3.3 运行 flutter pub get

运行以下命令以获取依赖项并生成本地化文件:

flutter pub get
3.4 手动移动生成的文件

手动将生成的 ARB 文件从指定的输出文件夹(默认为 lib/l10n/)移动到项目的本地化文件夹中:

mv generated_arb_files/* lib/l10n/
3.5 更新 iOS 应用包

参阅网站上的文档。

示例代码

下面是一个完整的示例 main.dart 文件:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

// 假设这是你的应用入口点
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化共享偏好设置
  final prefs = await SharedPreferences.getInstance();
  
  runApp(MyApp(prefs: prefs));
}

class MyApp extends StatelessWidget {
  final SharedPreferences prefs;

  MyApp({required this.prefs});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page', prefs: prefs),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;
  final SharedPreferences prefs;

  MyHomePage({required this.title, required this.prefs});

  [@override](/user/override)
  _MyHomePageState 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(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), 
    );
  }
}

更多关于Flutter自动翻译插件arb_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部