news 2026/9/12 15:12:15

Zulip 中文翻译指南:术语表、语言风格与实战规范全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zulip 中文翻译指南:术语表、语言风格与实战规范全解析

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 官方《Chinese translation style guide(中文翻译指南)》为核心,系统梳理 Zulip 简体中文本地化的术语选词、习惯用语与语气规范,并结合仓库中真实的翻译资源文件(如locale/zh_Hans/translations.jsonlocale/zh_Hans/LC_MESSAGES/django.po)以及 docs/translating/translating.md、docs/translating/internationalization.md 中描述的翻译工作流,帮助你理解每一个翻译决策背后的理由,从而在 Weblate 上或直接编辑翻译文件时保持术语一致、语气得体、风格统一。

总原则:口语化的英文,正式化的中文

Zulip 的英文原文文风比较口语化(colloquial),而中文翻译团队选择了一种"略微正式但不刻板"的语言风格。同时,Zulip 作为一款现代化的互联网应用,中文翻译大量借鉴了中国用户熟悉的微博、微信、QQ 邮箱等软件的习惯用语,以贴近国内用户的使用直觉。

这条总原则贯穿于下文所有的术语选择与句式处理中:先保证中文读起来自然、正式、符合用户预期,其次再谈忠实直译。这也解释了为什么本文档中大量术语采用意译而非字面直译。

核心术语表(Terms)

以下术语表是整个中文翻译体系的地基,在locale/zh_Hans/translations.json(Web 前端字符串,当前约 2282 条)与locale/zh_Hans/LC_MESSAGES/django.po(服务端字符串,当前约 8000 行)中逐条落实。任何译者在翻译前都应先核对本表,避免同一英文词在不同页面出现不同译法。

Message —— 消息

"Message" 可直译为"消息"或"信息",两者皆可,但翻译团队统一选用**"消息"**。派生译法如下:

英文中文理由
Stream Message频道消息与"频道"术语体系保持一致
Direct Message直信 / 私信借鉴微博、微信的用语习惯
Starred Message星标消息类比 QQ 邮箱的"星标邮件"功能

从翻译资源文件可以印证这些决策的实际落地情况:

  • "Go to starred messages": "前往星标消息"locale/zh_Hans/translations.json第 857 行)
  • "Starred messages": "星标消息"(同文件第 1611 行)
  • "Star this message": "添加星标消息标记"(同文件第 1610 行)
  • "You have no starred messages.": "您尚未有星标消息。"(同文件第 2115 行)

需要特别说明的是,Direct Message 在现行版本中多以**"私信"**出现,例如"Direct message": "私信""DIRECT MESSAGES": "私信"(同文件第 596、508 行),与微博、微信的"私信"概念一致,符合指南"与国内使用习惯保持一致"的要求。

Stream —— 频道

"Stream" 是 Zulip 最核心的组织概念。翻译团队曾考虑过"群组(Group)""主题(Subject)""版块""栏目(Column)"等候选译法,最终选择**"频道(Channel)"**,其灵感来源于游戏 Ingress 中的聊天 Channel。

选词依据有三层:

  1. 语义契合:Stream 可以"新建/删除(Create/Delete)",也可以"订阅/退订(Subscribe/Unsubscribe)",这组动词搭配与"频道"完全兼容;
  2. 结构能力:Stream 内部还可以发起"话题(Topic)"讨论,"频道"天然暗示了这种"频道内分层级"的结构;
  3. 简洁性:另一个备选"讨论组"(源自 QQ 的临时群组概念)多一个字,"稍微有点啰嗦"。

当前翻译资源中该决策被严格执行,例如"(link to channel)": "(链接到频道)""A channel with this name already exists.": "已存在同名的频道。"locale/zh_Hans/translations.json第 7、63 行)。甚至旧术语 Stream 出现在更早版本字符串中时,也以<z-stream></z-stream>占位符形式保留并在新版本中被"Channel"取代。

Topic —— 话题

"Topic" 对应 Zulip 中频道内部的讨论子主题,统一翻译为**"话题"**。例如"(links to topic)": "(话题链接)"locale/zh_Hans/translations.json第 10 行),以及"A topic move is already in progress.": "正在对话题进行移动。"(第 70 行)。

Invite-Only / Public Stream —— 私有 / 公开频道

"Invite-Only Stream" 指必须由频道内部用户邀请才能订阅的频道。这类频道私密性极高——用户在没有订阅时根本无法感知到它的存在。直译"仅邀请频道"读起来拗口,因此选择意译为**"私有频道"**,与"公开频道(Public Stream)"形成清晰对立。

Bot —— 机器人

统一翻译为**"机器人"**。翻译资源中可见大量应用,例如"A deactivated bot cannot send messages, access data, or take any other action.": "停用的机器人无法发送消息、访问数据或执行任何其他操作。"locale/zh_Hans/translations.json第 64 行)。

Integration —— 应用整合

