diff --git a/client-tauri/package.json b/client-tauri/package.json
index 1b6f068fb..466785cdc 100644
--- a/client-tauri/package.json
+++ b/client-tauri/package.json
@@ -14,10 +14,13 @@
"@tauri-apps/api": "^1.5.1",
"archiver": "^6.0.1",
"bootstrap": "^5.3.2",
+ "i18next": "^23.6.0",
+ "i18next-browser-languagedetector": "^7.1.0",
"path-browserify": "^1.0.1",
"react": "^18.2.0",
"react-bootstrap": "^2.9.1",
"react-dom": "^18.2.0",
+ "react-i18next": "^13.3.1",
"react-icons": "^4.11.0",
"react-router-bootstrap": "^0.26.2",
"react-router-dom": "^6.18.0"
diff --git a/client-tauri/src/App.tsx b/client-tauri/src/App.tsx
index c503ef4f3..fe7bda096 100644
--- a/client-tauri/src/App.tsx
+++ b/client-tauri/src/App.tsx
@@ -1,3 +1,5 @@
+import { Suspense } from 'react';
+
import { Routes, Route, Outlet } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
@@ -6,11 +8,28 @@ import NoMatch from "./pages/NoMatch";
import NavBar from "./components/NavBar";
import 'bootstrap/dist/css/bootstrap.min.css';
-import { Col, Container, Row } from "react-bootstrap";
+import { Container } from "react-bootstrap";
+
+import i18n from "i18next";
+import { useTranslation, initReactI18next } from "react-i18next";
+import LanguageDetector from 'i18next-browser-languagedetector';
+import ar from './locales/ar.json';
+import en from './locales/en.json';
+
+import './general.css'
+
+i18n
+ .use(LanguageDetector)
+ .use(initReactI18next) // passes i18n down to react-i18next
+ .init({
+ fallbackLng: "en",
+ resources: { ar,en },
+ });
export default function App() {
+
return (
-
+
{/* Routes nest inside one another. Nested route paths build upon
parent route paths, and nested route elements render inside
parent route elements. See the note about below. */}
@@ -26,13 +45,14 @@ export default function App() {
} />
-
+
);
}
function Layout() {
+ const { t } = useTranslation();
return (
-
+
{/* An
renders whatever child route is currently active,
diff --git a/client-tauri/src/components/LanguagePicker.tsx b/client-tauri/src/components/LanguagePicker.tsx
new file mode 100644
index 000000000..2610b3ecb
--- /dev/null
+++ b/client-tauri/src/components/LanguagePicker.tsx
@@ -0,0 +1,30 @@
+
+
+import NavDropdown from 'react-bootstrap/NavDropdown';
+import { useTranslation } from 'react-i18next';
+import { BsGlobe2 } from 'react-icons/bs';
+
+function generateSublist() {
+ const { t, i18n } = useTranslation();
+ const out: JSX.Element[] = [];
+ const languages = i18n.options.resources;
+ for (var key in languages) {
+ const lang: any = languages[key].translation;
+ const staticKey = key;
+ out.push((
+ i18n.changeLanguage(staticKey)}>
+ {lang.language?.flag}
+ {lang.language?.name}
+
+ ));
+ }
+ return <>{out}>;
+}
+
+export default function LanguagePicker() {
+ return (
+ >}>
+ {generateSublist()}
+
+ );
+}
\ No newline at end of file
diff --git a/client-tauri/src/components/NavBar.css b/client-tauri/src/components/NavBar.css
index abe47888a..04ef30212 100644
--- a/client-tauri/src/components/NavBar.css
+++ b/client-tauri/src/components/NavBar.css
@@ -103,6 +103,8 @@
height: 16px;
vertical-align: middle;
transform: translateY(-2px);
+ margin-left: 4px;
+ margin-right: 4px;
}
/*
.icon+.icon {
@@ -110,7 +112,8 @@
}
*/
.nav-icon span {
- margin-left: 9px;
+ margin-left: 4px;
+ margin-right: 4px;
}
.nav-item-separator {
diff --git a/client-tauri/src/components/NavBar.tsx b/client-tauri/src/components/NavBar.tsx
index 35b01d670..cafc3fe92 100644
--- a/client-tauri/src/components/NavBar.tsx
+++ b/client-tauri/src/components/NavBar.tsx
@@ -1,12 +1,19 @@
+
+import { AiOutlineMergeCells, AiOutlineSplitCells } from "react-icons/ai";
+import { BiCrop } from "react-icons/bi";
import {
BsTools, BsSortNumericDown, BsArrowClockwise, BsFileEarmarkX, BsLayoutSplit, BsPalette, BsArrowUpSquare, Bs1Square, BsFileEarmarkPdf,
BsArrowLeftRight, BsFileEarmarkImage, BsFileEarmark, BsFiletypeHtml, BsLink, BsFiletypeMd, BsFileEarmarkWord, BsFiletypePpt, BsFiletypeTxt,
- BsFiletypeXml
+ BsFiletypeXml, BsLock, BsUnlock, BsShieldLock, BsDroplet, BsAward, BsEraserFill, BsCardList, BsClipboardData, BsFile, BsFileEarmarkRichtext,
+ BsFileZip, BsFiletypeJs, BsFonts, BsImages, BsInfoCircle, BsSearch, BsShieldCheck, BsVectorPen, BsWrench
} from "react-icons/bs";
-import { AiOutlineMergeCells, AiOutlineSplitCells } from "react-icons/ai";
+import { GiScales } from "react-icons/gi";
import { LuLayoutGrid } from "react-icons/lu";
+import { MdOutlineScanner } from "react-icons/md";
+import { PiArrowsInLineVertical } from "react-icons/pi";
import { SlSizeFullscreen } from "react-icons/sl";
-import { BiCrop } from "react-icons/bi";
+import { TfiSpray } from "react-icons/tfi";
+import { TbNumbers } from "react-icons/tb";
import { IconType } from "react-icons";
import Container from 'react-bootstrap/Container';
@@ -14,7 +21,9 @@ import Nav from 'react-bootstrap/Nav';
import Navbar from 'react-bootstrap/Navbar';
import NavDropdown from 'react-bootstrap/NavDropdown';
import { LinkContainer } from 'react-router-bootstrap';
+import { useTranslation } from 'react-i18next';
+import LanguagePicker from "./LanguagePicker";
import Logo from '../../public/stirling-pdf-logo.svg'
import './NavBar.css';
@@ -36,53 +45,107 @@ function convertToNavLink(item: NavInfoItem, index: number) {
function convertToNavDropdownItem(item: NavInfoItem | null) {
if (item == null)
return ;
- return {item.displayText};
+
+ return (
+
+
+
+ {item.displayText}
+
+
+ );
}
function convertToNavDropdown(sublist: NavInfoSublist) {
+ var myTitle = <>
+
+
+ {sublist.displayText}
+
+ >;
+
return (
- {sublist.displayText}>} id="basic-nav-dropdown">
+
{sublist.sublist.map(convertToNavDropdownItem)}
);
}
+function NavBar() {
+ const { t, i18n } = useTranslation();
- /* A "layout route" is a good place to put markup you want to
- share across all the pages on your site, like navigation. */
-function Layout() {
const navInfo = [
- {displayText: "PDF Multi Tool", icon: BsTools, dest: "/home", tooltip: "Merge, Rotate, Rearrange, and Remove pages"},
- {displayText: "Page Operations", icon: BsFileEarmarkPdf, sublist: [
- { displayText: "Merge", icon: AiOutlineMergeCells, dest: "/dashboard", tooltip: "Easily merge multiple PDFs into one." },
- { displayText: "Split", icon: AiOutlineSplitCells, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Organise", icon: BsSortNumericDown, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Rotate", icon: BsArrowClockwise, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Remove", icon: BsFileEarmarkX, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Multi-Page Layout", icon: LuLayoutGrid, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Adjust page size/scale", icon: SlSizeFullscreen, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Auto Split Pages", icon: BsLayoutSplit, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Adjust Colors/Contrast", icon: BsPalette, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Crop PDF", icon: BiCrop, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "Extract page(s)", icon: BsArrowUpSquare, dest: "/nothing-here", tooltip: "fghjgfhj" },
- { displayText: "PDF to Single Large Page", icon: Bs1Square, dest: "/nothing-here", tooltip: "fghjgfhj" },
+ {displayText: t('multiTool.title'), icon: BsTools, dest: "/home", tooltip: t('home.multiTool.desc')},
+ {displayText: t('navbar.pageOps'), icon: BsFileEarmarkPdf, sublist: [
+ { displayText: t('home.merge.title'), icon: AiOutlineMergeCells, dest: "/dashboard", tooltip: t('home.merge.desc') },
+ { displayText: t('home.split.title'), icon: AiOutlineSplitCells, dest: "/nothing-here", tooltip: t('home.split.desc') },
+ { displayText: t('home.pdfOrganiser.title'), icon: BsSortNumericDown, dest: "/nothing-here", tooltip: t('home.pdfOrganiser.desc') },
+ { displayText: t('home.rotate.title'), icon: BsArrowClockwise, dest: "/nothing-here", tooltip: t('home.rotate.desc') },
+ { displayText: t('home.removePages.title'), icon: BsFileEarmarkX, dest: "/nothing-here", tooltip: t('home.removePages.desc') },
+ { displayText: t('home.pageLayout.title'), icon: LuLayoutGrid, dest: "/nothing-here", tooltip: t('home.pageLayout.desc') },
+ { displayText: t('home.scalePages.title'), icon: SlSizeFullscreen, dest: "/nothing-here", tooltip: t('home.scalePages.desc') },
+ { displayText: t('home.autoSplitPDF.title'), icon: BsLayoutSplit, dest: "/nothing-here", tooltip: t('home.autoSplitPDF.desc') },
+ { displayText: t('home.adjust-contrast.title'), icon: BsPalette, dest: "/nothing-here", tooltip: t('home.adjust-contrast.desc') },
+ { displayText: t('home.crop.title'), icon: BiCrop, dest: "/nothing-here", tooltip: t('home.crop.desc') },
+ { displayText: t('home.extractPage.title'), icon: BsArrowUpSquare, dest: "/nothing-here", tooltip: t('home.extractPage.desc') },
+ { displayText: t('home.PdfToSinglePage.title'), icon: Bs1Square, dest: "/nothing-here", tooltip: t('home.PdfToSinglePage.desc') },
]},
- {displayText: "Convert", icon: BsArrowLeftRight, sublist: [
- { displayText: "Image to PDF", icon: BsFileEarmarkImage, dest: "/dashboard" },
- { displayText: "File to PDF", icon: BsFileEarmark, dest: "/nothing-here" },
- { displayText: "HTML to PDF", icon: BsFiletypeHtml, dest: "/nothing-here" },
- { displayText: "URL/Website To PDF", icon: BsLink, dest: "/nothing-here" },
- { displayText: "Markdown to PDF", icon: BsFiletypeMd, dest: "/nothing-here" },
+ {displayText: t('navbar.convert'), icon: BsArrowLeftRight, sublist: [
+ { displayText: t('home.imageToPdf.title'), icon: BsFileEarmarkImage, dest: "/dashboard", tooltip: t('home.imageToPdf.desc') },
+ { displayText: t('home.fileToPDF.title'), icon: BsFileEarmark, dest: "/nothing-here", tooltip: t('home.fileToPDF.desc') },
+ { displayText: t('home.HTMLToPDF.title'), icon: BsFiletypeHtml, dest: "/nothing-here", tooltip: t('home.HTMLToPDF.desc') },
+ { displayText: t('home.URLToPDF.title'), icon: BsLink, dest: "/nothing-here", tooltip: t('home.URLToPDF.desc') },
+ { displayText: t('home.MarkdownToPDF.title'), icon: BsFiletypeMd, dest: "/nothing-here", tooltip: t('home.MarkdownToPDF.desc') },
null,
- { displayText: "PDF to Image", icon: BsFileEarmarkImage, dest: "/nothing-here" },
- { displayText: "PDF to Word", icon: BsFileEarmarkWord, dest: "/nothing-here" },
- { displayText: "PDF to Presentation", icon: BsFiletypePpt, dest: "/nothing-here" },
- { displayText: "PDF to RTF (Text)", icon: BsFiletypeTxt, dest: "/nothing-here" },
- { displayText: "PDF to HTML", icon: BsFiletypeHtml, dest: "/nothing-here" },
- { displayText: "PDF to XML", icon: BsFiletypeXml, dest: "/nothing-here" },
- { displayText: "PDF to PDF/A", icon: BsFileEarmarkPdf, dest: "/nothing-here" },
+ { displayText: t('home.pdfToImage.title'), icon: BsFileEarmarkImage, dest: "/nothing-here", tooltip: t('home.pdfToImage.desc') },
+ { displayText: t('home.PDFToWord.title'), icon: BsFileEarmarkWord, dest: "/nothing-here", tooltip: t('home.PDFToWord.desc') },
+ { displayText: t('home.PDFToPresentation.title'), icon: BsFiletypePpt, dest: "/nothing-here", tooltip: t('home.PDFToPresentation.desc') },
+ { displayText: t('home.PDFToText.title'), icon: BsFiletypeTxt, dest: "/nothing-here", tooltip: t('home.PDFToText.desc') },
+ { displayText: t('home.PDFToHTML.title'), icon: BsFiletypeHtml, dest: "/nothing-here", tooltip: t('home.PDFToHTML.desc') },
+ { displayText: t('home.PDFToXML.title'), icon: BsFiletypeXml, dest: "/nothing-here", tooltip: t('home.PDFToXML.desc') },
+ { displayText: t('home.pdfToPDFA.title'), icon: BsFileEarmarkPdf, dest: "/nothing-here", tooltip: t('home.pdfToPDFA.desc') },
+ ]},
+ {displayText: t('navbar.security'), icon: BsShieldCheck, sublist: [
+ { displayText: t('home.addPassword.title'), icon: BsLock, dest: "/dashboard", tooltip: t('home.addPassword.desc') },
+ { displayText: t('home.removePassword.title'), icon: BsUnlock, dest: "/nothing-here", tooltip: t('home.removePassword.desc') },
+ { displayText: t('home.permissions.title'), icon: BsShieldLock, dest: "/nothing-here", tooltip: t('home.permissions.desc') },
+ { displayText: t('home.watermark.title'), icon: BsDroplet, dest: "/nothing-here", tooltip: t('home.watermark.desc') },
+ { displayText: t('home.certSign.title'), icon: BsAward, dest: "/nothing-here", tooltip: t('home.certSign.desc') },
+ { displayText: t('home.sanitizePdf.title'), icon: TfiSpray, dest: "/nothing-here", tooltip: t('home.sanitizePdf.desc') },
+ { displayText: t('home.autoRedact.title'), icon: BsEraserFill, dest: "/nothing-here", tooltip: t('home.autoRedact.desc') },
+ ]},
+ {displayText: t('navbar.other'), icon: BsCardList, sublist: [
+ { displayText: t('home.ocr.title'), icon: BsSearch, dest: "/dashboard", tooltip: t('home.ocr.desc') },
+ { displayText: t('home.addImage.title'), icon: BsFileEarmarkRichtext, dest: "/nothing-here", tooltip: t('home.addImage.desc') },
+ { displayText: t('home.compressPdfs.title'), icon: BsFileZip, dest: "/nothing-here", tooltip: t('home.compressPdfs.desc') },
+ { displayText: t('home.extractImages.title'), icon: BsImages, dest: "/nothing-here", tooltip: t('home.extractImages.desc') },
+ { displayText: t('home.changeMetadata.title'), icon: BsClipboardData, dest: "/nothing-here", tooltip: t('home.changeMetadata.desc') },
+ { displayText: t('home.ScannerImageSplit.title'), icon: MdOutlineScanner, dest: "/nothing-here", tooltip: t('home.ScannerImageSplit.desc') },
+ { displayText: t('home.sign.title'), icon: BsVectorPen, dest: "/nothing-here", tooltip: t('home.sign.desc') },
+ { displayText: t('home.flatten.title'), icon: PiArrowsInLineVertical, dest: "/nothing-here", tooltip: t('home.flatten.desc') },
+ { displayText: t('home.repair.title'), icon: BsWrench, dest: "/nothing-here", tooltip: t('home.repair.desc') },
+ { displayText: t('home.removeBlanks.title'), icon: BsFile, dest: "/nothing-here", tooltip: t('home.removeBlanks.desc') },
+ { displayText: t('home.compare.title'), icon: GiScales, dest: "/nothing-here", tooltip: t('home.compare.desc') },
+ { displayText: t('home.add-page-numbers.title'), icon: TbNumbers, dest: "/nothing-here", tooltip: t('home.add-page-numbers.desc') },
+ { displayText: t('home.auto-rename.title'), icon: BsFonts, dest: "/nothing-here", tooltip: t('home.auto-rename.desc') },
+ { displayText: t('home.getPdfInfo.title'), icon: BsInfoCircle, dest: "/nothing-here", tooltip: t('home.getPdfInfo.desc') },
+ { displayText: t('home.showJS.title'), icon: BsFiletypeJs, dest: "/nothing-here", tooltip: t('home.showJS.desc') },
]},
] as Array;
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
return (
@@ -94,7 +157,7 @@ function Layout() {
-
);
}
-export default Layout;
\ No newline at end of file
+export default NavBar;
\ No newline at end of file
diff --git a/client-tauri/src/general.css b/client-tauri/src/general.css
new file mode 100644
index 000000000..d0bb3554a
--- /dev/null
+++ b/client-tauri/src/general.css
@@ -0,0 +1,16 @@
+
+div[lang-direction=ltr] * {
+ direction: ltr;
+}
+div[lang-direction=rtl] * {
+ direction: rtl;
+ text-align: right;
+}
+.ignore-rtl {
+ direction: ltr !important;
+ text-align: left !important;
+}
+
+.flex-fill-remaining-space {
+ flex-grow: 10000000;
+}
\ No newline at end of file
diff --git a/client-tauri/src/locales/ar.json b/client-tauri/src/locales/ar.json
new file mode 100644
index 000000000..c18135482
--- /dev/null
+++ b/client-tauri/src/locales/ar.json
@@ -0,0 +1,853 @@
+{
+ "translation": {
+ "language": {
+ "name":"العربية",
+ "flag": "🇸🇦",
+ "direction": "rtl"
+ },
+ "pdfPrompt": "اختر PDF",
+ "multiPdfPrompt": "اختر ملفات PDF (2+)",
+ "multiPdfDropPrompt": "حدد (أو اسحب وأفلت) جميع ملفات PDF التي تحتاجها",
+ "imgPrompt": "اختر صورة",
+ "genericSubmit": "إرسال",
+ "processTimeWarning": "تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف",
+ "pageOrderPrompt": "ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):",
+ "goToPage": "اذهب",
+ "true": "\u0635\u062D\u064A\u062D",
+ "false": "\u062E\u0637\u0623",
+ "unknown": "\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641",
+ "save": "\u062D\u0641\u0638",
+ "close": "\u0625\u063A\u0644\u0627\u0642",
+ "filesSelected": "الملفات المحددة",
+ "noFavourites": "لم تتم إضافة أي مفضلات",
+ "bored": "الانتظار بالملل؟",
+ "alphabet": "\u0627\u0644\u0623\u0628\u062C\u062F\u064A\u0629",
+ "downloadPdf": "تنزيل PDF",
+ "text": "نص",
+ "font": "الخط",
+ "selectFillter": "- حدد -",
+ "pageNum": "رقم الصفحة",
+ "sizes": {
+ "small": "Small",
+ "medium": "Medium",
+ "large": "Large",
+ "x-large": "X-Large"
+ },
+ "error": {
+ "pdfPassword": "The PDF Document is passworded and either the password was not provided or was incorrect"
+ },
+ "delete": "Delete",
+ "username": "Username",
+ "password": "Password",
+ "welcome": "Welcome",
+ "property": "Property",
+ "black": "Black",
+ "white": "White",
+ "red": "Red",
+ "green": "Green",
+ "blue": "Blue",
+ "custom": "Custom...",
+ "changedCredsMessage": "Credentials changed!",
+ "notAuthenticatedMessage": "User not authenticated.",
+ "userNotFoundMessage": "User not found.",
+ "incorrectPasswordMessage": "Current password is incorrect.",
+ "usernameExistsMessage": "New Username already exists.",
+ "navbar": {
+ "convert": "تحويل",
+ "security": "الأمان",
+ "other": "أخرى",
+ "darkmode": "الوضع الداكن",
+ "pageOps": "عمليات الصفحة",
+ "settings": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A"
+ },
+ "settings": {
+ "title": "\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A",
+ "update": "\u0627\u0644\u062A\u062D\u062F\u064A\u062B \u0645\u062A\u0627\u062D",
+ "appVersion": "\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u062A\u0637\u0628\u064A\u0642:",
+ "downloadOption": {
+ "1": "\u0641\u062A\u062D \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0629",
+ "2": "\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629",
+ "3": "\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0645\u0644\u0641",
+ "title": "\u062A\u062D\u062F\u064A\u062F \u062E\u064A\u0627\u0631 \u0627\u0644\u062A\u0646\u0632\u064A\u0644 (\u0644\u0644\u062A\u0646\u0632\u064A\u0644\u0627\u062A \u0630\u0627\u062A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0648\u0627\u062D\u062F \u063A\u064A\u0631 \u0627\u0644\u0645\u0636\u063A\u0648\u0637):"
+ },
+ "zipThreshold": "\u0645\u0644\u0641\u0627\u062A \u0645\u0636\u063A\u0648\u0637\u0629 \u0639\u0646\u062F \u062A\u062C\u0627\u0648\u0632 \u0639\u062F\u062F \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u0646\u0632\u064A\u0644\u0647\u0627",
+ "signOut": "Sign Out",
+ "accountSettings": "Account Settings"
+ },
+ "changeCreds": {
+ "title": "Change Credentials",
+ "header": "Update Your Account Details",
+ "changeUserAndPassword": "You are using default login credentials. Please enter a new password (and username if wanted)",
+ "newUsername": "New Username",
+ "oldPassword": "Current Password",
+ "newPassword": "New Password",
+ "confirmNewPassword": "Confirm New Password",
+ "submit": "Submit Changes"
+ },
+ "account": {
+ "title": "Account Settings",
+ "accountSettings": "Account Settings",
+ "adminSettings": "Admin Settings - View and Add Users",
+ "userControlSettings": "User Control Settings",
+ "changeUsername": "Change Username",
+ "password": "Confirmation Password",
+ "oldPassword": "Old password",
+ "newPassword": "New Password",
+ "changePassword": "Change Password",
+ "confirmNewPassword": "Confirm New Password",
+ "signOut": "Sign Out",
+ "yourApiKey": "Your API Key",
+ "syncTitle": "Sync browser settings with Account",
+ "settingsCompare": "Settings Comparison:",
+ "property": "Property",
+ "webBrowserSettings": "Web Browser Setting",
+ "syncToBrowser": "Sync Account -> Browser",
+ "syncToAccount": "Sync Account <- Browser"
+ },
+ "adminUserSettings": {
+ "title": "User Control Settings",
+ "header": "Admin User Control Settings",
+ "admin": "Admin",
+ "user": "User",
+ "addUser": "Add New User",
+ "roles": "Roles",
+ "role": "Role",
+ "actions": "Actions",
+ "apiUser": "Limited API User",
+ "webOnlyUser": "Web Only User",
+ "forceChange": "Force user to change username/password on login",
+ "submit": "Save User"
+ },
+ "home": {
+ "desc": "متجرك الشامل المستضاف محليًا لجميع احتياجات PDF الخاصة بك.",
+ "searchBar": "Search for features...",
+ "viewPdf": {
+ "title": "View PDF",
+ "desc": "View, annotate, add text or images"
+ },
+ "multiTool": {
+ "title": "أداة متعددة PDF",
+ "desc": "دمج الصفحات وتدويرها وإعادة ترتيبها وإزالتها"
+ },
+ "merge": {
+ "title": "دمج ملفات",
+ "desc": "دمج ملفات PDF متعددة في ملف واحد بسهولة."
+ },
+ "split": {
+ "title": "انقسام ملفات",
+ "desc": "تقسيم ملفات PDF إلى مستندات متعددة"
+ },
+ "rotate": {
+ "title": "تدوير ملفات",
+ "desc": "قم بتدوير ملفات PDF الخاصة بك بسهولة."
+ },
+ "imageToPdf": {
+ "title": "صورة إلى PDF",
+ "desc": "تحويل الصور (PNG ، JPEG ، GIF) إلى PDF."
+ },
+ "pdfToImage": {
+ "title": "تحويل PDF إلى صورة",
+ "desc": "تحويل ملف PDF إلى صورة. (PNG ، JPEG ، GIF)"
+ },
+ "pdfOrganiser": {
+ "title": "منظم",
+ "desc": "إزالة / إعادة ترتيب الصفحات بأي ترتيب"
+ },
+ "addImage": {
+ "title": "إضافة صورة إلى ملف PDF",
+ "desc": "إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم)"
+ },
+ "watermark": {
+ "title": "إضافة علامة مائية",
+ "desc": "أضف علامة مائية مخصصة إلى مستند PDF الخاص بك."
+ },
+ "permissions": {
+ "title": "تغيير الأذونات",
+ "desc": "قم بتغيير أذونات مستند PDF الخاص بك"
+ },
+ "removePages": {
+ "title": "إزالة الصفحات",
+ "desc": "حذف الصفحات غير المرغوب فيها من مستند PDF الخاص بك."
+ },
+ "addPassword": {
+ "title": "إضافة كلمة مرور",
+ "desc": "تشفير مستند PDF الخاص بك بكلمة مرور."
+ },
+ "removePassword": {
+ "title": "إزالة كلمة المرور",
+ "desc": "إزالة الحماية بكلمة مرور من مستند PDF الخاص بك."
+ },
+ "compressPdfs": {
+ "title": "ضغط ملفات",
+ "desc": "ضغط ملفات PDF لتقليل حجم الملف."
+ },
+ "changeMetadata": {
+ "title": "\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629",
+ "desc": "\u062A\u063A\u064A\u064A\u0631 / \u0625\u0632\u0627\u0644\u0629 / \u0625\u0636\u0627\u0641\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u0646 \u0645\u0633\u062A\u0646\u062F PDF"
+ },
+ "fileToPDF": {
+ "title": "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 \u0625\u0644\u0649 PDF",
+ "desc": "\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u062A\u0642\u0631\u064A\u0628\u0627 \u0625\u0644\u0649 PDF (DOCX \u0648PNG \u0648XLS \u0648PPT \u0648TXT \u0648\u0627\u0644\u0645\u0632\u064A\u062F)"
+ },
+ "ocr": {
+ "title": "\u062A\u0634\u063A\u064A\u0644 OCR \u0639\u0644\u0649 PDF \u0648 / \u0623\u0648 \u0645\u0633\u062D \u0636\u0648\u0626\u064A",
+ "desc": "\u064A\u0642\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u0646\u0638\u064A\u0641 \u0628\u0645\u0633\u062D \u0648\u0627\u0643\u062A\u0634\u0627\u0641 \u0627\u0644\u0646\u0635 \u0645\u0646 \u0627\u0644\u0635\u0648\u0631 \u062F\u0627\u062E\u0644 \u0645\u0644\u0641 PDF \u0648\u064A\u0639\u064A\u062F \u0625\u0636\u0627\u0641\u062A\u0647 \u0643\u0646\u0635"
+ },
+ "extractImages": {
+ "title": "\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631",
+ "desc": "\u064A\u0633\u062A\u062E\u0631\u062C \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0648\u0631 \u0645\u0646 \u0645\u0644\u0641 PDF \u0648\u064A\u062D\u0641\u0638\u0647\u0627 \u0641\u064A \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A"
+ },
+ "pdfToPDFA": {
+ "title": "\u062A\u062D\u0648\u064A\u0644 \u0645\u0644\u0641\u0627\u062A PDF \u0625\u0644\u0649 PDF / A",
+ "desc": "\u062A\u062D\u0648\u064A\u0644 PDF \u0625\u0644\u0649 PDF / A \u0644\u0644\u062A\u062E\u0632\u064A\u0646 \u0637\u0648\u064A\u0644 \u0627\u0644\u0645\u062F\u0649"
+ },
+ "PDFToWord": {
+ "title": "تحويل PDF إلى Word",
+ "desc": "تحويل PDF إلى تنسيقات Word (DOC و DOCX و ODT)"
+ },
+ "PDFToPresentation": {
+ "title": "PDF للعرض التقديمي",
+ "desc": "تحويل PDF إلى تنسيقات عرض تقديمي (PPT و PPTX و ODP)"
+ },
+ "PDFToText": {
+ "title": "تحويل PDF إلى نص / RTF",
+ "desc": "تحويل PDF إلى تنسيق نص أو RTF"
+ },
+ "PDFToHTML": {
+ "title": "تحويل PDF إلى HTML",
+ "desc": "تحويل PDF إلى تنسيق HTML"
+ },
+ "PDFToXML": {
+ "title": "تحويل PDF إلى XML",
+ "desc": "تحويل PDF إلى تنسيق XML"
+ },
+ "ScannerImageSplit": {
+ "title": "كشف / انقسام الصور الممسوحة ضوئيًا",
+ "desc": "تقسيم عدة صور من داخل صورة / ملف PDF"
+ },
+ "sign": {
+ "title": "تسجيل الدخول",
+ "desc": "إضافة التوقيع إلى PDF عن طريق الرسم أو النص أو الصورة"
+ },
+ "flatten": {
+ "title": "تسطيح",
+ "desc": "قم بإزالة كافة العناصر والنماذج التفاعلية من ملف PDF"
+ },
+ "repair": {
+ "title": "إصلاح",
+ "desc": "يحاول إصلاح ملف PDF تالف / معطل"
+ },
+ "removeBlanks": {
+ "title": "إزالة الصفحات الفارغة",
+ "desc": "يكتشف ويزيل الصفحات الفارغة من المستند"
+ },
+ "compare": {
+ "title": "قارن",
+ "desc": "يقارن ويظهر الاختلافات بين 2 من مستندات PDF"
+ },
+ "certSign": {
+ "title": "Sign with Certificate",
+ "desc": "Signs a PDF with a Certificate/Key (PEM/P12)"
+ },
+ "pageLayout": {
+ "title": "Multi-Page Layout",
+ "desc": "Merge multiple pages of a PDF document into a single page"
+ },
+ "scalePages": {
+ "title": "Adjust page size/scale",
+ "desc": "Change the size/scale of page and/or its contents."
+ },
+ "pipeline": {
+ "title": "Pipeline (Advanced)",
+ "desc": "Run multiple actions on PDFs by defining pipeline scripts"
+ },
+ "add-page-numbers": {
+ "title": "Add Page Numbers",
+ "desc": "Add Page numbers throughout a document in a set location"
+ },
+ "auto-rename": {
+ "title": "Auto Rename PDF File",
+ "desc": "Auto renames a PDF file based on its detected header"
+ },
+ "adjust-contrast": {
+ "title": "Adjust Colors/Contrast",
+ "desc": "Adjust Contrast, Saturation and Brightness of a PDF"
+ },
+ "crop": {
+ "title": "Crop PDF",
+ "desc": "Crop a PDF to reduce its size (maintains text!)"
+ },
+ "autoSplitPDF": {
+ "title": "Auto Split Pages",
+ "desc": "Auto Split Scanned PDF with physical scanned page splitter QR Code"
+ },
+ "sanitizePdf": {
+ "title": "Sanitize",
+ "desc": "Remove scripts and other elements from PDF files"
+ },
+ "URLToPDF": {
+ "title": "URL/Website To PDF",
+ "desc": "Converts any http(s)URL to PDF"
+ },
+ "HTMLToPDF": {
+ "title": "HTML to PDF",
+ "desc": "Converts any HTML file or zip to PDF"
+ },
+ "MarkdownToPDF": {
+ "title": "Markdown to PDF",
+ "desc": "Converts any Markdown file to PDF"
+ },
+ "getPdfInfo": {
+ "title": "Get ALL Info on PDF",
+ "desc": "Grabs any and all information possible on PDFs"
+ },
+ "extractPage": {
+ "title": "Extract page(s)",
+ "desc": "Extracts select pages from PDF"
+ },
+ "PdfToSinglePage": {
+ "title": "PDF to Single Large Page",
+ "desc": "Merges all PDF pages into one large single page"
+ },
+ "showJS": {
+ "title": "Show Javascript",
+ "desc": "Searches and displays any JS injected into a PDF"
+ },
+ "autoRedact": {
+ "title": "Auto Redact",
+ "desc": "Auto Redacts(Blacks out) text in a PDF based on input text"
+ }
+ },
+ "viewPdf": {
+ "tags": "view,read,annotate,text,image",
+ "title": "View PDF",
+ "header": "View PDF"
+ },
+ "multiTool": {
+ "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side",
+ "title": "أداة متعددة PDF",
+ "header": "أداة متعددة PDF"
+ },
+ "merge": {
+ "tags": "merge,Page operations,Back end,server side",
+ "title": "دمج",
+ "header": "دمج ملفات PDF متعددة (2+)",
+ "sortByName": "Sort by name",
+ "sortByDate": "Sort by date",
+ "submit": "دمج"
+ },
+ "split": {
+ "tags": "Page operations,divide,Multi Page,cut,server side",
+ "title": "انقسام PDF",
+ "header": "تقسيم PDF",
+ "desc": {
+ "1": "الأرقام التي تحددها هي رقم الصفحة التي تريد تقسيمها",
+ "2": "على هذا النحو ، سيؤدي تحديد 1،3،7-8 إلى تقسيم مستند من 10 صفحات إلى 6 PDFS منفصلة مع:",
+ "3": "المستند رقم 1: الصفحة 1",
+ "4": "المستند رقم 2: الصفحتان 2 و 3",
+ "5": "المستند رقم 3: الصفحة 4 و 5 و 6",
+ "6": "المستند رقم 4: الصفحة 7",
+ "7": "المستند رقم 5: الصفحة 8",
+ "8": "المستند رقم 6: الصفحتان 9 و 10"
+ },
+ "splitPages": "أدخل الصفحات المراد تقسيمها:",
+ "submit": "Split"
+ },
+ "rotate": {
+ "tags": "server side",
+ "title": "تدوير PDF",
+ "header": "تدوير PDF",
+ "selectAngle": "حدد زاوية الدوران (بمضاعفات 90 درجة):",
+ "submit": "استدارة"
+ },
+ "imageToPdf": {
+ "tags": "conversion,img,jpg,picture,photo"
+ },
+ "pdfToImage": {
+ "tags": "conversion,img,jpg,picture,photo",
+ "title": "تحويل PDF إلى صورة",
+ "header": "تحويل PDF إلى صورة",
+ "selectText": "تنسيق الصورة",
+ "singleOrMultiple": "\u0646\u0648\u0639 \u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0635\u0648\u0631\u0629",
+ "single": "\u0635\u0648\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0643\u0628\u064A\u0631\u0629",
+ "multi": "\u0635\u0648\u0631 \u0645\u062A\u0639\u062F\u062F\u0629",
+ "colorType": "\u0646\u0648\u0639 \u0627\u0644\u0644\u0648\u0646",
+ "color": "\u0627\u0644\u0644\u0648\u0646",
+ "grey": "\u062A\u062F\u0631\u062C \u0627\u0644\u0631\u0645\u0627\u062F\u064A",
+ "blackwhite": "\u0623\u0628\u064A\u0636 \u0648\u0623\u0633\u0648\u062F (\u0642\u062F \u064A\u0641\u0642\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A!)",
+ "submit": "تحول"
+ },
+ "pdfOrganiser": {
+ "tags": "duplex,even,odd,sort,move",
+ "title": "منظم الصفحة",
+ "header": "منظم صفحات PDF",
+ "submit": "إعادة ترتيب الصفحات"
+ },
+ "addImage": {
+ "tags": "img,jpg,picture,photo",
+ "title": "إضافة صورة",
+ "header": "إضافة صورة إلى PDF",
+ "everyPage": "كل صفحة؟",
+ "upload": "إضافة صورة",
+ "submit": "إضافة صورة"
+ },
+ "watermark": {
+ "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo",
+ "title": "إضافة علامة مائية",
+ "header": "إضافة علامة مائية",
+ "selectText": {
+ "1": "حدد PDF لإضافة العلامة المائية إلى:",
+ "2": "نص العلامة المائية:",
+ "3": "حجم الخط:",
+ "4": "دوران (0-360):",
+ "5": "widthSpacer (مسافة بين كل علامة مائية أفقيًا):",
+ "6": "heightSpacer (مسافة بين كل علامة مائية عموديًا):",
+ "7": "\u0627\u0644\u062A\u0639\u062A\u064A\u0645 (0\u066A - 100\u066A):",
+ "8": "Watermark Type:",
+ "9": "Watermark Image:"
+ },
+ "submit": "إضافة علامة مائية"
+ },
+ "permissions": {
+ "tags": "read,write,edit,print",
+ "title": "تغيير الأذونات",
+ "header": "تغيير الأذونات",
+ "warning": "تحذير من أن تكون هذه الأذونات غير قابلة للتغيير ، يوصى بتعيينها بكلمة مرور عبر صفحة إضافة كلمة المرور",
+ "selectText": {
+ "1": "حدد ملف PDF لتغيير الأذونات",
+ "2": "أذونات لتعيينها",
+ "3": "منع تجميع المستند",
+ "4": "منع استخراج المحتوى",
+ "5": "منع الاستخراج للوصول",
+ "6": "منع ملء النموذج",
+ "7": "منع التعديل",
+ "8": "منع تعديل التعليق التوضيحي",
+ "9": "منع الطباعة",
+ "10": "منع طباعة التنسيقات المختلفة"
+ },
+ "submit": "تغيير"
+ },
+ "removePages": {
+ "tags": "Remove pages,delete pages"
+ },
+ "addPassword": {
+ "tags": "secure,security",
+ "title": "إضافة كلمة مرور",
+ "header": "إضافة كلمة مرور (تشفير)",
+ "selectText": {
+ "1": "حدد ملف PDF للتشفير",
+ "2": "كلمة المرور",
+ "3": "طول مفتاح التشفير",
+ "4": "القيم الأعلى تكون أقوى ، لكن القيم الأقل لها توافق أفضل.",
+ "5": "أذونات للتعيين",
+ "6": "منع تجميع المستند",
+ "7": "منع استخراج المحتوى",
+ "8": "منع الاستخراج للوصول",
+ "9": "منع ملء النموذج",
+ "10": "منع التعديل",
+ "11": "منع تعديل التعليقات التوضيحية",
+ "12": "منع الطباعة",
+ "13": "منع طباعة تنسيقات مختلفة",
+ "14": "Owner Password",
+ "15": "Restricts what can be done with the document once it is opened (Not supported by all readers)",
+ "16": "Restricts the opening of the document itself"
+ },
+ "submit": "تشفير"
+ },
+ "removePassword": {
+ "tags": "secure,Decrypt,security,unpassword,delete password",
+ "title": "إزالة كلمة المرور",
+ "header": "إزالة كلمة المرور (فك التشفير)",
+ "selectText": {
+ "1": "حدد PDF لفك التشفير",
+ "2": "كلمة المرور"
+ },
+ "submit": "إزالة"
+ },
+ "compressPdfs": {
+ "tags": "squish,small,tiny"
+ },
+ "fileToPDF": {
+ "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint",
+ "title": "\u0645\u0644\u0641 \u0625\u0644\u0649 PDF",
+ "header": "\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u0625\u0644\u0649 PDF",
+ "credit": "\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 \u0644\u064A\u0628\u0631 \u0623\u0648\u0641\u064A\u0633 \u0648\u0623\u0648\u0646\u0648\u0643\u0648\u0646\u0641 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641\u0627\u062A.",
+ "supportedFileTypes": "\u064A\u062C\u0628 \u0623\u0646 \u062A\u062A\u0636\u0645\u0646 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u062F\u0639\u0648\u0645\u0629 \u0645\u0627 \u064A\u0644\u064A \u0648\u0644\u0643\u0646 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0645\u062D\u062F\u062B\u0629 \u0643\u0627\u0645\u0644\u0629 \u0628\u0627\u0644\u062A\u0646\u0633\u064A\u0642\u0627\u062A \u0627\u0644\u0645\u062F\u0639\u0648\u0645\u0629 \u060C \u064A\u0631\u062C\u0649 \u0627\u0644\u0631\u062C\u0648\u0639 \u0625\u0644\u0649 \u0648\u062B\u0627\u0626\u0642 LibreOffice",
+ "submit": "\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 PDF"
+ },
+ "ocr": {
+ "tags": "recognition,text,image,scan,read,identify,detection,editable",
+ "title": "\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 / \u062A\u0646\u0638\u064A\u0641 \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A",
+ "header": "\u0645\u0633\u062D \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A / \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 (\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641)",
+ "selectText": {
+ "1": "\u062D\u062F\u062F \u0627\u0644\u0644\u063A\u0627\u062A \u0627\u0644\u062A\u064A \u0633\u064A\u062A\u0645 \u0627\u0643\u062A\u0634\u0627\u0641\u0647\u0627 \u062F\u0627\u062E\u0644 \u0645\u0644\u0641 PDF (\u0627\u0644\u0644\u063A\u0627\u062A \u0627\u0644\u0645\u062F\u0631\u062C\u0629 \u0647\u064A \u062A\u0644\u0643 \u0627\u0644\u062A\u064A \u062A\u0645 \u0627\u0643\u062A\u0634\u0627\u0641\u0647\u0627 \u062D\u0627\u0644\u064A\u064B\u0627):",
+ "2": "\u0625\u0646\u062A\u0627\u062C \u0645\u0644\u0641 \u0646\u0635\u064A \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0646\u0635 OCR \u0628\u062C\u0627\u0646\u0628 \u0645\u0644\u0641 PDF \u0627\u0644\u0630\u064A \u062A\u0645 \u0625\u0639\u062F\u0627\u062F\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 OCR",
+ "3": "\u062A\u0645 \u0645\u0633\u062D \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0635\u062D\u064A\u062D\u0629 \u0636\u0648\u0626\u064A\u064B\u0627 \u0628\u0632\u0627\u0648\u064A\u0629 \u0645\u0646\u062D\u0631\u0641\u0629 \u0639\u0646 \u0637\u0631\u064A\u0642 \u062A\u062F\u0648\u064A\u0631\u0647\u0627 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0641\u064A \u0645\u0643\u0627\u0646\u0647\u0627",
+ "4": "\u0635\u0641\u062D\u0629 \u0646\u0638\u064A\u0641\u0629 \u0644\u0630\u0644\u0643 \u0645\u0646 \u063A\u064A\u0631 \u0627\u0644\u0645\u062D\u062A\u0645\u0644 \u0623\u0646 \u064A\u062C\u062F OCR \u0646\u0635\u064B\u0627 \u0641\u064A \u0636\u0648\u0636\u0627\u0621 \u0627\u0644\u062E\u0644\u0641\u064A\u0629. (\u0644\u0627 \u064A\u0648\u062C\u062F \u062A\u063A\u064A\u064A\u0631 \u0641\u064A \u0627\u0644\u0625\u062E\u0631\u0627\u062C)",
+ "5": "\u0635\u0641\u062D\u0629 \u0646\u0638\u064A\u0641\u0629 \u060C \u0644\u0630\u0644\u0643 \u0645\u0646 \u063A\u064A\u0631 \u0627\u0644\u0645\u062D\u062A\u0645\u0644 \u0623\u0646 \u064A\u062C\u062F OCR \u0646\u0635\u064B\u0627 \u0641\u064A \u0636\u0648\u0636\u0627\u0621 \u0627\u0644\u062E\u0644\u0641\u064A\u0629 \u060C \u0648\u064A\u062D\u0627\u0641\u0638 \u0639\u0644\u0649 \u0627\u0644\u062A\u0646\u0638\u064A\u0641 \u0641\u064A \u0627\u0644\u0625\u062E\u0631\u0627\u062C.",
+ "6": "\u064A\u062A\u062C\u0627\u0647\u0644 \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0646\u0635 \u062A\u0641\u0627\u0639\u0644\u064A \u060C \u0641\u0642\u0637 \u0635\u0641\u062D\u0627\u062A OCRs \u0627\u0644\u062A\u064A \u0647\u064A \u0635\u0648\u0631",
+ "7": "\u0641\u0631\u0636 \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 \u060C \u0633\u064A\u0624\u062F\u064A \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 \u0639\u0644\u0649 \u0643\u0644 \u0635\u0641\u062D\u0629 \u0625\u0644\u0649 \u0625\u0632\u0627\u0644\u0629 \u062C\u0645\u064A\u0639 \u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0646\u0635 \u0627\u0644\u0623\u0635\u0644\u064A",
+ "8": "\u0639\u0627\u062F\u064A (\u062E\u0637\u0623 \u0625\u0630\u0627 \u0643\u0627\u0646 PDF \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0646\u0635)",
+ "9": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629",
+ "10": "\u0648\u0636\u0639 \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641",
+ "11": "إزالة الصور بعد التعرف الضوئي على الحروف (يزيل كل الصور ، يكون مفيدًا فقط إذا كان جزءًا من خطوة التحويل)",
+ "12": "نوع العرض (متقدم)"
+ },
+ "help": "\u064A\u0631\u062C\u0649 \u0642\u0631\u0627\u0621\u0629 \u0647\u0630\u0647 \u0627\u0644\u0648\u062B\u0627\u0626\u0642 \u062D\u0648\u0644 \u0643\u064A\u0641\u064A\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0644\u0644\u063A\u0627\u062A \u0623\u062E\u0631\u0649 \u0648 / \u0623\u0648 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u064A\u0633 \u0641\u064A \u0639\u0627\u0645\u0644 \u0627\u0644\u0625\u0631\u0633\u0627\u0621",
+ "credit": "\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0648 Tesseract \u0644 OCR.",
+ "submit": "\u0645\u0639\u0627\u0644\u062C\u0629 PDF \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 OCR"
+ },
+ "extractImages": {
+ "tags": "picture,photo,save,archive,zip,capture,grab",
+ "title": "\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631",
+ "header": "\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631",
+ "selectText": "\u062D\u062F\u062F \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u0631\u062C\u0629 \u0625\u0644\u0649",
+ "submit": "\u0627\u0633\u062A\u062E\u0631\u0627\u062C"
+ },
+ "pdfToPDFA": {
+ "tags": "archive,long-term,standard,conversion,storage,preservation",
+ "title": "PDF \u0625\u0644\u0649 PDF / A",
+ "header": "PDF \u0625\u0644\u0649 PDF / A",
+ "credit": "\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0644\u062A\u062D\u0648\u064A\u0644 PDF / A.",
+ "submit": "\u062A\u062D\u0648\u064A\u0644"
+ },
+ "PDFToWord": {
+ "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile",
+ "title": "تحويل PDF إلى Word",
+ "header": "تحويل PDF إلى Word",
+ "selectText": {
+ "1": "تنسيق ملف الإخراج"
+ },
+ "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.",
+ "submit": "تحويل"
+ },
+ "PDFToPresentation": {
+ "tags": "slides,show,office,microsoft",
+ "title": "PDF للعرض التقديمي",
+ "header": "PDF للعرض التقديمي",
+ "selectText": {
+ "1": "تنسيق ملف الإخراج"
+ },
+ "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملف.",
+ "submit": "تحويل"
+ },
+ "PDFToText": {
+ "tags": "richformat,richtextformat,rich text format",
+ "title": "تحويل PDF إلى نص / RTF",
+ "header": "تحويل PDF إلى نص / RTF",
+ "selectText": {
+ "1": "تنسيق ملف الإخراج"
+ },
+ "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.",
+ "submit": "تحويل"
+ },
+ "PDFToHTML": {
+ "tags": "web content,browser friendly",
+ "title": "PDF إلى HTML",
+ "header": "PDF إلى HTML",
+ "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.",
+ "submit": "تحويل"
+ },
+ "PDFToXML": {
+ "tags": "data-extraction,structured-content,interop,transformation,convert",
+ "title": "تحويل PDF إلى XML",
+ "header": "تحويل PDF إلى XML",
+ "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.",
+ "submit": "تحويل"
+ },
+ "ScannerImageSplit": {
+ "tags": "separate,auto-detect,scans,multi-photo,organize",
+ "selectText": {
+ "1": "عتبة الزاوية:",
+ "2": "تعيين الحد الأدنى للزاوية المطلقة المطلوبة لتدوير الصورة (افتراضي: 10).",
+ "3": "التسامح:",
+ "4": "يحدد نطاق تباين اللون حول لون الخلفية المقدر (الافتراضي: 30).",
+ "5": "أدنى مساحة:",
+ "6": "تعيين الحد الأدنى لمنطقة الصورة (الافتراضي: 10000).",
+ "7": "الحد الأدنى لمنطقة المحيط:",
+ "8": "تعيين الحد الأدنى لمنطقة المحيط للصورة",
+ "9": "حجم الحدود:",
+ "10": "يضبط حجم الحدود المضافة والمزالة لمنع الحدود البيضاء في الإخراج (الافتراضي: 1)."
+ }
+ },
+ "sign": {
+ "tags": "authorize,initials,drawn-signature,text-sign,image-signature",
+ "title": "تسجيل الدخول",
+ "header": "توقيع ملفات PDF",
+ "upload": "تحميل الصورة",
+ "draw": "رسم التوقيع",
+ "text": "Text Input",
+ "clear": "واضح",
+ "add": "إضافة"
+ },
+ "flatten": {
+ "tags": "static,deactivate,non-interactive,streamline",
+ "title": "تسطيح",
+ "header": "تسوية ملفات PDF",
+ "submit": "تسطيح"
+ },
+ "repair": {
+ "tags": "fix,restore,correction,recover",
+ "title": "إصلاح",
+ "header": "إصلاح ملفات PDF",
+ "submit": "الإصلاح"
+ },
+ "removeBlanks": {
+ "tags": "cleanup,streamline,non-content,organize",
+ "title": "إزالة الفراغات",
+ "header": "إزالة الصفحات الفارغة",
+ "threshold": "العتبة:",
+ "thresholdDesc": "الحد الفاصل لتحديد مدى بياض البكسل الأبيض",
+ "whitePercent": "نسبة الأبيض (٪):",
+ "whitePercentDesc": "النسبة المئوية للصفحة التي يجب أن تكون بيضاء لتتم إزالتها",
+ "submit": "إزالة الفراغات"
+ },
+ "compare": {
+ "tags": "differentiate,contrast,changes,analysis",
+ "title": "يقارن",
+ "header": "قارن ملفات PDF",
+ "document": {
+ "1": "المستند 1",
+ "2": "المستند 2"
+ },
+ "submit": "يقارن"
+ },
+ "certSign": {
+ "tags": "authenticate,PEM,P12,official,encrypt",
+ "title": "توقيع الشهادة",
+ "header": "قم بتوقيع ملف PDF بشهادتك (العمل قيد التقدم)",
+ "selectPDF": "حدد ملف PDF للتوقيع:",
+ "selectKey": "حدد ملف المفتاح الخاص (تنسيق PKCS ",
+ "selectCert": "حدد ملف الشهادة الخاص بك (تنسيق X.509 ، يمكن أن يكون .pem أو .der):",
+ "selectP12": "حدد ملف تخزين المفاتيح PKCS ",
+ "certType": "نوع الشهادة",
+ "password": "أدخل ملف تخزين المفاتيح أو كلمة المرور الخاصة (إن وجدت):",
+ "showSig": "إظهار التوقيع",
+ "reason": "السبب",
+ "location": "الموقع",
+ "name": "الاسم",
+ "submit": "تسجيل PDF"
+ },
+ "pageLayout": {
+ "tags": "merge,composite,single-view,organize",
+ "title": "Multi Page Layout",
+ "header": "Multi Page Layout",
+ "pagesPerSheet": "Pages per sheet:",
+ "addBorder": "Add Borders",
+ "submit": "Submit"
+ },
+ "scalePages": {
+ "tags": "resize,modify,dimension,adapt",
+ "title": "Adjust page-scale",
+ "header": "Adjust page-scale",
+ "pageSize": "Size of a page of the document.",
+ "scaleFactor": "Zoom level (crop) of a page.",
+ "submit": "Submit"
+ },
+ "pipeline": {
+ "tags": "automate,sequence,scripted,batch-process",
+ "title": "Pipeline"
+ },
+ "add-page-numbers": {
+ "tags": "paginate,label,organize,index"
+ },
+ "auto-rename": {
+ "tags": "auto-detect,header-based,organize,relabel",
+ "title": "Auto Rename",
+ "header": "Auto Rename PDF",
+ "submit": "Auto Rename"
+ },
+ "adjust-contrast": {
+ "tags": "color-correction,tune,modify,enhance"
+ },
+ "crop": {
+ "tags": "trim,shrink,edit,shape",
+ "title": "Crop",
+ "header": "Crop Image",
+ "submit": "Submit"
+ },
+ "autoSplitPDF": {
+ "tags": "QR-based,separate,scan-segment,organize",
+ "title": "Auto Split PDF",
+ "header": "Auto Split PDF",
+ "description": "Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.",
+ "selectText": {
+ "1": "Print out some divider sheets from below (Black and white is fine).",
+ "2": "Scan all your documents at once by inserting the divider sheet between them.",
+ "3": "Upload the single large scanned PDF file and let Stirling PDF handle the rest.",
+ "4": "Divider pages are automatically detected and removed, guaranteeing a neat final document."
+ },
+ "formPrompt": "Submit PDF containing Stirling-PDF Page dividers:",
+ "duplexMode": "Duplex Mode (Front and back scanning)",
+ "dividerDownload1": "Download 'Auto Splitter Divider (minimal).pdf'",
+ "dividerDownload2": "Download 'Auto Splitter Divider (with instructions).pdf'",
+ "submit": "Submit"
+ },
+ "sanitizePdf": {
+ "tags": "clean,secure,safe,remove-threats"
+ },
+ "URLToPDF": {
+ "tags": "web-capture,save-page,web-to-doc,archive",
+ "title": "URL To PDF",
+ "header": "URL To PDF",
+ "submit": "Convert",
+ "credit": "Uses WeasyPrint"
+ },
+ "HTMLToPDF": {
+ "tags": "markup,web-content,transformation,convert",
+ "title": "HTML To PDF",
+ "header": "HTML To PDF",
+ "help": "Accepts HTML files and ZIPs containing html/css/images etc required",
+ "submit": "Convert",
+ "credit": "Uses WeasyPrint"
+ },
+ "MarkdownToPDF": {
+ "tags": "markup,web-content,transformation,convert",
+ "title": "Markdown To PDF",
+ "header": "Markdown To PDF",
+ "submit": "Convert",
+ "help": "Work in progress",
+ "credit": "Uses WeasyPrint"
+ },
+ "getPdfInfo": {
+ "tags": "infomation,data,stats,statistics",
+ "title": "Get Info on PDF",
+ "header": "Get Info on PDF",
+ "submit": "Get Info",
+ "downloadJson": "Download JSON"
+ },
+ "extractPage": {
+ "tags": "extract"
+ },
+ "PdfToSinglePage": {
+ "tags": "single page"
+ },
+ "showJS": {
+ "tags": "JS",
+ "title": "Show Javascript",
+ "header": "Show Javascript",
+ "downloadJS": "Download Javascript",
+ "submit": "Show"
+ },
+ "login": {
+ "title": "Sign in",
+ "signin": "Sign in",
+ "rememberme": "Remember me",
+ "invalid": "Invalid username or password.",
+ "locked": "Your account has been locked.",
+ "signinTitle": "Please sign in"
+ },
+ "autoRedact": {
+ "title": "Auto Redact",
+ "header": "Auto Redact",
+ "colorLabel": "Colour",
+ "textsToRedactLabel": "Text to Redact (line-separated)",
+ "textsToRedactPlaceholder": "e.g. \\nConfidential \\nTop-Secret",
+ "useRegexLabel": "Use Regex",
+ "wholeWordSearchLabel": "Whole Word Search",
+ "customPaddingLabel": "Custom Extra Padding",
+ "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)",
+ "submitButton": "Submit"
+ },
+ "pdfToSinglePage": {
+ "title": "PDF To Single Page",
+ "header": "PDF To Single Page",
+ "submit": "Convert To Single Page"
+ },
+ "pageExtracter": {
+ "title": "Extract Pages",
+ "header": "Extract Pages",
+ "submit": "Extract"
+ },
+ "sanitizePDF": {
+ "title": "Sanitize PDF",
+ "header": "Sanitize a PDF file",
+ "selectText": {
+ "1": "Remove JavaScript actions",
+ "2": "Remove embedded files",
+ "3": "Remove metadata",
+ "4": "Remove links",
+ "5": "Remove fonts"
+ },
+ "submit": "Sanitize PDF"
+ },
+ "addPageNumbers": {
+ "title": "Add Page Numbers",
+ "header": "Add Page Numbers",
+ "selectText": {
+ "1": "Select PDF file:",
+ "2": "Margin Size",
+ "3": "Position",
+ "4": "Starting Number",
+ "5": "Pages to Number",
+ "6": "Custom Text"
+ },
+ "customTextDesc": "Custom Text",
+ "numberPagesDesc": "Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc",
+ "customNumberDesc": "Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}",
+ "submit": "Add Page Numbers"
+ },
+ "adjustContrast": {
+ "title": "Adjust Contrast",
+ "header": "Adjust Contrast",
+ "contrast": "Contrast:",
+ "brightness": "Brightness:",
+ "saturation": "Saturation:",
+ "download": "Download"
+ },
+ "compress": {
+ "title": "ضغط",
+ "header": "ضغط ملف PDF",
+ "credit": "تستخدم هذه الخدمة OCRmyPDF لضغط / تحسين PDF.",
+ "selectText": {
+ "1": "الوضع اليدوي - من 1 إلى 4",
+ "2": "مستوى التحسين:",
+ "3": "4 (رهيب للصور النصية)",
+ "4": "الوضع التلقائي - يضبط الجودة تلقائيًا للحصول على ملف PDF بالحجم المحدد",
+ "5": "حجم PDF المتوقع (على سبيل المثال 25 ميجا بايت ، 10.8 ميجا بايت ، 25 كيلو بايت)"
+ },
+ "submit": "ضغطضغط"
+ },
+ "pageRemover": {
+ "title": "مزيل الصفحة",
+ "header": "مزيل صفحة PDF",
+ "pagesToDelete": "الصفحات المراد حذفها (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):",
+ "submit": "حذف الصفحات"
+ },
+ "imageToPDF": {
+ "title": "صورة إلى PDF",
+ "header": "صورة إلى PDF",
+ "submit": "تحول",
+ "selectLabel": "Image Fit Options",
+ "fillPage": "Fill Page",
+ "fitDocumentToImage": "Fit Page to Image",
+ "maintainAspectRatio": "Maintain Aspect Ratios",
+ "selectText": {
+ "2": "\u062F\u0648\u0631\u0627\u0646 PDF \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627",
+ "3": "\u0627\u0644\u0645\u0646\u0637\u0642 \u0627\u0644\u0645\u062A\u0639\u062F\u062F \u0644\u0644\u0645\u0644\u0641\u0627\u062A (\u0645\u0641\u0639\u0651\u0644 \u0641\u0642\u0637 \u0625\u0630\u0627 \u0643\u0646\u062A \u062A\u0639\u0645\u0644 \u0645\u0639 \u0635\u0648\u0631 \u0645\u062A\u0639\u062F\u062F\u0629)",
+ "4": "\u062F\u0645\u062C \u0641\u064A \u0645\u0644\u0641 PDF \u0648\u0627\u062D\u062F",
+ "5": "\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A PDF \u0645\u0646\u0641\u0635\u0644\u0629"
+ }
+ },
+ "changeMetadata": {
+ "title": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646:",
+ "header": "\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629",
+ "selectText": {
+ "1": "\u064A\u0631\u062C\u0649 \u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062A\u063A\u064A\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u063A\u0628 \u0641\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627",
+ "2": "\u062D\u0630\u0641 \u0643\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629",
+ "3": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0645\u062E\u0635\u0635\u0629:",
+ "4": "\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0635\u0641\u064A\u0629 \u0623\u062E\u0631\u0649:",
+ "5": "\u0625\u0636\u0627\u0641\u0629 \u0625\u062F\u062E\u0627\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u062E\u0635\u0635"
+ },
+ "author": "\u0627\u0644\u0645\u0624\u0644\u0641:",
+ "creationDate": "\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0625\u0646\u0634\u0627\u0621 (yyyy / MM / dd HH: mm: ss):",
+ "creator": "\u0627\u0644\u0645\u0646\u0634\u0626:",
+ "keywords": "\u0627\u0644\u0643\u0644\u0645\u0627\u062A \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629:",
+ "modDate": "\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062A\u0639\u062F\u064A\u0644 (yyyy / MM / dd HH: mm: ss):",
+ "producer": "\u0627\u0644\u0645\u0646\u062A\u062C:",
+ "subject": "\u0627\u0644\u0645\u0648\u0636\u0648\u0639:",
+ "trapped": "\u0645\u062D\u0627\u0635\u0631:",
+ "submit": "\u062A\u063A\u064A\u064A\u0631"
+ }
+ }
+}
\ No newline at end of file
diff --git a/client-tauri/src/locales/en.json b/client-tauri/src/locales/en.json
new file mode 100644
index 000000000..806f4a451
--- /dev/null
+++ b/client-tauri/src/locales/en.json
@@ -0,0 +1,854 @@
+{
+ "translation": {
+ "language": {
+ "name":"English (UK)",
+ "flag": "🇬🇧",
+ "direction": "ltr"
+ },
+ "pdfPrompt": "Select PDF(s)",
+ "multiPdfPrompt": "Select PDFs (2+)",
+ "multiPdfDropPrompt": "Select (or drag & drop) all PDFs you require",
+ "imgPrompt": "Select Image(s)",
+ "genericSubmit": "Submit",
+ "processTimeWarning": "Warning: This process can take up to a minute depending on file-size",
+ "pageOrderPrompt": "Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :",
+ "goToPage": "Go",
+ "true": "True",
+ "false": "False",
+ "unknown": "Unknown",
+ "save": "Save",
+ "close": "Close",
+ "filesSelected": "files selected",
+ "noFavourites": "No favourites added",
+ "bored": "Bored Waiting?",
+ "alphabet": "Alphabet",
+ "downloadPdf": "Download PDF",
+ "text": "Text",
+ "font": "Font",
+ "selectFillter": "-- Select --",
+ "pageNum": "Page Number ",
+ "sizes": {
+ "small": "Small",
+ "medium": "Medium",
+ "large": "Large",
+ "x-large": "X-Large"
+ },
+ "error": {
+ "pdfPassword": "The PDF Document is passworded and either the password was not provided or was incorrect"
+ },
+ "delete": "Delete",
+ "username": "Username",
+ "password": "Password",
+ "welcome": "Welcome",
+ "property": "Property",
+ "black": "Black",
+ "white": "White",
+ "red": "Red",
+ "green": "Green",
+ "blue": "Blue",
+ "custom": "Custom...",
+ "changedCredsMessage": "Credentials changed!",
+ "notAuthenticatedMessage": "User not authenticated.",
+ "userNotFoundMessage": "User not found.",
+ "incorrectPasswordMessage": "Current password is incorrect.",
+ "usernameExistsMessage": "New Username already exists.",
+ "navbar": {
+ "convert": "Convert",
+ "security": "Security",
+ "other": "Miscellaneous",
+ "darkmode": "Dark Mode",
+ "pageOps": "Page Operations",
+ "settings": "Settings"
+ },
+ "settings": {
+ "title": "Settings",
+ "update": "Update available",
+ "appVersion": "App Version:",
+ "downloadOption": {
+ "1": "Open in same window",
+ "2": "Open in new window",
+ "3": "Download file",
+ "title": "Choose download option (For single file non zip downloads):"
+ },
+ "zipThreshold": "Zip files when the number of downloaded files exceeds",
+ "signOut": "Sign Out",
+ "accountSettings": "Account Settings"
+ },
+ "changeCreds": {
+ "title": "Change Credentials",
+ "header": "Update Your Account Details",
+ "changeUserAndPassword": "You are using default login credentials. Please enter a new password (and username if wanted)",
+ "newUsername": "New Username",
+ "oldPassword": "Current Password",
+ "newPassword": "New Password",
+ "confirmNewPassword": "Confirm New Password",
+ "submit": "Submit Changes"
+ },
+ "account": {
+ "title": "Account Settings",
+ "accountSettings": "Account Settings",
+ "adminSettings": "Admin Settings - View and Add Users",
+ "userControlSettings": "User Control Settings",
+ "changeUsername": "Change Username",
+ "password": "Confirmation Password",
+ "oldPassword": "Old password",
+ "newPassword": "New Password",
+ "changePassword": "Change Password",
+ "confirmNewPassword": "Confirm New Password",
+ "signOut": "Sign Out",
+ "yourApiKey": "Your API Key",
+ "syncTitle": "Sync browser settings with Account",
+ "settingsCompare": "Settings Comparison:",
+ "property": "Property",
+ "webBrowserSettings": "Web Browser Setting",
+ "syncToBrowser": "Sync Account -> Browser",
+ "syncToAccount": "Sync Account <- Browser"
+ },
+ "adminUserSettings": {
+ "title": "User Control Settings",
+ "header": "Admin User Control Settings",
+ "admin": "Admin",
+ "user": "User",
+ "addUser": "Add New User",
+ "roles": "Roles",
+ "role": "Role",
+ "actions": "Actions",
+ "apiUser": "Limited API User",
+ "webOnlyUser": "Web Only User",
+ "forceChange": "Force user to change username/password on login",
+ "submit": "Save User"
+ },
+ "home": {
+ "desc": "Your locally hosted one-stop-shop for all your PDF needs.",
+ "searchBar": "Search for features...",
+ "viewPdf": {
+ "title": "View PDF",
+ "desc": "View, annotate, add text or images"
+ },
+ "multiTool": {
+ "title": "PDF Multi Tool",
+ "desc": "Merge, Rotate, Rearrange, and Remove pages"
+ },
+ "merge": {
+ "title": "Merge",
+ "desc": "Easily merge multiple PDFs into one."
+ },
+ "split": {
+ "title": "Split",
+ "desc": "Split PDFs into multiple documents"
+ },
+ "rotate": {
+ "title": "Rotate",
+ "desc": "Easily rotate your PDFs."
+ },
+ "imageToPdf": {
+ "title": "Image to PDF",
+ "desc": "Convert a image (PNG, JPEG, GIF) to PDF."
+ },
+ "pdfToImage": {
+ "title": "PDF to Image",
+ "desc": "Convert a PDF to a image. (PNG, JPEG, GIF)"
+ },
+ "pdfOrganiser": {
+ "title": "Organise",
+ "desc": "Remove/Rearrange pages in any order"
+ },
+ "addImage": {
+ "title": "Add image",
+ "desc": "Adds a image onto a set location on the PDF"
+ },
+ "watermark": {
+ "title": "Add Watermark",
+ "desc": "Add a custom watermark to your PDF document."
+ },
+ "permissions": {
+ "title": "Change Permissions",
+ "desc": "Change the permissions of your PDF document"
+ },
+ "removePages": {
+ "title": "Remove",
+ "desc": "Delete unwanted pages from your PDF document."
+ },
+ "addPassword": {
+ "title": "Add Password",
+ "desc": "Encrypt your PDF document with a password."
+ },
+ "removePassword": {
+ "title": "Remove Password",
+ "desc": "Remove password protection from your PDF document."
+ },
+ "compressPdfs": {
+ "title": "Compress",
+ "desc": "Compress PDFs to reduce their file size."
+ },
+ "changeMetadata": {
+ "title": "Change Metadata",
+ "desc": "Change/Remove/Add metadata from a PDF document"
+ },
+ "fileToPDF": {
+ "title": "Convert file to PDF",
+ "desc": "Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more)"
+ },
+ "ocr": {
+ "title": "OCR / Cleanup scans",
+ "desc": "Cleanup scans and detects text from images within a PDF and re-adds it as text."
+ },
+ "extractImages": {
+ "title": "Extract Images",
+ "desc": "Extracts all images from a PDF and saves them to zip"
+ },
+ "pdfToPDFA": {
+ "title": "PDF to PDF/A",
+ "desc": "Convert PDF to PDF/A for long-term storage"
+ },
+ "PDFToWord": {
+ "title": "PDF to Word",
+ "desc": "Convert PDF to Word formats (DOC, DOCX and ODT)"
+ },
+ "PDFToPresentation": {
+ "title": "PDF to Presentation",
+ "desc": "Convert PDF to Presentation formats (PPT, PPTX and ODP)"
+ },
+ "PDFToText": {
+ "title": "PDF to RTF (Text)",
+ "desc": "Convert PDF to Text or RTF format"
+ },
+ "PDFToHTML": {
+ "title": "PDF to HTML",
+ "desc": "Convert PDF to HTML format"
+ },
+ "PDFToXML": {
+ "title": "PDF to XML",
+ "desc": "Convert PDF to XML format"
+ },
+ "ScannerImageSplit": {
+ "title": "Detect/Split Scanned photos",
+ "desc": "Splits multiple photos from within a photo/PDF"
+ },
+ "sign": {
+ "title": "Sign",
+ "desc": "Adds signature to PDF by drawing, text or image"
+ },
+ "flatten": {
+ "title": "Flatten",
+ "desc": "Remove all interactive elements and forms from a PDF"
+ },
+ "repair": {
+ "title": "Repair",
+ "desc": "Tries to repair a corrupt/broken PDF"
+ },
+ "removeBlanks": {
+ "title": "Remove Blank pages",
+ "desc": "Detects and removes blank pages from a document"
+ },
+ "compare": {
+ "title": "Compare",
+ "desc": "Compares and shows the differences between 2 PDF Documents"
+ },
+ "certSign": {
+ "title": "Sign with Certificate",
+ "desc": "Signs a PDF with a Certificate/Key (PEM/P12)"
+ },
+ "pageLayout": {
+ "title": "Multi-Page Layout",
+ "desc": "Merge multiple pages of a PDF document into a single page"
+ },
+ "scalePages": {
+ "title": "Adjust page size/scale",
+ "desc": "Change the size/scale of a page and/or its contents."
+ },
+ "pipeline": {
+ "title": "Pipeline (Advanced)",
+ "desc": "Run multiple actions on PDFs by defining pipeline scripts"
+ },
+ "add-page-numbers": {
+ "title": "Add Page Numbers",
+ "desc": "Add Page numbers throughout a document in a set location"
+ },
+ "auto-rename": {
+ "title": "Auto Rename PDF File",
+ "desc": "Auto renames a PDF file based on its detected header "
+ },
+ "adjust-contrast": {
+ "title": "Adjust Colors/Contrast",
+ "desc": "Adjust Contrast, Saturation and Brightness of a PDF"
+ },
+ "crop": {
+ "title": "Crop PDF",
+ "desc": "Crop a PDF to reduce its size (maintains text!)"
+ },
+ "autoSplitPDF": {
+ "title": "Auto Split Pages",
+ "desc": "Auto Split Scanned PDF with physical scanned page splitter QR Code"
+ },
+ "sanitizePdf": {
+ "title": "Sanitize",
+ "desc": "Remove scripts and other elements from PDF files"
+ },
+ "URLToPDF": {
+ "title": "URL/Website To PDF",
+ "desc": "Converts any http(s)URL to PDF"
+ },
+ "HTMLToPDF": {
+ "title": "HTML to PDF",
+ "desc": "Converts any HTML file or zip to PDF"
+ },
+ "MarkdownToPDF": {
+ "title": "Markdown to PDF",
+ "desc": "Converts any Markdown file to PDF"
+ },
+ "getPdfInfo": {
+ "title": "Get ALL Info on PDF",
+ "desc": "Grabs any and all information possible on PDFs"
+ },
+ "extractPage": {
+ "title": "Extract page(s)",
+ "desc": "Extracts select pages from PDF"
+ },
+ "PdfToSinglePage": {
+ "title": "PDF to Single Large Page",
+ "desc": "Merges all PDF pages into one large single page"
+ },
+ "showJS": {
+ "title": "Show Javascript",
+ "desc": "Searches and displays any JS injected into a PDF"
+ },
+ "autoRedact": {
+ "title": "Auto Redact",
+ "desc": "Auto Redacts(Blacks out) text in a PDF based on input text"
+ }
+ },
+ "viewPdf": {
+ "tags": "view,read,annotate,text,image",
+ "title": "View PDF",
+ "header": "View PDF"
+ },
+ "multiTool": {
+ "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move",
+ "title": "PDF Multi Tool",
+ "header": "PDF Multi Tool"
+ },
+ "merge": {
+ "tags": "merge,Page operations,Back end,server side",
+ "title": "Merge",
+ "header": "Merge multiple PDFs (2+)",
+ "sortByName": "Sort by name",
+ "sortByDate": "Sort by date",
+ "submit": "Merge"
+ },
+ "split": {
+ "tags": "Page operations,divide,Multi Page,cut,server side ",
+ "title": "Split PDF",
+ "header": "Split PDF",
+ "desc": {
+ "1": "The numbers you select are the page number you wish to do a split on",
+ "2": "As such selecting 1,3,7-8 would split a 10 page document into 6 separate PDFS with:",
+ "3": "Document ",
+ "4": "Document ",
+ "5": "Document ",
+ "6": "Document ",
+ "7": "Document ",
+ "8": "Document "
+ },
+ "splitPages": "Enter pages to split on:",
+ "submit": "Split"
+ },
+ "rotate": {
+ "tags": "server side",
+ "title": "Rotate PDF",
+ "header": "Rotate PDF",
+ "selectAngle": "Select rotation angle (in multiples of 90 degrees):",
+ "submit": "Rotate"
+ },
+ "imageToPdf": {
+ "tags": "conversion,img,jpg,picture,photo"
+ },
+ "pdfToImage": {
+ "tags": "conversion,img,jpg,picture,photo",
+ "title": "PDF to Image",
+ "header": "PDF to Image",
+ "selectText": "Image Format",
+ "singleOrMultiple": "Page to Image result type",
+ "single": "Single Big Image Combing all pages",
+ "multi": "Multiple Images, one image per page",
+ "colorType": "Colour type",
+ "color": "Colour",
+ "grey": "Greyscale",
+ "blackwhite": "Black and White (May lose data!)",
+ "submit": "Convert"
+ },
+ "pdfOrganiser": {
+ "tags": "duplex,even,odd,sort,move",
+ "title": "Page Organiser",
+ "header": "PDF Page Organiser",
+ "submit": "Rearrange Pages"
+ },
+ "addImage": {
+ "tags": "img,jpg,picture,photo",
+ "title": "Add Image",
+ "header": "Add image to PDF",
+ "everyPage": "Every Page?",
+ "upload": "Add image",
+ "submit": "Add image"
+ },
+ "watermark": {
+ "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo",
+ "title": "Add Watermark",
+ "header": "Add Watermark",
+ "selectText": {
+ "1": "Select PDF to add watermark to:",
+ "2": "Watermark Text:",
+ "3": "Font Size:",
+ "4": "Rotation (0-360):",
+ "5": "widthSpacer (Space between each watermark horizontally):",
+ "6": "heightSpacer (Space between each watermark vertically):",
+ "7": "Opacity (0% - 100%):",
+ "8": "Watermark Type:",
+ "9": "Watermark Image:"
+ },
+ "submit": "Add Watermark"
+ },
+ "permissions": {
+ "tags": "read,write,edit,print",
+ "title": "Change Permissions",
+ "header": "Change Permissions",
+ "warning": "Warning to have these permissions be unchangeable it is recommended to set them with a password via the add-password page",
+ "selectText": {
+ "1": "Select PDF to change permissions",
+ "2": "Permissions to set",
+ "3": "Prevent assembly of document",
+ "4": "Prevent content extraction",
+ "5": "Prevent extraction for accessibility",
+ "6": "Prevent filling in form",
+ "7": "Prevent modification",
+ "8": "Prevent annotation modification",
+ "9": "Prevent printing",
+ "10": "Prevent printing different formats"
+ },
+ "submit": "Change"
+ },
+ "removePages": {
+ "tags": "Remove pages,delete pages"
+ },
+ "addPassword": {
+ "tags": "secure,security",
+ "title": "Add Password",
+ "header": "Add password (Encrypt)",
+ "selectText": {
+ "1": "Select PDF to encrypt",
+ "2": "User Password",
+ "3": "Encryption Key Length",
+ "4": "Higher values are stronger, but lower values have better compatibility.",
+ "5": "Permissions to set (Recommended to be used along with Owner password)",
+ "6": "Prevent assembly of document",
+ "7": "Prevent content extraction",
+ "8": "Prevent extraction for accessibility",
+ "9": "Prevent filling in form",
+ "10": "Prevent modification",
+ "11": "Prevent annotation modification",
+ "12": "Prevent printing",
+ "13": "Prevent printing different formats",
+ "14": "Owner Password",
+ "15": "Restricts what can be done with the document once it is opened (Not supported by all readers)",
+ "16": "Restricts the opening of the document itself"
+ },
+ "submit": "Encrypt"
+ },
+ "removePassword": {
+ "tags": "secure,Decrypt,security,unpassword,delete password",
+ "title": "Remove password",
+ "header": "Remove password (Decrypt)",
+ "selectText": {
+ "1": "Select PDF to Decrypt",
+ "2": "Password"
+ },
+ "submit": "Remove"
+ },
+ "compressPdfs": {
+ "tags": "squish,small,tiny"
+ },
+ "fileToPDF": {
+ "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint",
+ "title": "File to PDF",
+ "header": "Convert any file to PDF",
+ "credit": "This service uses LibreOffice and Unoconv for file conversion.",
+ "supportedFileTypes": "Supported file types should include the below however for a full updated list of supported formats, please refer to the LibreOffice documentation",
+ "submit": "Convert to PDF"
+ },
+ "ocr": {
+ "tags": "recognition,text,image,scan,read,identify,detection,editable",
+ "title": "OCR / Scan Cleanup",
+ "header": "Cleanup Scans / OCR (Optical Character Recognition)",
+ "selectText": {
+ "1": "Select languages that are to be detected within the PDF (Ones listed are the ones currently detected):",
+ "2": "Produce text file containing OCR text alongside the OCR'ed PDF",
+ "3": "Correct pages were scanned at a skewed angle by rotating them back into place",
+ "4": "Clean page so its less likely that OCR will find text in background noise. (No output change)",
+ "5": "Clean page so its less likely that OCR will find text in background noise, maintains cleanup in output.",
+ "6": "Ignores pages that have interactive text on them, only OCRs pages that are images",
+ "7": "Force OCR, will OCR Every page removing all original text elements",
+ "8": "Normal (Will error if PDF contains text)",
+ "9": "Additional Settings",
+ "10": "OCR Mode",
+ "11": "Remove images after OCR (Removes ALL images, only useful if part of conversion step)",
+ "12": "Render Type (Advanced)"
+ },
+ "help": "Please read this documentation on how to use this for other languages and/or use not in docker",
+ "credit": "This service uses OCRmyPDF and Tesseract for OCR.",
+ "submit": "Process PDF with OCR"
+ },
+ "extractImages": {
+ "tags": "picture,photo,save,archive,zip,capture,grab",
+ "title": "Extract Images",
+ "header": "Extract Images",
+ "selectText": "Select image format to convert extracted images to",
+ "submit": "Extract"
+ },
+ "pdfToPDFA": {
+ "tags": "archive,long-term,standard,conversion,storage,preservation",
+ "title": "PDF To PDF/A",
+ "header": "PDF To PDF/A",
+ "credit": "This service uses OCRmyPDF for PDF/A conversion",
+ "submit": "Convert"
+ },
+ "PDFToWord": {
+ "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile",
+ "title": "PDF to Word",
+ "header": "PDF to Word",
+ "selectText": {
+ "1": "Output file format"
+ },
+ "credit": "This service uses LibreOffice for file conversion.",
+ "submit": "Convert"
+ },
+ "PDFToPresentation": {
+ "tags": "slides,show,office,microsoft",
+ "title": "PDF to Presentation",
+ "header": "PDF to Presentation",
+ "selectText": {
+ "1": "Output file format"
+ },
+ "credit": "This service uses LibreOffice for file conversion.",
+ "submit": "Convert"
+ },
+ "PDFToText": {
+ "tags": "richformat,richtextformat,rich text format",
+ "title": "PDF to RTF (Text)",
+ "header": "PDF to RTF (Text)",
+ "selectText": {
+ "1": "Output file format"
+ },
+ "credit": "This service uses LibreOffice for file conversion.",
+ "submit": "Convert"
+ },
+ "PDFToHTML": {
+ "tags": "web content,browser friendly",
+ "title": "PDF to HTML",
+ "header": "PDF to HTML",
+ "credit": "This service uses LibreOffice for file conversion.",
+ "submit": "Convert"
+ },
+ "PDFToXML": {
+ "tags": "data-extraction,structured-content,interop,transformation,convert",
+ "title": "PDF to XML",
+ "header": "PDF to XML",
+ "credit": "This service uses LibreOffice for file conversion.",
+ "submit": "Convert"
+ },
+ "ScannerImageSplit": {
+ "tags": "separate,auto-detect,scans,multi-photo,organize",
+ "selectText": {
+ "1": "Angle Threshold:",
+ "2": "Sets the minimum absolute angle required for the image to be rotated (default: 10).",
+ "3": "Tolerance:",
+ "4": "Determines the range of color variation around the estimated background color (default: 30).",
+ "5": "Minimum Area:",
+ "6": "Sets the minimum area threshold for a photo (default: 10000).",
+ "7": "Minimum Contour Area:",
+ "8": "Sets the minimum contour area threshold for a photo",
+ "9": "Border Size:",
+ "10": "Sets the size of the border added and removed to prevent white borders in the output (default: 1)."
+ }
+ },
+ "sign": {
+ "tags": "authorize,initials,drawn-signature,text-sign,image-signature",
+ "title": "Sign",
+ "header": "Sign PDFs",
+ "upload": "Upload Image",
+ "draw": "Draw Signature",
+ "text": "Text Input",
+ "clear": "Clear",
+ "add": "Add"
+ },
+ "flatten": {
+ "tags": "static,deactivate,non-interactive,streamline",
+ "title": "Flatten",
+ "header": "Flatten PDFs",
+ "submit": "Flatten"
+ },
+ "repair": {
+ "tags": "fix,restore,correction,recover",
+ "title": "Repair",
+ "header": "Repair PDFs",
+ "submit": "Repair"
+ },
+ "removeBlanks": {
+ "tags": "cleanup,streamline,non-content,organize",
+ "title": "Remove Blanks",
+ "header": "Remove Blank Pages",
+ "threshold": "Pixel Whiteness Threshold:",
+ "thresholdDesc": "Threshold for determining how white a white pixel must be to be classed as 'White'. 0 ",
+ "whitePercent": "White Percent (%):",
+ "whitePercentDesc": "Percent of page that must be 'white' pixels to be removed",
+ "submit": "Remove Blanks"
+ },
+ "compare": {
+ "tags": "differentiate,contrast,changes,analysis",
+ "title": "Compare",
+ "header": "Compare PDFs",
+ "document": {
+ "1": "Document 1",
+ "2": "Document 2"
+ },
+ "submit": "Compare"
+ },
+ "certSign": {
+ "tags": "authenticate,PEM,P12,official,encrypt",
+ "title": "Certificate Signing",
+ "header": "Sign a PDF with your certificate (Work in progress)",
+ "selectPDF": "Select a PDF File for Signing: ",
+ "selectKey": "Select Your Private Key File (PKCS",
+ "selectCert": "Select Your Certificate File (X.509 format, could be .pem or .der): ",
+ "selectP12": "Select Your PKCS",
+ "certType": "Certificate Type",
+ "password": "Enter Your Keystore or Private Key Password (If Any): ",
+ "showSig": "Show Signature",
+ "reason": "Reason",
+ "location": "Location",
+ "name": "Name ",
+ "submit": "Sign PDF"
+ },
+ "pageLayout": {
+ "tags": "merge,composite,single-view,organize",
+ "title": "Multi Page Layout",
+ "header": "Multi Page Layout",
+ "pagesPerSheet": "Pages per sheet:",
+ "addBorder": "Add Borders",
+ "submit": "Submit"
+ },
+ "scalePages": {
+ "tags": "resize,modify,dimension,adapt",
+ "title": "Adjust page-scale",
+ "header": "Adjust page-scale",
+ "pageSize": "Size of a page of the document.",
+ "scaleFactor": "Zoom level (crop) of a page.",
+ "submit": "Submit"
+ },
+ "pipeline": {
+ "tags": "automate,sequence,scripted,batch-process",
+ "title": "Pipeline"
+ },
+ "add-page-numbers": {
+ "tags": "paginate,label,organize,index"
+ },
+ "auto-rename": {
+ "tags": "auto-detect,header-based,organize,relabel",
+ "title": "Auto Rename",
+ "header": "Auto Rename PDF",
+ "submit": "Auto Rename"
+ },
+ "adjust-contrast": {
+ "tags": "color-correction,tune,modify,enhance"
+ },
+ "crop": {
+ "tags": "trim,shrink,edit,shape",
+ "title": "Crop",
+ "header": "Crop Image",
+ "submit": "Submit"
+ },
+ "autoSplitPDF": {
+ "tags": "QR-based,separate,scan-segment,organize",
+ "title": "Auto Split PDF",
+ "header": "Auto Split PDF",
+ "description": "Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.",
+ "selectText": {
+ "1": "Print out some divider sheets from below (Black and white is fine).",
+ "2": "Scan all your documents at once by inserting the divider sheet between them.",
+ "3": "Upload the single large scanned PDF file and let Stirling PDF handle the rest.",
+ "4": "Divider pages are automatically detected and removed, guaranteeing a neat final document."
+ },
+ "formPrompt": "Submit PDF containing Stirling-PDF Page dividers:",
+ "duplexMode": "Duplex Mode (Front and back scanning)",
+ "dividerDownload1": "Download 'Auto Splitter Divider (minimal).pdf'",
+ "dividerDownload2": "Download 'Auto Splitter Divider (with instructions).pdf'",
+ "submit": "Submit"
+ },
+ "sanitizePdf": {
+ "tags": "clean,secure,safe,remove-threats"
+ },
+ "URLToPDF": {
+ "tags": "web-capture,save-page,web-to-doc,archive",
+ "title": "URL To PDF",
+ "header": "URL To PDF",
+ "submit": "Convert",
+ "credit": "Uses WeasyPrint"
+ },
+ "HTMLToPDF": {
+ "tags": "markup,web-content,transformation,convert",
+ "title": "HTML To PDF",
+ "header": "HTML To PDF",
+ "help": "Accepts HTML files and ZIPs containing html/css/images etc required",
+ "submit": "Convert",
+ "credit": "Uses WeasyPrint"
+ },
+ "MarkdownToPDF": {
+ "tags": "markup,web-content,transformation,convert",
+ "title": "Markdown To PDF",
+ "header": "Markdown To PDF",
+ "submit": "Convert",
+ "help": "Work in progress",
+ "credit": "Uses WeasyPrint"
+ },
+ "getPdfInfo": {
+ "tags": "infomation,data,stats,statistics",
+ "title": "Get Info on PDF",
+ "header": "Get Info on PDF",
+ "submit": "Get Info",
+ "downloadJson": "Download JSON"
+ },
+ "extractPage": {
+ "tags": "extract"
+ },
+ "PdfToSinglePage": {
+ "tags": "single page"
+ },
+ "showJS": {
+ "tags": "Redact,Hide,black out,black,marker,hidden",
+ "title": "Show Javascript",
+ "header": "Show Javascript",
+ "downloadJS": "Download Javascript",
+ "submit": "Show"
+ },
+ "login": {
+ "title": "Sign in",
+ "signin": "Sign in",
+ "rememberme": "Remember me",
+ "invalid": "Invalid username or password.",
+ "locked": "Your account has been locked.",
+ "signinTitle": "Please sign in"
+ },
+ "autoRedact": {
+ "title": "Auto Redact",
+ "header": "Auto Redact",
+ "colorLabel": "Colour",
+ "textsToRedactLabel": "Text to Redact (line-separated)",
+ "textsToRedactPlaceholder": "e.g. \\nConfidential \\nTop-Secret",
+ "useRegexLabel": "Use Regex",
+ "wholeWordSearchLabel": "Whole Word Search",
+ "customPaddingLabel": "Custom Extra Padding",
+ "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)",
+ "submitButton": "Submit"
+ },
+ "pdfToSinglePage": {
+ "title": "PDF To Single Page",
+ "header": "PDF To Single Page",
+ "submit": "Convert To Single Page"
+ },
+ "pageExtracter": {
+ "title": "Extract Pages",
+ "header": "Extract Pages",
+ "submit": "Extract"
+ },
+ "sanitizePDF": {
+ "title": "Sanitize PDF",
+ "header": "Sanitize a PDF file",
+ "selectText": {
+ "1": "Remove JavaScript actions",
+ "2": "Remove embedded files",
+ "3": "Remove metadata",
+ "4": "Remove links",
+ "5": "Remove fonts"
+ },
+ "submit": "Sanitize PDF"
+ },
+ "addPageNumbers": {
+ "title": "Add Page Numbers",
+ "header": "Add Page Numbers",
+ "selectText": {
+ "1": "Select PDF file:",
+ "2": "Margin Size",
+ "3": "Position",
+ "4": "Starting Number",
+ "5": "Pages to Number",
+ "6": "Custom Text"
+ },
+ "customTextDesc": "Custom Text",
+ "numberPagesDesc": "Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc",
+ "customNumberDesc": "Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}",
+ "submit": "Add Page Numbers"
+ },
+ "adjustContrast": {
+ "title": "Adjust Contrast",
+ "header": "Adjust Contrast",
+ "contrast": "Contrast:",
+ "brightness": "Brightness:",
+ "saturation": "Saturation:",
+ "download": "Download"
+ },
+ "compress": {
+ "title": "Compress",
+ "header": "Compress PDF",
+ "credit": "This service uses Ghostscript for PDF Compress/Optimisation.",
+ "selectText": {
+ "1": "Manual Mode - From 1 to 4",
+ "2": "Optimization level:",
+ "3": "4 (Terrible for text images)",
+ "4": "Auto mode - Auto adjusts quality to get PDF to exact size",
+ "5": "Expected PDF Size (e.g. 25MB, 10.8MB, 25KB) "
+ },
+ "submit": "Compress"
+ },
+ "pageRemover": {
+ "title": "Page Remover",
+ "header": "PDF Page remover",
+ "pagesToDelete": "Pages to delete (Enter a comma-separated list of page numbers) :",
+ "submit": "Delete Pages"
+ },
+ "imageToPDF": {
+ "title": "Image to PDF",
+ "header": "Image to PDF",
+ "submit": "Convert",
+ "selectLabel": "Image Fit Options",
+ "fillPage": "Fill Page",
+ "fitDocumentToImage": "Fit Page to Image",
+ "maintainAspectRatio": "Maintain Aspect Ratios",
+ "selectText": {
+ "2": "Auto rotate PDF",
+ "3": "Multi file logic (Only enabled if working with multiple images)",
+ "4": "Merge into single PDF",
+ "5": "Convert to separate PDFs"
+ }
+ },
+ "changeMetadata": {
+ "title": "Title:",
+ "header": "Change Metadata",
+ "selectText": {
+ "1": "Please edit the variables you wish to change",
+ "2": "Delete all metadata",
+ "3": "Show Custom Metadata:",
+ "4": "Other Metadata:",
+ "5": "Add Custom Metadata Entry"
+ },
+ "author": "Author:",
+ "creationDate": "Creation Date (yyyy/MM/dd HH:mm:ss):",
+ "creator": "Creator:",
+ "keywords": "Keywords:",
+ "modDate": "Modification Date (yyyy/MM/dd HH:mm:ss):",
+ "producer": "Producer:",
+ "subject": "Subject:",
+ "trapped": "Trapped:",
+ "submit": "Change"
+ }
+ }
+}
+
diff --git a/package-lock.json b/package-lock.json
index 0d007b3de..c93f1c417 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -71,10 +71,13 @@
"@tauri-apps/api": "^1.5.1",
"archiver": "^6.0.1",
"bootstrap": "^5.3.2",
+ "i18next": "^23.6.0",
+ "i18next-browser-languagedetector": "^7.1.0",
"path-browserify": "^1.0.1",
"react": "^18.2.0",
"react-bootstrap": "^2.9.1",
"react-dom": "^18.2.0",
+ "react-i18next": "^13.3.1",
"react-icons": "^4.11.0",
"react-router-bootstrap": "^0.26.2",
"react-router-dom": "^6.18.0"
@@ -7502,6 +7505,14 @@
"node": ">=12"
}
},
+ "node_modules/html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "dependencies": {
+ "void-elements": "3.1.0"
+ }
+ },
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -7613,6 +7624,36 @@
"node": ">=8.12.0"
}
},
+ "node_modules/i18next": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.6.0.tgz",
+ "integrity": "sha512-z0Cxr0MGkt+kli306WS4nNNM++9cgt2b2VCMprY92j+AIab/oclgPxdwtTZVLP1zn5t5uo8M6uLsZmYrcjr3HA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "dependencies": {
+ "@babel/runtime": "^7.22.5"
+ }
+ },
+ "node_modules/i18next-browser-languagedetector": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz",
+ "integrity": "sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA==",
+ "dependencies": {
+ "@babel/runtime": "^7.19.4"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -10023,6 +10064,27 @@
"react": "^18.2.0"
}
},
+ "node_modules/react-i18next": {
+ "version": "13.3.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.3.1.tgz",
+ "integrity": "sha512-JAtYREK879JXaN9GdzfBI4yJeo/XyLeXWUsRABvYXiFUakhZJ40l+kaTo+i+A/3cKIED41kS/HAbZ5BzFtq/Og==",
+ "dependencies": {
+ "@babel/runtime": "^7.22.5",
+ "html-parse-stringify": "^3.0.1"
+ },
+ "peerDependencies": {
+ "i18next": ">= 23.2.3",
+ "react": ">= 16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-icons": {
"version": "4.11.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz",
@@ -11988,6 +12050,14 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/w3c-xmlserializer": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",