💡 将 iOS 或 Android 应用本地化为越南语:添加
vi语言区域(iOS 用vi.lproj,Android 用res/values-vi/),提取所有字符串并添加上下文注释,用<xliff:g>保护插值占位符,提供 CLDR 两个复数类别键("one" 和 "other"),并使用Intl.NumberFormat('vi-VN', {style:'currency', currency:'VND'})格式化越南盾。越南语名词没有单复数形变,因此两个复数键的翻译通常完全相同。
要点
- iOS:在 Xcode 的 Localizations 列表中添加
vi;Xcode 15+ 的 String Catalog(.xcstrings)将所有语言区域集中在一个文件中,直观显示翻译完成度。 - Android:创建
res/values-vi/strings.xml;务必保持默认res/values/strings.xml完整 - 缺少默认键会导致应用在任何不支持的语言区域崩溃。 - 复数规则:CLDR 为越南语定义两个基数复数类别 - "one"(n=0 或 n=1)和 "other"(n≥2)。越南语名词不变形,但
.stringsdict或<plurals>中必须同时存在两个键。 - 占位符:用
<xliff:g id="count" example="5">%d</xliff:g>包裹所有不可翻译的标记,让译者知道不要修改该部分。 - UI 布局:越南语声调符号丰富,文本宽度通常比英文宽 15-25%,应设计弹性容器并尽早用真实越南语字符串测试。
如何为 iOS 应用添加越南语?
在 Xcode 中打开项目,进入项目编辑器,在 Localizations 下添加 Vietnamese (vi)。对于每个资源文件(Storyboard、XIB、Info.plist、strings),Xcode 会生成 vi.lproj/ 文件夹。
Xcode 15 起,推荐使用 String Catalog(.xcstrings)。这个单一 JSON 文件取代了按语言区域分离的 Localizable.strings 方式,所有语言区域并排显示,翻译完成度自动跟踪,Xcode 在归档前标记未翻译的键。可通过 Editor → Export for Localization (XLIFF) 导出交译,再通过 Editor → Import Localizations 导入结果。
复数处理使用 .stringsdict 格式或 String Catalog 内的复数变体编辑器,为语言所需的每个 CLDR 复数类别提供 NSStringLocalizedFormatKey 条目。
如何为 Android 应用添加越南语?
创建 res/values-vi/ 目录并添加 strings.xml 文件。语言限定符为 vi;区域特定覆盖使用 vi-rVN。Android 资源系统在设备语言区域为越南语时自动加载 values-vi/strings.xml。
始终保持完整的默认 res/values/strings.xml。若默认文件缺少某个键,Android 在任何缺少该键的语言区域上都会抛出运行时错误。
<!-- res/values/strings.xml(默认,英文)-->
<string name="items_count">%d items</string>
<!-- res/values-vi/strings.xml(越南语)-->
<string name="items_count">%d mục</string>
用 XLIFF 占位符标签保护不可翻译的文本:
<string name="welcome_user">
Xin chào, <xliff:g id="name" example="Minh">%s</xliff:g>!
</string>
越南语的 CLDR 复数规则是什么?
越南语有两个 CLDR 基数复数类别:"one"(n=0 或 n=1)和 "other"(n≥2)。与中文类似,越南语名词没有单复数形变。"2 quyển sách"(两本书)和 "1 quyển sách"(一本书)使用相同的名词 "sách",不同的是量词 "quyển",这与中文的量词用法十分相近。
在实践中,iOS .stringsdict 和 Android <plurals> 的越南语条目两个值通常完全相同,但两个键都必须存在,否则平台会回退到错误语言区域的字符串。
<plurals name="photo_count">
<item quantity="one">%d ảnh</item>
<item quantity="other">%d ảnh</item>
</plurals>
越南语货币、日期和数字格式
vi-VN 语言区域使用句点作千位分隔符,逗号作小数点(与英文相反)。VND 货币符号 ₫ 位于数字后,无小数位。
// JavaScript
new Intl.NumberFormat('vi-VN', { style: 'currency', currency: 'VND' })
.format(1500000)
// → "1.500.000 ₫"
new Intl.DateTimeFormat('vi-VN').format(new Date(2026, 10, 5))
// → "5/11/2026"(日/月/年)
日期格式为 DD/MM/YYYY。避免硬编码格式字符串,始终使用 Intl.DateTimeFormat(Web/React Native)、DateFormat(Android)或 Date.formatted(date:locale:)(iOS)配合 vi-VN 语言区域。
南北越语差异:应用需要区分方言吗?
标准书面越南语(基于北方方言)在全国范围内通用,大多数 App Store 和 Play Store 上的越南语应用使用单一的 vi 语言区域。三大方言区(河内、岘港、胡志明市)主要在发音和部分口语词汇上有差异,书面 UI 字符串的词汇影响不大。
对于针对南方用户的游戏对话或营销文案,建议邀请胡志明市的越南本地人审校,以避免过于明显的北方语感。这对品牌语气的影响大于功能性 UI 字符串。
哪些工作可以内部完成,何时需要越南语母语专家?
工程团队可以处理所有技术框架工作:添加 vi 语言区域、配置复数键、接入 Intl.NumberFormat('vi-VN',...)、保护占位符。这些是配置工作,不是语言工作。
机器翻译(DeepL、Google Translate)可用于错误提示、工具提示等低优先级字符串。但不适合用于:
- 用户引导和营销文案 - 语气和语域很重要。
- 金融科技或医疗 UI - 汉越词翻译错误可能严重改变含义,这对中国开发者尤为重要,因为看似相近的汉字对应词在越南语中可能有不同含义。
- 应用商店描述 - Google Play 编辑团队会标记读起来像自动翻译的越南语描述。
越南语母语专家能提供一致的汉越词语域(金融和法律词汇大量使用汉越词),以及对目标城市方言的敏感度。对于 2,000 条字符串规模的应用,对关键页面进行一次专业润色,能通过提升越南用户留存率来收回成本。
如果您的应用以专业态度进入越南市场,网站与应用本地化服务包含每个项目的越南本地人审校环节。
常见问题
越南语使用从右到左的文字方向吗?
不。越南语使用拉丁字母(国语字),书写方向为从左到右。越南语语言区域不需要 RTL 布局支持。
BCP-47 应使用 "vi" 还是 "vi-VN"?
大多数情况使用 vi(HTML lang 属性、Xcode 语言区域、Android 资源限定符)。需要区域特定覆盖时使用 vi-VN。App Store / Play Store 上,vi 对应越南区商店。
为什么越南语字符串导致 Android 应用崩溃?
最常见的原因是默认 res/values/strings.xml 中缺少某个字符串。检查 res/values-vi/strings.xml 中的每个键是否也存在于 res/values/strings.xml 中。
是否需要在 App Store 和 Play Store 上分别设置越南语商店页面?
是。两个应用商店都支持越南语本地化商店页面。提供 vi 语言的应用名称、副标题(iOS)或简短描述(Android)和完整描述,可提升越南语搜索结果中的转化率。
越南语字符串比英语长多少?
由于声调符号增加了字符宽度,越南语文本通常比英语原文宽 15-25%。使用弹性文本视图而非固定尺寸标签,并在 UI 冻结前用真实越南语字符串测试。
参考来源
- Android 开发者:应用本地化 - strings.xml 结构、语言区域限定符、xliff:g 占位符。已于 2026 年 11 月验证。
- Unicode CLDR:复数规则规范 - 越南语复数类别 "one"(n=0 或 n=1)和 "other"(n≥2)。已于 2026 年 11 月验证。
- Google Play:翻译和本地化应用 - Play Store 越南语支持。已于 2026 年 11 月验证。
- W3C 国际化:语言标签 - 越南语 BCP-47 指南。已于 2026 年 11 月验证。
作者:Đào Huy(Lucas),越南语译员与本地化专家(英、中、法译越)。 See translation services →

