搜索插件、代码仓与 APP 分类

插件详情v1.0.4

string_extractor_intl

一个 Flutter 包,可从 Dart 文件或 lib 目录中提取硬编码字符串,并生成用于国际化(i18n)的 .arb 文件。

AndroidiOSmacOSWindowsLinux
近 30 天下载
19
喜欢数
5
Pub 分数
120

安装插件

flutter pub add string_extractor_intl

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter 包,可自动从 Dart 文件或整个 lib 目录中提取硬编码字符串,生成用于国际化 (i18n) 的 .arb 文件。它通过识别可翻译文本并将这些文本组织成与 Flutter 本地化系统兼容的结构化 ARB 文件,简化了 i18n 工作流程。适用于管理多语言应用的团队,可减少手动工作量并降低字符串管理中的错误。

适合场景

  • 自动化国际化字符串提取
  • 从源代码生成 .arb 文件
  • 简化翻译工作流程
  • 支持多语言应用程序开发
  • 与 CI/CD 流水线集成

主要特点

  • 从 Dart 文件中提取字符串
  • 自动生成 .arb 文件
  • 支持完整的 lib 目录扫描
  • 保持有序的键结构
  • 与 Flutter 的 intl 系统集成

适合对象

  • 使用 i18n 的 Flutter 开发人员
  • 管理多种语言的团队
  • 需要一致字符串处理的项目
  • 具有本地化需求的 CI/CD 环境
  • 寻求减少手动翻译工作的开发者

使用建议

  • 需要手动审查提取的字符串
  • 不处理动态字符串插值
  • 最好与翻译工作流程配合使用
  • 不适用于运行时字符串提取
  • 可能需要为复杂项目进行配置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter String Extractor for Localization

🌍 A powerful command-line tool that automatically extracts hardcoded strings from your Flutter project and generates ARB files for internationalization (i18n) and localization (l10n).

Features

  • 🔍 Automatically scans your Flutter project for hardcoded strings
  • 📝 Generates ARB files with extracted strings
  • 📝 Avoid Duplicates when extracting
  • 🔄 Replaces hardcoded strings with localization calls (optional)
  • 🛠️ Auto-configures MaterialApp with localization delegates
  • 📋 Detects string variables and creates parameterized localizations
  • ⚙️ Generates l10n.yaml configuration file
  • 🔍 Dependency checking ensures required packages are installed
  • 🎯 Smart filtering ignores URLs, asset paths, and other non-localizable strings

Installation

Add this package as a dev dependency in your pubspec.yaml:

dev_dependencies:
  string_extractor_intl: ^1.0.3

Then run:

flutter pub get

Prerequisites

Your Flutter project must have these dependencies in pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.19.0
The following section is specific to Flutter packages. for future generation
flutter:
uses-material-design: true
generate: true

Usage

Basic Usage (Extract Only)

Extract strings and generate ARB files without modifying your source code:

dart pub run string_extractor_intl:extract_strings
Advanced Usage

Extract and replace in files:

dart pub run string_extractor_intl:extract_strings --replace

Custom configuration:

dart pub run string_extractor_intl:extract_strings \
  --input lib/presentation \
  --output assets/l10n \
  --template-arb strings_en.arb \
  --class-name MyLocalizations \
  --replace

Show help:

dart pub run string_extractor_intl:extract_strings --help
Command Line Options
Option Short Default Description
--input -i lib/presentation Input directory to scan
--output -o lib/l10n Output directory for localization files
--template-arb app_en.arb Template ARB file name
--class-name -c AppLocalizations Name of the localization class
--replace -r false Replace hardcoded strings with localization calls
--check-deps true Check for required dependencies
--help -h Show usage information

⚠️ Suggestion: run the extraction on the Presentation folder only to avoid taking unnecessary strings with:

dart pub run string_extractor_intl:extract_strings \ --input lib/presentation \

⚠️ CAUTION: Before Running with --replace Flag

READ THIS CAREFULLY BEFORE USING THE --replace OPTION:

🚨 MANDATORY BACKUP
  • ALWAYS create a backup of your project before running with --replace
  • Commit your changes to Git or copy your entire project folder
  • The tool will modify multiple files in your project automatically
  • There is no undo feature - you'll need your backup to revert changes
