fix: 补全 CUPS Web 汉化
This commit is contained in:
@@ -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 连接到服务器
|
||||
|
||||
421
cups-docroot-zh_CN/cups-zh-localize.js
Normal file
421
cups-docroot-zh_CN/cups-zh-localize.js
Normal 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);
|
||||
})();
|
||||
52
cups-docroot-zh_CN/index.html
Normal file
52
cups-docroot-zh_CN/index.html
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user