CUPS 2.4+ 原生 Web 界面深度汉化实战指南

· 阅读约需8分钟

CUPS 2.4+ 原生 Web 界面深度汉化实战指南

在 Linux 系统(如 Debian 13)中部署 CUPS 打印服务器后,其自带的 Web 管理界面(端口 631)虽然功能强大,但纯英文的界面对于日常运维和配置非常不友好。由于 CUPS 2.4+ 版本移除了部分官方中文语言包支持,直接添加 DefaultLanguage zh_CN 往往无效。

本文将完整总结一套“暴力且安全”的 CUPS 原生界面汉化方案。本方案通过直接修改底层的 HTML 模板和静态文件,绕过官方的语言包机制,实现界面及提示信息的深度汉化。

⚠️ 警告与准备工作

操作前必须备份: 本方案涉及直接修改系统底层模板文件。如果在修改过程中发生语法错误,可能导致 CUPS Web 界面报错或白屏。操作前请务必执行以下备份命令。

# 备份原有的静态文件和模板目录(请根据实际情况确认路径)
cp -r /usr/share/cups/doc-root /usr/share/cups/doc-root.bak
cp -r /usr/share/cups/templates /usr/share/cups/templates.bak

第一阶段:汉化首页静态文件(Index.html)

CUPS 的首页(Home)是一个纯静态的 index.html 文件。我们将使用 Python 脚本,直接将该文件中的英文标题、简介段落及导航链接替换为中文,同时利用正则表达式处理包含超链接的长段落。

python3 -c "
import os
import re

# 定位首页文件,兼容不同版本路径
paths = [
    '/usr/share/cups/doc-root/index.html',
    '/usr/share/cups/doc-root/zh_CN/index.html'
]

# 精准替换字典
replacements = {
    'OpenPrinting CUPS 2.4.2': 'OpenPrinting CUPS 2.4.2 打印系统',
    'OpenPrinting CUPS 2.4.10': 'OpenPrinting CUPS 2.4.10 打印系统',
    'CUPS for Users': 'CUPS 用户指南',
    'CUPS for Administrators': 'CUPS 管理员指南',
    'CUPS for Developers': 'CUPS 开发者指南',
    'Overview of CUPS': 'CUPS 概述',
    'Command-Line Printing and Options': '命令行打印与选项',
    'Adding Printers and Classes': '添加打印机与类',
    'Managing Operation Policies': '管理操作策略',
    'Using Network Printers': '使用网络打印机',
    'Firewalls': '防火墙',
    'cupsd.conf Reference': 'cupsd.conf 参考',
    'CUPS Programming Manual': 'CUPS 编程手册',
    'Filter and Backend Programming': '过滤器与后端编程'
}

# 准备替换的长段中文
new_intro = '由 OpenPrinting 为 Linux® 和其他类 Unix® 系统开发的基于标准的开源打印系统。CUPS 使用 IPP Everywhere™ 协议来支持本地和网络打印机。'

# 用正则表达式匹配整段简介(忽略中间的任何 HTML 标签和换行符)
pattern = re.compile(r'The standards-based.*?local and network printers\.', re.DOTALL)

for path in paths:
    if os.path.exists(path):
        with open(path, 'r', encoding='utf-8') as f:
            content = f.read()

        # 替换静态文本
        for en, zh in replacements.items():
            content = content.replace(en, zh)

        # 执行正则替换简介段落
        content = pattern.sub(new_intro, content)

        with open(path, 'w', encoding='utf-8') as f:
            f.write(content)

print('✅ 首页静态文件汉化完成!')
"

第二阶段:全局模板与导航栏汉化

CUPS 的导航栏(如 Home, Administration)、表格表头(如 Queue Name, Status)以及大部分按钮,是由 /usr/share/cups/templates 目录下的 .tmpl 和 .header 文件动态生成的。我们需要遍历该目录并批量替换。

python3 -c "
import os
import glob

dir_path = '/usr/share/cups/templates'
files = glob.glob(os.path.join(dir_path, '*.*'))

