Flutter国际化 多语言 使用Flutter intl插件实现多语言

2024-06-03 05:48

本文主要是介绍Flutter国际化 多语言 使用Flutter intl插件实现多语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

开始的时候我觉得没有必要使用插件来实现国际化 , 几个json文件一加载就完事了,然后配置一下语言相关的处理.
但是使用了插件之后我真香了 , 真的是简单了太多了.

准备工作

搜索插件并安装 : Flutter Intl

插件

项目配置

添加依赖:

dev_dependencies:
...//add thisflutter_localizations:sdk: flutter

在菜单栏的Tool下找到Flutter Intl 并选择Initalize for the project, 配置结束后效果如下:

image-20200819233727693

  1. 会在 pubspec.yaml中增加以下字段
flutter_intl:  enabled: true
  1. 会在lib目录下增加 generated 和 l10n两个包

image-20200819234311852

  • generated包下的intl包默认存在一个messages_all.dartmessages_en.dart文件,messages开头的文件会在添加语言后自动生成
  • l10n包下存在一个intl_en.arb文件
  1. 使用Add Locale生成其他语言的arb文件

    image-20200819234431082

例如:zh_CN , 会在l10n包下生成Intl_zh_CN.arb文件 , 可在其中填入对应的文案.

  1. 设置国际化语言
return MaterialApp(...localizationsDelegates: const [S.delegate,GlobalMaterialLocalizations.delegate,GlobalCupertinoLocalizations.delegate,GlobalWidgetsLocalizations.delegate],supportedLocales: S.delegate.supportedLocales,localeListResolutionCallback: (locales, supportedLocales) {print(locales);return;},...
);
  1. 使用

在需要配置国际化的地方调用S.of(context).key即可.

没有context 时可以使用S.current.key

具体使用方式请参考本项目的代码

注意 :

  1. 支持语言的顺序为字符串排序 (如zh_A会在zh_B之前) , 并非添加语言的顺序.
  2. 假设系统语言为zh_TW , 项目并不支持,会优先寻找zh的其他语言 , 以supportedLocales顺序从上向下寻找.
  3. 旧版本i18n插件生成的为i18n文件夹 , 而flutter intl生成的为l10n , 首字母不同 , 需要注意.
  4. 此方式无需依赖intl包 , 但不提供intl相关功能. 需要额外功能才需要依赖intl.
  5. 如不想弃用旧版intl的AS插件,但AS版本又不支持,可使用该插件生成的dart代码替代i18n中的代码,但可能需要修改类名.

从flutter i18n过渡

  1. 成功初始化之后,复制原有的arb文件到l10n文件夹下, 并修改名字 ,例如:intl_en.arb , intl_zh_CN.arb
  2. 将之前使用导入i18n.dart的地方替换成l10n.dart,一般只修改导入的头文件即可。
  3. flutter i18n中的带变量的写法为${param},而flutter intl插件为{param},要注意去掉$.

这篇关于Flutter国际化 多语言 使用Flutter intl插件实现多语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026155

相关文章

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持