Flutter开发的App,如果名称想要跟随着系统的语言自动改变,则必须同时配置Android和IOS原生。
android\app\src\main\res\values
strings.xml
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>
strings.xml
New
>Android Resource Directory
Available Qualifiers
选择Locale
,点击中间的右箭头,然后在右边选择需要国际化的语言和地区,点击OK
.strings.xml
复制进去.Translations Editor
,在strings.xml
的右上角,点击Open editor
打开。string.xml
来修改了。Manifest.xml
,将label的值替换为我们定义的资源id,引用方式为@string/id名
。<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
文件下的资源值为主。
首先要添加支持的语言。默认是en(英语)。如果已经设置过了,请看下一步。
如果要设置其他语言为默认语言,选中语言后点击Set Default
。
创建InfoPlist文件。
选中Runner,右键New File...
,
在弹出的窗口中,选择Resouce
中的String Catalog
,点击Next
保存名称为InfoPlist
,点击Creat
创建文件
定义多语言的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"
}
最后在Info.plist
中引用key。
将CFBundleDisplayName
和CFBundleName
的value都改为$(PRODUCT_NAME)
。
重新运行IOS App,只要支持当前系统的语言,就会显示对应的app名称。