replacements = {
    # 顶部导航栏
    '>Home<': '>首页<',
    '>Administration<': '>管理<',
    '>Classes<': '>类<',
    '>Help<': '>帮助<',
    '>Jobs<': '>任务<',
    '>Printers<': '>打印机<',

    # 通用状态与表头
    'Queue Name': '队列名称',
    'Description': '描述',
    'Location': '位置',
    'Make and Model': '制造商与型号',
    'Status': '状态',
    'Idle': '空闲',
    'Processing': '处理中',
    'Stopped': '已停止',
    'Paused': '已暂停',
    'Driver:': '驱动程序:',
    'Connection:': '连接:',
    'Defaults:': '默认参数:',

    # 列表与按钮
    'Add Printer': '添加打印机',
    'Find New Printers': '查找新打印机',
    'Manage Printers': '管理打印机',
    'Edit Configuration File': '编辑配置文件',
    'Server Settings:': '服务器设置:',
    'Change Settings': '修改设置',
    'Manage Jobs': '管理任务',
    'Add Class': '添加类',
    'Manage Classes': '管理类',
    'Search in Printers:': '搜索打印机:',
    '>Search<': '>搜索<',
    '>Clear<': '>清除<',
    'Showing': '显示',
    'printers.': '台打印机。',
    'Job ID': '任务ID',
    'Name': '任务名称',
    'User': '用户',
    'Size': '大小',
    'Pages': '页数',
    'Control': '操作',

    # 维护菜单下拉项
    'Maintenance': '维护',
    'Set Default Options': '设置默认选项',
    'Print Test Page': '打印测试页',
    'Clean Print Heads': '清洁打印头',
    'Pause Printer': '暂停打印机',
    'Reject Jobs': '拒绝任务',
    'Move All Jobs': '移动所有任务',
    'Cancel All Jobs': '取消所有任务'
}

count = 0
for file_path in files:
    if not os.path.isfile(file_path): continue
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()

        original_content = content
        for en, zh in replacements.items():
            content = content.replace(en, zh)

        if content != original_content:
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
            count += 1
    except Exception as e:
        pass

print(f'✅ 全局模板与导航栏汉化完成,共更新 {count} 个文件。')
"

第三阶段:动态操作反馈页面精准汉化

当你执行“取消任务”、“暂停打印机”等操作时,CUPS 会返回一个动态生成的提示页面。由于语法拼接的原因,直接替换单词经常会出现类似“取消任务s”或者中英混杂的情况。以下代码专门修复这些动态提示页面。

python3 -c "
import os
import glob

dir_path = '/usr/share/cups/templates'
files = glob.glob(os.path.join(dir_path, '*.*'))

replacements = {
    # 任务取消反馈页
    '取消任务s On Printer': '取消打印机上的任务 -',
    'Cancel Jobs On Printer': '取消打印机上的任务 -',
    'All jobs on printer': '打印机 ',
    'have been canceled.': ' 上的所有任务已被取消。',

    # 暂停/恢复反馈页
    'Pause Printer': '暂停打印机',
    'Resume Printer': '恢复打印机',
    ' has been paused.': ' 已被暂停。',
    ' has been resumed.': ' 已被恢复。',

    # 拒绝/接受任务反馈页
    'Reject Jobs On Printer': '拒绝打印机上的任务 -',
    'Accept Jobs On Printer': '接受打印机上的任务 -',
    'Printer ': '打印机 ',
    ' is no longer accepting jobs.': ' 已停止接收任务。',
    ' is now accepting jobs.': ' 已恢复接收任务。',

    # 移动任务页
    'New Destination:': '新目标打印机:',
    '>移动任务s<': '>移动任务<',
    '移动任务s': '移动任务',

    # 权限设置页
    'Allowed Users For': '允许的用户 -',
    'Users:': '用户列表:',
    'Allow these users to print': '允许这些用户打印',
    'Prevent these users from printing': '阻止这些用户打印',
    'Set Allowed Users': '设置允许用户',

    # 查找打印机页
    'Available Printers': '可用打印机列表',
    'Add This Printer': '添加此打印机'
}

count = 0
for file_path in files:
    if not os.path.isfile(file_path): continue
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()

        original_content = content
        for en, zh in replacements.items():
            content = content.replace(en, zh)

        if content != original_content:
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
            count += 1
    except Exception as e:
        pass

print(f'✅ 动态操作反馈页面汉化完成,共更新 {count} 个文件。')
"

第四阶段:重启服务并生效

完成上述所有 Python 脚本执行后,必须重启 CUPS 服务使配置生效:

systemctl restart cups

回到浏览器,按 Ctrl + F5(或 Shift + F5)强制刷新页面,即可看到汉化后的效果。

💡 重要的避坑提示与边界说明

  • 绝对不要尝试修改 PPD 文件:千万不要尝试通过修改 /etc/cups/ppd/*.ppd 文件来汉化打印机下拉框中的参数(如 A4, Letter 等)。PPD 文件内部使用严格的 PostScript 编码(latin-1),使用普通脚本修改极大概率会导致 PPD 文件损坏、乱码,甚至导致 CUPS 无法识别打印机并报错 缺少 PPD-Adobe-4.x 文件头。如果不慎修改损坏,请使用备份文件恢复,或使用 lpadmin 命令重新生成队列。
  • 无法修改的部分:打印机队列中的具体连接参数(usb://...)、驱动名称、以及系统底层输出的时间戳(如 Mon Nov 2 11:54:15 2026),属于系统底层变量输出,无法通过修改 HTML 模板来汉化。
  • 浏览器翻译兜底:虽然通过上述代码已经实现了 95% 以上的界面汉化,但如果后续出现未覆盖的深层报错页面,直接使用 Chrome 或 Edge 浏览器自带的“翻译成中文”功能,是最安全、最高效的最终解决方案。