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 功能配合使用,会更加的酸爽。

相关推荐
CocoaKier9 分钟前
喜大普奔!2027年春季起,iOS提审最低支持iOS15.0以上
ios·apple
FungLeo3 小时前
Flutter 接入 Alice 调试浮窗:一个顶层 final 抢跑,把 release 网络整没了
网络·flutter
初级代码游戏3 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
凡泰AI7 小时前
APP同时覆盖了iOS、安卓和鸿蒙,如何选择混合开发架构才能减少重复建设,提高功能上线效率~
android·ios·harmonyos·mpaas·uni·小程序容器
AIsoft_868811 小时前
iPhone录音重点标记:会议录音与重点内容同步保存功能实测
ios·iphone
00后程序员张11 小时前
使用Instruments工具深入分析iOS应用性能与启动时间优化
android·macos·ios·小程序·uni-app·cocoa·iphone
恋猫de小郭13 小时前
Flutter hit,一个可以灵活控制溢出点击的第三方包
android·前端·flutter
90后的晨仔14 小时前
Xcode 26.6编译 AFNetworking 报错全解:5 种方案从应急到根治
ios
初级代码游戏1 天前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
for_ever_love__1 天前
iOS:网络请求再学习
网络·学习·ios·objective-c