单独设置APP偏好语言失败,APP语言必须和系统语言保持一致。
问题代码示例参考如下:
import I18n from '@ohos.i18n'; import { BusinessError } from '@kit.BasicServicesKit'; try { I18n.System.setAppPreferredLanguage('en-Latn-US'); // 设置应用当前的偏好语言为'US' } catch (error) { let err: BusinessError = error as BusinessError; console.error(`call System.setAppPreferredLanguage failed, error code: ${err.code}, message: ${err.message}.`); } @Component @Entry struct Index { build() { Column() { Text($r('app.string.module_desc')); }; } }
通过setAppPreferredLanguage接口实现单独设置应用偏好语言。主要实现思路有以下三步:
根据上述思路,下文中将以“通过点击按钮,自主切换中英文”进行说明:
默认语言(base文件)以及中文语言(zh_CN文件)写的是中文,英文语言(en_US文件)写的是英文。因此在偏好语言为英文时,显示en_US文件的内容;偏好语言为中文时,显示zh_CN文件的内容;偏好语言为其他语言时,显示base文件的内容。

{
"string": [
{
"name": "module_desc",
"value": "模块描述"
},
{
"name": "language_button",
"value": "改变语言"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "label"
}
]
} {
"string": [
{
"name": "module_desc",
"value": "module description"
},
{
"name": "language_button",
"value": "Change Language"
}
]
} {
"string": [
{
"name": "module_desc",
"value": "模块描述"
},
{
"name": "language_button",
"value": "改变语言"
}
]
} import I18n from '@ohos.i18n'; import { BusinessError } from '@kit.BasicServicesKit'; @Component @Entry struct Index { // 获取当前系统语言。如果为中文,则设置status为-1;如果为英文,则设置status为1 status: number = I18n.System.getSystemLanguage() === "zh-Hans" ? -1 : 1; build() { Column() { // 获取应用偏好语言 Text($r('app.string.module_desc')); Button($r('app.string.language_button')).onClick(() => { if (this.status === 1) { try { I18n.System.setAppPreferredLanguage('zh-Hans'); } catch (error) { let err: BusinessError = error as BusinessError; console.error(`zh-Hans call System.setAppPreferredLanguage failed, error code: ${err.code}, message: ${err.message}.`); } } else { try { I18n.System.setAppPreferredLanguage('en-Latn-US'); } catch (error) { let err: BusinessError = error as BusinessError; console.error(`en-Latn-US call System.setAppPreferredLanguage failed, error code: ${err.code}, message: ${err.message}.`); } } this.status = -this.status; }) } } }