Flutter 日记APP-get国际化

get 配置

根据get的使用文档,使用get先在main.dart中使用GetMaterialApp替换Flutter自带的MaterialApp。

less 复制代码
Widget build(BuildContext context) {
  return GetMaterialApp(
  //全局导航key,用于获取当前的context
    navigatorKey: SSLUIManager.sslNavKey,
    //是否显示右上角debug图片
    debugShowCheckedModeBanner: false,
    //国际化翻译管理类,下面介绍
    translations: SSLInternation(),
    //当前的主题,下文介绍
    theme: sslUI.currentTheme,
    // darkTheme: SSLColor.darkTheme,
    //get路由管理,后续介绍
    getPages: SSLRoutes.pages,
    //初始路由
    initialRoute: SSLRoutes.root_routes,
    //主页,和初始路由相同
    home: const SSLRootRoute(),
    //当前语言
    locale: sslUI.currentLocale,
    //本地语言发生变化后回调
    localeListResolutionCallback: (locales, supportedLocales){
      debugPrint("当前系统语言环境$locales");
      return;
    },
    //当前语言不支持的语言类型时使用的默认语言
    fallbackLocale: const Locale('en', 'US'),
  );
}

文件类容

配置好对应的设置后,来看下get的国际化管理文件类SSLInternation,内容很简单。

dart 复制代码
import 'package:get/get.dart';
import 'locales/intl_en_us.dart';//英文
import 'locales/intl_zh_cn.dart';/中文
class SSLInternation extends Translations{
  @override
  Map<String, Map<String, String>> get keys {
    return {
        'zh_cn' : intlZhCN,//对应的中文翻译
        'en_us' : intlEnUS,//对应英文翻译
    };
  }
}

对应的中文

dart 复制代码
import 'package:file_handle/internation/SSLIntlName.dart';
final Map<String, String> intlEnUS = {
  SSLLocales.main_tab_home : "Lift",
  SSLLocales.main_tab_charts : "Charts",
  SSLLocales.main_tab_setting : "Setting",
  ...
}

其中SSLLocales.main_tab_home,是定义的常量,便于使用时不用直接硬敲字符串,容易出错。也顺便贴出源码。

csharp 复制代码
abstract class SSLLocales {
  //命名规则一级名_二级名_具体名,不可超过两级
  static const main_tab_home = "main_tab_home";
  static const main_tab_charts = "main_tab_charts";
  static const main_tab_setting = "main_tab_setting";
  ...
}

使用

scss 复制代码
//加上tr后缀则会被get监听,当切换语言时,会更新到对应的语言。
Text(SSLLocales.main_tab_home.tr),

切换语言

ini 复制代码
Future<bool> changeLocal(String local) async{
    if (local == sslLocale){
      return false;
    }
    //本地存储
    bool success = await shareSetStringData(localeKey, local);
    if (success){
    //设置当前语言标识
      localeSet = local;
      //获取当前语言的Locale
      Locale temLocal = currentLocale;
      //使用get更新语言,会更新全局,待tr的String显示
      Get.updateLocale(temLocal);
    }
    return success;
}

总体来讲,使用get进行国际化管理还是很方便的,可能在部分功能上没有intl 灵活方便,但对于大多项目来说,完全够用了,特别是和get 功能配合使用,会更加的酸爽。

相关推荐
恋猫de小郭19 分钟前
KMP / CMP 鸿蒙版本 Beta 发布,他有什么特别之处?
android·前端·flutter
风华圆舞20 小时前
Flutter + 鸿蒙 Intents Kit:页面直达能力的完整接入方案
flutter·ui·华为·harmonyos
韩曙亮20 小时前
【Flutter】Flutter 组件 ④ ( 组件渲染 的 三棵树理论 | Widget 树 → Element 树 → RenderObject 树 )
flutter·element·widget·renderobject
初级代码游戏20 小时前
easy Photo Clean公测版:快速清理iPhone照片 邀请公测
ios·iphone
库奇噜啦呼21 小时前
【iOS】RunLoop学习
学习·ios
黑科技iOS上架1 天前
iOS应用周末提交什么情况算卡审
经验分享·ios
恋猫de小郭1 天前
Android 17 正式版发布,全新 AI 和各种破坏性更新
android·前端·flutter
kingbal1 天前
Windows:flutter环境搭建
windows·flutter
911hzh1 天前
Flutter MethodChannel 跨端通信框架 zh_native_channel:快速入门、优势分析与 Pigeon 对比
flutter
911hzh1 天前
Flutter 快速搭建新项目:用 Flutter Foundation Kit 一条命令生成带基础架构的 App 模板
flutter