Localization — 本质,内容针对语言和地区的适配

作者: IT Sectr 发布日期: 2026-02-26 阅读时间: 7 分钟

Localization(本地化,l10n)——将移动应用内容适配到目标受众的语言、地区和文化特征。与国际化(i18n)不同,国际化是准备代码以供翻译,而本地化是翻译字符串、格式化日期、数字和货币、选择图像以及考虑当地规范的实际过程。在 iOS 上,翻译存储在 Localizable.strings 中(每种语言对应 .lproj 文件夹),在 Android 上存储在 values-ru、values-de 和其他资源目录中。更多信息,请参阅 Android 本地化指南

要点

  • Localization (l10n)——将应用内容翻译和适配到特定语言和地区
  • Localizable.strings——包含每种语言“键”=“翻译”对的 iOS 文件
  • values-ru——包含俄语资源的 Android 目录(strings.xml)
  • 地区适配——日期、数字、图像、颜色、法律要求因国家而异
  • 文化特征——颜色、图标、手势和示例必须符合当地规范

什么是 Localization (l10n) 与 i18n 有何不同?

Localization(简称 l10n——"l"和"n"之间的 10 个字母)——是将应用适配到特定语言和地区的过程。如果说 i18n 是架构基础,那么 l10n 就是内容填充。i18n 使翻译成为可能,l10n 则执行翻译。本地化包括:翻译所有界面文本、适配日期和数字格式、替换具有文化敏感内容的图像、修正法律文本(隐私政策、EULA)、为地区配置支付系统以及在目标设备上进行测试。

商业回报率——本地化直接影响转化率。根据 CSA Research(2023)的数据,76% 的用户偏爱在母语应用中购买,40% 的用户从不使用外语购买。零售应用本地化为日语可平均提高 150% 的转化率(Google, 2022)。本地化应用在区域 App Store 和 Google Play 中,得益于区域 ASO(目标语言的关键词),获得的自然安装量是原来的 2-3 倍。

i18n 与 l10n——同一过程的两个方面。i18n:将字符串提取到资源中、支持 RTL、数字格式化。由开发人员一次性完成。l10n:翻译字符串、适配内容、本地测试。由翻译人员和 QA 针对每个本地化多次进行。在 IT Sectr,我们为每个新语言的本地化预留 20-30% 的迭代时间——这包括翻译、审查、在设备上测试和修复错误。

iOS 本地化:Localizable.strings 和 Base Internationalization

Localizable.strings——iOS 中存储翻译的主要文件。每个本地化都有自己的 .lproj 文件夹:en.lproj/Localizable.strings、ru.lproj/Localizable.strings、de.lproj/Localizable.strings。格式:"key" = "value";(带分号)。Apple 使用 Base Internationalization:Storyboard 和 XIB 只需创建一次(Base.lproj),界面字符串会为每种语言导出到 Localizable.strings。这消除了为每个本地化创建 XIB 副本的需要。

swift
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";

// ru.lproj/Localizable.strings
// "settings.title" = "设置";
// "profile.greeting" = "您好,%@!";
// "items.count" = "%d 件";

// 按键加载字符串
navigationItem.title = NSLocalizedString(
    "settings.title",
    comment: "设置屏幕标题"
)

// 带参数的字符串
let name = "安娜"
greetingLabel.text = String.localizedStringWithFormat(
    NSLocalizedString("profile.greeting", comment: ""), name
)

// XLIFF 导入(Xcode → Editor → Import Localizations)
// 翻译人员工作后自动更新 .lproj 文件

Base Internationalization——Apple 的方法,界面(Storyboard、XIB)在 Base.lproj 中创建一次。添加语言时,Xcode 将字符串从 Base 导出到 XLIFF 文件。翻译人员翻译 XLIFF。导入后,Xcode 创建包含已翻译字符串的 .lproj。优点:无需为每种语言复制 XIB。限制:对于 RTL 语言(阿拉伯语、希伯来语),可能需要具有镜像布局的独立 XIB。

InfoPlist.strings 和元数据本地化

