# 应用界面如何显示系统语言之外的语言

#### 问题现象

系统设置中语言支持简体中文、繁体中文、英文、维吾尔文、藏文、俄文等语言，应用如何显示系统预置语言之外的其他语言？

#### 背景知识

*   getOverrideConfiguration：获取差异化资源的配置。
*   getOverrideResourceManager：获取可以加载差异化资源的资源管理对象。
*   getStringSync：获取指定资源ID对应的字符串。

#### 解决方案

应用可以通过在resources目录下添加限定词目录，如日语ja\_JP、德语de\_DE，增加不同语言资源文件后，在应用运行时，通过指定资源配置方式，让应用展示不同国家语言。

参考示例：

*   entry/src/main/resources/zh\_CN/element/string.json示例：
    
    ```
    {
      "string": [
        {
          "name": "language",
          "value": "这是中文"
        }
      ]
    }
    ```
    
*   entry/src/main/resources/ja\_JP/element/string.json示例：
    
    ```
    {
      "string": [
        {
          "name": "language",
          "value": "これは日本語です"
        }
      ]
    }
    ```
    
*   entry/src/main/resources/en\_US/element/string.json示例：
    
    ```
    {
      "string": [
        {
          "name": "language",
          "value": "This is English"
        }
      ]
    }
    ```
    

在Index.ets中，分别获取三种语言的资源并显示在文本框中，运行设备当前系统语言为中文，示例代码：

```
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State englishString: string = '';
  @State jpString: string = '';

  getString(): string {
    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
    let resMgr = context.resourceManager;
    let resId = $r('app.string.language').id;
    // 获取符合当前系统语言地区、颜色模式、分辨率等配置的资源
    let currentLanguageString = resMgr.getStringSync(resId);
    // 获取符合当前系统颜色模式、分辨率等配置的英文资源
    let overrideConfig = resMgr.getOverrideConfiguration();
    overrideConfig.locale = 'en_US'; // 指定资源的语言为英语，地区为美国
    let overrideResMgr = resMgr.getOverrideResourceManager(overrideConfig);
    this.englishString = overrideResMgr.getStringSync(resId);
    // 获取符合当前系统颜色模式、分辨率等配置的日文资源
    overrideConfig.locale = 'ja_JP'; // 指定资源的语言为日文，地区为日本
    overrideResMgr.updateOverrideConfiguration(overrideConfig); // 等效于resMgr.updateOverrideConfiguration(overrideConfig)
    this.jpString = overrideResMgr.getStringSync(resId);
    return currentLanguageString;
  }

  build() {
    Row() {
      Column() {
        Text(this.getString())
          .fontSize(45)
          .fontWeight(FontWeight.Bold)
          .margin({ top: 10 });
        Text(this.englishString)
          .fontSize(45)
          .fontWeight(FontWeight.Bold)
          .margin({ top: 10 });
        Text(this.jpString)
          .fontSize(45)
          .fontWeight(FontWeight.Bold)
          .margin({ top: 10 });
      }
      .width('100%');
    }
    .height('100%');
  }
}
```