如何让地址被10种语言读懂:Address多语言输出与在线翻译流水线完整解析
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
Address 是一款基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,核心亮点之一正是多语言输出:同一份真实地址,可以同时以原文、英文、简体中文、繁体中文、日语、韩语、德语、法语、西班牙语、葡萄牙语等10 种语言呈现。背后的秘密是一套严谨的在线翻译流水线——数据导入时按各国契约校验语言门禁,后台用可插拔的翻译服务商链自动回填缺失语言,并保证门牌号、邮编等关键数字永不乱改。下面带你完整解析这套机制是如何工作的。
为什么地址生成器也需要“多语言”?
做国际化测试时,一个常见痛点是:你的测试地址只有英文,但业务系统需要展示日文店名、中文小区名或泰文路牌。手工造数据既慢又不真实。
Address 的做法是:原文地址永远是主数据,其他语言只是同一组真实组件的转写或翻译。这带来三个好处:
- 🌐真实性保留:日语地址里依然是真实的
東京都、千代田区,而不是机器硬凑的罗马音; - 🧱组件级独立存储:街道、城市、区县各存一份多语言值,前端想按哪种语言展示都可以自由拼装;
- ⚖️质量门禁:语言错误的记录不发布,比如简体中文变体的道路、城市字段必须至少包含一个汉字,纯英文占位的记录会等待翻译回填完成后再进入随机索引。
这些规则集中定义在 docs/address-formats.md 的通用规则中,是整条多语言流水线的“宪法”。
同一条中国地址,可通过语言切换在原文、英文、简体中文之间无缝切换,且每个组件都能单独复制
一条数据,三种展示:语言切换是怎么实现的?
在生成器页面上,每条地址卡片顶部都有Original / English / 简体中文三个标签页:
- Original(原文):数据源提供的原始写法,例如美国地址
65 Ashwood Lane, Yellville, AR 72687; - English(英文):统一英文转写,方便非本地语言团队阅读;
- 简体中文:语义字段(街道、城市、区县)全部转成中文,同时保留数字与邮编。
美国地址卡片示例:同一份 Overture Maps 来源的地址,可在原文、英文与简体中文之间切换展示
底层由语言匹配模块完成,它负责把浏览器Accept-Language、URL 路径前缀(如/zh-CN/)等信号解析成标准语言代码,并处理了zh-Hant→ 繁体、zh→ 简体这类常见映射,逻辑位于 src/domain/locales.ts。
在线翻译流水线:缺失语言是如何被自动补齐的?
数据源并不总是自带全部语言。Address 的答案是一条可插拔的翻译服务商链(translation chain):
- 导入即入队:地址 ETL 阶段识别哪些记录缺少目标语言变体(例如只有英文的街道名);
- 路由调度:翻译路由按
priority排序,依次尝试 Google 翻译、DeepL、有道、OpenAI 兼容接口(DeepSeek、通义等均可接入),某家限流时自动等待或切换下一家; - 有界批次回填:后台按批次持续推进历史存量记录的翻译,成功后自动刷新随机索引,整个过程与地址同步任务并行、互不阻塞;
- 进度可观测:回填进度、路由状态、凭据冷却期都持久化在数据库里,随时可查。
调度与并发控制的核心实现在 server/sync/translation-providers.mjs,路由与状态机在 server/translation/routing.mjs,回填任务则位于 server/sync/translation-backfill.mjs。
管理后台还内置了凭据连接测试:选择“地址翻译”模式,它会真实发送一条样本地址(如["Beijing", "Block 01-12", "100000"]),打印端点、模型、Token 用量和解析后的译文,让你接入前就能确认翻译质量。
后台“Test connection”面板:一键验证翻译凭据,展示真实请求参数、Token 用量和解析出的译文
翻译质量的三条铁律
机器翻译地址最怕“好心办坏事”。Address 用一组内置提示词(src/domain/translation-prompt.mjs)给所有 LLM 类翻译器立了三条铁律:
- 🔢数字标识永不翻译:门牌号、单元号、邮编、
23rd这类序数一律原样保留,只翻译周边的自然语言; - 🚫禁止猜测补全:缺失的地理信息不瞎编,没有把握的地名用忠实音译;
- 🏷️输出格式锁定:严格按要求返回与输入等长的 JSON 译文数组,方便程序逐条校验落库。
此外,API 层的POST /api/v1/address-translation接口也遵守同样原则:targetLocale支持上述全部 10 种语言,翻译失败时返回fallback或unavailable,客户端可安全地直接显示原文地址,而接口细节见 docs/API.zh-CN.md。
在数据监控页,你能直观看到翻译与数据整体健康的结果——各国地址总量、行政区置率一览无余:
数据监控页:全球分布地图与国家数据列表,多语言数据的整体健康状态一目了然
新手上手:三步获得多语言地址
- 部署:使用仓库根目录的 docker-compose.yml 一键启动(详见 docs/DEPLOYMENT.zh-CN.md);
- 生成:打开
http://127.0.0.1:8787/,选择国家、地区与显示语言,页面上即可切换原文 / 英文 / 简体中文; - 调用 API:Bearer 鉴权后调用
/api/v1相关端点,指定targetLocale获取任意目标语言的地址组件。
如果想继续深挖,推荐阅读 docs/address-contracts.md 了解各国契约,或翻一翻 tests/translation-backfill.test.mjs 看翻译回填的完整测试逻辑。
让测试地址被 10 种语言读懂,靠的不是“一个翻译按钮”,而是主数据 + 多语言变体 + 自动回填流水线这套组合拳。这正是 Address 在多语言场景下既真实又省心的原因。
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考