📖 READ INSTRUCTIONS THOROUGHLY
  • Read this entire README before using the replacement feature
  • Test the tool on a small project first to understand how it works
  • Review the generated code after replacement to ensure it meets your needs
🔧 POST-REPLACEMENT REQUIREMENTS

After running with --replace, you MUST run these commands:

# Install/update dependencies
flutter pub get

# Generate localization files
flutter gen-l10n
⚠️ IMPORTANT WARNINGS before using --replace
  • Review all changes before committing to version control
  • Test your app thoroughly after replacement
  • Some strings may need manual adjustment after automatic replacement
  • Variables in strings will be converted to parameterized localizations
  • MaterialApp will be automatically configured with localization delegates

How It Works

1. String Detection

The tool scans your Dart files and identifies hardcoded strings, excluding:

  • Import/export statements
  • Asset paths and URLs
  • File extensions
  • Widget class names
  • Single characters and numbers
2. Variable Detection

Automatically detects variables in strings:

  • "Hello $_name" → S.of(context).hello('$_name')
  • "Count: ${count}" → S.of(context).count('$count')
3. ARB File Generation

Creates structured ARB files with:

  • Proper locale annotations
  • Parameter definitions for variables
  • Descriptive comments
  • Sorted keys for consistency
4. Code Replacement (Optional)

When using --replace:

  • Replaces hardcoded strings with localization calls
  • Adds necessary import statements
  • Configures MaterialApp with localization delegates
  • Preserves variable references in parameterized strings

Example

Before
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      home: Scaffold(
        appBar: AppBar(title: Text('Welcome')),
        body: Text('Hello $_username!'),
      ),
    );
  }
}
After (with --replace)
import 'l10n/generated/app_localizations.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: S.localizationsDelegates,
      supportedLocales: S.supportedLocales,
      title: S.of(context).myApp,
      home: Scaffold(
        appBar: AppBar(title: Text(S.of(context).welcome)),
        body: Text(S.of(context).hello('$_username')),
      ),
    );
  }
}
Generated ARB File (app_en.arb)
{
  "@@locale": "en",
  "hello": "Hello {username}!",
  "@hello": {
    "description": "Localized string with parameters: username",
    "placeholders": {
      "username": {
        "type": "String",
        "example": "John"
      }
    }
  },
  "myApp": "My App",
  "@myApp": {
    "description": "Localized string"
  },
  "welcome": "Welcome",
  "@welcome": {
    "description": "Localized string"
  }
}

Generated Files

The tool creates several files:

  1. ARB File (lib/l10n/app_en.arb) - Contains extracted strings
  2. l10n.yaml - Configuration for Flutter's localization generator
  3. Modified Dart files - Updated with localization calls (if using --replace)

Next Steps After Generation

  1. Add additional language ARB files:

    lib/l10n/app_es.arb  (Spanish)
    lib/l10n/app_fr.arb  (French)
    lib/l10n/app_de.arb  (German)
    
  2. Run Flutter's localization generator:

    flutter gen-l10n
    
  3. Import and use in your app:

    import 'l10n/generated/app_localizations.dart';
    
    // In your MaterialApp
    MaterialApp(
      localizationsDelegates: S.localizationsDelegates,
      supportedLocales: S.supportedLocales,
      // ...
    )
    

For more details, read this article.

Troubleshooting

Common Issues

"pubspec.yaml not found"

  • Ensure you're running the command from your Flutter project root

"Missing required dependencies"

  • Add intl and flutter_localizations to your pubspec.yaml
  • Run flutter pub get

Generated strings not accessible

  • Run flutter gen-l10n after generating ARB files
  • Check that l10n.yaml exists in your project root

Compilation errors after replacement

  • Ensure you ran flutter pub get and flutter gen-l10n
  • Check that imports were added correctly
  • Review replaced strings for accuracy
Best Practices
  • Start with extraction only (without --replace) to review strings
  • Test on a copy of your project first
  • Review generated ARB files before adding translations
  • Use meaningful string content for better key generation
  • Keep backups when using the replacement feature

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

If you encounter any issues or have questions:

  1. Check the troubleshooting section above
  2. Search existing issues on GitHub
  3. Create a new issue with detailed information about your problem

Happy Localizing! 🌍

所属分类

依赖

依赖清单 4 项

源码仓库

使用此插件的项目

暂无相关数据。