東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

Flutter国际化

2021年12月15日星期三



dart语言太啰嗦了,无休止的嵌套和括号。。。。

1,添加依赖配置

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  #i18n
  flutter_localizations:
    sdk: flutter

   。。。
  

  # 从这里往下新增依赖库
  english_words: ^4.0.0 # 英语字母库
  #  animations: ^2.0.0 #动画
  intl: ^0.17.0 # 本地配置国际化

。。。

flutter:
  。。。

  # 本地国际化
  generate: true

注意,这个文件对空格有要求,格式化也不能解决。。。。


2,项目根目录创建i18n.yaml

跟pubspec.yaml平级

arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: test_hello_localizations.dart
output-class: TestHelloLocalizations
preferred-supported-locales:
  - en
use-deferred-loading: true

指定生成的文件和类名


3,增加本地化模板

新增英文 lib/i10n/intl_en.arb  json格式

{
  "replyDraftsLabel": "Drafts",
  "@replyDraftsLabel": {
    "description": "Text label for Drafts destination."
  }
}


4.,增加翻译

如增加中文

lib/i10n/intl_zh.arb

{
  "replyDraftsLabel": "草稿"
}


5,生成

编译后,在项目根目录 .dart_tool/flutter_gen/gen_i10n/下生成了三个文件

SENRSL:hello senrsl$ ls .dart_tool/flutter_gen/gen_l10n/
test_hello_localizations.dart        test_hello_localizations_en.dart    test_hello_localizations_zh.dart
SENRSL:hello senrsl$

对应

abstract class TestHelloLocalizations {}
class TestHelloLocalizationsEn extends TestHelloLocalizations {}
class TestHelloLocalizationsZh extends TestHelloLocalizations {}

动态代理模式,返回指定语言下的指定内容


6,应用入口配置使用本地语言

import 'package:flutter_gen/gen_l10n/test_hello_localizations.dart';

void main() {
  runApp(const MaterialApp(
    title: "顶级title",
    localizationsDelegates: [
      TestHelloLocalizations.delegate,
      GlobalMaterialLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate,
      GlobalCupertinoLocalizations.delegate,
    ],
    // localizationsDelegates: TestHelloLocalizations.localizationsDelegates,
    supportedLocales: TestHelloLocalizations.supportedLocales,
    // supportedLocales: [
    //   Locale("en",""),
    //   Locale("cn",""),
    // ],
    home: TestRun10Widget(),
  ));
}

Global啥的应该不用加,配置方法在TestHelloLocalizations中有详细介绍。。。。


7,使用

import 'package:flutter_gen/gen_l10n/test_hello_localizations.dart';

label: TestHelloLocalizations.of(context)?.bottomNavigationCommentsTab,


8,总结

flutter一定是一堆无聊透顶的老太太们设计的,逻辑啰嗦,无语至极。


--
senRsl
2021年12月15日17:43:54

没有评论 :

发表评论