当前位置: 首页 > news >正文

Flutter多语言适配

多语言适配是一个让应用面向国际市场的前提,另外也看我的Android原生的多语言适配的文章添加链接描述 。

那么Flutter如何进行多语言适配呢?本文使用了GetX框架,所以你的项目应该是GetX框架搭建的。

创建翻译类
import 'package:get/get.dart';class AppTranslations extends Translations {Map<String, Map<String, String>> get keys => {'en': {'hello': 'Hello','jym': 'JYM'},//    'zh': {//      'hello': '你好',//      'jym': '掘友们'//    },'zh_CN': { 'hello': '你好', 'jym': '掘友们', },'zh_TW': { 'hello': '你好','welcome': '掘友們'},};
}

首先要定义一个类继承Translations类,实现各个语言的key-value文案。其中zh_TW代表繁体中文,而zh_CN则代表简体中文。

pubspec.yaml 中添加依赖库
dependencies:flutter:sdk: flutter# 后面的都是你要加的flutter_localizations:sdk: flutter# 务必使用^0.19.0及以上版本,我之前使用^0.17.0版本会有问题intl: ^0.19.0
main.dart 中配置多语言支持

GetMaterialApp 中配置 localetranslations,这样GetX就能自动帮你翻译了。


import 'package:flutter_localizations/flutter_localizations.dart';
import 'dart:ui';
import 'app_translations.dart';String getSystemLanguage() {Locale locale = window.locale;return locale.languageCode; // 返回系统语言的代码,如 'en'、'zh' 等
}void main() {String systemLanguage = getSystemLanguage();// 需要手动改变时使用它切换语言// Get.updateLocale(Locale(systemLanguage));runApp(GetMaterialApp(title: 'hello'.tr,initialRoute: '/home',translations: AppTranslations(),locale: Locale(systemLanguage),fallbackLocale: Locale('en'),supportedLocales: [Locale('en'), // EnglishLocale('zh'), // Chinese],localizationsDelegates: [GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,],getPages: [GetPage(name: '/home',title: 'jym'.tr,page: () => HomeView(),binding: HomeBinding(),),GetPage(name: '/pageOne',page: () => SecondView(),binding: SecondBinding(),),GetPage(name: '/pageTwo',page: () => ThirdView(),binding: ThirdBinding(),)],));
}

这里注意这几个delegate也是必须的,否则在使用时会报 MissingPluginException 错误或出现灰块问题。

localizationsDelegates: [GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,
]

translations是你要设置的翻译类,这里我们指定之前定义的 AppTranslations 。locale表示设置的默认语言,这里我们通过 getSystemLanguage() 方法获取的系统默认的语言,当然也可以写死。fallback表示当没有对应语言时的默认语言。

使用翻译后的字符串

使用.tr来获取翻译的字符串,比如 Text('hello'.tr) 。如果你要进行字符串拼接请使用字符串模板,Text("${'hello'.tr} ${'jym'.tr}")

动态切换语言
ElevatedButton(onPressed: () {var locale = Locale('zh', 'TW');Get.updateLocale(locale);},child: Text('切換到繁體中文')
);
聊聊多语言

因为阿拉伯地区的语言风格和我们截然相反,比如阿拉伯语、希伯来语,都是从右向左的,所以在布局的时候还要考虑它们的地区习性。另外还要考虑数字、日期、时间、货币符号等。

比如:

  • 日期格式:MM/DD/YYYY(美国) vs. DD/MM/YYYY(欧洲)
  • 货币符号:$100(美国) vs. 100€(欧洲)

在越南,数字格式的使用与其他许多国家有一些不同。越南采用的是国际标准的数字分隔符,其中:

  • 小数点 使用逗号(,)表示。
  • 千位分隔符 使用句点(.)表示。
    那么我们这样去解决。
import 'package:intl/intl.dart';void main() {var numberFormat = NumberFormat("#,##0.00", "vi_VN");print(numberFormat.format(1234.56)); // 输出:1.234,56
}

所以,除了语言和格式,文化背景也影响用户的习惯。比如,颜色的象征意义、符号的使用等。了解并尊重不同地区用户的文化差异非常重要。


http://www.mrgr.cn/news/48150.html

相关文章:

  • Calcite Web 项目常见问题解决方案
  • [机器学习]XGBoost(3)——确定树的结构
  • 【AI知识】归一化、批量归一化 、 层归一化 和 实例归一化
  • Ubuntu 22.04,Rime / luna_pinyin.schema 输入法:外挂词库,自定义词库 (****) OK
  • ubuntu镜像开荒ssh
  • 黑客术语3
  • 【C++】零碎知识点(易忘 / 易错)总结回顾
  • VS2022使用技巧
  • Windows 11 文件转换攻略:轻松将 docx 转换为 pdf 实战技巧
  • 《软件工程导论》—— 1 - 13章习题详解!
  • 代码随想录day32:动态规划part5
  • 每天一题:洛谷P1279 字串距离
  • 解决使用MobaXterm不能向Ubuntu上传下载文件的问题
  • 推荐阅读:丰田汽车金融支老师使用“数智化审计赋能平台”之体验分享
  • DM原生JDBC,查询结果用Jackson序列化,字段为TEXT类型且存的json字符串时,报错“Infinite recursion“
  • HCIP--以太网交换安全(二)端口安全
  • RDD优化:缓存和checkpoint机制、数据共享(广播变量、累加器)、RDD的依赖关系、shuffle过程、并行度说明
  • Git介绍--github/gitee/gitlab使用
  • Qt 数据库,人脸识别
  • Matplotlib库
  • 6个设计师都在用的样机素材网站
  • 400行程序写一个实时操作系统RTOS(开篇)
  • Flutter技术学习
  • 大数据新视界 --大数据大厂之 ClickHouse:大数据分析领域的璀璨明星
  • ☕️从小工到专家的 Java 进阶之旅:全新的HttpClient,现代高效的网络通信利器
  • 每日OJ题_牛客_小乐乐改数字_模拟_C++_Java