Compare commits

...
16 Commits
Author SHA1 Message Date
alam00000 0a3dd8e48f Host funding manifest on bentopdf.com for FLOSS/fund 2026-11-02 20:10:15 +05:30
alam00000 72b70be757 Add funding.json and funding manifest URL for project sponsorship 2026-11-02 19:49:39 +05:30
alam00000 f638f8e4db Release v2.8.11 2026-10-31 16:50:27 +05:30
Alam 24b060a134 Merge pull request #919 from kelseyjmw/fix-crop-scroll
Fix crop scroll
2026-10-31 16:38:58 +05:30
alam00000 6dca41aeb4 revert ICLA.md changes 2026-10-31 16:26:50 +05:30
alam00000 2a8ce12b6e add support for GFM inline math delimiters 2026-10-31 16:16:23 +05:30
Alam d03594a09d Merge pull request #964 from alam00000/chore/update-pdf-engine
build(deps): bump PDF engine and viewer to 3f6b6114b166
2026-10-31 16:03:14 +05:30
alam00000 d4e270a061 build(deps): bump PDF engine and viewer to 3f6b6114b166 2026-10-31 10:24:04 +00:00
Alam f0dd9b7153 Merge pull request #953 from alam00000/dependabot/npm_and_yarn/follow-redirects-1.16.2
build(deps): bump follow-redirects from 1.16.1 to 1.16.2
2026-10-31 15:26:30 +05:30
Alam af0d1caaf7 Merge pull request #950 from PeterDaveHello/zh-TW
Improve Traditional Chinese (zh-TW) translations
2026-10-31 15:26:14 +05:30
alam00000 d79f875ac3 Merge branch 'main' into zh-TW 2026-10-31 15:18:32 +05:30
Alam 3426da5c10 Merge pull request #961 from alam00000/ads-checkout
Ads checkout
2026-10-31 14:36:18 +05:30
dependabot[bot] 1e663cbe6c build(deps): bump follow-redirects from 1.16.1 to 1.16.2
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.16.1 to 1.16.2.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.16.1...v1.16.2)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-26 09:32:01 +00:00
Peter Dave Hello 57b6fe8b15 Improve Taiwanese Chinese translations
Align zh-TW strings with the English sources and use natural Taiwanese
terminology throughout the website and PDF viewer locale resources.
Add missing merge-tool messages and clarify signing, annotations,
accessibility descriptions, and page controls.
2026-10-24 01:16:02 +08:00
Kelsey White a25c6511ce Signed ICLA.md 2026-10-16 13:19:17 -03:00
Kelsey White 6d8ef7d694 Fix for issue 903: Crop tool now moves page focus to top after use 2026-10-16 13:09:32 -03:00
20 changed files with 419 additions and 265 deletions
+1
View File
@@ -1 +1,2 @@
https://www.bentopdf.com/funding.json
https://bentopdf.com/funding.json
+2 -2
View File
@@ -7,10 +7,10 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.0.9
version: 1.0.10
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: '2.8.10'
appVersion: '2.8.11'
+10 -10
View File
@@ -37,8 +37,8 @@
"@types/node-forge": "^1.3.14",
"@types/papaparse": "^5.5.2",
"archiver": "^7.0.1",
"bentopdf-pdfium": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-1b5d842415eb.tgz",
"bentopdf-viewer": "file:vendor/bentopdf-viewer/bentopdf-viewer-1b5d842415eb.tgz",
"bentopdf-pdfium": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-3f6b6114b166.tgz",
"bentopdf-viewer": "file:vendor/bentopdf-viewer/bentopdf-viewer-3f6b6114b166.tgz",
"blob-stream": "^0.1.3",
"bwip-js": "^4.8.0",
"cropperjs": "^1.6.2",
@@ -4529,15 +4529,15 @@
"license": "MIT"
},
"node_modules/bentopdf-pdfium": {
"version": "0.0.0-1b5d842415eb",
"resolved": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-1b5d842415eb.tgz",
"integrity": "sha512-ZAz/FD/hbctwtX51mp8OoSy1BrUUNAEr7+ckHvNQ8iru15Bw25VNm/Up3eDHEeh7RPlFt6QnfpnNdXyRICUzkw==",
"version": "0.0.0-3f6b6114b166",
"resolved": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-3f6b6114b166.tgz",
"integrity": "sha512-KedXrcBtrLgR9JMWi9odfz+oMeOHPcPWvn9fevOaNAZA6eMmYOYUOT3EzZeZVqytX7GoZ5A63nuYuPSrBUJfCw==",
"license": "AGPL-3.0"
},
"node_modules/bentopdf-viewer": {
"version": "2.9.1",
"resolved": "file:vendor/bentopdf-viewer/bentopdf-viewer-1b5d842415eb.tgz",
"integrity": "sha512-onUkB/YclMzmOObjlDBzHsb7ZYScV6d6v7WC3x0JHbEY0vzyQb1CbDczhORueSTnnTEdRh4tLv9P9XoT19c80A==",
"resolved": "file:vendor/bentopdf-viewer/bentopdf-viewer-3f6b6114b166.tgz",
"integrity": "sha512-2sL3JXDeHW5MID3Hw3zxdMjkzMgoPNiERarAsjiJ+w8j2hd6sK7o4gkn0KuEPkgIxwuH3RSlRatqG7fxcNDKpA==",
"license": "MIT",
"dependencies": {
"preact": "^10.17.0",
@@ -6709,9 +6709,9 @@
}
},
"node_modules/follow-redirects": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz",
"integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==",
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.2.tgz",
"integrity": "sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==",
"funding": [
{
"type": "individual",
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "bento-pdf",
"private": true,
"version": "2.8.10",
"version": "2.8.11",
"license": "AGPL-3.0-only",
"type": "module",
"scripts": {
@@ -101,8 +101,8 @@
"@types/node-forge": "^1.3.14",
"@types/papaparse": "^5.5.2",
"archiver": "^7.0.1",
"bentopdf-pdfium": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-1b5d842415eb.tgz",
"bentopdf-viewer": "file:vendor/bentopdf-viewer/bentopdf-viewer-1b5d842415eb.tgz",
"bentopdf-pdfium": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-3f6b6114b166.tgz",
"bentopdf-viewer": "file:vendor/bentopdf-viewer/bentopdf-viewer-3f6b6114b166.tgz",
"blob-stream": "^0.1.3",
"bwip-js": "^4.8.0",
"cropperjs": "^1.6.2",
+2
View File
@@ -0,0 +1,2 @@
https://www.bentopdf.com/funding.json
https://bentopdf.com/funding.json
+123
View File
@@ -0,0 +1,123 @@
{
"$schema": "https://fundingjson.org/schema/v1.1.0.json",
"version": "v1.1.0",
"entity": {
"type": "organisation",
"role": "owner",
"name": "BentoPDF",
"email": "contact@bentopdf.com",
"description": "BentoPDF is building an independent, open source document technology ecosystem. Our goal is to replace the external dependencies behind PDF processing and document understanding with engines we develop and maintain ourselves: Kura for PDF processing, standards and preflight, Hyper Compress for compression, and BentoParse, a lightweight document understanding engine that runs fully offline on ordinary CPUs (not yet public). BentoPDF, our browser based PDF toolkit, is the application through which these engines reach users.\n\nOur software runs locally, including in the browser through WebAssembly, so documents never have to leave the user's device. BentoPDF, Kura and Hyper Compress are licensed under AGPL-3.0, and the work is sustained by commercial licenses sold to companies that embed them in closed-source products, alongside community sponsorships.",
"webpageUrl": {
"url": "https://www.bentopdf.com",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
}
},
"projects": [
{
"guid": "bentopdf",
"name": "BentoPDF",
"description": "BentoPDF is a privacy first PDF toolkit with 100+ tools that run entirely in the browser: merge, split, compress, edit, sign, OCR, convert and more, with no uploads, no accounts and no task limits. Files are processed on the user's device through WebAssembly, and BentoPDF is the application through which our own engines reach users. Hyper Compress already powers its compression tool.\n\nIt can be self hosted with a single Docker command, including in air gapped environments, which makes it a fit for people and organisations that cannot send documents to third party servers. BentoPDF has over 15 million Docker downloads, more than 16,000 GitHub stars and 1,400 forks, and its interface is available in 24 languages.",
"webpageUrl": {
"url": "https://www.bentopdf.com",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf",
"wellKnown": "https://github.com/alam00000/bentopdf/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"privacy",
"productivity",
"document-processing",
"webassembly",
"self-hosted",
"security"
]
},
{
"guid": "kura",
"name": "Kura",
"description": "Kura is an independent engine for PDF processing, conversion, repair, archival, standards validation and print preflight. One engine covers all eleven PDF/A levels, PDF/UA-1 and UA-2, PDF/X-1a through X-6, PDF/E-1 and PDF/VT, plus Factur-X, ZUGFeRD, XRechnung and Order-X e-invoices. It repairs what is wrong, embeds what is missing, and runs 396 bundled preflight profiles covering print checks such as hairlines, rich black, image resolution, overprint, transparency and fonts.\n\nWhere existing tools split this work across renderers, converters and separate validators, Kura brings it into one engine that ships as a CLI, a C library, an npm package, a Docker image and a WebAssembly build that runs entirely in the browser.",
"webpageUrl": {
"url": "https://www.bentopdf.com/kura",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf-kura",
"wellKnown": "https://github.com/alam00000/bentopdf-kura/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"pdf-a",
"accessibility",
"archival",
"preflight",
"e-invoicing",
"publishing",
"webassembly"
]
},
{
"guid": "hyper-compress",
"name": "Hyper Compress",
"description": "Hyper Compress is a PDF compression engine built around verified transformations and document fidelity. It offers a true lossless mode and visual preserving presets, verifies every change that can affect how a page looks and rolls it back when the check fails, and never returns a file larger than the original.\n\nBenchmarked against Ghostscript, MuPDF and qpdf on 2,104 real world PDFs (27,352 engine runs), it achieved median size reductions of 22.4% in lossless mode and 52.3% at the 300 DPI preset, with the lowest corruption rate of any engine measured. It ships as a CLI, Node SDK, C library, self hosted service and a WebAssembly build that runs in the browser.",
"webpageUrl": {
"url": "https://www.bentopdf.com/hyper-compress",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf-hyper-compress",
"wellKnown": "https://github.com/alam00000/bentopdf-hyper-compress/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"compression",
"document-processing",
"webassembly",
"storage",
"privacy"
]
}
],
"funding": {
"channels": [
{
"guid": "bank-transfer",
"type": "bank",
"address": "",
"description": "International bank transfer. Account details are shared privately on request."
},
{
"guid": "github-sponsors",
"type": "payment-provider",
"address": "https://github.com/sponsors/alam00000"
}
],
"plans": [
{
"guid": "core-development",
"status": "active",
"name": "Core development and maintenance",
"description": "Funds sustained engineering time on Kura, Hyper Compress and BentoParse, and on BentoPDF as the application that brings them to users: new engine capabilities, standards coverage, security and bug fixes, benchmarks, WebAssembly builds, and reviewing issues and pull requests.",
"amount": 50000,
"currency": "USD",
"frequency": "yearly",
"channels": ["bank-transfer"]
},
{
"guid": "community-sponsorship",
"status": "active",
"name": "Community sponsorship",
"description": "Any amount, one-time or recurring, through GitHub Sponsors.",
"amount": 0,
"currency": "USD",
"frequency": "monthly",
"channels": ["github-sponsors"]
}
]
}
}
+17 -17
View File
@@ -26,7 +26,7 @@
"startUsing": "立刻開始使用"
},
"usedBy": {
"title": "被下列公司及其員工採用"
"title": "下列公司及其員工都在使用"
},
"features": {
"title": "為何您該選擇",
@@ -59,7 +59,7 @@
"tools": {
"title": "立即開始使用",
"toolsLabel": "PDF 工具",
"subtitle": "點選任意工具即可開啟檔案上傳器",
"subtitle": "點選工具即可開啟檔案上傳介面",
"searchPlaceholder": "搜尋工具(例如「分割」或「整理」…)",
"backToTools": "回到工具清單",
"firstLoadNotice": "首次載入需要一點時間,因為我們正在下載轉換引擎。之後所有載入將即時完成。"
@@ -135,7 +135,7 @@
"export": "匯出",
"resetToDefaults": "還原為預設值",
"fullWidthMode": "全寬模式",
"fullWidthDescription": "使用全螢幕寬度而非置中容器顯示所有工具",
"fullWidthDescription": "取消版面寬度限制,讓所有工具使用頁面的完整可用寬度",
"compactMode": "精簡模式",
"compactModeDescription": "以精簡清單取代卡片顯示工具",
"advancedSettings": "進階設定",
@@ -176,7 +176,7 @@
},
"ccpa": {
"title": "符合 CCPA 規範",
"description": "賦予加州居民對其個人資料如何被蒐集、使用及分享的權利。"
"description": "保障加州居民對其個人資料蒐集、使用及分享方式的相關權利。"
},
"hipaa": {
"title": "符合 HIPAA 規範",
@@ -189,7 +189,7 @@
"sectionTitle": "常見問題",
"isFree": {
"question": "BentoPDF 真的是免費的嗎?",
"answer": "是的,完全免費。BentoPDF 上的所有工具皆為 100% 免費使用,並且沒有檔案大小或數量限制、無需註冊,也沒有任何浮水印。我們相信每個人都應該享有簡單且強大的免費 PDF 工具。"
"answer": "是的,完全免費。BentoPDF 上的所有工具皆可完全免費使用,沒有檔案限制、無需註冊,也不會加上浮水印。我們相信每個人都應該能使用簡單而強大的 PDF 工具,不受付費牆限制。"
},
"areFilesSecure": {
"question": "我的檔案安全嗎?它們是在哪裡進行處理的?",
@@ -201,7 +201,7 @@
},
"gdprCompliant": {
"question": "BentoPDF 符合 GDPR 規範嗎?",
"answer": "是的。BentoPDF 完全符合 GDPR 規範。由於所有檔案處理都在您的瀏覽器本機進行,且我們絕不蒐集或傳送您的檔案到任何伺服器,我們完全無法存取您的資料。這確保您的文件永遠處於您的掌控之中。"
"answer": "是的,BentoPDF 完全符合 GDPR 規範。所有檔案都直接在本機瀏覽器中處理,我們絕不蒐集檔案或將檔案傳送至任何伺服器,因此無法存取您的資料。文件始終由您掌控。"
},
"dataStorage": {
"question": "你們會儲存或追蹤我的檔案嗎?",
@@ -213,7 +213,7 @@
},
"browserBased": {
"question": "瀏覽器端(本機)處理如何確保我的安全?",
"answer": "透過完全在您的瀏覽器內運作,BentoPDF 可確保您的檔案絕不離開您的裝置。這徹底消除了伺服器遭駭、資料外洩與未授權存取的風險。您的檔案永遠只屬於您自己。"
"answer": "BentoPDF 完全在瀏覽器中執行,確保檔案絕不離開裝置。這能消除伺服器遭駭、資料外洩或未經授權存取的風險。檔案始終屬於您。"
},
"analytics": {
"question": "BentoPDF 會使用 Cookie 或網站分析工具追蹤我嗎?",
@@ -227,7 +227,7 @@
},
"support": {
"title": "喜歡我的作品嗎?",
"description": "BentoPDF 是一個出於熱情開發的專案,為每個人提供一個免費、注重隱私且強大的 PDF 工具組。如果有幫上您的忙,請考慮支援它的開發。每杯咖啡都意義重大!",
"description": "BentoPDF 是一個出於熱情開發的專案,為每個人提供一個免費、注重隱私且強大的 PDF 工具箱。如果有幫上您的忙,請考慮贊助開發工作。每杯咖啡都能幫上忙!",
"buyMeCoffee": "買杯咖啡給我"
},
"footer": {
@@ -256,7 +256,7 @@
"howItWorks": "使用說明:",
"fileModeInstructions": [
"拖曳圖示以調整檔案順序。",
"在每個檔案的「頁數」輸入框中,您可以指定要合併的特定頁面範圍(例如「1-3, 5」)。",
"在每個檔案的「Pages(頁面)」輸入框中,您可以指定要合併的頁面範圍(例如「1-3, 5」)。",
"留空則會包含該檔案的所有頁面。"
],
"pageModeInstructions": [
@@ -289,7 +289,7 @@
"about": {
"hero": {
"title": "我們相信 PDF 工具應該",
"subtitle": "快速、私密且免費。",
"subtitle": "快速、注重隱私且免費。",
"noCompromises": "絕不妥協。"
},
"mission": {
@@ -300,25 +300,25 @@
"philosophy": {
"label": "我們的核心理念",
"title": "隱私至上,始終如一。",
"description": "在個人資料被商品化的時代,我們採取截然不同的做法。所有 BentoPDF 工具的處理流程皆在您的瀏覽器本機完成。這代表您的檔案絕不會觸及我們的伺服器,我們無法查看您的文件內容,更不會追蹤您的行為。您的文件將始終保持絕對的私密性。這不僅是一項功能,更是我們的立身之本。"
"description": "所有 BentoPDF 工具都在本機瀏覽器中執行。檔案絕不上傳,其他人無法查看文件內容,也不會有任何機制追蹤操作。"
},
"whyBentopdf": {
"title": "為何選擇",
"speed": {
"title": "極速處理",
"description": "無需等待檔案上傳與下載至伺服器。透過在您的瀏覽器中使用 WebAssembly 等現代網頁技術來處理檔案,我們得以提供所有工具無與倫比的處理速度。"
"description": "無需將檔案上傳至伺服器或從伺服器下載。檔案直接在瀏覽器中透過 WebAssembly 處理,因此不必等待伺服器回應。"
},
"free": {
"title": "完全免費",
"description": "沒有試用期、訂閱制、隱藏費用,也不會將「進階」功能封鎖在付費牆後。我們相信強大的 PDF 工具應該是每個人都能享有的公共設施,而非營利手段。"
"description": "所有工具皆可免費使用,沒有試用期、訂閱制,也不會加上浮水印。開發經費來自商業授權收入。"
},
"noAccount": {
"title": "無需註冊帳號",
"description": "立即開始使用任何工具。我們不需要您的電子郵件、密碼或任何個人資料。您的工作流程應當匿名且順暢無阻。"
"description": "開啟任何工具即可立即使用,無需提供電子郵件、密碼或任何個人資料。"
},
"openSource": {
"title": "開放原始碼精神",
"description": "以透明度為核心打造。我們採用了如 PDF-lib 和 PDF.js 等優秀的開放原始碼函式庫,並深信社群驅動的力量能讓強大的工具造福每一個人。"
"title": "開放原始碼",
"description": "程式碼以 AGPL-3.0 授權條款公開於 GitHub,可檢查檔案的實際處理方式。BentoPDF 以 PDF.js、pdf-lib、qpdf 和 LibreOffice 等開放原始碼專案為基礎。"
}
},
"cta": {
@@ -350,7 +350,7 @@
"rotate": "旋轉:",
"rotateLeft": "向左",
"rotateRight": "向右",
"transform": "轉換:",
"transform": "操作:",
"duplicate": "複製",
"split": "分割",
"clear": "清除:",
+123 -123
View File
@@ -7,7 +7,7 @@
"convertFromPdf": "從 PDF 轉換",
"organizeManage": "整理與管理",
"optimizeRepair": "最佳化與修復",
"securePdf": "安全 PDF",
"securePdf": "保護 PDF",
"input": "輸入",
"output": "輸出"
},
@@ -27,21 +27,21 @@
"name": "合併 PDF",
"subtitle": "將多個 PDF 合併為一個檔案。保留書籤。",
"retainPageLabels": "保留每個檔案的原始頁面標籤",
"retainPageLabelsHint": "關閉(預設):合併後的 PDF 使用自然頁碼 1–N。開啟:保留每個檔案的原始頁面標籤(可能產生重複的標籤)。",
"retainPageLabelsHint": "關閉(預設):合併後的 PDF 頁碼會依序編為 1–N。開啟:保留每個檔案的原始頁面標籤(可能產生重複的標籤)。",
"removeDuplicateFonts": "移除重複字型",
"alert": {
"thumbnailError": "無法轉譯頁面縮圖",
"noSelection": "未選取要合併的檔案或頁面。",
"thumbnailError": "無法繪製頁面縮圖。",
"noSelection": "尚未選取要合併的檔案或頁面。",
"mergeSuccess": "PDF 合併成功!",
"mergeFailed": "PDF 合併失敗。",
"mergeError": "PDF 合併失敗。請確認所有檔案皆有效且未受密碼保護。",
"workerError": "合併程序發生未預期的錯誤。",
"loadError": "無法載入一個或多個 PDF 檔案"
"mergeFailed": "無法合併 PDF。",
"mergeError": "無法合併 PDF。請確認所有檔案均有效且未受密碼保護。",
"workerError": "合併 Worker 發生未預期的錯誤。",
"loadError": "無法載入一或多個 PDF 檔案。"
},
"loader": {
"renderingPreviews": "正在轉譯頁面預覽...",
"merging": "正在合併 PDF...",
"loadingDocuments": "正在載入 PDF 文件..."
"renderingPreviews": "正在繪製頁面預覽…",
"merging": "正在合併 PDF…",
"loadingDocuments": "正在載入 PDF 文件…"
}
},
"splitPdf": {
@@ -50,26 +50,26 @@
},
"compressPdf": {
"name": "壓縮 PDF",
"subtitle": "降低您的 PDF 檔案大小。"
"subtitle": "縮小 PDF 檔案大小。"
},
"pdfEditor": {
"name": "PDF 編輯器",
"subtitle": "註解、螢光標註、塗黑、評論、新增圖形或圖片、搜尋與檢視 PDF。"
"subtitle": "標註、螢光標註、塗黑、註解、新增圖形或圖片、搜尋與檢視 PDF。"
},
"editPdfText": {
"name": "編輯 PDF 文字",
"subtitle": "點擊任意段落即可就地編輯,支援即時重排、字型與樣式設定。",
"subtitle": "點選任意段落即可直接編輯,支援即時重新排版、字型與樣式設定。",
"saved": "PDF 儲存成功!({{size}} KB)",
"failedToLoad": "無法載入 PDF 文字編輯器。",
"loadingFonts": "正在載入字型…",
"fontsUnavailable": "無法下載部分字元所需的字型。請檢查網路連線後再試一次,否則這些字元在儲存的 PDF 中可能無法正確顯示。",
"howToUpload": "上傳 PDF",
"howToClick": "點擊段落",
"howToClick": "點選段落",
"howToRestyle": "隨意變更樣式",
"relatedPdfEditor": "為 PDF 加上註解與標記",
"relatedSignPdf": "手寫、輸入或上傳簽名",
"relatedWatermark": "疊加文字或圖片",
"relatedStamps": "在頁面上加入印章",
"relatedSignPdf": "繪製、輸入或上傳簽名",
"relatedWatermark": "加上文字或圖片浮水印",
"relatedStamps": "在頁面上新增印章",
"relatedCompress": "縮小檔案大小",
"relatedOrganizeName": "整理 PDF",
"relatedOrganize": "重新排序與管理頁面",
@@ -78,15 +78,15 @@
"filterAll": "全部",
"filterText": "文字",
"filterImages": "圖片",
"filterShapes": "形狀",
"addText": "加入文字",
"filterShapes": "圖形",
"addText": "新增文字",
"langAuto": "自動",
"change": "變更",
"ignore": "忽略",
"next": "下一個",
"replace": "取代",
"replaceAll": "全部取代",
"emptyState": "開啟 PDF 即可編輯其中的文字、圖片與形狀。",
"emptyState": "開啟 PDF 即可編輯其中的文字、圖片與圖形。",
"choosePdf": "選擇 PDF…",
"font": "字型",
"systemFonts": "系統字型",
@@ -99,18 +99,18 @@
"direction": "方向",
"dirAuto": "自動",
"pathStroke": "路徑筆畫",
"tipBackToUpload": "返回上傳",
"tipBackToUpload": "回到上傳畫面",
"tipOpenAnotherPdf": "開啟其他 PDF",
"tipExportS": "匯出 (⌘S)",
"tipUndoZ": "復原 (⌘Z)",
"tipRedoZ": "重做 (⇧⌘Z)",
"tipExportS": "匯出(⌘S)",
"tipUndoZ": "復原(⌘Z)",
"tipRedoZ": "重做(⇧⌘Z)",
"tipFileDetails": "檔案詳細資料",
"tipEditExistingContent": "編輯現有內容",
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "編輯工具的作用範圍:在內容密集的頁面上縮小範圍",
"tipClickThePageToAddATextBox": "點擊頁面以加入文字方塊",
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "頁面內容繁多時,可縮小編輯工具的作用範圍",
"tipClickThePageToAddATextBox": "點選頁面以新增文字方塊",
"tipSpellCheckLanguage": "拼字檢查語言",
"tipFindAndReplace": "尋找與取代",
"tipAddAnImage": "加入圖片",
"tipAddAnImage": "新增圖片",
"tipCopyThisPageSTextInReadingOrder": "依閱讀順序複製本頁文字",
"tipCheckTheSpellingOfThisPage": "檢查本頁拼字",
"tipShowOrHideTheFormatPanel": "顯示或隱藏格式面板",
@@ -130,9 +130,9 @@
"tipSendToBack": "移至最下層",
"tipDuplicate": "複製",
"tipDelete": "刪除",
"tipAlignLeftEdges": "靠左邊緣對齊",
"tipAlignLeftEdges": "靠左對齊",
"tipAlignHorizontalCenters": "水平置中對齊",
"tipAlignRightEdges": "靠右邊緣對齊",
"tipAlignRightEdges": "靠右對齊",
"tipAlignTops": "靠上對齊",
"tipAlignVerticalCenters": "垂直置中對齊",
"tipAlignBottoms": "靠下對齊",
@@ -152,13 +152,13 @@
"tipSuperscript": "上標",
"tipSubscript": "下標",
"tipToggleBulletedItem": "切換項目符號",
"tipToggleNumberedItem": "切換編號項目",
"tipToggleNumberedItem": "切換項目編號",
"tipNumberedListMarkerStyle": "編號清單標記樣式",
"tipDecreaseListIndentTab": "減少縮排 (⇧Tab)",
"tipIncreaseListIndentTab": "增加縮排 (Tab)",
"tipDecreaseListIndentTab": "減少清單縮排(⇧Tab)",
"tipIncreaseListIndentTab": "增加清單縮排(Tab)",
"tipTextOutlineColor": "文字外框顏色",
"tipOutlineWidth0None": "外框寬度(0 = 無)",
"tipFromContent": "來自內容",
"tipFromContent": "依內容決定",
"tipLeftToRight": "由左至右",
"tipRightToLeft": "由右至左",
"tipStrokeColor": "筆畫顏色",
@@ -191,7 +191,7 @@
"subtitle": "將選取的頁面儲存為新的檔案。"
},
"duplicateOrganize": {
"name": "複製與組織",
"name": "複製與整理",
"subtitle": "複製、重新排序與刪除頁面。",
"saveChanges": "儲存變更"
},
@@ -219,8 +219,8 @@
"addBookmark": "為目錄頁新增書籤",
"generateButton": "產生目錄",
"selectPdfFirst": "請先選擇 PDF 檔案。",
"statusReadingFileMainThread": "正在讀取檔案(主執行緒)...",
"statusGenerating": "正在產生目錄...",
"statusReadingFileMainThread": "正在讀取檔案(主執行緒)…",
"statusGenerating": "正在產生目錄…",
"errorReadingFileWithMessage": "讀取檔案時發生錯誤:{{message}}",
"successGeneratedDownloadStarted": "目錄產生成功!下載已開始。",
"workerErrorWithMessage": "錯誤:{{message}}",
@@ -238,11 +238,11 @@
"howLabelsWorkStep1": "將頁面範圍留空即可為所有頁面套用標籤。",
"howLabelsWorkStep2": "前置頁可使用羅馬數字,正文則可使用十進位編號等樣式。",
"howLabelsWorkStep3": "將前綴搭配起始值 0,可建立像 A-0、A-1、A-2 這樣的標籤。",
"howLabelsWorkStep4": "當規則使用 1-9,30-40 或 odd 等不連續範圍時,請啟用連續編號。",
"howLabelsWorkStep4": "當規則使用 1-9,30-40 或 odd 等不連續範圍時,請啟用持續編號。",
"labelRulesTitle": "標籤規則",
"addRule": "新增規則",
"removeExistingLabels": "套用這些規則前先移除現有頁面標籤",
"cpdfNote": "此工具會在您的瀏覽器中使用 CoherentPDF。若 CoherentPDF 尚未設定,系統會提示您在 WASM 設定中完成設定。",
"cpdfNote": "此工具會在您的瀏覽器中使用 CoherentPDF。若 CoherentPDF 尚未設定,系統會提示您在 [進階功能設定] 中完成設定。",
"processButton": "新增頁面標籤",
"howItWorksUploadTitle": "上傳檔案",
"howItWorksUploadDescription": "選擇您要重新標記的 PDF 檔案。",
@@ -254,30 +254,30 @@
"faqWhatIsQuestion": "什麼是頁面標籤?",
"faqWhatIsAnswer": "頁面標籤是 PDF 閱讀器在縮圖、頁面導覽與列印對話框中顯示的編號。它不會在頁面本身額外列印新文字。",
"faqMixQuestion": "我可以混用羅馬數字和一般數字嗎?",
"faqMixAnswer": "可以。請新增多條規則,例如將 1-4 設為 LowercaseRoman,並將 5-20 設為 DecimalArabic。",
"faqMixAnswer": "可以。請新增多條規則,例如將 1-4 設為 [小寫羅馬數字],並將 5-20 設為 [十進位數字]。",
"faqPrivacyQuestion": "我的檔案會保持私密嗎?",
"faqPrivacyAnswer": "會。處理程序會在您的瀏覽器中使用 CoherentPDF WASM 完成,PDF 不會離開您的裝置。",
"invalidFileTitle": "無效檔案",
"invalidFileMessage": "請上傳有效的 PDF 檔案。",
"loadingPdf": "正在載入 PDF...",
"loadingPdf": "正在載入 PDF…",
"protectedPdfTitle": "受保護的 PDF",
"protectedPdfMessage": "此 PDF 受密碼保護。請先使用解密或變更權限工具。",
"loadErrorMessage": "無法載入 PDF 檔案。該檔案可能無效、毀損或受密碼保護。",
"fileMeta": "{{size}} • {{count}} 頁",
"ruleTitle": "標籤規則 {{number}}",
"pageRangeLabel": "頁面範圍",
"pageRangePlaceholder": "所有頁面,例如 1-4, 7, odd",
"pageRangePlaceholder": "所有頁面,或指定範圍(例如 1-4, 7, odd)",
"labelStyleLabel": "標籤樣式",
"labelPrefixLabel": "標籤前綴",
"labelPrefixPlaceholder": "選填的前綴,例如 A-",
"startValueLabel": "起始值",
"continueNumbering": "在不連續範圍中持續編號",
"examplesNote": "例如:前置頁 1-4 使用羅馬數字、15-20 使用前綴 A- 且起始值為 0,或輸入 odd 並啟用連續編號。",
"examplesNote": "例如:前置頁 1-4 使用羅馬數字、15-20 使用前綴 A- 且起始值為 0,或輸入 odd 並啟用持續編號。",
"uploadFirstMessage": "請先上傳 PDF 檔案。",
"applyingLabels": "正在套用頁面標籤...",
"applyingLabels": "正在套用頁面標籤…",
"invalidRangeMessage": "規則 {{number}} 的頁面範圍無效:{{range}}",
"allPages": "所有頁面",
"emptyOutputMessage": "CoherentPDF 產生了空白檔案。",
"emptyOutputMessage": "CoherentPDF 產生了空檔案。",
"successMessage": "頁面標籤新增成功!",
"processErrorMessage": "無法新增頁面標籤。",
"styleOptions": {
@@ -295,7 +295,7 @@
},
"addWatermark": {
"name": "新增浮水印",
"subtitle": "在您的 PDF 頁面上壓印文字或圖片。",
"subtitle": "在 PDF 頁面上加上文字或圖片浮水印。",
"applyToAllPages": "套用至所有頁面"
},
"headerFooter": {
@@ -314,7 +314,7 @@
"gray": "灰階",
"border": "邊框",
"rotate": "旋轉",
"rotateVariance": "旋轉變異",
"rotateVariance": "隨機旋轉幅度",
"brightness": "亮度",
"contrast": "對比度",
"blur": "模糊",
@@ -334,7 +334,7 @@
"temperature": "色溫",
"tint": "色調",
"gamma": "伽瑪值",
"sepia": "復古色",
"sepia": "深褐色調",
"processButton": "套用顏色調整"
},
"backgroundColor": {
@@ -355,7 +355,7 @@
},
"removeAnnotations": {
"name": "移除註解",
"subtitle": "移除留言、螢光標註與連結。"
"subtitle": "移除註解、螢光標註與連結。"
},
"pdfFormFiller": {
"name": "PDF 表單填寫器",
@@ -366,14 +366,14 @@
},
"createPdfForm": {
"name": "建立 PDF 表單",
"subtitle": "透過拖放文字框建立可填寫的 PDF 表單。",
"subtitle": "透過拖放文字欄位建立可填寫的 PDF 表單。",
"orSeparator": "或",
"createBlankPdf": "建立空白 PDF"
},
"removeBlankPages": {
"name": "移除空白頁面",
"subtitle": "自動偵測並刪除空白頁面。",
"sensitivityHint": "數值越高,判定條件越嚴格,只會偵測完全空白的頁面;數值越低,則允許頁面包含少量內容。"
"sensitivityHint": "數值越高,判定條件越嚴格,只會偵測完全空白的頁面;數值越低,則可能將含有少量內容的頁面視為空白頁。"
},
"imageToPdf": {
"name": "圖片轉 PDF",
@@ -425,10 +425,10 @@
"status": {
"selectAtLeastOne": "請至少選擇 1 個 JSON 檔案",
"selectedReady": "已選擇 {{count}} 個檔案。準備轉換!",
"readingFiles": "正在讀取檔案(主執行緒)...",
"converting": "正在將 JSON 檔案轉換為 PDF...",
"readingFiles": "正在讀取檔案(主執行緒)…",
"converting": "正在將 JSON 檔案轉換為 PDF…",
"readError": "讀取檔案時發生錯誤:{{message}}",
"creatingZip": "正在建立 ZIP 檔案...",
"creatingZip": "正在建立 ZIP 檔案…",
"success": "JSON 檔案已成功轉換為 PDF!ZIP 下載已開始。",
"zipError": "建立 ZIP 時發生錯誤:{{message}}",
"workerError": "Worker 錯誤:{{message}}",
@@ -449,7 +449,7 @@
"conversionError": "無法將 PDF 轉換為 JPG。檔案可能已損壞。"
},
"loader": {
"converting": "正在轉換為 JPG..."
"converting": "正在轉換為 JPG…"
}
},
"pdfToPng": {
@@ -466,7 +466,7 @@
"conversionError": "無法將 PDF 轉換為 PNG。檔案可能已損壞。"
},
"loader": {
"converting": "正在轉換為 PNG..."
"converting": "正在轉換為 PNG…"
}
},
"pdfToWebp": {
@@ -483,7 +483,7 @@
"conversionError": "無法將 PDF 轉換為 WebP。檔案可能已損壞。"
},
"loader": {
"converting": "正在轉換為 WebP..."
"converting": "正在轉換為 WebP…"
}
},
"pdfToBmp": {
@@ -498,7 +498,7 @@
"conversionError": "無法將 PDF 轉換為 BMP。檔案可能已損壞。"
},
"loader": {
"converting": "正在轉換為 BMP..."
"converting": "正在轉換為 BMP…"
}
},
"pdfToTiff": {
@@ -510,8 +510,8 @@
"compressionExplanation": "LZW 和 Deflate 為無損壓縮。CCITT Group 4 最適合黑白掃描文件。",
"colorMode": "色彩模式",
"multiPage": "儲存為多頁 TIFF(單一檔案)",
"loadingVips": "正在載入影像處理器...",
"converting": "正在轉換為 TIFF...",
"loadingVips": "正在載入影像處理器…",
"converting": "正在轉換為 TIFF…",
"alert": {
"invalidFile": "無效檔案",
"invalidFileExplanation": "請上傳 PDF 檔案。",
@@ -519,12 +519,12 @@
"noFileExplanation": "請先上傳 PDF 檔案。",
"conversionSuccess": "PDF 已成功轉換為 TIFF!",
"conversionError": "無法將 PDF 轉換為 TIFF。檔案可能已損壞。",
"conversionOutOfMemory": "轉換時瀏覽器記憶體不足。請嘗試降低 DPI,或取消勾選多頁 TIFF 選項以逐頁轉換。"
"conversionOutOfMemory": "轉換時瀏覽器記憶體不足。請嘗試降低 DPI,或取消勾選多頁 TIFF 選項,改為逐頁轉換。"
}
},
"pdfToCbz": {
"name": "PDF 轉 CBZ",
"subtitle": "將 PDF 轉換為 CBZ(漫畫書封存)檔案,適用於漫畫閱讀器。",
"subtitle": "將 PDF 轉換為 CBZ(漫畫封存檔),供漫畫閱讀器使用。",
"imageFormat": "圖片格式",
"quality": "圖片品質",
"qualityExplanation": "品質越高,檔案越大",
@@ -539,10 +539,10 @@
"numberLabel": "編號",
"volumeLabel": "卷",
"publisherLabel": "出版社",
"tagsLabel": "標籤 / 類型",
"tagsLabel": "標籤/類型",
"yearLabel": "出版年份",
"ratingLabel": "評分(0-5)",
"converting": "正在轉換為 CBZ...",
"converting": "正在轉換為 CBZ…",
"alert": {
"invalidFile": "無效檔案",
"invalidFileExplanation": "請上傳 PDF 檔案。",
@@ -563,11 +563,11 @@
"status": {
"selectAtLeastOne": "請至少選擇 1 個 PDF 檔案",
"selectedReady": "已選擇 {{count}} 個檔案。準備轉換!",
"checkingEncrypted": "正在檢查加密的 PDF...",
"readingFiles": "正在讀取檔案(主執行緒)...",
"converting": "正在將 PDF 轉換為 JSON...",
"checkingEncrypted": "正在檢查加密的 PDF…",
"readingFiles": "正在讀取檔案(主執行緒)…",
"converting": "正在將 PDF 轉換為 JSON…",
"readError": "讀取檔案時發生錯誤:{{message}}",
"creatingZip": "正在建立 ZIP 檔案...",
"creatingZip": "正在建立 ZIP 檔案…",
"success": "PDF 已成功轉換為 JSON!ZIP 下載已開始。",
"zipError": "建立 ZIP 時發生錯誤:{{message}}",
"workerError": "Worker 錯誤:{{message}}",
@@ -575,10 +575,10 @@
}
},
"ocrPdf": {
"name": "PDF 文字辨識 (OCR)",
"subtitle": "使 PDF 可搜尋且可複製。",
"name": "PDF 文字辨識(OCR)",
"subtitle": "讓 PDF 中的文字可供搜尋與複製。",
"languagesInDocument": "文件中的語言",
"searchLanguagesPlaceholder": "搜尋語言...",
"searchLanguagesPlaceholder": "搜尋語言…",
"selectedLabel": "已選擇:",
"none": "無",
"advancedSettingsSummary": "進階設定(建議使用,可提高準確度)",
@@ -586,22 +586,22 @@
"resolutionStandard": "標準(192 DPI)",
"resolutionHigh": "高(288 DPI)",
"resolutionUltra": "超高(384 DPI)",
"binarizeLabel": "將圖片二值化(提高對比度,改善清晰掃描文件的辨識效果)",
"binarizeLabel": "將辨識用影像轉為純黑白(提高對比度)",
"embedFullFontsLabel": "嵌入完整字型(檔案較大,相容性更好)",
"whitelistPresetLabel": "字元白名單預設組合",
"whitelistNone": "無(所有字元)",
"whitelistAlphanumeric": "字母數字 + 基本標點",
"whitelistAlphanumeric": "英數字元 + 基本標點",
"whitelistNumbersCurrency": "數字 + 貨幣符號",
"whitelistLettersOnly": "僅字母(A-Z、a-z)",
"whitelistNumbersOnly": "僅數字(0-9)",
"whitelistInvoice": "發票/收據(數字、$、.、-、/)",
"whitelistForms": "表單(字母數字 + 常用符號)",
"whitelistCustom": "自訂...",
"whitelistInvoice": "發票/收據(數字、$、.、-、/)",
"whitelistForms": "表單(英數字元 + 常用符號)",
"whitelistCustom": "自訂…",
"whitelistHelp": "系統只會辨識這些字元;若留空,則會辨識所有字元。",
"whitelistInputLabel": "字元白名單(選填)",
"whitelistInputPlaceholder": "例如:abcdefghijklmnopqrstuvwxyz0123456789$.,",
"startButton": "開始 OCR",
"progressInitializing": "正在初始化...",
"progressInitializing": "正在初始化…",
"resultsTitle": "OCR 完成",
"resultsDescription": "可搜尋的 PDF 已準備完成。也可以在下方複製或下載擷取出的文字。",
"copyToClipboard": "複製到剪貼簿",
@@ -632,11 +632,11 @@
"name": "交錯混合頁面",
"subtitle": "將每個 PDF 的頁面交錯合併。保留書籤。",
"retainPageLabels": "保留每個檔案的原始頁面標籤",
"retainPageLabelsHint": "關閉(預設):合併後的 PDF 使用自然頁碼 1–N。開啟:保留每個檔案的原始頁面標籤(可能產生重複的標籤)。"
"retainPageLabelsHint": "關閉(預設):合併後的 PDF 頁碼會依序編為 1–N。開啟:保留每個檔案的原始頁面標籤(可能產生重複的標籤)。"
},
"duplexCollate": {
"name": "雙面掃描整理",
"subtitle": "將分兩個區塊掃描的 PDF(先全部正面,再全部背面)重新排列成正確的正面/背面順序。",
"subtitle": "將分兩個區塊掃描的 PDF(先全部正面,再全部背面)重新排列成正確的正面/背面順序。",
"totalPagesLabel": "總頁數:",
"splitAfterPageLabel": "在此頁後分割",
"splitAfterPagePlaceholder": "例如 50",
@@ -644,27 +644,27 @@
"backBlockReverseOption": "反轉背面區塊(紙疊翻面掃描時常見)",
"backBlockKeepOption": "保持背面區塊原樣",
"autoSplitButton": "自動偵測分割點(對半)",
"exportGroupedLabel": "依原始文件長度分組匯出檔案",
"exportGroupedLabel": "依原始文件頁數分組匯出檔案",
"pagesPerDocumentLabel": "每份原始文件的頁數",
"groupedHelp": "啟用後,輸出為 ZIP 檔,其中每份分組文件對應一個 PDF。",
"collateButton": "整理 PDF",
"invalidFileTitle": "檔案無效",
"invalidFileMessage": "請選擇 PDF 檔案。",
"loadingPdf": "正在載入 PDF...",
"loadingPdf": "正在載入 PDF…",
"loadErrorMessage": "無法載入 PDF 檔案。",
"fileMeta": "{{size}} - {{count}} 頁",
"oddPageWarning": "頁數為奇數({{count}} 頁)。雙面掃描的頁數應為偶數,可能缺少或多出一頁。",
"previewSummary": "正面區塊:{{frontCount}} 頁,背面區塊:{{backCount}} 頁。輸出:{{outputCount}} 頁,依正面/背面順序排列。",
"previewMismatchWarning": "正面與背面區塊頁數不一致(正面 {{frontCount}} 頁,背面 {{backCount}} 頁)。較長一側多出的 {{extraCount}} 頁將不配對地附加在結尾。",
"previewSummary": "正面區塊:{{frontCount}} 頁,背面區塊:{{backCount}} 頁。輸出:{{outputCount}} 頁,依正面/背面順序排列。",
"previewMismatchWarning": "正面與背面區塊頁數不一致(正面 {{frontCount}} 頁,背面 {{backCount}} 頁)。較長一側多出的 {{extraCount}} 頁將直接附加在結尾,不另配對。",
"missingFileTitle": "缺少檔案",
"missingFileMessage": "請先上傳至少 2 頁的 PDF 再進行處理。",
"invalidSplitTitle": "分割點無效",
"invalidSplitMessage": "分割點必須介於第 1 頁與第 {{maxSplit}} 頁之間。",
"unevenConfirmTitle": "區塊不均等",
"unevenConfirmMessage": "正面區塊有 {{frontCount}} 頁,背面區塊有 {{backCount}} 頁。\n這通常表示某一頁被掃描兩次或缺失。\n\n未配對的 {{extraCount}} 頁將附加在結尾。\n\n仍要繼續嗎?",
"unevenConfirmTitle": "正反面頁數不一致",
"unevenConfirmMessage": "正面區塊有 {{frontCount}} 頁,背面區塊有 {{backCount}} 頁。\n這通常表示有頁面重複掃描或遺漏。\n\n未配對的 {{extraCount}} 頁將附加在結尾。\n\n仍要繼續嗎?",
"invalidGroupTitle": "分組大小無效",
"invalidGroupMessage": "請輸入有效的每份原始文件頁數。",
"collatingLoader": "正在整理雙面掃描...",
"collatingLoader": "正在整理雙面掃描…",
"successMessage": "已成功產生整理後的 PDF。",
"successGroupedMessage": "整理完成,已產生 {{fileCount}} 個分組檔案。",
"processErrorMessage": "無法整理 PDF。",
@@ -673,7 +673,7 @@
"howItWorksStep2Title": "設定分割點",
"howItWorksStep2": "標出正面區塊結束的位置,然後選擇背面區塊是否需要反轉。",
"howItWorksStep3Title": "整理並下載",
"howItWorksStep3": "取得一個正反交錯排列的 PDF,或一個為每份原始文件各自成檔的 ZIP。",
"howItWorksStep3": "下載正反面交錯排列的單一 PDF,或下載 ZIP 檔,其中每份原始文件各自存成一個 PDF。",
"faqOddPagesQuestion": "如果掃描檔的頁數是奇數怎麼辦?",
"faqOddPagesAnswer": "雙面掃描的頁數應為偶數。若不是,通常表示某一頁被掃描兩次或被漏掉。處理前工具會提醒你,未配對的頁面會附加在結尾,因此不會遺失任何內容。",
"faqBackOrderQuestion": "什麼情況下要保持背面區塊原樣?",
@@ -700,7 +700,7 @@
"subtitle": "在您的 PDF 中的任一位置插入空白頁面。"
},
"reversePages": {
"name": "反轉頁面",
"name": "反轉頁面順序",
"subtitle": "反轉您的文件中所有頁面的順序。"
},
"rotatePdf": {
@@ -712,12 +712,12 @@
"subtitle": "以任意自訂角度旋轉頁面。"
},
"nUpPdf": {
"name": "多頁併一頁 (N-Up)",
"name": "多頁併一頁(N-Up)",
"subtitle": "將多個頁面排列在單張紙上。"
},
"combineToSinglePage": {
"name": "合併為單一頁面",
"subtitle": "將所有頁面縫合為一個連續的捲動頁面。"
"subtitle": "將所有頁面拼接成一個可連續捲動的頁面。"
},
"viewMetadata": {
"name": "檢視中繼資料",
@@ -750,7 +750,7 @@
"rightDocument": "右側文件",
"original": "原始",
"modified": "修改後",
"searchChanges": "搜尋變更...",
"searchChanges": "搜尋變更…",
"deleted": "已刪除",
"added": "已新增",
"prevPage": "上一頁",
@@ -762,15 +762,15 @@
"noMatchingChanges": "沒有符合目前篩選條件的變更。",
"pageNotExist": "此 PDF 中不存在第 {{page}} 頁。",
"noPairedPage": "此側沒有配對頁面。",
"buildingModel": "正在建立頁面配對模型...",
"indexingPdf": "正在索引 PDF {{num}},第 {{page}} / {{total}} 頁...",
"loadingComparison": "正在載入比較 {{current}} / {{total}}...",
"runningOcr": "正在對第 {{page}} 頁執行 OCR...",
"preparingExport": "正在準備 PDF 匯出...",
"renderingPage": "正在轉譯第 {{current}} / {{total}} 頁...",
"buildingModel": "正在建立頁面配對模型…",
"indexingPdf": "正在為 PDF {{num}} 建立索引(第 {{page}} / {{total}} 頁)…",
"loadingComparison": "正在載入比較 {{current}} / {{total}}…",
"runningOcr": "正在對第 {{page}} 頁執行 OCR…",
"preparingExport": "正在準備 PDF 匯出…",
"renderingPage": "正在繪製第 {{current}} / {{total}} 頁…",
"exportError": "匯出錯誤",
"exportFailed": "無法匯出比較 PDF。",
"loadingFile": "正在載入 {{name}}...",
"loadingFile": "正在載入 {{name}}…",
"invalidFile": "無效檔案",
"invalidFileMsg": "請選擇有效的 PDF 檔案。",
"loadError": "無法載入 PDF。檔案可能已損毀或受密碼保護。"
@@ -805,7 +805,7 @@
},
"sanitizePdf": {
"name": "清理 PDF",
"subtitle": "移除中繼資料、註解、腳本與其他資料。"
"subtitle": "移除中繼資料、註解、指令碼與其他資料。"
},
"decryptPdf": {
"name": "解密 PDF",
@@ -861,7 +861,7 @@
},
"markdownToPdf": {
"name": "Markdown 轉 PDF",
"subtitle": "編寫或貼上 Markdown 並匯出為精美格式的 PDF。",
"subtitle": "編寫或貼上 Markdown 並匯出為排版精美的 PDF。",
"paneMarkdown": "Markdown",
"panePreview": "預覽",
"btnUpload": "選擇",
@@ -869,10 +869,10 @@
"btnSettings": "設定",
"btnExportPdf": "匯出 PDF",
"settingsTitle": "Markdown 設定",
"settingsPreset": "預設",
"settingsPreset": "預設組合",
"presetDefault": "預設(GFM 風格)",
"presetCommonmark": "CommonMark(嚴格)",
"presetZero": "最小(無功能)",
"presetZero": "極簡(無額外功能)",
"settingsOptions": "Markdown 選項",
"optAllowHtml": "允許 HTML 標籤",
"optBreaks": "將換行轉換為 <br>",
@@ -881,7 +881,7 @@
},
"pdfBooklet": {
"name": "PDF 小手冊",
"subtitle": "重新排列頁面以利雙面小手冊列印。折疊並裝訂以製作小手冊。",
"subtitle": "重新排列頁面,以便雙面列印後摺疊,再用訂書機裝訂成小手冊。",
"howItWorks": "運作方式:",
"step1": "上傳 PDF 檔案。",
"step2": "頁面將按小手冊順序重新排列。",
@@ -892,7 +892,7 @@
"landscape": "橫向",
"pagesPerSheet": "每張紙的頁數",
"createBooklet": "建立小手冊",
"processing": "處理中...",
"processing": "處理中…",
"pageCount": "必要時,系統會將頁數補齊為 4 的倍數。"
},
"xpsToPdf": {
@@ -1005,7 +1005,7 @@
"name": "PDF 轉文字",
"subtitle": "從 PDF 檔案擷取文字並儲存為純文字檔案(.txt)。支援多個檔案。",
"noteLabel": "注意:",
"noteText": "此工具僅適用於數位建立的 PDF。對於掃描文件或基於圖片的 PDF,請改用我們的 OCR PDF 工具。",
"noteText": "此工具僅適用於以數位方式建立的 PDF。若為掃描文件或只包含影像資料的 PDF,請改用 [PDF 文字辨識(OCR)] 工具。",
"convertButton": "擷取文字"
},
"digitalSignPdf": {
@@ -1020,7 +1020,7 @@
"certInfo": "憑證資訊",
"certSubject": "主體",
"certIssuer": "簽發者",
"certValidity": "有效",
"certValidity": "有效期限",
"signatureDetails": "簽章詳細資料(選填)",
"reason": "原因",
"reasonPlaceholder": "例如:我核准此文件",
@@ -1044,7 +1044,7 @@
"yPosition": "Y 位置(上)",
"width": "寬度",
"height": "高度",
"addTextOverlay": "新增文字覆蓋",
"addTextOverlay": "疊加文字",
"text": "文字",
"textPlaceholder": "例如:由王小明數位簽署",
"textColor": "文字顏色",
@@ -1078,7 +1078,7 @@
"howToStep3Text": "套用數位簽章並下載已簽署的 PDF",
"relatedEncryptDesc": "用密碼保護您的 PDF",
"relatedDecryptDesc": "移除 PDF 密碼",
"relatedFlattenDesc": "使註解永久化",
"relatedFlattenDesc": "將註解併入頁面內容",
"relatedSanitizeDesc": "移除隱藏資料",
"relatedPermissionsDesc": "設定 PDF 權限",
"faqWhatIsQuestion": "什麼是數位簽章?",
@@ -1110,7 +1110,7 @@
},
"emailToPdf": {
"name": "電子郵件轉 PDF",
"subtitle": "將電子郵件檔案(EML、MSG)轉換為 PDF 格式。支援 Outlook 匯出和標準電子郵件格式。",
"subtitle": "將電子郵件檔案(EML、MSG)轉換為 PDF 格式。支援 Outlook 匯出的檔案和標準電子郵件格式。",
"acceptedFormats": "EML、MSG 檔案",
"convertButton": "轉換為 PDF"
},
@@ -1148,13 +1148,13 @@
},
"rasterizePdf": {
"name": "光柵化 PDF",
"subtitle": "將 PDF 轉換為基於影像的 PDF。展平圖層並移除可選取的文字。"
"subtitle": "將 PDF 轉換為只包含圖片的 PDF,合併圖層並移除可選取的文字。"
},
"pdfWorkflow": {
"name": "PDF 工作流程建構器",
"subtitle": "使用視覺化節點編輯器建構自訂 PDF 處理管線。",
"nodes": "節點",
"searchNodes": "搜尋節點...",
"searchNodes": "搜尋節點…",
"run": "執行",
"clear": "清除",
"save": "儲存",
@@ -1163,7 +1163,7 @@
"import": "匯入",
"ready": "就緒",
"settings": "設定",
"processing": "處理中...",
"processing": "處理中…",
"saveTemplate": "儲存範本",
"templateName": "範本名稱",
"templatePlaceholder": "例如:發票處理工作流程",
@@ -1200,9 +1200,9 @@
"failedToGetCanvasContext": "無法取得頁面 {{page}} 的 Canvas 繪圖環境",
"failedToRenderPageToImage": "無法將頁面 {{page}} 轉譯為影像",
"noPagesProcessed": "未處理任何頁面",
"cpdfNotConfigured": "CoherentPDF 未設定。請在進階設定中設定。",
"cpdfNotConfigured": "尚未設定 CoherentPDF。請至 [進階功能設定] 完成設定。",
"workerError": "Worker 錯誤:{{message}}",
"alternateMergeWorkerError": "交替合併 Worker 錯誤:{{message}}",
"alternateMergeWorkerError": "交錯混合頁面 Worker 錯誤:{{message}}",
"noPdfFilesUploaded": "PDF 輸入節點中未上傳 PDF 檔案",
"failedToLoadFile": "無法載入「{{file}}」,檔案可能已損毀",
"noImagesUploaded": "影像輸入節點中未上傳影像",
@@ -1226,7 +1226,7 @@
"noWpsUploaded": "WPS 輸入節點中未上傳 WPS 檔案",
"noXmlUploaded": "XML 輸入節點中未上傳 XML 檔案",
"noXpsUploaded": "XPS 輸入節點中未上傳 XPS 檔案",
"alternateMergeNeedsTwo": "交替合併需要至少連接兩個 PDF 到其輸入",
"alternateMergeNeedsTwo": "交錯混合頁面的輸入端至少須連接兩個 PDF。",
"cropMarginsExceed": "裁切邊距超出頁面尺寸。請縮小裁切值。",
"digitalSignNoCertificate": "數位簽章節點中未載入憑證",
"encryptUserPasswordRequired": "加密需要使用者密碼",
@@ -1243,7 +1243,7 @@
"timestampFailed": "使用 TSA {{tsa}} 加蓋時間戳記失敗:{{message}}",
"noOutputNodes": "找不到輸出節點。新增下載節點以完成您的工作流程。",
"circularDependency": "工作流程中偵測到循環相依性。請移除節點之間的任何循環。",
"encryptOrdering": "加密節點會將資料傳送至「{{target}}」,但該節點可能無法處理加密資料。請將加密節點移至緊鄰輸出節點的位置。",
"encryptOrdering": "加密節點會將資料傳送至「{{target}}」,但該節點可能無法處理加密資料。請將加密節點移到輸出節點的前一步。",
"invalidWorkflowFile": "無效的工作流程檔案:缺少節點或連接陣列。",
"storageQuotaExceeded": "儲存工作流程失敗:超出儲存配額。請嘗試刪除舊範本。",
"failedToImport": "匯入工作流程失敗:{{message}}"
@@ -1253,7 +1253,7 @@
"title": "進階功能設定",
"description": "設定外部處理模組以啟用進階 PDF 功能。這些模組為選用且另行授權。",
"status": {
"testing": "正在測試...",
"testing": "正在測試…",
"customOverride": "自訂覆寫",
"preConfigured": "預先設定",
"notConfigured": "未設定"
@@ -1262,7 +1262,7 @@
"preconfiguredDescription": "進階處理模組會從 CDN 自動載入。如需使用自訂來源(例如用於隔離環境或自架部署),可以覆寫下列 URL。",
"usingDefault": "使用預設值:{{url}}",
"pymupdfSubtitle": "文件處理引擎",
"pymupdfFeatures": "啟用:PDF 轉文字、Markdown、SVG、DOCX、Excel • 擷取圖片/表格 • 格式轉換",
"pymupdfFeatures": "啟用:PDF 轉文字、Markdown、SVG、DOCX、Excel • 擷取圖片/表格 • 格式轉換",
"testButton": "測試",
"recommendedLabel": "建議:",
"copyTitle": "複製到剪貼簿",
@@ -1271,7 +1271,7 @@
"cpdfSubtitle": "書籤和中繼資料引擎",
"cpdfFeatures": "啟用:按書籤分割 • 編輯書籤 • PDF 中繼資料",
"saveConfiguration": "儲存設定",
"savingConfiguration": "正在儲存設定...",
"savingConfiguration": "正在儲存設定…",
"savedTitle": "已儲存",
"savedMessage": "設定儲存成功!",
"errorTitle": "錯誤",
@@ -1291,7 +1291,7 @@
},
"pdfOverlay": {
"name": "PDF 疊加",
"subtitle": "將一個 PDF 的頁面疊加在另一個 PDF 上,或襯於其下。",
"subtitle": "將一個 PDF 的頁面疊加在另一個 PDF 上方,或放在下方作為襯底。",
"basePdfLabel": "基礎 PDF",
"uploadBasePdf": "上傳基礎 PDF",
"overlayPdfLabel": "疊加/襯底 PDF",
@@ -1300,7 +1300,7 @@
"overlayOption": "疊加(在頁面上方)",
"underlayOption": "襯底(在頁面下方)",
"pageRangeLabel": "套用到頁面(選填)",
"pageRangeHint": "使用 \"z\" 表示最後一頁。留空則套用到所有頁面。",
"pageRangeHint": "使用「z」表示最後一頁。留空則套用到所有頁面。",
"repeatLabel": "若基礎 PDF 頁數較多,則重複使用疊加/襯底頁面",
"processButton": "套用疊加/襯底",
"howItWorksUploadTitle": "上傳兩個 PDF",
@@ -1318,10 +1318,10 @@
},
"unlockPdf": {
"name": "解除鎖定 PDF",
"subtitle": "透過移除密碼保護解鎖 PDF。"
"subtitle": "移除 PDF 密碼保護,讓檔案可直接開啟。需要提供目前的密碼。"
},
"protectPdf": {
"name": "保護 PDF",
"subtitle": "透過新增密碼為您的 PDF 上鎖。"
"subtitle": "使用高強度 AES 加密為 PDF 加上密碼保護。"
}
}
@@ -13,7 +13,7 @@ pdfjs-next-button-label = 下一頁
# .title: Tooltip for the pageNumber input.
pdfjs-page-input =
.title = 第
.title = 頁碼
# Variables:
# $pagesCount (Number) - the total number of pages in the document
@@ -83,8 +83,8 @@ pdfjs-cursor-hand-tool-button =
.title = 開啟頁面移動工具
pdfjs-cursor-hand-tool-button-label = 頁面移動工具
pdfjs-scroll-page-button =
.title = 使用頁面捲動功能
pdfjs-scroll-page-button-label = 頁面捲動功能
.title = 使用單頁捲動版面
pdfjs-scroll-page-button-label = 單頁捲動
pdfjs-scroll-vertical-button =
.title = 使用垂直捲動版面
pdfjs-scroll-vertical-button-label = 垂直捲動
@@ -109,8 +109,8 @@ pdfjs-spread-even-button-label = 偶數跨頁
pdfjs-document-properties-button =
.title = 文件內容…
pdfjs-document-properties-button-label = 文件內容…
pdfjs-document-properties-file-name = 檔案名稱:
pdfjs-document-properties-file-size = 檔案大小:
pdfjs-document-properties-file-name = 檔案名稱:
pdfjs-document-properties-file-size = 檔案大小:
# Variables:
# $size_kb (Number) - the PDF file size in kilobytes
@@ -122,27 +122,27 @@ pdfjs-document-properties-kb = { $size_kb } KB({ $size_b } 位元組)
# $size_b (Number) - the PDF file size in bytes
pdfjs-document-properties-mb = { $size_mb } MB({ $size_b } 位元組)
pdfjs-document-properties-title = 標題:
pdfjs-document-properties-author = 作者:
pdfjs-document-properties-subject = 主旨:
pdfjs-document-properties-keywords = 關鍵字:
pdfjs-document-properties-creation-date = 建立日期:
pdfjs-document-properties-modification-date = 修改日期:
pdfjs-document-properties-title = 標題:
pdfjs-document-properties-author = 作者:
pdfjs-document-properties-subject = 主旨:
pdfjs-document-properties-keywords = 關鍵字:
pdfjs-document-properties-creation-date = 建立日期:
pdfjs-document-properties-modification-date = 修改日期:
# Variables:
# $date (Date) - the creation/modification date of the PDF file
# $time (Time) - the creation/modification time of the PDF file
pdfjs-document-properties-date-string = { $date } { $time }
pdfjs-document-properties-creator = 建立者:
pdfjs-document-properties-producer = PDF 產生器:
pdfjs-document-properties-version = PDF 版本:
pdfjs-document-properties-page-count = 頁數:
pdfjs-document-properties-page-size = 頁面大小:
pdfjs-document-properties-creator = 建立者:
pdfjs-document-properties-producer = PDF 產生器:
pdfjs-document-properties-version = PDF 版本:
pdfjs-document-properties-page-count = 頁數:
pdfjs-document-properties-page-size = 頁面大小:
pdfjs-document-properties-page-size-unit-inches = in
pdfjs-document-properties-page-size-unit-millimeters = mm
pdfjs-document-properties-page-size-orientation-portrait = 垂直
pdfjs-document-properties-page-size-orientation-landscape = 水平
pdfjs-document-properties-page-size-orientation-portrait = 直向
pdfjs-document-properties-page-size-orientation-landscape = 橫向
pdfjs-document-properties-page-size-name-a-three = A3
pdfjs-document-properties-page-size-name-a-four = A4
pdfjs-document-properties-page-size-name-letter = Letter
@@ -162,7 +162,7 @@ pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $hei
# The linearization status of the document; usually called "Fast Web View" in
# English locales of Adobe software.
pdfjs-document-properties-linearized = 快速 Web 檢視:
pdfjs-document-properties-linearized = 快速 Web 檢視:
pdfjs-document-properties-linearized-yes = 是
pdfjs-document-properties-linearized-no = 否
pdfjs-document-properties-close-button = 關閉
@@ -176,24 +176,24 @@ pdfjs-print-progress-message = 正在準備列印文件…
pdfjs-print-progress-percent = { $progress }%
pdfjs-print-progress-close-button = 取消
pdfjs-printing-not-supported = 警告: 此瀏覽器未完整支援列印功能。
pdfjs-printing-not-ready = 警告: 此 PDF 未完成下載以供列印。
pdfjs-printing-not-supported = 警告:此瀏覽器未完整支援列印功能。
pdfjs-printing-not-ready = 警告:此 PDF 尚未完整載入,無法列印。
## Tooltips and alt text for side panel toolbar buttons
pdfjs-toggle-sidebar-button =
.title = 切換側邊欄
pdfjs-toggle-sidebar-notification-button =
.title = 切換側邊欄(包含大綱、附件、圖層的文件)
.title = 切換側邊欄(文件含有大綱、附件或圖層)
pdfjs-toggle-sidebar-button-label = 切換側邊欄
pdfjs-document-outline-button =
.title = 顯示文件大綱(雙擊展開/摺疊所有項目)
.title = 顯示文件大綱(按兩下展開/摺疊所有項目)
pdfjs-document-outline-button-label = 文件大綱
pdfjs-attachments-button =
.title = 顯示附件
pdfjs-attachments-button-label = 附件
pdfjs-layers-button =
.title = 顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態)
.title = 顯示圖層(按兩下即可將所有圖層重設為預設狀態)
pdfjs-layers-button-label = 圖層
pdfjs-thumbs-button =
.title = 顯示縮圖
@@ -231,8 +231,8 @@ pdfjs-find-next-button =
pdfjs-find-next-button-label = 下一個
pdfjs-find-highlight-checkbox = 強調全部
pdfjs-find-match-case-checkbox-label = 區分大小寫
pdfjs-find-match-diacritics-checkbox-label = 符合變音符號
pdfjs-find-entire-word-checkbox-label = 符合整個字
pdfjs-find-match-diacritics-checkbox-label = 區分變音符號
pdfjs-find-entire-word-checkbox-label = 全字比對
pdfjs-find-reached-top = 已搜尋至文件頂端,自底端繼續搜尋
pdfjs-find-reached-bottom = 已搜尋至文件底端,自頂端繼續搜尋
@@ -241,16 +241,16 @@ pdfjs-find-reached-bottom = 已搜尋至文件底端,自頂端繼續搜尋
# $total (Number) - the total number of matches in the document
pdfjs-find-match-count =
{ $total ->
[one] 第 { $current } 筆符合,共符合 { $total } 筆
*[other] 第 { $current } 筆符合,共符合 { $total } 筆
[one] { $current } / { $total } 筆相符
*[other] { $current } / { $total } 筆相符
}
# Variables:
# $limit (Number) - the maximum number of matches
pdfjs-find-match-count-limit =
{ $limit ->
[one] 符合超過 { $limit } 項
*[other] 符合超過 { $limit } 項
[one] 超過 { $limit } 筆相符結果
*[other] 超過 { $limit } 筆相符結果
}
pdfjs-find-not-found = 找不到指定文字
@@ -278,7 +278,7 @@ pdfjs-page-landmark =
pdfjs-loading-error = 載入 PDF 時發生錯誤。
pdfjs-invalid-file-error = 無效或毀損的 PDF 檔案。
pdfjs-missing-file-error = 找不到 PDF 檔案。
pdfjs-unexpected-response-error = 伺服器回應未預期的內容。
pdfjs-unexpected-response-error = 收到非預期的伺服器回應。
pdfjs-rendering-error = 描繪頁面時發生錯誤。
## Annotations
@@ -302,7 +302,7 @@ pdfjs-password-label = 請輸入用來開啟此 PDF 檔案的密碼。
pdfjs-password-invalid = 密碼不正確,請再試一次。
pdfjs-password-ok-button = 確定
pdfjs-password-cancel-button = 取消
pdfjs-web-fonts-disabled = 已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
pdfjs-web-fonts-disabled = 已停用網路字型(Web fonts):無法使用 PDF 內嵌字型。
## Editing
@@ -316,12 +316,12 @@ pdfjs-editor-stamp-button =
.title = 新增或編輯圖片
pdfjs-editor-stamp-button-label = 新增或編輯圖片
pdfjs-editor-highlight-button =
.title = 強調
pdfjs-editor-highlight-button-label = 強調
.title = 螢光標註
pdfjs-editor-highlight-button-label = 螢光標註
pdfjs-highlight-floating-button1 =
.title = 強調
.aria-label = 強調
pdfjs-highlight-floating-button-label = 強調
.title = 螢光標註
.aria-label = 螢光標註
pdfjs-highlight-floating-button-label = 螢光標註
## Remove button for the various kind of editor.
@@ -332,7 +332,7 @@ pdfjs-editor-remove-freetext-button =
pdfjs-editor-remove-stamp-button =
.title = 移除圖片
pdfjs-editor-remove-highlight-button =
.title = 移除強調範圍
.title = 移除螢光標註
##
@@ -341,20 +341,20 @@ pdfjs-editor-free-text-color-input = 色彩
pdfjs-editor-free-text-size-input = 大小
pdfjs-editor-ink-color-input = 色彩
pdfjs-editor-ink-thickness-input = 線條粗細
pdfjs-editor-ink-opacity-input = 透​明度
pdfjs-editor-ink-opacity-input = 透明度
pdfjs-editor-stamp-add-image-button =
.title = 新增圖片
pdfjs-editor-stamp-add-image-button-label = 新增圖片
# This refers to the thickness of the line used for free highlighting (not bound to text)
pdfjs-editor-free-highlight-thickness-input = 線條粗細
pdfjs-editor-free-highlight-thickness-title =
.title = 更改強調文字以外的項目時的線條粗細
.title = 調整非文字內容的螢光標註粗細
pdfjs-free-text =
.aria-label = 文本編輯器
.aria-label = 文字編輯器
pdfjs-free-text-default-content = 開始打字…
pdfjs-ink =
.aria-label = 圖形編輯器
.aria-label = 繪圖編輯器
pdfjs-ink-canvas =
.aria-label = 使用者建立的圖片
@@ -365,11 +365,11 @@ pdfjs-editor-alt-text-button-label = 替代文字
pdfjs-editor-alt-text-edit-button-label = 編輯替代文字
pdfjs-editor-alt-text-dialog-label = 挑選一種
pdfjs-editor-alt-text-dialog-description = 替代文字可協助盲人,或於圖片無法載入時提供說明。
pdfjs-editor-alt-text-dialog-description = 替代文字可在使用者看不到圖片或圖片無法載入時提供說明。
pdfjs-editor-alt-text-add-description-label = 新增描述
pdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主題、背景或動作。
pdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主體、背景或動作。
pdfjs-editor-alt-text-mark-decorative-label = 標示為裝飾性內容
pdfjs-editor-alt-text-mark-decorative-description = 這是裝飾性圖片,例如邊框或浮水印。
pdfjs-editor-alt-text-mark-decorative-description = 用於裝飾性圖片,例如邊框或浮水印。
pdfjs-editor-alt-text-cancel-button = 取消
pdfjs-editor-alt-text-save-button = 儲存
pdfjs-editor-alt-text-decorative-tooltip = 已標示為裝飾性內容
@@ -393,7 +393,7 @@ pdfjs-editor-resizer-label-middle-left = 中間左方 — 調整大小
## Color picker
# This means "Color used to highlight text"
pdfjs-editor-highlight-colorpicker-label = 強調色彩
pdfjs-editor-highlight-colorpicker-label = 螢光標註色彩
pdfjs-editor-colorpicker-button =
.title = 更改色彩
+60 -60
View File
@@ -13,7 +13,7 @@ pdfjs-next-button-label = 下一頁
# .title: Tooltip for the pageNumber input.
pdfjs-page-input =
.title = 第
.title = 頁碼
# Variables:
# $pagesCount (Number) - the total number of pages in the document
@@ -140,8 +140,8 @@ pdfjs-document-properties-page-count = 頁數:
pdfjs-document-properties-page-size = 頁面大小:
pdfjs-document-properties-page-size-unit-inches = in
pdfjs-document-properties-page-size-unit-millimeters = mm
pdfjs-document-properties-page-size-orientation-portrait = 垂直
pdfjs-document-properties-page-size-orientation-landscape = 水平
pdfjs-document-properties-page-size-orientation-portrait = 直向
pdfjs-document-properties-page-size-orientation-landscape = 橫向
pdfjs-document-properties-page-size-name-a-three = A3
pdfjs-document-properties-page-size-name-a-four = A4
pdfjs-document-properties-page-size-name-letter = Letter
@@ -176,23 +176,23 @@ pdfjs-print-progress-percent = { $progress }%
pdfjs-print-progress-close-button = 取消
pdfjs-printing-not-supported = 警告:此瀏覽器未完整支援列印功能。
pdfjs-printing-not-ready = 警告:此 PDF 未完成下載以供列印。
pdfjs-printing-not-ready = 警告:此 PDF 尚未完整載入,無法列印。
## Tooltips and alt text for side panel toolbar buttons
pdfjs-toggle-sidebar-button =
.title = 切換側邊欄
pdfjs-toggle-sidebar-notification-button =
.title = 切換側邊欄(包含大綱、附件、圖層的文件)
.title = 切換側邊欄(文件含有大綱、附件或圖層)
pdfjs-toggle-sidebar-button-label = 切換側邊欄
pdfjs-document-outline-button =
.title = 顯示文件大綱(雙擊展開/摺疊所有項目)
.title = 顯示文件大綱(按兩下展開/摺疊所有項目)
pdfjs-document-outline-button-label = 文件大綱
pdfjs-attachments-button =
.title = 顯示附件
pdfjs-attachments-button-label = 附件
pdfjs-layers-button =
.title = 顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態)
.title = 顯示圖層(按兩下即可將所有圖層重設為預設狀態)
pdfjs-layers-button-label = 圖層
pdfjs-thumbs-button =
.title = 顯示縮圖
@@ -230,8 +230,8 @@ pdfjs-find-next-button =
pdfjs-find-next-button-label = 下一個
pdfjs-find-highlight-checkbox = 強調全部
pdfjs-find-match-case-checkbox-label = 區分大小寫
pdfjs-find-match-diacritics-checkbox-label = 符合變音符號
pdfjs-find-entire-word-checkbox-label = 符合整個字
pdfjs-find-match-diacritics-checkbox-label = 區分變音符號
pdfjs-find-entire-word-checkbox-label = 全字比對
pdfjs-find-reached-top = 已搜尋至文件頂端,自底端繼續搜尋
pdfjs-find-reached-bottom = 已搜尋至文件底端,自頂端繼續搜尋
@@ -248,8 +248,8 @@ pdfjs-find-match-count =
# $limit (Number) - the maximum number of matches
pdfjs-find-match-count-limit =
{ $limit ->
[one] 符合超過 { $limit } 項
*[other] 符合超過 { $limit } 項
[one] 超過 { $limit } 筆相符結果
*[other] 超過 { $limit } 筆相符結果
}
pdfjs-find-not-found = 找不到指定文字
@@ -277,7 +277,7 @@ pdfjs-page-landmark =
pdfjs-loading-error = 載入 PDF 時發生錯誤。
pdfjs-invalid-file-error = 無效或毀損的 PDF 檔案。
pdfjs-missing-file-error = 找不到 PDF 檔案。
pdfjs-unexpected-response-error = 伺服器回應未預期的內容。
pdfjs-unexpected-response-error = 收到非預期的伺服器回應。
pdfjs-rendering-error = 描繪頁面時發生錯誤。
## Annotations
@@ -300,7 +300,7 @@ pdfjs-password-label = 請輸入用來開啟此 PDF 檔案的密碼。
pdfjs-password-invalid = 密碼不正確,請再試一次。
pdfjs-password-ok-button = 確定
pdfjs-password-cancel-button = 取消
pdfjs-web-fonts-disabled = 已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
pdfjs-web-fonts-disabled = 已停用網路字型(Web fonts):無法使用 PDF 內嵌字型。
## Editing
@@ -318,12 +318,12 @@ pdfjs-editor-stamp-button =
.title = 新增或編輯圖片
pdfjs-editor-stamp-button-label = 新增或編輯圖片
pdfjs-editor-highlight-button =
.title = 強調
pdfjs-editor-highlight-button-label = 強調
.title = 螢光標註
pdfjs-editor-highlight-button-label = 螢光標註
pdfjs-highlight-floating-button1 =
.title = 強調
.aria-label = 強調
pdfjs-highlight-floating-button-label = 強調
.title = 螢光標註
.aria-label = 螢光標註
pdfjs-highlight-floating-button-label = 螢光標註
pdfjs-comment-floating-button =
.title = 註解
.aria-label = 註解
@@ -333,14 +333,14 @@ pdfjs-editor-comment-button =
.aria-label = 註解
pdfjs-editor-comment-button-label = 註解
pdfjs-editor-signature-button =
.title = 加入簽章
pdfjs-editor-signature-button-label = 加入簽章
.title = 加入簽名
pdfjs-editor-signature-button-label = 加入簽名
## Default editor aria labels
# “Highlight” is a noun, the string is used on the editor for highlights.
pdfjs-editor-highlight-editor =
.aria-label = 強調樣式編輯器
.aria-label = 螢光標註編輯器
# “Drawing” is a noun, the string is used on the editor for drawings.
pdfjs-editor-ink-editor =
.aria-label = 繪圖編輯器
@@ -349,7 +349,7 @@ pdfjs-editor-ink-editor =
# Variables:
# $description (String) - a string describing/labeling the signature.
pdfjs-editor-signature-editor1 =
.aria-description = 簽章編輯器:{ $description }
.aria-description = 簽名編輯器:{ $description }
pdfjs-editor-stamp-editor =
.aria-label = 圖片編輯器
@@ -363,9 +363,9 @@ pdfjs-editor-remove-freetext-button =
pdfjs-editor-remove-stamp-button =
.title = 移除圖片
pdfjs-editor-remove-highlight-button =
.title = 移除選擇範圍的強調效果
.title = 移除螢光標註
pdfjs-editor-remove-signature-button =
.title = 移除簽章
.title = 移除簽名
##
@@ -374,25 +374,25 @@ pdfjs-editor-free-text-color-input = 色彩
pdfjs-editor-free-text-size-input = 大小
pdfjs-editor-ink-color-input = 色彩
pdfjs-editor-ink-thickness-input = 線條粗細
pdfjs-editor-ink-opacity-input = 透​明度
pdfjs-editor-ink-opacity-input = 透明度
pdfjs-editor-stamp-add-image-button =
.title = 新增圖片
pdfjs-editor-stamp-add-image-button-label = 新增圖片
# This refers to the thickness of the line used for free highlighting (not bound to text)
pdfjs-editor-free-highlight-thickness-input = 線條粗細
pdfjs-editor-free-highlight-thickness-title =
.title = 更改強調文字以外的項目時的線條粗細
.title = 調整非文字內容的螢光標註粗細
pdfjs-editor-add-signature-container =
.aria-label = 簽章控制元件與儲存的簽章
.aria-label = 簽名控制元件與儲存的簽名
pdfjs-editor-signature-add-signature-button =
.title = 新增簽章
pdfjs-editor-signature-add-signature-button-label = 新增簽章
.title = 新增簽名
pdfjs-editor-signature-add-signature-button-label = 新增簽名
# Used on the button to use an already saved signature.
# Variables:
# $description (String) - a string describing/labeling the signature.
pdfjs-editor-add-saved-signature-button =
.title = 已儲存簽章:{ $description }
.title = 已儲存簽名:{ $description }
# .default-content is used as a placeholder in an empty text editor.
pdfjs-free-text2 =
@@ -414,7 +414,7 @@ pdfjs-editor-comments-sidebar-close-button =
pdfjs-editor-comments-sidebar-close-button-label = 關閉側邊欄
# Instructional copy to add a comment by selecting text or an annotations.
pdfjs-editor-comments-sidebar-no-comments1 = 看到值得注意的內容嗎?將其標註並留下註解。
pdfjs-editor-comments-sidebar-no-comments1 = 看到值得注意的內容嗎?請加上螢光標註並留下註解。
pdfjs-editor-comments-sidebar-no-comments-link = 進一步了解
## Alt-text dialog
@@ -427,11 +427,11 @@ pdfjs-editor-alt-text-button-label = 替代文字
pdfjs-editor-alt-text-edit-button =
.aria-label = 編輯替代文字
pdfjs-editor-alt-text-dialog-label = 挑選一種
pdfjs-editor-alt-text-dialog-description = 替代文字可協助盲人,或於圖片無法載入時提供說明。
pdfjs-editor-alt-text-dialog-description = 替代文字可在使用者看不到圖片或圖片無法載入時提供說明。
pdfjs-editor-alt-text-add-description-label = 新增描述
pdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主題、背景或動作。
pdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主體、背景或動作。
pdfjs-editor-alt-text-mark-decorative-label = 標示為裝飾性內容
pdfjs-editor-alt-text-mark-decorative-description = 這是裝飾性圖片,例如邊框或浮水印。
pdfjs-editor-alt-text-mark-decorative-description = 用於裝飾性圖片,例如邊框或浮水印。
pdfjs-editor-alt-text-cancel-button = 取消
pdfjs-editor-alt-text-save-button = 儲存
pdfjs-editor-alt-text-decorative-tooltip = 已標示為裝飾性內容
@@ -463,7 +463,7 @@ pdfjs-editor-resizer-middle-left =
## Color picker
# This means "Color used to highlight text"
pdfjs-editor-highlight-colorpicker-label = 強調色彩
pdfjs-editor-highlight-colorpicker-label = 螢光標註色彩
pdfjs-editor-colorpicker-button =
.title = 更改色彩
@@ -500,7 +500,7 @@ pdfjs-editor-new-alt-text-textarea =
.placeholder = 在此寫下您的描述文字…
# This text refers to the alt text box above this description. It offers a definition of alt text.
pdfjs-editor-new-alt-text-description = 為看不到圖片的讀者,或圖片無法載入時顯示的簡短描述。
pdfjs-editor-new-alt-text-description = 在讀者看不到圖片或圖片無法載入時顯示的簡短描述。
# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human.
pdfjs-editor-new-alt-text-disclaimer1 = 此替代文字是自動產生的,可能不夠精確。
@@ -545,9 +545,9 @@ pdfjs-image-alt-text-settings-button =
pdfjs-image-alt-text-settings-button-label = 圖片替代文字設定
pdfjs-editor-alt-text-settings-dialog-label = 圖片替代文字設定
pdfjs-editor-alt-text-settings-automatic-title = 自動化替代文字
pdfjs-editor-alt-text-settings-automatic-title = 自動產生的替代文字
pdfjs-editor-alt-text-settings-create-model-button-label = 自動產生替代文字
pdfjs-editor-alt-text-settings-create-model-description = 為您建議圖片描述,幫助看不到圖片的讀者,或於圖片無法載入時顯示。
pdfjs-editor-alt-text-settings-create-model-description = 提供圖片描述建議,供看不到圖片的讀者閱讀,或在圖片無法載入時顯示。
# Variables:
# $totalSize (Number) - the total size (in MB) of the AI model.
@@ -565,38 +565,38 @@ pdfjs-editor-alt-text-settings-close-button = 關閉
## Accessibility labels (announced by screen readers) for objects added to the editor.
pdfjs-editor-highlight-added-alert = 已加入強調範圍
pdfjs-editor-freetext-added-alert = 已加入文字
pdfjs-editor-highlight-added-alert = 已新增螢光標註
pdfjs-editor-freetext-added-alert = 已新增文字
pdfjs-editor-ink-added-alert = 已新增繪圖
pdfjs-editor-stamp-added-alert = 已新增圖片
pdfjs-editor-signature-added-alert = 已新增簽章
pdfjs-editor-signature-added-alert = 已新增簽名
## "Annotations removed" bar
pdfjs-editor-undo-bar-message-highlight = 已移除強調
pdfjs-editor-undo-bar-message-highlight = 已移除螢光標註
pdfjs-editor-undo-bar-message-freetext = 已移除文字
pdfjs-editor-undo-bar-message-ink = 已移除繪圖
pdfjs-editor-undo-bar-message-stamp = 已移除圖片
pdfjs-editor-undo-bar-message-signature = 已移除簽章
pdfjs-editor-undo-bar-message-signature = 已移除簽名
# Variables:
# $count (Number) - the number of removed annotations.
pdfjs-editor-undo-bar-message-multiple =
{ $count ->
[one] { $count } 個註解已移除
*[other] { $count } 個註解已移除
[one] 已移除 { $count } 個註解
*[other] 已移除 { $count } 個註解
}
pdfjs-editor-undo-bar-undo-button =
.title = 還原
pdfjs-editor-undo-bar-undo-button-label = 還原
.title = 復原
pdfjs-editor-undo-bar-undo-button-label = 復原
pdfjs-editor-undo-bar-close-button =
.title = 關閉
pdfjs-editor-undo-bar-close-button-label = 關閉
## Add a signature dialog
pdfjs-editor-add-signature-dialog-label = 此對話框讓使用者能夠建立簽章以加入 PDF 文件。使用者可以編輯他們的姓名(同時也是替代文字),並選擇性儲存簽章,以供未來重複使用。
pdfjs-editor-add-signature-dialog-title = 加入簽章
pdfjs-editor-add-signature-dialog-label = 此對話框讓使用者能夠建立簽名以加入 PDF 文件。使用者可以編輯簽名名稱(同時也是替代文字),並可選擇是否儲存簽名,以便日後重複使用。
pdfjs-editor-add-signature-dialog-title = 加入簽名
## Tab names
@@ -612,9 +612,9 @@ pdfjs-editor-add-signature-image-button = 圖片
## Tab panels
pdfjs-editor-add-signature-type-input =
.aria-label = 輸入簽章
.placeholder = 輸入簽章
pdfjs-editor-add-signature-draw-placeholder = 手繪簽章
.aria-label = 輸入簽名
.placeholder = 輸入簽名
pdfjs-editor-add-signature-draw-placeholder = 手繪簽名
pdfjs-editor-add-signature-draw-thickness-range-label = 線條粗細
# Variables:
@@ -634,17 +634,17 @@ pdfjs-editor-add-signature-image-browse-link =
pdfjs-editor-add-signature-description-label = 描述(替代文字)
pdfjs-editor-add-signature-description-input =
.title = 描述(替代文字)
pdfjs-editor-add-signature-description-default-when-drawing = 簽章
pdfjs-editor-add-signature-description-default-when-drawing = 簽名
pdfjs-editor-add-signature-clear-button-label = 清除簽章
pdfjs-editor-add-signature-clear-button-label = 清除簽名
pdfjs-editor-add-signature-clear-button =
.title = 清除簽章
pdfjs-editor-add-signature-save-checkbox = 儲存簽章
pdfjs-editor-add-signature-save-warning-message = 您已經儲存 5 式簽章,請移除任一式才能再新增。
.title = 清除簽名
pdfjs-editor-add-signature-save-checkbox = 儲存簽名
pdfjs-editor-add-signature-save-warning-message = 您已經儲存 5 個簽名,請移除任一個才能再儲存。
pdfjs-editor-add-signature-image-upload-error-title = 無法上傳圖片
pdfjs-editor-add-signature-image-upload-error-description = 請檢查您的網路連線,或改用其他圖片。
pdfjs-editor-add-signature-image-no-data-error-title = 無法將此圖片轉換成簽章
pdfjs-editor-add-signature-image-no-data-error-title = 無法將此圖片轉換成簽名
pdfjs-editor-add-signature-image-no-data-error-description = 請試著上傳另一張圖片。
pdfjs-editor-add-signature-error-close-button = 關閉
@@ -656,8 +656,8 @@ pdfjs-editor-add-signature-add-button = 新增
## Main menu for adding/removing signatures
pdfjs-editor-delete-signature-button1 =
.title = 移除儲存的簽章
pdfjs-editor-delete-signature-button-label1 = 移除儲存的簽章
.title = 移除儲存的簽名
pdfjs-editor-delete-signature-button-label1 = 移除儲存的簽名
## Editor toolbar
+3 -1
View File
@@ -424,7 +424,7 @@ async function performFlatteningCrop(
return newPdfDoc.save();
}
function resetState() {
export function resetState() {
if (cropperState.cropper) {
cropperState.cropper.destroy();
cropperState.cropper = null;
@@ -447,4 +447,6 @@ function resetState() {
const cropBtn = document.getElementById('crop-button') as HTMLButtonElement;
if (cropBtn) cropBtn.disabled = true;
window.scrollTo({ top: 0, behavior: 'smooth' });
}
+1
View File
@@ -84,6 +84,7 @@ const ESCAPED_MATH: ReadonlyArray<[string, string, boolean]> = [
['\\\\[', '\\\\]', true],
['\\\\(', '\\\\)', false],
['\\[', '\\]', true],
['$`', '`$', false],
];
function escapedMath(state: StateInline, silent: boolean): boolean {
+18
View File
@@ -0,0 +1,18 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { resetState } from '../js/logic/crop-pdf-page.ts';
// Test resetState function for cropping
describe('resetState', () => {
beforeEach(() => {
vi.spyOn(window, 'scrollTo').mockImplementation(() => {});
});
it('scrolls the page to the top after resetting', () => {
resetState();
expect(window.scrollTo).toHaveBeenCalledWith({
top: 0,
behavior: 'smooth',
});
});
});
+8 -1
View File
@@ -58,10 +58,17 @@ describe('Markdown to PDF rendering', () => {
'',
'```math\n\\int x\n```',
'',
'GitHub $`\\sqrt{3}`$ inline.',
'',
'Price $5 and $10, escaped \\$3, code `$q$`.',
].join('\n')
);
expect(root.querySelectorAll('.katex').length).toBe(8);
expect(root.querySelectorAll('.katex').length).toBe(9);
const github = [...root.querySelectorAll('p')].find((p) =>
p.textContent?.startsWith('GitHub')
);
expect(github?.querySelector('.katex')).not.toBeNull();
expect(github?.textContent).not.toMatch(/[$`‘’]/);
expect(root.querySelectorAll('.katex-display').length).toBe(5);
expect(root.querySelector('em')).toBeNull();
expect(root.textContent).toContain('Price $5 and $10, escaped $3');
+1 -1
View File
@@ -1 +1 @@
1b5d842415eb
3f6b6114b166
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
1b5d842415eb
3f6b6114b166
Binary file not shown.
Binary file not shown.