Zulip 俄语翻译风格指南:术语规范、句式原则与本地化落地实践
【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip
本篇技术指南以 Zulip 仓库中的 俄语翻译风格指南 为主体,系统讲解俄语本地化(ru 语言环境)的核心翻译原则、术语对照表及其在仓库翻译资源文件中的落地情况。读完本文,你将掌握 Zulip 俄语翻译的完整规范(称谓、标点、术语取舍),理解俄语复数规则对 ICU MessageFormat 翻译的影响,并能借助 翻译工作流程 与 国际化开发文档 在 Zulip 开发环境中验证你的译文。
一、指南的定位:为什么需要俄语风格指南
Zulip 的界面被翻译为超过十种主要语言,俄语是其中之一(可参见 翻译总览)。多语言翻译面临的核心问题是:同一个英文单词在不同语境下可能有完全不同的译法,而不同翻译者如果各自为政,最终产出的译文会前后不一致、甚至互相矛盾。
俄语风格指南 正是为解决这一问题而存在。它由 Zulip 社区俄语翻译者基于自身及同事的翻译经验、常识判断和产品技术特点总结而成,为后续所有俄语翻译者提供了统一的决策依据。它也是 Weblate 术语表(glossary)的知识来源——翻译总览 中明确鼓励将这类风格指南的内容同步到 Weblate glossary,以便在翻译界面中获得内联的术语提示。
二、六大核心翻译原则
俄语风格指南开篇给出了六条通用规则,它们是所有术语选择的上位约束:
- you 一律译为小写「вы」,而不是礼貌体大写「Вы」。Zulip 的产品语境强调平等、自然的沟通,俄语中的大写敬称并不适用于聊天软件的界面文案。
- 不使用字母「ё」。虽然「ё」是俄语正字法的一部分,但俄语母语者早已习惯用「е」替代,Zulip 的界面文案统一采用这一通行做法,避免字体渲染不一致。
- 不翻译「Zulip」。产品专有名词保留原文,这与 翻译总览 中「专有名词应大写」的通用规范(如 "This is Zulip" 而非 "This is zulip")一致。
- 避免 IT 行话和直译(кальки)。例如不用「приватный」而用「личный」;不用「email」而用「электронная почта / адрес электронной почты」。直译往往生硬难懂,应选择俄语用户熟悉的自然表达。
- 短语必须正确可读并传达原文含义,为此必须分析短语所处的语境,而不是逐词对译。这条原则直接呼应了 国际化开发文档 中「词序因语言而异,切忌拼接可翻译字符串」的技术警告——俄语与英语的词序差异很大,脱离语境的逐词翻译必然破坏语义。
- 优先使用其他聊天软件已确立的惯用表达,而不是自创新词。指南明确提到的参考对象是 Slack、VKontakte、Skype——这些都是俄语用户群体已经习惯的即时通讯工具,沿用它们的术语能让用户零学习成本上手 Zulip。
三、术语对照表(完整继承)
风格指南第二部分给出了 Zulip 俄语翻译的标准术语对照表,这是俄语翻译中最常查阅的核心清单,现完整整理如下(英文原文 → 俄语标准译法 → 中文说明):
| 英文原文 | 俄语标准译法 | 说明 |
|---|---|---|
| login | войти | 登录 |
| sign up | зарегистрироваться | 注册 |
| stream | канал | 频道(沿用主流聊天软件的说法) |
| organization | организация | 组织 |
| message | сообщение | 单条消息 |
| messages | переписка | 消息(集合概念,指往来记录) |
| conversation | беседа | 会话/对话 |
| chat | чат | 聊天 |
| send | отправить | 发送 |
| адрес электронной почты | 电子邮件地址(避免英文词) | |
| feedback | обратная связь | 反馈 |
| user | пользователь | 用户 |
| topic | тема | 主题 |
| narrow | показать только | 收窄视图(动词用法,如"仅显示…") |
| narrowing | уточнение | 收窄/精确过滤(名词用法) |
| private | личный | 私人的(不用「приватный」) |
| alert word | сигнальное слово | 提醒词 |
| upload | загрузить | 上传(动词) |
| uploads | файлы | 上传的文件(名词) |
| settings | настройки | 设置 |
| invalid | неверный | 无效的 |
| incorrect | неправильный | 不正确的 |
| unknown | неизвестный | 未知的 |
| account | учетная запись | 账户 |
| subdomain | поддомен | 子域名 |
| API key | API-ключ | API 密钥 |
| recipient | получатель | 接收者 |
| subscriber | участник | 订阅者/参与者 |
| invite-only | закрытый | 仅受邀(封闭的) |
| public | открытый | 公开的 |
| name | название(事物)/имя(人) | 按指代对象区分 |
| id | код | 标识符 |
| notifications | оповещения | 通知 |
| @-mentions | @-упоминания | @提及 |
| mute | заглушить | 静音/屏蔽 |
| emoji | эмодзи | 表情符号(音译词) |
| user | пользователь | 用户(再次出现,强调一致性) |
| compose | написать | 撰写(消息) |
| custom | дополнительный | 自定义的/附加的 |
| home view | общий список сообщений | 首页视图(消息总览列表) |
这份术语表的核心价值在于消除歧义。以name为例:指事物时用「название」,指人时用「имя」,这种细分正是第 5 条「分析语境」原则的典型体现;而invalid/incorrect/unknown三个近义词分别对应「неверный」「неправильный」「неизвестный」,避免了错误地混用。stream译为「канал」则直接落实了第 6 条「沿用成熟聊天工具术语」的原则。
四、术语规范在仓库中的落地验证
风格指南并非孤立的文档——它的每一项规则都能在 Zulip 仓库的实际翻译资源中找到对应实现。俄语翻译资源集中在locale/ru/目录下,包含三个文件:
- locale/ru/LC_MESSAGES/django.po:服务端字符串(Django/Jinja2 模板、API 错误消息、portico 页面等)的翻译资源,当前包含约 1560 条
msgid; - locale/ru/translations.json:Web 应用(前端 JavaScript 与 Handlebars 模板)字符串的翻译资源;
- locale/ru/legacy_stream_translations.json:历史遗留字符串的翻译(可从文件内容看到 "
Канал будет объявлен в#{new_stream_announcements_stream}.
" 等旧式 HTML 翻译)。
在django.po中可以直接检索到术语表的落地情况,例如msgstr "Войти"(login)、msgstr "Зарегистрироваться"(sign up)、msgstr "Тема"(topic)、msgstr "Каналы и темы в приложении Zulip"等。在translations.json中同样能看到"API key": "API-ключ"这样的逐字落地。
需要注意的是,术语表是决策基准而非强制机械替换:同一英文词在不同语境(如message的单复数、messages作集合概念)下仍应以「传达原意」为最终目标,这与第 5 条原则一致。此外,legacy_stream_translations.json中的历史译文可能与现行术语表存在差异,翻译者如发现不一致,应在 翻译渠道 中提出讨论。
五、俄语复数规则与 ICU MessageFormat
俄语的复数系统远比英语复杂,这是俄语翻译者必须掌握的技术要点,也是风格指南之外的硬性约束。国际化开发文档 明确说明:俄语名词的形式部分取决于数量的末位数字(Russian declension of cardinal numerals),因此 Zulip 使用标准 ICU MessageFormat 复数语法来表达复数字符串。
英语只需 one/other 两种形式:
"{N, plural, one {Done! {N} message marked as read.} other {Done! {N} messages marked as read.}}"而俄语翻译则需要根据 1、few(少数)、many(多数)等类别分别处理。国际化文档中给出的俄语译文示例:
"{N, plural, one {Готово! {N} сообщение помечено как прочитанное.} few {Готово! {N} сообщений помечены как прочитанные.} many {Готово! {N} сообщений помечены как прочитанные.} other {Готово! {N} сообщений помечены как прочитанные.}}"这个技术约束在django.po的文件头中有精确的机器可读定义:
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " "(n%100>=11 && n%100<=14)? 2 : 3);\n"即俄语有4 种复数形式(nplurals=4):末位为 1 且非 11 时为 0 类(one),末位 2–4 且非 12–14 时为 1 类(few),末位 0 或 5–9 或 11–14 时为 2 类(many),其余为 3 类(other)。这正是上面 ICU 示例中 one/few/many/other 四个分支的来源。
从开发者角度看,编写英文源字符串时只需提供 one/other 两种形式,俄语复数分支由翻译者完成;从翻译者角度看,则必须理解并正确使用这些复数类别,否则会出现「2 сообщений」这类语法错误。因此翻译俄语字符串时,看到 ICU 复数语法应立即联想到本节的 4 类规则。
六、翻译工作流程与本地验证
翻译不是孤立的文本替换,需要嵌入 Zulip 的协作流程。完整流程见 翻译工作流程,俄语翻译者应重点关注以下环节:
- 加入社区:在 Zulip 开发社区服务器的
#translation频道打招呼,翻译问题、进度更新、问题字符串报告都在该频道进行。 - 在 Weblate 中翻译:注册 Weblate 后选择 Zulip 项目与 Russian 语言。注意选择通用「Russian (ru)」而非国家特定变体(如 ru_RU),除非你专门贡献特定国家的翻译。项目按组件拆分:
Flutter(移动端 App)、Desktop(桌面端特有字符串)、Django与Frontend(下一个大版本的服务器与 Web 应用字符串),以及带版本后缀的稳定版组件(如(10.x))。 - 保留变量与代码:不要翻译变量或代码(
%前缀、HTML 标签内、{variable}花括号内的内容),原样保留即可。这与 国际化开发文档 中「可翻译字符串必须是常量字面量」的规则互为表里。 - 合并与测试译文:将 Weblate 的提交拉入本地仓库并部署到 chat.zulip.org 上验证。
验证俄语译文有几种实际可操作的方式(详见 翻译工作流程 的 Testing translations 一节):
- URL 前缀法:将语言代码作为 URL 前缀插入,例如访问
http://localhost:9991/ru/login/即可查看俄语登录页,这对 portico(未登录)页面同样适用; - 登录后切换语言:在 Zulip Web 应用界面中选择俄语查看登录后 UI;
- HTTP 头法:用
requests等客户端库模拟Accept-Language请求头,适合调试语言协商逻辑:
import requests headers = {"Accept-Language": "ru"} response = requests.get("http://localhost:9991/login/", headers=headers) print(response.content)语言协商的优先级为:URL 前缀语言码 →django_languageCookie(可用LANGUAGE_COOKIE_NAME设置改名)→Accept-Language请求头。此外还可使用 Weblate 内置的机器翻译生成建议,但 Zulip 要求人类质量的译文,所有机器翻译结果必须人工审校。
七、风格指南的维护与扩展
俄语风格指南不是封闭文档,翻译总览 鼓励翻译者在翻译过程中持续完善它:翻译时随手记录决策、补充新术语,可以大幅降低未来翻译者的工作难度和前后不一致的风险。同时,术语表信息应同步到 Weblate 的俄语 glossary 中,以获得内联翻译建议。
Zulip 为多语言维护了同类风格指南,包括中文、芬兰语、法语、德语、印地语、日语、波兰语、西班牙语 与乌尔都语,均可作为对比参考。需要说明的是,俄语在 Zulip 的国际化体系中还有一个特殊角色:由于俄语译文通常比英文更长,国际化开发文档 明确建议开发者用「英文长度 ±50%」的方式测试 UI 布局,并把俄语作为译文偏长的代表性测试语言——这从侧面印证了遵循本指南、产出自然凝练译文的重要性:不仅关乎语言质量,也直接关系到俄语界面的排版与可用性。
【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考