InfoPlist.strings——用于本地化应用名称(CFBundleDisplayName)、相机/麦克风权限(NSCameraUsageDescription)以及 Info.plist 中其他值的文件。在 .lproj 中创建:ru.lproj/InfoPlist.strings。格式:CFBundleDisplayName = "我的应用"; NSCameraUsageDescription = "应用需要访问相机以拍摄照片";。如果不本地化 InfoPlist.strings,系统对话框将显示为英文。

Android 本地化:values-ru、本地化资源

Android 资源通过目录名称中的限定符(qualifiers)来组织本地化。对于俄语——res/values-ru/,对于德语——res/values-de/,对于巴西葡萄牙语——res/values-pt-rBR/。Android 支持 160 多种本地化。系统根据设备语言自动选择资源(Locale.getDefault())。如果精确的本地化不存在——则使用 values/(基本本地化,通常是 en)中的资源。

kotlin
// res/values/strings.xml(基本——英语)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>

// res/values-ru/strings.xml(俄语)
<string name="settings_title">设置</string>
<string name="greeting">你好,%s!</string>

// res/values-de/strings.xml(德语)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>

// Kotlin——所有语言的统一代码
textView.text = getString(R.string.settings_title)

// 带参数的字符串
val greeting = getString(R.string.greeting, userName)

// 本地化图像
// res/drawable-ru/flag.png——俄语版本的旗帜
// res/drawable/flag.png——默认旗帜

// 布局本地化(针对 RTL 语言)
// res/layout-ar/activity_main.xml——阿拉伯语版本

不仅是字符串的本地化——Android 允许本地化图像(res/drawable-ru/)、颜色(res/values-ru/colors.xml)、尺寸(res/values-ru/dimens.xml)、动画、菜单甚至整个布局。对于单词长度不同的语言(德语比英语长 30-40%),使用具有增大按钮宽度的本地化 dimens.xml。对于具有不同颜色象征意义的地区(白色——在中国代表哀悼)——使用本地化的 colors.xml。

在设备上检查本地化

测试——通过设置 → 系统 → 语言将设备语言切换到目标语言。检查:所有字符串都已翻译、日期格式正确、数字使用正确的分隔符显示、图像符合地区要求、布局在长字符串下不会"损坏"。对于自动化,使用带有 LocaleTestRule(Android Testing Library)的 Espresso——它允许在不手动切换语言的情况下使用不同本地化运行测试。

文化适配:除了文本还需要翻译什么

文化特征——本地化不仅限于翻译字符串。颜色象征意义不同:红色——在中国代表幸运,在美国代表危险,在南非代表哀悼。白色——在欧洲代表纯洁,在中国代表哀悼。手势图标:竖大拇指——在美国代表积极,在中东代表侮辱。人物图像:在阿拉伯国家,穿泳装女性的图像是不可接受的。宗教符号:十字架、新月、大卫之星只能在适当的上下文中使用。

法律要求——每个国家都有自己的数字产品法律。GDPR(欧盟)——强制要求同意 cookie 和数据处理。CCPA(加利福尼亚)——删除数据的权利。个人数据法(俄罗斯,152-FZ)——将数据存储在俄罗斯联邦服务器上。LGPD(巴西)——类似于 GDPR。支付:在中国需要 Alipay/WeChat Pay,在印度需要 UPI,在巴西需要 Boleto 和 PIX。在启动本地化之前,为区域配置支付网关。

方面美国中国阿联酋德国
支付系统Apple Pay、银行卡Alipay、WeChat Pay银行卡、Apple PayPayPal、Giropay
品牌颜色任意红色——幸运绿色——伊斯兰黑色/黄色
社交媒体Instagram、X微信、抖音WhatsApp、XWhatsApp、X
日期MM/dd/yyyyyyyy/MM/dddd/MM/yyyydd.MM.yyyy
数据法律CCPAPIPLPDPLGDPR

示例和内容——根据区域调整示例。对于德语本地化,使用公制系统(千克、千米),对于美国本地化,使用英制系统(磅、英里)。电话号码、邮政编码、地址——格式各不相同。货币示例:日本 ¥1000、美国 $9.99、俄罗斯 999 ₽。食物、服装、室内图像应符合区域标准。在 IT Sectr,我们建议聘请当地顾问来检查文化适配。

