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

相关推荐
哲科软件5 小时前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
天涯海风5 小时前
Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
flutter·kuikly
aiprtem6 小时前
基于Flutter的web登录设计
前端·flutter
Frank学习路上7 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
coder_pig9 小时前
跟🤡杰哥一起学Flutter (三十四、玩转Flutter手势✋)
前端·flutter·harmonyos
程序员老刘12 小时前
Android 16开发者全解读
android·flutter·客户端
Jalor12 小时前
Flutter + 鸿蒙 | Flutter 跳转鸿蒙原生界面
flutter·harmonyos
瓜子三百克14 小时前
CALayer的异步处理
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao15 小时前
一步到位:用 Very Good CLI × Bloc × go_router 打好 Flutter 工程地基
flutter·ios
九丝城主15 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware