← 返回专家主页

专家专栏 · i18n

餐饮SaaS国际化改造实战:从粤语到支持11种语言

2026-04-08约 4 分钟1072 字
Sam
Sam餐饮观察家
记录Tappo从纯中国香港市场产品改造为多语言国际化平台的完整实战过程,包括i18n架构设计、翻译管理、RTL布局及本地化测试策略。

背景:从中国香港走向世界的技术挑战

Tappo最初是为中国香港市场设计的POS系统,界面全是粤语,数据模型也深度绑定中国香港的餐饮习惯(茶餐厅的「冻柠茶走甜」这种复杂选项是普通POS无法处理的)。

当我们决定出海时,技术团队面临的第一个挑战就是:如何让一个深度本地化的系统支持多语言、多货币、多税制?

国际化 ≠ 翻译

很多开发者认为国际化(i18n)就是把文字翻译成不同语言。实际上,真正的i18n包含四个层次:

层次内容难度
L1 文字翻译UI文案多语言⭐
L2 格式适配日期、货币、数字、时区⭐⭐
L3 布局适配RTL(阿拉伯语)、文字长度差异⭐⭐⭐
L4 业务逻辑税率、支付、法规⭐⭐⭐⭐⭐

大多数SaaS产品只做到L1,但餐饮SaaS必须做到L4才能在海外市场真正可用。

我们的i18n架构设计

选型:为什么选 react-i18next

评估了市面上的i18n方案后,我们选择了 react-i18next:

方案优点缺点
react-intl生态成熟Bundle 体积大
lingui编译时优化生态较小
react-i18next轻量、插件丰富、社区活跃配置稍复杂

翻译文件结构

src/
  locales/
    zh-HK/          ← 中国香港繁体(原始语言)
      common.json
      pos.json
      menu.json
      report.json
    zh-CN/          ← 简体中文
    en/             ← 英文
    th/             ← 泰文
    id/             ← 印尼文
    vi/             ← 越南文
    ms/             ← 马来文
    ja/             ← 日文
    ko/             ← 韩文
    ar/             ← 阿拉伯文(RTL)

按功能模块拆分翻译文件的好处是:翻译人员可以并行工作,不会互相阻塞。

动态语言切换

// 核心实现:无需刷新页面的语言切换
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

i18n.use(initReactI18next).init({
  resources: {
    en: { common: enCommon, pos: enPos },
    'zh-HK': { common: zhHkCommon, pos: zhHkPos },
    // ...
  },
  lng: 'zh-HK',        // 默认语言
  fallbackLng: 'en',   // 找不到翻译时回退到英文
  interpolation: {
    escapeValue: false, // React 已经处理 XSS
  },
});

重点是 fallbackLng: 'en'——当某个翻译key在某些语言中缺失时,自动回退到英文,保证界面不会出现空白。

RTL布局:阿拉伯语的坑

中东市场对餐饮SaaS来说极具吸引力(高ARPU、数字化需求强),但阿拉伯语的从右到左(RTL)布局是一个技术难题。

我们的解决方案:

  1. CSS Logical Properties:使用 margin-inline-start 替代 margin-left
  2. Tailwind RTL 插件:自动翻转方向性样式
  3. 独立RTL测试环境:每个PR必须通过RTL视觉测试
/* ❌ 不要这样写 */
.sidebar { margin-left: 16px; }

/* ✅ 用 Logical Properties */
.sidebar { margin-inline-start: 16px; }

翻译管理流程

我们搭建了一套翻译管理流水线:

1. 开发者在 zh-HK.json 中新增 key
2. CI 自动将新 key 推到 Lokalise (翻译管理平台)
3. 翻译团队在 Lokalise 完成翻译
4. CI 自动拉取翻译结果,生成 PR
5. 审核合并后自动部署

这套流程解决了「开发等翻译、翻译等开发」的死循环。

本地化测试策略

除了自动化测试,我们还建立了人工测试清单:

  • 所有UI文字在目标语言中显示正确(无乱码)
  • 日期格式符合当地习惯(如美国 MM/DD/YYYY vs 欧洲 DD/MM/YYYY)
  • 货币符号和格式正确(¥100 vs US$100 vs ฿100)
  • RTL语言(阿拉伯语)布局正常
  • 长文字(德语通常比英文长30%)不会撑爆UI
  • 数字格式(千位分隔符、小数点)正确

经验教训

  1. 越早做i18n越好:如果一开始就设计好i18n架构,后期改造的成本是初期的10倍以上
  2. 不要用Google翻译做产品翻译:餐饮行业有很多专业术语,必须由懂餐饮的翻译人员处理
  3. 翻译key要有上下文:"submit" 在不同场景可能是「提交」、「送出」、「确定」,key命名要体现上下文
  4. RTL比想像中难:不是简单的左右翻转,很多UI组件需要重新设计

结论

国际化改造是餐饮SaaS出海的技术地基。地基没打好,再好的市场策略也无法落地。我们的经验是:用3个月的技术投入,换取11个市场的准入资格,这是一笔非常划算的投资。

相关文章

阿公寄语:写code𠮶阵唔好谂住净系俾中国香港人用。你永远唔知你嘅产品将来会去到边个国家。由day one就做好国际化架构。

本文仅代表作者个人观点,不代表餐道官方立场。文章版权归原作者所有,经授权在餐道「专家团」展示。