Flutter字符串提取插件flutter_string_extractor的使用

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

Flutter字符串提取插件flutter_string_extractor的使用

flutter_string_extractor 是一个用于从 Flutter 项目中提取可翻译字符串的命令行工具。它会查找 Dart 文件中用 .trtr() 标记的字符串,并生成一个 JSON 文件。

特性

  • 提取用 .tr 标记的字符串(例如 "Hello".tr)。
  • 提取 tr() 函数调用中的字符串(例如 tr("Hello"))。
  • 支持单引号和双引号。
  • 生成干净的 JSON 输出文件。

安装

首先,你需要全局安装 flutter_string_extractor

# 使用 pub 全局激活 flutter_string_extractor
dart pub global activate flutter_string_extractor

确保你的 PATH 包含 pub 缓存的 bin 目录:

# 将以下内容添加到你的 ~/.bashrc, ~/.zshrc 或类似的文件中
export PATH="$PATH":"$HOME/.pub-cache/bin"

使用

安装完成后,你可以在任何地方运行该工具:

flutter_string_extractor -s lib -o strings.json

选项

  • -s, --src-dir:要扫描的源目录,默认为 “lib”。
  • -o, --output-file:输出 JSON 文件路径,默认为 “strings.json”。
  • -h, --help:显示使用信息。

示例输出

工具将生成类似以下内容的 JSON 文件:

{
  "Hello": "Hello",
  "Welcome back": "Welcome back",
  "Settings": "Settings"
}

作为库使用

你也可以在 Dart 代码中将其作为一个库来使用:

import 'package:flutter_string_extractor/flutter_string_extractor.dart';

void main() {
  // 从 lib 目录提取字符串并保存到 strings.json
  FlutterStringExtractor.extractStrings('lib', 'strings.json');
}

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_string_extractor 插件:

import 'package:flutter_string_extractor/flutter_string_extractor.dart';

void main() {
  // 示例字符串在我们的源代码中:
  // "Hello".tr
  // tr("Welcome")
  // 'Settings'.tr
  // tr('Goodbye')

  // 从 lib 目录提取字符串
  FlutterStringExtractor.extractStrings('lib', 'translations.json');

  // 这将会创建一个 translations.json 文件,其内容类似于:
  // {
  //   "Hello": "Hello",
  //   "Welcome": "Welcome",
  //   "Settings": "Settings",
  //   "Goodbye": "Goodbye"
  // }
}

更多关于Flutter字符串提取插件flutter_string_extractor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter字符串提取插件flutter_string_extractor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_string_extractor插件来提取字符串的一个简单示例。这个插件通常用于本地化目的,能够自动扫描代码中的字符串并将其提取到指定的文件中。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_string_extractor: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 配置插件

flutter_string_extractor通常通过命令行工具来使用。你可以在项目的根目录下创建一个脚本,或者直接在命令行中运行命令。

步骤 3: 编写Flutter代码

在你的Flutter代码中,使用字符串时,确保它们符合插件的提取规则。例如,你可以使用S函数来包裹需要提取的字符串:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        // 添加你的本地化委托
        GlobalMaterialLocalizations.delegate,
        // 其他本地化委托...
      ],
      supportedLocales: [
        Locale('en', 'US'),
        Locale('zh', 'CN'),
      ],
      home: Scaffold(
        appBar: AppBar(
          title: Text(S('welcome_message')), // 这里是待提取的字符串
        ),
        body: Center(
          child: Text(S('hello_world')), // 这里是另一个待提取的字符串
        ),
      ),
    );
  }
}

注意:实际使用时,S函数通常是由生成的本地化文件提供的,但在这个示例中,我们假设你已经有了一个自定义的S函数或者会稍后生成。

步骤 4: 使用命令行工具提取字符串

在你的项目根目录下,打开命令行工具,运行以下命令来提取字符串(假设你已经安装并配置好了Dart环境):

dart pub run flutter_string_extractor:main extract --output-dir=lib/l10n --input-dirs=lib --pattern=r"%s\('(.+?)'\)"

这里的参数解释:

  • extract 是提取命令。
  • --output-dir=lib/l10n 指定输出目录。
  • --input-dirs=lib 指定要扫描的输入目录。
  • --pattern=r"%s\('(.+?)'\)" 是匹配字符串的正则表达式,这里假设你使用S('string')的格式。实际使用时,你可能需要根据你的S函数的实现来调整这个正则表达式。

注意

  1. S函数的实现:在真实项目中,你需要实现一个S函数来加载和返回本地化字符串。这通常涉及到生成ARB文件,并使用flutter gen-l10n命令来生成本地化代码。
  2. 正则表达式:确保你的正则表达式与代码中用于包裹字符串的函数匹配。
  3. 插件版本flutter_string_extractor的API和命令行工具可能会随着版本更新而变化,请参考插件的官方文档获取最新信息。

由于flutter_string_extractor的具体实现和命令行参数可能会随着版本更新而变化,上述示例仅提供一个基本框架。在实际项目中,请仔细阅读插件的README文档和示例代码。

回到顶部