本地化流程:工具、翻译人员、CI/CD

本地化工具——专业平台可自动完成流程:Lokalise、Crowdin、POEditor、Smartling、Phrase。它们与代码仓库集成,自动导入新字符串,跟踪更改(增量更新——仅翻译已更改的字符串),提供翻译记忆库(TM——存储以前翻译过的短语)和术语表(Glossary)。专业翻译的平均成本:每词 0.08–0.15 美元(取决于语言)。

流程——(1) 开发人员将 i18n 键添加到代码中,推送到仓库。(2) CI/CD(GitHub Actions / GitLab CI)自动将新键发送到本地化平台。(3) 翻译人员收到通知,进行翻译并保存。(4) 翻译后的文件自动在仓库中创建 PR。(5) QA 在设备上检查本地化。(6) 发布。一个本地化的周期:2–5 个工作日(取决于数量)。对于 10 个本地化:在翻译人员并行工作的情况下需要 5–15 天。

机器翻译 + 人工审核——现代标准。神经网络翻译(DeepL、Google Translate、GPT-4)为流行的语言对提供 80-90% 的质量。人工翻译检查:术语、上下文(单词在不同屏幕上可能有不同含义)、文化适配。在 IT Sectr,我们采用混合方法:机器学习翻译 + 母语者审核。对于关键字符串(法律、支付)——仅限专业翻译人员。节省:在保持质量的同时节省高达 60% 的成本。

常见问题

本地化与国际化的区别是什么?

国际化——准备代码以供翻译(提取字符串、RTL、格式化)。本地化——翻译和文化适配本身。i18n 由开发人员一次性完成,l10n 由翻译人员针对每种语言完成。只有 i18n 没有 l10n——应用已准备好翻译但尚未翻译。只有 l10n 没有 i18n——需要为每种语言重写代码。

iOS 中的翻译存储在哪里?

在 .lproj 文件夹内的 Localizable.strings 文件中。每种语言:en.lproj(英语)、ru.lproj(俄语)、de.lproj(德语)。格式:"key" = "value";。复数形式——Localizable.stringsdict。应用设置(CFBundleDisplayName)——在 InfoPlist.strings 中。Xcode 通过 Base Internationalization 管理 .lproj。

Android 中的 values-ru 是什么?

values-ru——Android 中用于俄语的资源目录。包含带有翻译的 strings.xml。其他语言类似:values-de(德语)、values-fr(法语)。Android 根据系统语言选择资源。如果找不到 values-ru——则使用 values/(基本语言,通常是英语)。

如何为不同地区格式化日期?

始终使用 Locale API。iOS:DateFormatter.locale = Locale(identifier: locale)。Android:DateFormat.getDateInstance(DateFormat.SHORT, locale)。俄罗斯:2024年12月31日。美国:2024年12月31日。日本:2024年12月31日。切勿设置固定格式——每个国家都有自己的标准。输入日期时使用 UIDatePicker / DatePicker。

全球应用需要多少个本地化?

对于全球覆盖,10-15 种语言就足够了:英语、西班牙语、法语、德语、日语、中文、韩语、葡萄牙语、俄语、意大利语、阿拉伯语。对于地区覆盖——1-2 种语言。每增加一个本地化,相应地区的自然安装量就会增加 5-15%。App Store 至少需要英语本地化。

总结

  • Localization (l10n)——将内容翻译和文化适配到特定语言和地区
  • iOS——.lproj 文件夹中的 Localizable.strings、Base Internationalization、InfoPlist.strings
  • Android——values-ru/strings.xml,通过限定符本地化的 drawable 和 layout
  • 文化适配——颜色、图标、手势、支付系统、法律要求
  • 流程——CI/CD → 本地化平台 → 翻译人员 → QA → 发布(每种语言 2-5 天)
  • 混合方法——机器学习翻译(DeepL、GPT)+ 母语者审核,节省 60% 成本
  • 回报率——76% 的用户只以母语购买(CSA Research, 2023)

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读