Flutter伪本地化测试插件flutter_pseudolocalizor的使用

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

Flutter伪本地化测试插件flutter_pseudolocalizor的使用

简介

flutter_pseudolocalizor 是一个用于Flutter应用的伪本地化工具,它可以根据给定的英文源文本生成多个语言的伪翻译(不合理的翻译)。这种技术有助于在进行真正的本地化之前测试应用程序是否能正确显示特定区域的语言字符、文本框能否容纳更长的翻译以及识别硬编码字符串或文本图像。

伪本地化的概念

  • 国际化:设计软件应用程序的过程,使其能够轻松适应各种其他语言和地区而无需任何编程更改。
  • 本地化:将国际化的软件针对特定地区或语言进行调整,添加区域特定组件(如 €2.99 => 2,99€)并翻译文本(Hello World! => Hallo Welt!)。
  • 伪本地化:一种软件测试方法,在本地化过程之前使用,通过生成带有区域和语言特定字符的假(或伪)翻译来测试应用程序:Hello World! => [ Hellö Wörld! ÜüäßÖ ]

伪本地化的好处包括:

  1. 测试目标区域(例如德语)的所有特殊字符是否正确显示。
  2. 测试文本框是否可以容纳较长的翻译。如果伪翻译被截断或视觉上看起来不好,则真实翻译也可能如此。
  3. 标识硬编码字符串或文本图像。

使用示例

添加依赖

首先,在pubspec.yaml文件中添加该包作为开发依赖:

dev_dependencies: 
  flutter_pseudolocalizor: 

接下来,在pubspec.yaml中定义设置:

flutter_pseudolocalizor:
  input_filepath: "test.arb"
  replace_base: true
  unicode_blocks:
    - latinSupplement
    - latinExtendedA
  use_brackets: true
  text_expansion_format: 'repeatVowels'
  text_expansion_ratio: null
  languages_to_generate:
    - de
    - pl
    - ru
  patterns_to_ignore:
    - '%(\S*?)\$[ds]'
    - 'Flutter'
  keys_to_ignore:
    - 'title'
  arb_settings:
    output_directory: 'l10n_pseudo'
  csv_settings:
    output_filepath: 'test_PSEUDO.csv'
    delimiter: ";"
    column_index: 1

设置说明

  • input_filepath: 输入本地化文件的路径。
  • replace_base: 是否替换基础语言(en),默认为false
  • unicode_blocks: 当replace_base为true时使用的Unicode块列表,默认为所有。
  • text_expansion_format: 文本扩展格式,默认为repeatVowels,其他选项有append, numberWords, exclamationMarks
  • languages_to_generate: 要生成的语言列表,默认为空。
  • patterns_to_ignore: 在文本替换期间要忽略的模式列表。
  • keys_to_ignore: 应该忽略的键列表。

运行命令

确保当前工作目录是项目根目录,然后运行以下终端命令以生成输出文件:

dart run flutter_pseudolocalizor

或者

flutter pub run flutter_pseudolocalizor

示例代码

假设你有一个名为test.csv的本地化文件,并且希望对其进行伪本地化处理,可以在pubspec.yaml中配置如下:

flutter_pseudolocalizor:
  input_filepath: "test.csv"
  replace_base: false
  use_brackets: true
  text_expansion_ratio: null
  languages_to_generate:
    - de
    - pl
    - ru
  csv_settings:
    delimiter: ";"
    column_index: 1
  patterns_to_ignore:
    - '%(\S*?)\$[ds]'
    - 'Flutter'
  line_numbers_to_ignore:
    - 2

然后运行命令:

dart run flutter_pseudolocalizor

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_pseudolocalizor插件进行伪本地化测试的示例代码。这个插件允许你将应用中的文本替换为伪本地化文本,以便在不实际翻译的情况下测试本地化布局。

1. 添加依赖

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

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

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

2. 使用插件

接下来,你需要在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示如何初始化插件并应用伪本地化:

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      localizationsDelegates: [
        // 添加伪本地化委托
        Pseudolocalizations.delegate,
        // 其他本地化委托,如 GlobalMaterialLocalizations.delegate
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', ''), // 英文
        Locale('pseudo', ''), // 伪本地化
      ],
      locale: Locale('pseudo', ''), // 设置默认语言为伪本地化
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Pseudolocalizor Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Hello, World!'),
            Text('This is a long text to test the layout with pseudolocalization.'),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

运行你的Flutter应用,你应该会看到所有的文本都被伪本地化了。例如,“Hello, World!”可能被转换为“Ĥéllö, Wörld!”。

4. 自定义伪本地化行为

flutter_pseudolocalizor插件还允许你自定义伪本地化的行为,比如字符的扩展比例、特殊字符的替换等。你可以通过Pseudolocalizations类的构造函数来传递这些配置。

以下是一个自定义伪本地化行为的示例:

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

void main() {
  // 创建自定义伪本地化配置
  final pseudolocalizationsDelegate = Pseudolocalizations.delegate(
    lengthExpansionFactor: 2.0, // 字符扩展比例
    accentedCharacters: {'a': 'ä', 'o': 'ö'}, // 特殊字符替换
  );

  runApp(MyApp(pseudolocalizationsDelegate: pseudolocalizationsDelegate));
}

class MyApp extends StatelessWidget {
  final PseudolocalizationsDelegate pseudolocalizationsDelegate;

  MyApp({required this.pseudolocalizationsDelegate});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      localizationsDelegates: [
        pseudolocalizationsDelegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', ''), // 英文
        Locale('pseudo', ''), // 伪本地化
      ],
      locale: Locale('pseudo', ''), // 设置默认语言为伪本地化
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Pseudolocalizor Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Hello, World!'),
            Text('This is a long text to test the layout with pseudolocalization.'),
          ],
        ),
      ),
    );
  }
}

以上代码展示了如何在Flutter应用中使用flutter_pseudolocalizor插件进行伪本地化测试,并提供了自定义伪本地化行为的示例。希望这对你有所帮助!

回到顶部