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

文章目录

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 复制代码
    <?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名。

xml 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.flutter_app">
 <application
    android: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。

    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。

    将CFBundleDisplayName和CFBundleName的value都改为$(PRODUCT_NAME)。

重新运行IOS App,只要支持当前系统的语言,就会显示对应的app名称。

相关推荐
微小的鱼24 分钟前
Linux的渲染与显示系统链路
android·java·linux
茶底世界之下34 分钟前
雨后街口的斑马线:用 Awaking 把颜色让给光与步伐
ios·app·产品
道尔柯南12 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
唐诺13 小时前
5、Android JNI 动态注册中的“签名“详解
android·jni
zhaoshuzhaoshu16 小时前
Android 系统启动与调试中的日志抓取方式全解析
android
雨声不在17 小时前
android 动画掉帧
android
在多学一点18 小时前
MYSQL第二次作业
android·数据库·mysql
骑着蜗牛撵大象32718 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
Nerd(BUG版)19 小时前
Flutter学习day5--事件手势与命中测试
学习·flutter
我叫张土豆19 小时前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android