"Integration" 原意为"集成"或"整合",表示将其他应用或服务与 Zulip 实现对接。为了中文表达意思完整,补充翻译为**"应用整合(Application Integration)"**。翻译资源中也可看到与"集成"并存的实例,如"Generate URL for an integration": "生成集成的 URL"——这提示译者:指南给出的是基准,个别字符串会因语境微调,但应保持"整合/集成"同一语义族。

Notification —— 通知

统一翻译为**"通知"**,这是与"消息"并列的高频词,广泛出现在设置项与提示文案中。

Alert Word —— 提示词

"Alert Word" 指用户自定义的、能触发提醒的关键词,翻译为**"提示词"**。在资源文件中对应的现代译法为"提醒词",如"Add a new alert word": "新增提醒词"locale/zh_Hans/translations.json第 141 行附近)——两者同义,译者可按界面语境选用。

习惯用语(Phrases)

除术语外,Zulip 英文界面中还有一批反复出现的短语。指南为它们规定了统一的、非字面的译法。

Subscribe / Unsubscribe —— 订阅 / 退订

"Subscribe/Unsubscribe" 统一译为**"订阅/退订",完成时态(Subscribed/Unsubscribed)译为"已订阅/已退订"**。英文中有时用 "Join" 表达与 "Subscribe" 相同的含义,同样翻译为"订阅"。资源文件中的实例:

  • "All users were already subscribed.": "全部用户均已订阅。"
  • "Skipped unsubscribed channels": "跳过未订阅频道"

Narrow to ... —— 筛选

"Narrow to ..." 表示"将范围缩小至……",指南选择翻译为**"筛选(Filter)"**,理由有二:

  1. 汉语中"筛选"表示按指定条件挑选,与"narrow the scope"语义共通;
  2. "筛选"是大众化的计算机用语,如 Microsoft Excel 的"筛选"功能,易于被普通用户接受。

同时有一个重要的语境例外:在搜索功能语境中,"Narrow to ..." 出于可读性考虑不译为"筛选"而译为"搜索"。例如资源文件中的"Narrow to direct messages that include <z-value></z-value>.": "定位至包含<z-value></z-value>的私信。"以及"Narrow to starred messages.": "筛选星标消息"——可见实际翻译会根据上下文在"筛选""定位至""搜索"之间灵活选择,译者应优先保证中文读起来自然。

Mute / Unmute —— 开启 / 关闭免打扰

"Mute" 常见的直译是"静音"(多见于电视设备语境),但用在 Zulip 中并不合适。指南选择意译为**"开启/关闭免打扰(Turn off/on Notification)"**,与微信的"消息免打扰"用语习惯一致。翻译资源中同样可见"All messages including muted channels": "全部消息包括静音频道"这类按具体场景微调的例子,但"免打扰"是设置项主译法。

Deactivate / Reactivate —— 禁用 / 启用(帐户),关闭 / 激活(社区)

这一对词根据作用对象区分译法,是最能体现"按语境翻译"的案例:

作用对象英文中文
用户账户Deactivated users禁用的用户
社区(Realm)Your realm has been deactivated.您的社区已关闭

资源文件中有多处印证,例如"Deactivated users": "停用成员列表"locale/zh_Hans/translations.json),以及"<z-user></z-user> 将停用包括用户、频道管理和频道订阅。"这类与停用(Deactivation)语义相关的句子。翻译时需判断当前字符串描述的是"人"还是"组织/社区",再选择"禁用/启用"还是"关闭/激活"。

Invalid —— 不正确

"Invalid" 主要用于异常信息,普通用户很少见到。可选译法有"错误""非法""不合法",为保持习惯一致,指南统一译为**"不正确"**,例如 "Invalid API key" 译为"API 码不正确"。

一个值得注意的仓库实证:在locale/zh_Hans/LC_MESSAGES/django.po中,"Invalid API key" 的实际译文是"错误的 API key"(文件第 4947-4949 行,字符串来源标注为zerver/lib/exceptions.py)。这说明指南给出的是倾向性规范,具体字符串在演进中可能被更新为更直白的说法;译者应把指南当作默认基准,同时尊重现有资源文件中已确立的译法

I want ... —— 开启

"I want ..." 主要出现在设置页面,直译为"我想……""我要……"过于口语化,不符合中文设置界面的正式表达习惯,因此意译为**"开启(某某功能选项)"**。这条规则提醒译者:设置项文案应当描述"操作结果"而非"用户愿望"。

User / People / Person —— 用户

这三个英文词在 Zulip 中均指使用平台的个人,统一翻译为**"用户"**,不做区分。

语气与人称规范(Others)

You / Your —— 您 / 您的

出于对用户的尊重,第二人称统一使用敬语**"您/您的"**,而非"你/你的"。这一点在翻译资源中贯彻得非常彻底,几乎所有面向用户的文案都使用"您",例如"您尚未有星标消息。""您确定直接加入么?"

We —— 我们(或不翻)

"We" 一般译为第一人称"我们",但中文使用习惯中不太以自我为中心,大量使用"我们"的情况较少,因此很多时候选择不翻译或转换句式。指南给出的范例:

