DEV Community

SameX
SameX

Posted on

鸿蒙Next应用全球化之路:国际化与本地化

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)在应用国际化与本地化方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在当今全球化的时代,应用的国际化与本地化成为了提升用户体验、拓展市场份额的关键因素。华为鸿蒙HarmonyOS Next系统为开发者提供了强大的工具和功能,助力打造跨语言、跨文化的应用。本文将详细介绍鸿蒙Next应用国际化与本地化的概念、优势、流程以及关键步骤,帮助开发者踏上应用全球化之路。

一、国际化和本地化的概念及区别

(一)国际化(Internationalization,I18n)

国际化是指在设计和开发应用时,使应用能够适应不同语言、地区和文化的过程。它不仅仅是简单的语言翻译,还涉及到日期、时间、数字、货币、度量衡等多种格式的适配,以及界面布局、图标、颜色等元素的通用设计。国际化的目标是创建一个可以在全球范围内使用的应用,而无需对代码进行大量修改。例如,在国际化的应用中,日期格式可能根据用户所在地区显示为不同的样式,如“YYYY-MM-DD”(中国)或“MM/DD/YYYY”(美国)。

(二)本地化(Localization,L10n)

本地化则是在国际化的基础上,针对特定的目标语言和地区,对应用进行定制和优化的过程。这包括将应用的界面文本翻译成当地语言、调整界面布局以适应不同的文字长度和阅读习惯、使用当地的文化元素和符号等。本地化确保应用在每个目标市场都能提供自然、流畅且符合当地用户期望的体验。例如,将一款英语应用本地化到日本,不仅要将文本翻译成日语,还可能需要调整界面布局以适应日语字符的显示,以及使用日本的文化元素来增强用户亲和力。

(三)两者的区别

国际化侧重于构建应用的通用框架和基础架构,使其具备支持多种语言和文化的能力;而本地化则是针对具体的语言和地区,对应用进行个性化的适配和优化。国际化是一种全局的、前瞻性的设计理念,而本地化是在国际化的基础上,针对特定市场的实际落地和实施。

二、鸿蒙Next应用国际化和本地化的优势

(一)拓展全球市场

通过国际化和本地化,应用可以突破语言和文化的障碍,吸引来自不同国家和地区的用户,极大地拓展市场覆盖范围,增加潜在用户群体。

(二)提升用户体验

为用户提供符合其语言习惯和文化背景的界面和功能,使用户能够更自然、便捷地使用应用,从而提高用户满意度和忠诚度。

(三)增强竞争力

在全球化的市场竞争中,具备国际化和本地化能力的应用更具优势,能够更好地满足用户需求,与当地竞争对手抗衡,提升品牌形象和市场份额。

(四)降低开发成本

采用国际化和本地化的设计方法,在开发过程中遵循一定的规范和标准,可以减少后期针对不同语言和地区进行单独开发和维护的成本。

三、鸿蒙Next应用国际化和本地化的流程

(一)需求分析

  1. 目标市场调研:了解应用的潜在市场,包括不同地区的语言、文化、用户习惯、法律法规等因素。例如,某些地区可能对特定的颜色或图标有不同的文化含义,需要在设计中予以考虑。
  2. 功能需求评估:确定应用在不同语言和文化环境下需要支持的功能,如多语言输入、不同地区的支付方式、本地化的推送通知等。

(二)设计阶段

  1. 界面布局设计:采用灵活的布局方式,预留足够的空间以适应不同语言文本的长度变化。同时,考虑界面镜像等功能,以支持从右到左(RTL)语言的显示需求,如阿拉伯语。
  2. 资源分离:将界面文本、图片、音频等资源与代码逻辑分离,便于后续的翻译和替换。例如,将所有的字符串资源存储在独立的文件中,而不是硬编码在代码中。

(三)开发阶段

  1. 国际化框架使用:利用鸿蒙Next提供的国际化和本地化开发服务,如 Localization Kit,进行语言和地区相关的设置、资源加载和格式转换。
  2. 功能实现与适配:根据需求分析,实现多语言支持的功能,如根据用户语言设置显示相应的界面、处理不同地区的日期和时间格式等。

(四)测试阶段

  1. 语言测试:由本地语言专家或用户对应用的翻译准确性、语言流畅性、界面显示等进行测试,确保应用在不同语言环境下的质量。
  2. 本地化测试:包括界面布局测试、功能兼容性测试、文化适应性测试等,检查应用是否在各个目标地区都能正常运行并符合当地用户的期望。
  3. 伪本地化测试:在正式本地化之前,通过模拟本地化过程,使用伪翻译文本和特殊的测试区域(如 en-XA)来发现潜在的本地化问题,如界面截断、文字方向错误等。

(五)发布与维护阶段

  1. 多语言版本发布:根据不同的目标市场,发布相应语言版本的应用。
  2. 持续优化:收集用户反馈,及时修复本地化相关的问题,根据市场变化和用户需求,不断更新和优化应用的国际化和本地化内容。

四、鸿蒙Next应用国际化和本地化的关键步骤

