You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Sphinx与sphinx-intl隐藏标记为忽略的未翻译内容

解决Sphinx+sphinx-intl隐藏指定翻译内容的问题

嘿,我之前刚好碰到过一模一样的需求,给你两个实用的解决思路,按需选就行:

方案一:直接在源RST文件中用条件指令控制(最省心)

这个方法最直接,从源头就把不需要翻译的内容限制在母语版本里,根本不会进入PO文件,不用后续处理。

只需要把仅母语用户需要的内容用Sphinx的only指令包裹,指定只有目标语言(比如英语)时才显示:

Important content

.. only:: language == 'en'
   :orphan:

   Content which is only relevant in english
  • 非英语版本编译时,这段内容会被直接跳过,不会出现在最终文档里
  • 也不会被sphinx-intl提取到PO文件中,彻底避免翻译问题

方案二:利用PO文件标记+自定义Sphinx扩展(适合已有大量PO内容的场景)

如果已经把内容放进PO文件了,想通过ignore标记来控制隐藏,可以这么做:

步骤1:修改PO文件的标记和翻译内容

给需要忽略的条目添加ignore标记,并且把msgstr设为空字符串(别留特殊占位符,空字符串更稳妥):

#: ../../myfile.rst:26
msgid "Important content"
msgstr "Contenu important"

#: ../../myfile.rst:28
#, ignore
msgid "Content which is only relevant in english"
msgstr ""

步骤2:编写自定义Sphinx扩展

写一个简单的扩展,重载翻译函数,让带有ignore标记且msgstr为空的内容直接返回空,而不是回退显示原文。

创建一个名为ignore_translations.py的文件,内容如下:

from sphinx.util import logging
from sphinx.locale import _

logger = logging.getLogger(__name__)

def setup(app):
    # 保存原有的翻译函数
    original_gettext = app.builder.templates.environment.gettext
    
    def custom_gettext(message):
        # 获取当前语言的翻译实例
        from sphinx.intl.translation import get_translation
        trans = get_translation(app.config.language)
        # 查找对应的翻译条目
        entry = trans.gettext_entry(message)
        
        # 检查是否有ignore标记且翻译内容为空
        if entry and 'ignore' in entry.flags and not entry.msgstr:
            return ""
        # 其他情况用原逻辑
        return original_gettext(message)
    
    # 替换模板环境中的翻译函数
    app.builder.templates.environment.gettext = custom_gettext
    return {'version': '0.1', 'parallel_read_safe': True}

步骤3:在conf.py中启用扩展

把刚才写的扩展添加到Sphinx配置文件的extensions列表里:

extensions = [
    # 你的其他扩展(比如sphinx_rtd_theme等)
    'ignore_translations',
]

这样编译非英语版本时,带有ignore标记的空翻译内容就会被完全隐藏,不会显示原文了。


内容的提问来源于stack exchange,提问作者Fabzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:32:32