"Still no email? We can resend it" → "仍然没有收到邮件?点击重新发送"

即把"We can resend it"转化为祈使句"点击重新发送",读起来更符合中文习惯。

感叹号与句号 ——(一般省略)

感叹号在 Zulip 英文界面中出现非常多,但英文感叹号的语气比中文略轻。因此:

  • 中文翻译建议省略大部分感叹号,除非确定有必要保留;
  • 句号(。)在中文排版中影响美观,一般也建议省略,句末留空即可。

这条规则直接影响界面的视觉密度,是中文翻译区别于英文排版的重要特征。

翻译风格指南在整体本地化体系中的位置

docs/translating/chinese.md只是 Zulip 多语言风格指南之一。完整的指南清单(含芬兰语、法语、德语、印地语、日语、波兰语、俄语、西班牙语)见 docs/translating/translating.md。该文档同时建议把风格指南的决策同步录入 Weblate 术语表(glossary),以便翻译界面内联提示。

从 docs/translating/internationalization.md 可以了解这些翻译文件是如何进入系统的:

  1. 开发者在代码与模板中用_(){{ t '...' }}{{#tr}}...{{/tr}}{% trans %}...{% endtrans %}等标记待翻译字符串;
  2. 通过./manage.py makemessages生成各语言的资源文件——Web 端为locale/<语言码>/translations.json,服务端为locale/<语言码>/LC_MESSAGES/django.po
  3. 资源文件被 Weblate 扫描,译者在线翻译;
  4. 维护者合并 Weblate 的提交进入代码库。

中文翻译就保存在locale/zh_Hans/目录下(Web 端translations.json、服务端django.po,另有legacy_stream_translations.json存放旧版频道相关的历史字符串)。

如何验证中文翻译效果

根据 docs/translating/translating.md 中的"Testing translations"一节,中文译者可以在本地开发环境验证翻译效果:

  • 以语言码作为 URL 前缀访问:例如查看登录页中文版可访问http://localhost:9991/zh-hans/login/(Zulip 中文语言码为zh-hans),此方法适用于包括登出页在内的所有界面;
  • 登录后的 Web 应用可在 Zulip UI 中直接切换语言;
  • 登出页面(portico)会自动使用操作系统/浏览器配置的语言;
  • Zulip 判定用户语言时遵循的优先级是:URL 前缀语言码 →django_languageCookie → HTTP 请求的Accept-Language头。服务端默认语言码在 zproject/computed_settings.py 中由LANGUAGE_CODE = "en-us"定义,启用国际化由USE_I18N = True控制。

给中文译者的实战建议

综合指南与仓库现状,向参与 Zulip 中文翻译的译者提出以下可操作的检查清单:

  1. 先查术语表再动笔:遇到 Message / Stream / Topic / Bot / Mute / Deactivate 等高频词,先对照本文术语表,再在locale/zh_Hans/translations.jsondjango.po中用grep检索既有译法,保持全文一致;
  2. 区分语境再选词:Deactivate 要看作用对象(用户→禁用、社区→关闭);Narrow to 要看是否处于搜索语境(筛选 / 定位至 / 搜索);
  3. 不要翻译代码与变量:字符串中的{variable}<z-link><z-user>%s等占位符与 HTML 标签必须原样保留(可参见 docs/translating/translating.md 中"Don't translate variables or code"一节),中文译文中的标点与占位符顺序应保证代码可正常插值;
  4. 语气统一用"您",尽量少用"我们",感叹号与句末句号按指南省略;
  5. 留意服务端与前端两套文件:服务端 API 错误消息(如django.po中的 "Invalid API key")同样面向用户,属于完整翻译的一部分,不应遗漏;
  6. 关注 Weblate 中的DjangoFrontend组件:这两个组件承载服务器与 Web 应用下一个大版本的字符串,是翻译工作的优先对象。

结语

中文翻译风格指南用一套简洁的术语表和几条语气规则,解决了 Zulip 本地化中最关键的一致性问题:让翻译既保留 Zulip 产品特色,又贴合中文互联网用户的使用习惯。无论是术语(消息/频道/话题/私信/星标消息),还是语气(您、免打扰、省略标点),每一个决策都能在locale/zh_Hans/的真实翻译资源中找到落地的例证。对于新加入的译者,这份指南加上仓库中的翻译资源文件,就是保证翻译质量的最可靠参考。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 15:11:39

用中文一句话生成SVG动图:1.1万Star的AI绘图Skill实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 15:08:07

留个神!不是所有 AI 都能写论文,2026 学术圈认可工具合集

每年毕业季&#xff0c;无数同学深陷论文难题&#xff1a;开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对这些痛点&#xff0c;不少学生转向通用型AI工具寻求帮助&#xff0c;但市面上的AI产品大多存在明显短板。它们常会…

作者头像 李华
网站建设 2026/9/12 15:05:18

SpringBoot社工服务管理系统开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 15:03:52

Python+Django校园闲置物品平台开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 15:03:16

C/C++指针核心概念解析与实战技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华