(一)设置系统语言与区域

  1. 获取系统语言和地区:使用 i18n.System.getSystemLanguage()i18n.System.getSystemRegion() 方法获取当前系统的语言和地区信息。
  2. 设置应用偏好语言:通过 i18n.System.setAppPreferredLanguage() 方法可以为应用设置特定的偏好语言,使应用在启动时根据用户设置或默认语言加载相应的资源。例如:
import { i18n } from '@kit.LocalizationKit';
import {BusinessError } from '@kit.BasicServicesKit';

try {
    i18n.System.setAppPreferredLanguage("zh-Hans"); // 设置应用偏好语言为中文简体
} catch(error) {
    let err: BusinessError = error as BusinessError;
    console.error(`设置应用偏好语言失败,错误码: ${err.code}, 消息: ${err.message}.`);
}
Enter fullscreen mode Exit fullscreen mode

(二)资源文件配置与管理

  1. 确定目标区域:明确应用需要支持的语言和地区,参考区域标识(由语言、脚本、国家地区和扩展参数组成)来确定。
  2. 创建资源目录和文件
    • 资源目录包括默认(base)目录和限定词目录(如 resources/en_GB-vertical-car-mdpi)。默认目录存放通用资源,限定词目录根据语言、文字等自定义,用于存放特定区域的资源。
    • 在相应目录下创建资源文件(如 .json 文件),将字符串、图片、音频等资源分类存放。例如,将不同语言的字符串资源分别放在对应的语言目录下的 strings.json 文件中。
  3. 资源匹配规则:应用根据用户的语言偏好列表与资源目录进行匹配,优先显示最匹配的资源。如果未找到匹配资源,则使用默认目录下的内容。

(三)界面文本处理

  1. 避免硬编码:将所有界面显示的文本提取到资源文件中,使用相关接口加载,避免在代码中直接硬编码字符串。例如,在 strings.json 文件中定义:
{
    "name": "welcome_message",
    "value": "欢迎使用应用"
}
Enter fullscreen mode Exit fullscreen mode

然后在代码中通过资源加载机制获取并显示该字符串。

  1. 支持单复数:根据不同语言的单复数规则,使用 getPluralStringValueSync 等方法正确处理名词或单位表达式的单复数形式。例如,在英语中,对于“apple”这个词,根据数量显示“apple”(单数)或“apples”(复数)。

(四)日期、时间、数字与度量衡国际化

  1. 日期和时间格式化
    • 使用 DateTimeFormat 类的 format 接口,根据用户所在地区的语言和文化习惯,将日期和时间对象格式化为合适的字符串。例如:
import { intl } from '@kit.LocalizationKit';

let date = new Date(2021, 8, 17, 13, 4, 0);
let dateFormat1 = new intl.DateTimeFormat('zh-CN', {dateStyle: 'full', timeStyle: 'full'});
let formattedDate1 = dateFormat1.format(date); // 2021年9月17日星期五 中国标准时间 13:04:00
Enter fullscreen mode Exit fullscreen mode
- 同时,注意处理夏令时跳变,确保应用在夏令时期间显示正确的时间。可以使用 `Calendar` 类来获取和设置时区、计算夏令时相关的时间偏移等。
Enter fullscreen mode Exit fullscreen mode
  1. 数字和度量衡格式化
    • 通过 NumberFormat 类的 format 接口,根据用户地区设置,对数字进行格式化,包括小数分隔符、分组显示、货币符号等。例如:
import { intl } from '@kit.LocalizationKit';

let numberFormat1 = new intl.NumberFormat('zh-CN', {notation:'scientific', maximumSignificantDigits: 3});
let formattedNumber1 = numberFormat1.format(123400); // 1.23E5
Enter fullscreen mode Exit fullscreen mode
- 对于度量衡转换,使用 I18NUtil 类的 unitConvert 接口,根据不同的度量衡系统进行单位转换并格式化。
Enter fullscreen mode Exit fullscreen mode




(五)本地化测试与优化

  1. 全面测试:进行语言测试、本地化测试和伪本地化测试,覆盖应用的各个功能和界面元素。在测试过程中,检查翻译准确性、界面布局合理性、文化适应性等方面的问题。
  2. 问题修复与优化:根据测试结果,及时修复发现的问题,对应用进行优化。这可能包括调整界面布局、修改翻译文本、优化资源加载等操作。同时,持续关注用户反馈,不断改进应用的国际化和本地化质量。

(六)持续更新与维护

  1. 语言和资源更新:随着市场的变化和用户需求的演进,及时更新应用的语言资源,包括翻译文本的更新、新语言的支持等。
  2. 功能适配与优化:根据不同地区的用户反馈和市场需求,对应用的功能进行适配和优化,确保应用在全球范围内始终保持良好的用户体验。

通过以上步骤,我们可以逐步实现鸿蒙Next应用的国际化和本地化,打造出适应全球市场的高质量应用。在实际开发过程中,需要充分考虑各种语言和文化差异,注重细节,不断优化,以满足不同地区用户的多样化需求。

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

While many AI coding tools operate as simple command-response systems, Qodo Gen 1.0 represents the next generation: autonomous, multi-step problem-solving agents that work alongside you.

Read full post →

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay