杏聆荟Flutter客户端 i18n(翻译) 库

melon.yin d40e9540d6 update package info 3 years ago
lib ac48856763 rename fLangKeys to i18nBook 3 years ago
test 693d8a7f8e project initialization 3 years ago
.gitignore d40e9540d6 update package info 3 years ago
.metadata 693d8a7f8e project initialization 3 years ago
CHANGELOG.md 693d8a7f8e project initialization 3 years ago
LICENSE 693d8a7f8e project initialization 3 years ago
README.md d40e9540d6 update package info 3 years ago
pubspec.yaml d40e9540d6 update package info 3 years ago

README.md

fis_i18n

A internationalization and localization(i18n) package project for Flyinsono application.

介绍及声明

1. 本案设计按照模块维护各自的翻译字典,所以使用结构化对象提供字典文字,切换语言会重新构建字典对象,保证内存中始终保持一个字典。
2. 各语言对应字典要求唯一,语言(Locale)作为唯一键,不接受注入多个使用相同语言的字典选项。
3. 新增语言翻译字典,强制要求实现所有模块的所有翻译项,请认真填写。
4. 虽然国际化所有代码都放置在顶层项目中,不意味着可以随意修改。如有扩展需要,请联系框架负责人进行开发,禁止魔改!

使用方法

1. 获取指定项的翻译

    // i18nBook : FI18n单例当前翻译书的代理,供全局快速访问(FI18n.ins.currentBook)
    // user : user模块
    // login : login项,获得当前语言对应的翻译文字
    FText(i18nBook.user.login);

2. 切换语言

    FI18n.ins.switchLanguage(); // 顺序向下选择
    FI18n.ins.switchLanguage(FLangKeyBookEnglish.LocleConst); // 选择指定的语言

3. 当前语言是否中文

    if(FI18n.ins.isCurrentChinese){
        print('当前是中文!');
    }

4. 注入其他语言字典

// 在 lib/localization/langs 目录下创建语言字典类 de_de.dart (语言缩写_国家二字码.dart)

import 'dart:ui';

import '../key_book.dart';

class FLangKeyBookGermany extends FLangKeyBook {
  FLangKeyBookGermany() : super(LocaleConst);

  // 方便其他地方访问,非必须
  static const LocaleConst = const Locale("de", "DE");

  // 实现Application模块的字典构建
  @override
  ApplicationModule buildApplicationKeys() {
    return ApplicationModule(
      fisServerName: "Flyinsono server",
      wechat: "WeChat",
      cloudImage: 'Wolke bilder',
      localScreenshot: 'Lokal screenshots',
      report: 'Prüfbericht',
    );
  }

  /* 实现其他模块的build方法 */
}


    // 在启动时注入 main.dart
    final localization = FI18n(defaultLangBook, [
      FLangKeyBookOption(
        FLangKeyBookEnglish.LocaleConst,
        () => FLangKeyBookEnglish(),
      ),
      // 在这里添加新的字典选项
      FLangKeyBookOption(
        FLangKeyBookGermany.LocaleConst,
        () => FLangKeyBookGermany(),
      ),
    ]);

    // 启动后实时注入,可无限覆盖
    FI18n.ins.setKeyBook(
        FLangKeyBookGermany.LocaleConst,
        () => FLangKeyBookGermany(),
    );

5. 新增字典模块

// 1. 在 lib/localization/modules 目录下创建模块类 test.dart

class TestModule {
  const TestModule({
    required this.unitTest,
  });

  final String unitTest;
}

// 2. 在 lib/localization/key_book.dart的 class FLangKeyBook 中添加字段

  /// 测试模块
  late final TestModule test = buildTestKeys();

  /// 构建测试模块字典
  TestModule buildTestKeys();

// 3. 对 lib/localization/langs 目录下所有语言字典类实现 buildTestKeys()

  @override
  TestModule buildUserKeys() {
    return TestModule(
        unitTest: "单元测试",
    );
  }