美文网首页
纯血鸿蒙HarmonyOS NEXT开发之多语言国际化i18n(

纯血鸿蒙HarmonyOS NEXT开发之多语言国际化i18n(

作者: Bison | 来源:发表于2024-09-26 10:17 被阅读0次
    sj-next-pc.jpeg

    随着HarmonyOS NEXT公测时间的逼近,公司即将迎来对纯血鸿蒙的适配,在搭建基础框架时遇到了很多的问题,第一个就是资料太少,第二个是资料过时,以下是实战中沉淀的多语言国际化精华,实现起来不难,难的是不管文档还是网上的资料都不全。本文包含单复数以及多参数的解决方案。最基本的国际化resources相关的在此不做多余的阐述!

    相关功能如下:

    1. 切换App语言
    /**
       *切换语言
       *
       * @param language语言类型
       */
      public setLanguage(language: string): void {
        i18n.System.setAppPreferredLanguage(language);
      }
      
    

    示例

    let language = I18nManager.getInstance().getLanguage()
    if (language == 'en-US') {
        // 切换成中文
       I18nManager.getInstance().setLanguage('zh-CN')
    } else {
       // 切换成英文
       I18nManager.getInstance().setLanguage('en-US')
    }
    
    1. 获取当前语言
      /**
       *获取当前应用语言
       *
       * @returns当前应用语言
       */
      public getLanguage(): string {
        return i18n.System.getAppPreferredLanguage();
      }
    

    示例

    // 返回语言字符串zh-CN/en-US/...
    let language = I18nManager.getInstance().getLanguage()
    
    1. 设置国际化文字
    /*
     * 设置国际化文字
     * key 国际化key
     * values 国际化需要替换的参数,value 参数统一用%s
     * */
    export function tr(key: string, values?: string[]): Resource {
      let key_one = `app.string.${key}`;
      return $r(key_one, ...(values ?? []));
    }
    
    

    示例

    // 无参数的key
    tr('language')
    
    // 有参数的key 如"this is %s"
    // 多参数时使用多个%s 按顺序放在数组里面即可
    tr('language', ["apple"])
    
    
    1. 国际化单复数
    /*
     * 单复数
     * key 单复数key
     * nums 单复数数字 一行如果多个单复数需要拆分多个 key  value用%d
     * */
    export function trPlural(key: string, nums: number[]): Resource {
      let key_one = `app.plural.${key}`
      let resource = $r(key_one, nums[0], ...nums);
      return resource;
    }
    
    

    json资源示例

    单参数

    {
      "plural": [
        {
          "name": "eat_apple",
          "value": [
            {
              "quantity": "one",
              "value": "%d apple"
            },
            {
              "quantity": "other",
              "value": "%d apples"
            }
          ]
        }
      ]
    }
    

    多单参数

    {
      "plural": [
        {
          "name": "eat_apple",
          "value": [
            {
              "quantity": "one",
              "value": "%d apple %d xxxxs"
            },
            {
              "quantity": "other",
              "value": "%d apples %d xxxxs"
            }
          ]
        }
      ]
    }
    

    使用示例

    // 单参数
    trPlural('eat_apple', [2])
    
    // 多参数
    trPlural('eat_apple', [2, 3])
    
    

    注意

    同一字符串中如有多个需要根据单复数展示的,需要拆分字符串,目前单复数置灰根据第一个参数来确定是否使用复数;通俗易懂的例子:如 2筐梨子一共4个会使用复数.1筐梨子一共4个只会使用单数

    具体效果如下:

    image.png

    如对您有帮助,帮忙点个“赞 、关注” 让更多的人受益~!

    技术交流群可加wx“LB-9191” 备注NEXT

    相关文章

      网友评论

          本文标题:纯血鸿蒙HarmonyOS NEXT开发之多语言国际化i18n(

          本文链接:https://www.haomeiwen.com/subject/diyhrjtx.html