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

Flutter本地化(国际化)之App名称

文章目录

  • Android国际化
  • IOS国际化

Flutter开发的App,如果名称想要跟随着系统的语言自动改变,则必须同时配置Android和IOS原生。

Android国际化

  1. 打开android\app\src\main\res\values
    在这里插入图片描述
  2. 创建strings.xml
    在values上右键,选择New>Values Resource File
    在这里插入图片描述
    在新窗口中输入文件名strings.xml
    在这里插入图片描述
    strings.xml文件中,输入以下内容
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <!--    appName是key,后面的值就是本地化实际的名称--><string name="appName">App name default locale</string>
    </resources>
    
  3. 创建多个语言的strings.xml
    在res目录上右键,选择New>Android Resource Directory
    在这里插入图片描述
    左侧Available Qualifiers选择Locale,点击中间的右箭头,然后在右边选择需要国际化的语言和地区,点击OK.
    在这里插入图片描述
    会自动创建values前缀的文件夹,将之前的strings.xml复制进去.
    在这里插入图片描述
    然后将值修改成对应语言.
    这里推荐使用Android Studio自带的国际化编辑器Translations Editor,在strings.xml的右上角,点击Open editor打开。
    在这里插入图片描述
    在国际化编辑器,可以很方便地修改每一种语言定义的值,这样就不需要打开多个string.xml来修改了。
    在这里插入图片描述
  4. 引用多语言的key
    打开Manifest.xml,将label的值替换为我们定义的资源id,引用方式为@string/id名
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.flutter_app"><applicationandroid:label="@string/appName"android:name="${applicationName}"android:icon="@mipmap/ic_launcher"><!-- 其他省略... --></application>
</manifest>

Android官方推荐资源的key命名方式全部小写,单词之间以下划线分开,例如app_name

最后重新运行App,当系统语言切换时,App的名称也会跟着改变。
当然了,如果切换的语言是不被App支持,会以默认的values文件下的资源值为主。

IOS国际化

  1. 首先要添加支持的语言。默认是en(英语)。如果已经设置过了,请看下一步。
    如果要设置其他语言为默认语言,选中语言后点击Set Default
    在这里插入图片描述

  2. 创建InfoPlist文件。
    选中Runner,右键New File...
    在这里插入图片描述
    在弹出的窗口中,选择Resouce中的String Catalog,点击Next
    在这里插入图片描述
    保存名称为InfoPlist,点击Creat创建文件
    在这里插入图片描述

  3. 定义多语言的key和value。
    打开InfoPlist,可以看到会自动有我们支持的语言。
    在这里插入图片描述
    点击+号,创建一个字符串资源.
    在这里插入图片描述
    将key的名称改为CFBundleDisplayName,后面的值就是本地化的app名称。
    在这里插入图片描述
    在这里插入图片描述
    对应的源码文件是ios/Runner/InfoPlist.xcstrings,看结构就是一个JSON。

    {"sourceLanguage" : "en","strings" : {"CFBundleDisplayName" : {"extractionState" : "manual","localizations" : {"en" : {"stringUnit" : {"state" : "translated","value" : "App Name"}},"zh-Hans" : {"stringUnit" : {"state" : "translated","value" : "App名称"}}}}},"version" : "1.0"
    }
    
  4. 最后在Info.plist中引用key。
    CFBundleDisplayNameCFBundleName的value都改为$(PRODUCT_NAME)
    在这里插入图片描述

重新运行IOS App,只要支持当前系统的语言,就会显示对应的app名称。
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 压力测试(超详细总结)
  • 【Spring实战】配置多数据源
  • [调试]stm32使用过程debug记录,持续更新ing
  • 蓝牙物联网与嵌入式开发如何结合?
  • [笔记]netty随笔
  • centos 7.4 docker
  • 【Spark源码分析】Spark的RPC通信二-初稿
  • 【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
  • Vue 3 语法和特性
  • 在Next.js和React中搭建Cesium项目
  • 快递收发线上管理教程
  • Zookeeper 集群搭建过程中常见错误
  • Java设计模式之单例模式以及如何防止通过反射破坏单例模式
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(下)
  • XML简介 (EXtensible Markup Language)
  • 【Linux系统编程】快速查找errno错误码信息
  • 【面试系列】之二:关于js原型
  • E-HPC支持多队列管理和自动伸缩
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java面向对象及其三大特征
  • JS专题之继承
  • MaxCompute访问TableStore(OTS) 数据
  • oschina
  • PermissionScope Swift4 兼容问题
  • PHP的类修饰符与访问修饰符
  • Python打包系统简单入门
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 讲清楚之javascript作用域
  • 解析 Webpack中import、require、按需加载的执行过程
  • 精彩代码 vue.js
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 强力优化Rancher k8s中国区的使用体验
  • 区块链将重新定义世界
  • 如何解决微信端直接跳WAP端
  • 使用docker-compose进行多节点部署
  • 异常机制详解
  • 再次简单明了总结flex布局,一看就懂...
  • ​secrets --- 生成管理密码的安全随机数​
  • #include到底该写在哪
  • #考研#计算机文化知识1(局域网及网络互联)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)fread与fwrite详解
  • (C语言)二分查找 超详细
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (九)c52学习之旅-定时器
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • *** 2003
  • .apk文件,IIS不支持下载解决
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core 6 集成 elasticsearch 并 使用分词器