最近在Flutter的开发中,学习使用了get(https://pub.flutter-io.cn/packages/get),关于get包的详细功能有机会再和大家展开,这里主要介绍一下get包的国际化功能。

localizations.dart

在根目录下面新建一个localizations.dart文件,这个文件就是把之前app_en.arb和app_zh.arb合成一个文件,代码如下 :

import 'package:get/get.dart';

class AppLocalizations extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'zh_CN': {
          "generate": "生成",
          "lowercaseLetter": "小写字母",
          "uppercaseLetter": "大写字母",
          "arabicNumeral": "阿拉伯数字",
          "specialCharacter": "特殊字符",
          "length": "长度",
          "randomPassword": "随机密码",
          "passwordClipboard": "密码已经复制到剪贴板"
        },
        'en_US': {
          "generate": "Generate",
          "lowercaseLetter": "Lowercase Letter",
          "uppercaseLetter": "Uppercase Letter",
          "arabicNumeral": "Arabic Numeral",
          "specialCharacter": "Special Character",
          "length": "Length",
          "randomPassword": "Random Password",
          "passwordClipboard": "The password has been copied to the clipboard"
        }
      };
}

main.dart

修改main.dart文件,把build中的代码替换为下面的代码:

Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
    ]);
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.transparent,
    ));
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      translations: AppLocalizations(),
      locale: Get.deviceLocale,
      home: RandomPasswordPage(),
    );
  }

GetMaterialApp是get包提供的一个函数。

translations:就是读取我们定义的AppLocalizations。

locale:就是读取系统的语言,这里使用Get.deviceLocale获取设备的语言,这样如果设备更改了语言,应用也会跟随变化,当然前提是我们的AppLocalizations类中定义了对应的语言。

random_password.dart

准备好语言环境之后,就可以修改对应的代码部分,把之前AppLocalizations.of(context).randomPassword直接替换成'randomPassword'.tr,这样当执行到tr关键字时,系统会去AppLocalizations寻找对应的key(这里就是randomPassword),然后显示对应的value值。

get

get包提供的国际化非常方便,而且直接融入了dart代码。

get的功能非常强大,应该是Flutter开发中必须掌握的package,后面我会把其他功能一一的展开介绍。

0

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!