fix: 补全 CUPS Web 汉化

This commit is contained in:
Codex
2026-06-28 20:23:39 +08:00
parent 698f3262f0
commit 76faf52b6b
5 changed files with 515 additions and 248 deletions

View File

@@ -138,6 +138,7 @@ lpinfo -v | grep usb
├── setup_cups.sh # 一键安装/卸载脚本
├── watchdog/ # 网络和打印服务守护脚本
├── cups-templates-zh_CN/ # 中文界面模板65个文件
├── cups-docroot-zh_CN/ # CUPS 中文首页和前端汉化脚本
├── README.md # 本文档
└── 刷机教程.md # Armbian 刷机教程
```
@@ -151,7 +152,7 @@ lpinfo -v | grep usb
脚本已配置 `HostNameLookups Off` 解决此问题。如果仍然慢,检查网络连接。
### 界面显示英文
确保安装时下载了中文模板。重新运行安装脚本可以修复。
确保安装时下载了中文模板、中文首页和前端汉化脚本。重新运行安装脚本可以修复。
### 找不到 USB 打印机
1. 确认打印机已通过 USB 连接到服务器

View File

@@ -0,0 +1,421 @@
(function () {
var exact = {
"Administration": "管理",
"Home": "首页",
"Jobs": "任务",
"Printers": "打印机",
"Classes": "打印机类",
"Help": "帮助",
"Search": "搜索",
"Clear": "清除",
"Default": "默认",
"Printer Default": "打印机默认",
"None": "无",
"No": "否",
"Yes": "是",
"Off": "关闭",
"On": "开启",
"True": "是",
"False": "否",
"Auto": "自动",
"Automatic": "自动",
"Manual": "手动",
"Idle": "空闲",
"Processing": "处理中",
"Stopped": "已停止",
"Paused": "已暂停",
"Unknown": "未知",
"Ready": "就绪",
"Completed": "已完成",
"Current": "当前",
"General": "常规",
"Basic": "基本",
"Advanced": "高级",
"Printer Features": "打印机功能",
"Installable Options": "可安装选项",
"Job Options": "任务选项",
"Page Setup": "页面设置",
"Media": "纸张",
"Paper": "纸张",
"Finishing": "后处理",
"Output": "输出",
"Color": "彩色",
"Grayscale": "灰度",
"Monochrome": "单色",
"Black": "黑色",
"Black and White": "黑白",
"Normal": "普通",
"Draft": "草稿",
"High": "高",
"Best": "最佳",
"Fast": "快速",
"Photo": "照片",
"Text": "文本",
"Graphics": "图形",
"Line Art": "线条图",
"Portrait": "纵向",
"Landscape": "横向",
"Reverse Portrait": "反向纵向",
"Reverse Landscape": "反向横向",
"Plain": "普通",
"Plain Paper": "普通纸",
"Envelope": "信封",
"Labels": "标签纸",
"Transparency": "透明胶片",
"Recycled": "再生纸",
"Heavy": "重磅纸",
"Thick": "厚纸",
"Thin": "薄纸",
"Long Edge": "长边",
"Short Edge": "短边",
"Long-Edge Binding": "长边装订",
"Short-Edge Binding": "短边装订",
"One-Sided": "单面",
"Two-Sided": "双面",
"No Cover": "无封面",
"Classified": "机密",
"Confidential": "保密",
"Secret": "秘密",
"Standard": "标准",
"Top Secret": "绝密",
"Unclassified": "非密",
"Tray 1": "纸盒 1",
"Tray 2": "纸盒 2",
"Tray 3": "纸盒 3",
"Tray 4": "纸盒 4",
"Manual Feed": "手动进纸",
"Multi-Purpose Tray": "多功能纸盒",
"Upper": "上纸盒",
"Lower": "下纸盒",
"Middle": "中纸盒",
"Letter": "Letter 信纸",
"Legal": "Legal 法律纸",
"Executive": "Executive 行政纸",
"CUPS for Users": "用户指南",
"CUPS for Administrators": "管理员指南",
"CUPS for Developers": "开发者指南",
"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": "过滤器和后端编程",
"Getting Started": "入门",
"Man Pages": "手册页",
"Programming": "编程",
"References": "参考",
"Specifications": "规范",
"Online Help": "在线帮助",
"Online Help Documents": "在线帮助文档",
"All Documents": "所有文档",
"View Printable Version": "查看可打印版本",
"No matches found.": "未找到匹配结果。",
"Add Printer": "添加打印机",
"Find New Printers": "查找新打印机",
"Manage Printers": "管理打印机",
"Add Class": "添加打印机类",
"Manage Classes": "管理打印机类",
"Manage Jobs": "管理打印任务",
"Edit Configuration File": "编辑配置文件",
"Server Settings": "服务器设置",
"Save Settings": "保存设置",
"Share printers connected to this system": "共享连接到此系统的打印机",
"Allow printing from the Internet": "允许从互联网打印",
"Allow remote administration": "允许远程管理",
"Allow users to cancel any job": "允许用户取消任何任务",
"Preserve job history": "保留任务历史",
"Save debugging information": "保存调试信息",
"Maintenance": "维护",
"Print Test Page": "打印测试页",
"Clean Print Heads": "清洗打印头",
"Print Self-Test Page": "打印自检页",
"Start Printer": "恢复打印机",
"Stop Printer": "暂停打印机",
"Accept Jobs": "接受任务",
"Reject Jobs": "拒绝任务",
"Move All Jobs": "移动所有任务",
"Cancel All Jobs": "取消所有任务",
"Modify Printer": "修改打印机",
"Delete Printer": "删除打印机",
"Set Default Options": "设置默认选项",
"Set As Server Default": "设为服务器默认",
"Set Allowed Users": "设置允许用户",
"Description": "描述",
"Location": "位置",
"Driver": "驱动",
"Connection": "连接",
"Defaults": "默认设置",
"Shared": "已共享",
"Not Shared": "未共享",
"Server Default": "服务器默认",
"Accepting Jobs": "接受任务",
"Rejecting Jobs": "拒绝任务",
"Set Default": "设为默认",
"Delete": "删除",
"Modify": "修改",
"Continue": "继续",
"Back": "返回",
"Apply": "应用",
"Execute": "执行",
"Cancel": "取消",
"Refresh": "刷新",
"Name": "名称",
"Make": "品牌",
"Model": "型号",
"Device": "设备",
"Local Printers": "本地打印机",
"Discovered Network Printers": "已发现的网络打印机",
"Other Network Printers": "其他网络打印机",
"Current Connection": "当前连接",
"Sharing": "共享",
"Choose Driver": "选择驱动",
"Choose Device": "选择设备",
"Choose Make": "选择品牌",
"Choose Model": "选择型号",
"Current Driver": "当前驱动",
"Provide a PPD File": "提供 PPD 文件",
"Query Printer for Default Options": "从打印机查询默认选项",
"Loading": "加载中",
"Searching": "搜索中",
"Supply Levels": "耗材余量",
"Policies": "策略",
"Operation Policy": "操作策略",
"Error Policy": "错误策略",
"Job Sheets": "作业封面",
"Banner": "横幅页",
"Starting Banner": "开始横幅页",
"Ending Banner": "结束横幅页",
"Allowed Users": "允许用户",
"Denied Users": "拒绝用户",
"Hold Job": "保留任务",
"Release Job": "释放任务",
"Restart Job": "重启任务",
"Move Job": "移动任务",
"Cancel Job": "取消任务",
"Page": "页面",
"Pages": "页数",
"Status": "状态",
"User": "用户",
"Size": "大小",
"Date": "日期",
"Time": "时间",
"Priority": "优先级",
"Media Limits": "纸张限制",
"Output Order": "输出顺序",
"Reverse": "反向",
"Forward": "正向",
"Collated": "逐份",
"Uncollated": "不逐份",
"Resolution": "分辨率",
"Printer Resolution": "打印机分辨率",
"Color Mode": "色彩模式",
"Color Model": "色彩模型",
"Color Correction": "色彩校正",
"Color Management": "色彩管理",
"Media Weight": "纸张重量",
"Page Delivery": "页面输出",
"Output Resolution": "输出分辨率"
};
var phrases = [
["Media Size", "纸张尺寸"],
["Page Size", "页面尺寸"],
["Paper Size", "纸张尺寸"],
["Media Type", "纸张类型"],
["Paper Type", "纸张类型"],
["Input Slot", "进纸来源"],
["Paper Source", "纸张来源"],
["Media Source", "纸张来源"],
["Output Bin", "出纸槽"],
["Output Tray", "出纸托盘"],
["Duplex Printing", "双面打印"],
["Two-Sided Printing", "双面打印"],
["2-Sided Printing", "双面打印"],
["Double-Sided Printing", "双面打印"],
["Print Quality", "打印质量"],
["Printout Quality", "打印输出质量"],
["Printout Mode", "打印模式"],
["Output Mode", "输出模式"],
["Color Mode", "色彩模式"],
["Color Model", "色彩模型"],
["Color Correction", "色彩校正"],
["Color Management", "色彩管理"],
["Resolution", "分辨率"],
["Copies", "份数"],
["Collate", "逐份打印"],
["Orientation", "方向"],
["Scaling", "缩放"],
["Fit to Page", "适合页面"],
["Page Region", "页面区域"],
["Page Border", "页面边框"],
["Page Order", "页面顺序"],
["Mirror Print", "镜像打印"],
["Toner Save", "省粉模式"],
["Ink/Toner Save", "省墨/省粉模式"],
["Economy Mode", "经济模式"],
["Draft Mode", "草稿模式"],
["Print Density", "打印浓度"],
["Density", "浓度"],
["Darkness", "深浅"],
["Brightness", "亮度"],
["Contrast", "对比度"],
["Saturation", "饱和度"],
["Gamma", "伽马"],
["Halftoning", "半色调"],
["Image Quality", "图像质量"],
["Installed Memory", "已安装内存"],
["Optional Tray", "可选纸盒"],
["Long-Edge", "长边"],
["Short-Edge", "短边"],
["one-sided", "单面"],
["two-sided-long-edge", "双面(长边翻转)"],
["two-sided-short-edge", "双面(短边翻转)"],
["job-sheets", "作业封面"],
["media", "纸张"],
["sides", "双面设置"],
["Search Results", "搜索结果"],
["Print Settings", "打印设置"],
["Printer Options", "打印机选项"],
["Default Options", "默认选项"],
["Installable Options", "可安装选项"],
["General Options", "常规选项"],
["Finishing Options", "后处理选项"],
["Image Options", "图像选项"],
["Text Options", "文本选项"],
["Color Options", "色彩选项"],
["Advanced Options", "高级选项"],
["Maximum Clients", "最大客户端数"],
["Maximum Jobs", "最大任务数"],
["Preserve Metadata", "保留元数据"],
["Preserve Documents", "保留文档"],
["Maximum Log File Size", "最大日志文件大小"],
["Document Name", "文档名称"],
["Job ID", "任务 ID"],
["Job State", "任务状态"],
["Job Name", "任务名称"],
["Printer State", "打印机状态"],
["Make and Model", "品牌和型号"],
["Page Range", "页码范围"],
["Number-Up", "每张页数"],
["Pages Per Sheet", "每张纸页数"],
["Input Tray", "进纸托盘"],
["Staple", "装订"],
["Punch", "打孔"],
["Fold", "折叠"],
["Booklet", "小册子"],
["Borderless", "无边距"],
["Edge-to-Edge", "满版打印"]
];
function trimText(text) {
return text.replace(/^\s+|\s+$/g, "");
}
function localizeText(text) {
var core = trimText(text);
var localized = core;
var i;
if (!core) {
return text;
}
if (exact[core]) {
localized = exact[core];
} else {
for (i = 0; i < phrases.length; i++) {
localized = localized.split(phrases[i][0]).join(phrases[i][1]);
}
}
if (localized === core) {
return text;
}
return text.replace(core, localized);
}
function localizeNodeText(root) {
var skip = { SCRIPT: true, STYLE: true, TEXTAREA: true, PRE: true, CODE: true };
var nodes = [];
var walker;
var node;
var i;
if (!root) {
return;
}
if (document.createTreeWalker && window.NodeFilter) {
walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
acceptNode: function (candidate) {
if (!candidate.nodeValue || !trimText(candidate.nodeValue)) {
return NodeFilter.FILTER_REJECT;
}
if (candidate.parentNode && skip[candidate.parentNode.nodeName]) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
});
while ((node = walker.nextNode())) {
nodes.push(node);
}
} else {
nodes = root.querySelectorAll ? root.querySelectorAll("*") : [];
}
for (i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType === 3) {
nodes[i].nodeValue = localizeText(nodes[i].nodeValue);
} else if (nodes[i].childNodes && nodes[i].childNodes.length === 1 && nodes[i].childNodes[0].nodeType === 3 && !skip[nodes[i].nodeName]) {
nodes[i].childNodes[0].nodeValue = localizeText(nodes[i].childNodes[0].nodeValue);
}
}
}
function localizeControls(root) {
var selects = root.querySelectorAll("select");
var inputs = root.querySelectorAll("input[type=submit], input[type=button], input[type=reset], button");
var i;
var j;
var select;
for (i = 0; i < selects.length; i++) {
select = selects[i];
if ((select.id && select.id.indexOf("select-") === 0) || select.name === "OP") {
for (j = 0; j < select.options.length; j++) {
select.options[j].text = localizeText(select.options[j].text);
}
}
}
for (i = 0; i < inputs.length; i++) {
if (inputs[i].value) {
inputs[i].value = trimText(localizeText(inputs[i].value));
}
}
}
function localizeSafeTextBlocks(root) {
var blocks = root.querySelectorAll("h1, h2, h3, th, .title, .header a, .cups-header a, .tabs label, .sidebar a, .sidebar h3, .thirds h2, .thirds a, .body p, .cups-body p, .body li, .cups-body li, .body a, .cups-body a");
var cells = root.querySelectorAll("td");
var i;
for (i = 0; i < blocks.length; i++) {
localizeNodeText(blocks[i]);
}
for (i = 0; i < cells.length; i++) {
if (/^\s*(job-sheets|media|sides)=/.test(cells[i].textContent || "")) {
localizeNodeText(cells[i]);
}
}
}
localizeSafeTextBlocks(document);
localizeControls(document);
})();

View File

@@ -0,0 +1,52 @@
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<link rel="stylesheet" href="/cups.css" type="text/css">
<link rel="shortcut icon" href="/apple-touch-icon.png" type="image/png">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta name="viewport" content="width=device-width">
<title>首页 - CUPS 打印管理</title>
</head>
<body>
<div class="cups-header">
<ul>
<li><a href="https://openprinting.github.io/cups/" target="_blank">OpenPrinting CUPS</a></li>
<li><a class="active" href="/">首页</a></li>
<li><a href="/admin">管理</a></li>
<li><a href="/classes/">打印机类</a></li>
<li><a href="/help/">帮助</a></li>
<li><a href="/jobs/">任务</a></li>
<li><a href="/printers/">打印机</a></li>
</ul>
</div>
<div class="cups-body">
<div class="row">
<h1>OpenPrinting CUPS 打印系统</h1>
<p>CUPS 是面向 Linux 和其他类 Unix 系统的标准化开源打印系统。它通过 IPP Everywhere 支持本地打印机和网络打印机。</p>
</div>
<div class="row">
<div class="thirds">
<h2>用户指南</h2>
<p><a href="help/overview.html">CUPS 概述</a></p>
<p><a href="help/options.html">命令行打印和选项</a></p>
</div>
<div class="thirds">
<h2>管理员指南</h2>
<p><a href="help/admin.html">添加打印机和打印机类</a></p>
<p><a href="help/policies.html">管理操作策略</a></p>
<p><a href="help/network.html">使用网络打印机</a></p>
<p><a href="help/firewalls.html">防火墙</a></p>
<p><a href="help/man-cupsd.conf.html">cupsd.conf 参考</a></p>
</div>
<div class="thirds">
<h2>开发者指南</h2>
<p><a href="help/cupspm.html">CUPS 编程手册</a></p>
<p><a href="help/api-filter.html">过滤器和后端编程</a></p>
</div>
</div>
</div>
<div class="cups-footer">CUPS 和 CUPS 标志是 OpenPrinting 的商标 | 中文汉化版</div>
</body>
</html>

View File

@@ -1,252 +1,6 @@
</div>
</div>
<script type="text/javascript"><!--
(function () {
var exact = {
"Administration": "管理",
"Home": "首页",
"Jobs": "任务",
"Printers": "打印机",
"Classes": "打印机类",
"Help": "帮助",
"Search": "搜索",
"Clear": "清除",
"Default": "默认",
"Printer Default": "打印机默认",
"None": "无",
"No": "否",
"Yes": "是",
"Off": "关闭",
"On": "开启",
"True": "是",
"False": "否",
"Auto": "自动",
"Automatic": "自动",
"Manual": "手动",
"Idle": "空闲",
"Processing": "处理中",
"Stopped": "已停止",
"Paused": "已暂停",
"Unknown": "未知",
"Ready": "就绪",
"Completed": "已完成",
"Current": "当前",
"General": "常规",
"Basic": "基本",
"Advanced": "高级",
"Printer Features": "打印机功能",
"Installable Options": "可安装选项",
"Job Options": "任务选项",
"Page Setup": "页面设置",
"Media": "纸张",
"Paper": "纸张",
"Finishing": "后处理",
"Output": "输出",
"Color": "彩色",
"Grayscale": "灰度",
"Monochrome": "单色",
"Black": "黑色",
"Black and White": "黑白",
"Normal": "普通",
"Draft": "草稿",
"High": "高",
"Best": "最佳",
"Fast": "快速",
"Photo": "照片",
"Text": "文本",
"Graphics": "图形",
"Line Art": "线条图",
"Portrait": "纵向",
"Landscape": "横向",
"Reverse Portrait": "反向纵向",
"Reverse Landscape": "反向横向",
"Plain": "普通",
"Plain Paper": "普通纸",
"Envelope": "信封",
"Labels": "标签纸",
"Transparency": "透明胶片",
"Recycled": "再生纸",
"Heavy": "重磅纸",
"Thick": "厚纸",
"Thin": "薄纸",
"Long Edge": "长边",
"Short Edge": "短边",
"Long-Edge Binding": "长边装订",
"Short-Edge Binding": "短边装订",
"One-Sided": "单面",
"Two-Sided": "双面",
"No Cover": "无封面",
"Classified": "机密",
"Confidential": "保密",
"Secret": "秘密",
"Standard": "标准",
"Top Secret": "绝密",
"Unclassified": "非密",
"Tray 1": "纸盒 1",
"Tray 2": "纸盒 2",
"Tray 3": "纸盒 3",
"Tray 4": "纸盒 4",
"Manual Feed": "手动进纸",
"Multi-Purpose Tray": "多功能纸盒",
"Upper": "上纸盒",
"Lower": "下纸盒",
"Middle": "中纸盒",
"Letter": "Letter 信纸",
"Legal": "Legal 法律纸",
"Executive": "Executive 行政纸"
};
var phrases = [
["Media Size", "纸张尺寸"],
["Page Size", "页面尺寸"],
["Paper Size", "纸张尺寸"],
["Media Type", "纸张类型"],
["Paper Type", "纸张类型"],
["Input Slot", "进纸来源"],
["Paper Source", "纸张来源"],
["Media Source", "纸张来源"],
["Output Bin", "出纸槽"],
["Output Tray", "出纸托盘"],
["Duplex Printing", "双面打印"],
["Two-Sided Printing", "双面打印"],
["2-Sided Printing", "双面打印"],
["Double-Sided Printing", "双面打印"],
["Print Quality", "打印质量"],
["Printout Mode", "打印模式"],
["Output Mode", "输出模式"],
["Color Mode", "色彩模式"],
["Color Model", "色彩模型"],
["Color Correction", "色彩校正"],
["Color Management", "色彩管理"],
["Resolution", "分辨率"],
["Copies", "份数"],
["Collate", "逐份打印"],
["Orientation", "方向"],
["Scaling", "缩放"],
["Fit to Page", "适合页面"],
["Page Region", "页面区域"],
["Page Border", "页面边框"],
["Page Order", "页面顺序"],
["Mirror Print", "镜像打印"],
["Toner Save", "省粉模式"],
["Ink/Toner Save", "省墨/省粉模式"],
["Economy Mode", "经济模式"],
["Draft Mode", "草稿模式"],
["Print Density", "打印浓度"],
["Density", "浓度"],
["Darkness", "深浅"],
["Brightness", "亮度"],
["Contrast", "对比度"],
["Saturation", "饱和度"],
["Gamma", "伽马"],
["Halftoning", "半色调"],
["Image Quality", "图像质量"],
["Installed Memory", "已安装内存"],
["Optional Tray", "可选纸盒"],
["Long-Edge", "长边"],
["Short-Edge", "短边"],
["one-sided", "单面"],
["two-sided-long-edge", "双面(长边翻转)"],
["two-sided-short-edge", "双面(短边翻转)"],
["job-sheets", "作业封面"],
["media", "纸张"],
["sides", "双面设置"]
];
function trimText(text) {
return text.replace(/^\s+|\s+$/g, "");
}
function localizeText(text) {
var core = trimText(text);
var localized = core;
var i;
if (!core) {
return text;
}
if (exact[core]) {
localized = exact[core];
} else {
for (i = 0; i < phrases.length; i++) {
localized = localized.split(phrases[i][0]).join(phrases[i][1]);
}
}
if (localized === core) {
return text;
}
return text.replace(core, localized);
}
function localizeNodeText(root) {
var skip = {SCRIPT: true, STYLE: true, TEXTAREA: true, PRE: true, CODE: true};
var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
acceptNode: function (node) {
if (!node.nodeValue || !trimText(node.nodeValue)) {
return NodeFilter.FILTER_REJECT;
}
if (node.parentNode && skip[node.parentNode.nodeName]) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
});
var nodes = [];
var node;
while ((node = walker.nextNode())) {
nodes.push(node);
}
for (var i = 0; i < nodes.length; i++) {
nodes[i].nodeValue = localizeText(nodes[i].nodeValue);
}
}
function localizeControls(root) {
var selects = root.querySelectorAll("select");
var inputs = root.querySelectorAll("input[type=submit], input[type=button], input[type=reset], button");
var i;
var j;
var select;
for (i = 0; i < selects.length; i++) {
select = selects[i];
if ((select.id && select.id.indexOf("select-") === 0) || select.name === "OP") {
for (j = 0; j < select.options.length; j++) {
select.options[j].text = localizeText(select.options[j].text);
}
}
}
for (i = 0; i < inputs.length; i++) {
if (inputs[i].value) {
inputs[i].value = trimText(localizeText(inputs[i].value));
}
}
}
function localizeSafeTextBlocks(root) {
var blocks = root.querySelectorAll("h1, h2, h3, th, .title, .header a, .tabs label");
var cells = root.querySelectorAll("td");
var i;
for (i = 0; i < blocks.length; i++) {
localizeNodeText(blocks[i]);
}
for (i = 0; i < cells.length; i++) {
if (/^\s*(job-sheets|media|sides)=/.test(cells[i].textContent || "")) {
localizeNodeText(cells[i]);
}
}
}
localizeSafeTextBlocks(document);
localizeControls(document);
})();
//--></script>
<script src="/cups-zh-localize.js" type="text/javascript"></script>
<div class="footer">CUPS 和 CUPS 标志是 <a href="http://www.apple.com">Apple Inc.</a> 的商标 | 中文汉化版</div>
</body>
</html>

View File

@@ -930,6 +930,38 @@ install_drivers() {
fi
}
# 安装中文首页
install_chinese_docroot() {
local source_dir="$1"
local docroot_dir="/usr/share/cups/doc-root"
if [ ! -d "$source_dir" ]; then
return 0
fi
if [ ! -d "$docroot_dir" ]; then
warn "未找到 CUPS 静态页面目录,跳过中文首页安装"
return 0
fi
if [ -f "$docroot_dir/index.html" ] && [ ! -f "$docroot_dir/index.html.en-backup" ]; then
cp -f "$docroot_dir/index.html" "$docroot_dir/index.html.en-backup"
info "已备份原英文首页到 index.html.en-backup"
fi
local copied=0
local f
for f in "$source_dir"/*.html "$source_dir"/*.js; do
[ -f "$f" ] || continue
cp -f "$f" "$docroot_dir/"
copied=$((copied + 1))
done
if [ "$copied" -gt 0 ]; then
success "CUPS 中文首页和前端汉化脚本已安装"
fi
}
# 安装中文界面模板
install_chinese_templates() {
info "安装 CUPS 中文界面模板..."
@@ -944,6 +976,7 @@ install_chinese_templates() {
info "从本地复制中文模板..."
mkdir -p "$templates_dir"
cp -f "$SCRIPT_DIR/cups-templates-zh_CN/"*.tmpl "$templates_dir/"
install_chinese_docroot "$SCRIPT_DIR/cups-docroot-zh_CN"
success "中文界面模板安装完成(本地)"
else
# 从当前仓库下载模板(使用 zip 包方式,更可靠)
@@ -965,6 +998,10 @@ install_chinese_templates() {
mkdir -p "$templates_dir"
cp -f "$extracted_dir"/*.tmpl "$templates_dir/"
local count=$(ls "$templates_dir"/*.tmpl 2>/dev/null | wc -l)
local extracted_docroot=$(find . -type d -name "cups-docroot-zh_CN" 2>/dev/null | head -1)
if [ -n "$extracted_docroot" ] && [ -d "$extracted_docroot" ]; then
install_chinese_docroot "$extracted_docroot"
fi
success "中文界面模板安装完成(已安装 $count 个文件)"
else
warn "解压后未找到模板目录"
@@ -1670,6 +1707,8 @@ uninstall() {
rm -rf /usr/share/cups/templates-zh_CN
rm -rf /usr/share/cups/templates-zh
rm -rf /usr/share/cups/templates-en-backup
rm -f /usr/share/cups/doc-root/index.html.en-backup
rm -f /usr/share/cups/doc-root/cups-zh-localize.js
rm -rf /opt/cups-driver-manager
rm -rf /opt/cups-watchdog
rm -rf /etc/cups-watchdog