diff --git a/apps/readest-app/.claude/skills/i18n/SKILL.md b/apps/readest-app/.claude/skills/i18n/SKILL.md
new file mode 100644
index 00000000..d448380b
--- /dev/null
+++ b/apps/readest-app/.claude/skills/i18n/SKILL.md
@@ -0,0 +1,96 @@
+---
+name: i18n
+description: >
+ Extract i18n strings, translate missing translations, or add a new language to readest-app.
+ Use when the user invokes /i18n or asks to extract/translate i18n strings or add a new locale.
+ Runs i18next-scanner to extract keys, then translates any __STRING_NOT_TRANSLATED__
+ placeholders across all locale files.
+user_invocable: true
+---
+
+Extract/translate i18n strings or add a new language for readest-app. Run from the app directory (either the main repo or a worktree).
+
+## Step 0: Determine the mode
+
+- If the user asks to **add a new language/locale**, go to **Adding a New Language** below.
+- Otherwise, go to **Extracting & Translating Strings** below.
+
+## Step 1: Determine the working directory
+
+If currently in a PR worktree (e.g., `/Users/chrox/dev/readest-pr-*`), use that. Otherwise use the main repo. The app directory is `/apps/readest-app`.
+
+---
+
+## Adding a New Language
+
+When the user asks to add a new language (e.g., "add Hungarian", "add hu locale"):
+
+### Step A1: Register the locale in two places
+
+1. **`i18n-langs.json`** — Append the locale code to the array. Both `i18next-scanner.config.cjs` and `src/i18n/i18n.ts` import from this file, so they pick up the new entry automatically.
+2. **`src/services/constants.ts`** — Add an entry to `TRANSLATED_LANGS` with the locale code and native language name (e.g., `hu: 'Magyar'`). If the locale already exists in `TRANSLATOR_LANGS`, remove the duplicate there since it will be inherited via the spread.
+
+### Step A2: Generate the translation file
+
+```bash
+cd
+pnpm run i18n:extract
+```
+
+This creates `public/locales//translation.json` with all keys set to `__STRING_NOT_TRANSLATED__`.
+
+### Step A3: Translate all strings
+
+Follow **Step 4** below to translate every `__STRING_NOT_TRANSLATED__` entry in the new locale file.
+
+### Step A4: Verify
+
+Follow **Step 5** below to confirm zero remaining untranslated strings for the new locale.
+
+---
+
+## Extracting & Translating Strings
+
+### Step 2: Extract i18n strings
+
+```bash
+cd
+pnpm run i18n:extract
+```
+
+This runs `i18next-scanner` which scans source files for translation keys and adds any new keys to all locale files with `__STRING_NOT_TRANSLATED__` as the placeholder value.
+
+### Step 3: Find untranslated strings
+
+```bash
+grep -r "__STRING_NOT_TRANSLATED__" /public/locales/
+```
+
+If no results, report that all strings are already translated and stop.
+
+### Step 4: Translate missing strings
+
+For each `__STRING_NOT_TRANSLATED__` found:
+
+1. Identify the English key (e.g., `"Hide Scrollbar"`)
+2. Identify the target locale from the file path (e.g., `locales/ja/translation.json` -> Japanese)
+3. Provide an accurate translation for each locale
+
+Use `sed -i ''` on macOS to replace in-place. Handle all locales in one batch:
+
+```bash
+cd /public/locales
+sed -i '' 's/"": "__STRING_NOT_TRANSLATED__"/"": ""/' /translation.json
+```
+
+### Locale reference
+
+The canonical, complete list of supported locales lives in `i18n-langs.json` (codes only) and `TRANSLATED_LANGS` in `src/services/constants.ts` (codes → native display names). Read those for the source of truth — translate every locale that appears in `i18n-langs.json`. Don't carry forward older "out-of-scope" exclusions like `pt-BR` or `uz`; if it's in `i18n-langs.json` it ships, and it needs translation.
+
+### Step 5: Verify
+
+```bash
+grep -r "__STRING_NOT_TRANSLATED__" /public/locales/
+```
+
+Confirm zero remaining untranslated strings. Report the number of keys translated and locales updated.
diff --git a/apps/readest-app/public/locales/ar/translation.json b/apps/readest-app/public/locales/ar/translation.json
index 03275cbc..a733e459 100644
--- a/apps/readest-app/public/locales/ar/translation.json
+++ b/apps/readest-app/public/locales/ar/translation.json
@@ -1233,7 +1233,6 @@
"Split Hyphens": "تقسيم الواصلات",
"Apply Theme Colors to PDF": "تطبيق ألوان السمة على PDF",
"Name": "الاسم",
- "Unavailable": "غير متاح",
"Remove": "إزالة",
"Edit OPDS Catalog": "تعديل كتالوج OPDS",
"Save Changes": "حفظ التغييرات",
@@ -1448,7 +1447,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "يقوم بتشفير الحقول الحساسة المتزامنة (مثل بيانات اعتماد كتالوج OPDS) قبل مغادرتها لجهازك. قم بتعيين عبارة الآن أو انتظر — سيُطلب منك ذلك عند الحاجة.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "تم تعيينها في هذا الحساب. سيُطلب منك إدخالها عند الحاجة لفك تشفير بيانات الاعتماد المتزامنة.",
"Set passphrase": "تعيين عبارة المرور",
- "Unlock now": "إلغاء القفل الآن",
"Forgot passphrase": "نسيت عبارة المرور",
"Incorrect PIN": "رمز PIN غير صحيح",
"App locked": "التطبيق مقفل",
@@ -1474,5 +1472,26 @@
"PINs do not match": "رمزا PIN غير متطابقين",
"Current PIN": "رمز PIN الحالي",
"New PIN": "رمز PIN جديد",
- "Confirm new PIN": "تأكيد رمز PIN الجديد"
+ "Confirm new PIN": "تأكيد رمز PIN الجديد",
+ "Manage Sync": "إدارة المزامنة",
+ "Imported book files and library metadata": "ملفات الكتب المستوردة وبيانات المكتبة",
+ "Last-read position, bookmarks, and per-book preferences": "آخر موضع قراءة والإشارات المرجعية وتفضيلات كل كتاب",
+ "Highlights and notes": "التظليلات والملاحظات",
+ "Fonts": "الخطوط",
+ "Custom font files": "ملفات الخطوط المخصصة",
+ "Backgrounds": "الخلفيات",
+ "Custom background textures": "أنسجة الخلفية المخصصة",
+ "OPDS catalogs": "كتالوجات OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "روابط الكتالوجات المحفوظة وبيانات الاعتماد (المشفرة)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "عبارة مرور المزامنة غير صحيحة — تعذر فك تشفير بيانات الاعتماد المتزامنة",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "تمت إعادة تعيين بيانات عبارة مرور المزامنة على الخادم. جاري إعادة تشفير بيانات الاعتماد بعبارة المرور الجديدة…",
+ "Failed to decrypt synced credentials": "تعذر فك تشفير بيانات الاعتماد المتزامنة",
+ "Imported dictionary bundles and settings": "حزم القواميس المستوردة والإعدادات",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "اختر ما تتم مزامنته عبر أجهزتك. تعطيل أي فئة يوقف هذا الجهاز عن إرسال أو استقبال السجلات من ذلك النوع. أي شيء موجود بالفعل على الخادم يُترك كما هو، وعند إعادة التفعيل تُستأنف المزامنة من حيث توقفت.",
+ "Data Sync": "مزامنة البيانات",
+ "Manage Fonts": "إدارة الخطوط",
+ "App settings": "إعدادات التطبيق",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "السمة وألوان التظليل والتكاملات (KOSync وReadwise وHardcover) وترتيب القواميس",
+ "Required while Dictionaries sync is enabled": "مطلوب أثناء تفعيل مزامنة القواميس",
+ "Unavailable": "غير متاح"
}
diff --git a/apps/readest-app/public/locales/bn/translation.json b/apps/readest-app/public/locales/bn/translation.json
index e8eb41f9..da34c251 100644
--- a/apps/readest-app/public/locales/bn/translation.json
+++ b/apps/readest-app/public/locales/bn/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "হাইফেন বিভক্ত করুন",
"Apply Theme Colors to PDF": "PDF-এ থিম রং প্রয়োগ করুন",
"Name": "নাম",
- "Unavailable": "অনুপলব্ধ",
"Remove": "সরান",
"Edit OPDS Catalog": "OPDS ক্যাটালগ সম্পাদনা",
"Save Changes": "পরিবর্তন সংরক্ষণ",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "সংবেদনশীল সিঙ্ক করা ক্ষেত্রগুলি (যেমন OPDS ক্যাটালগ শংসাপত্র) আপনার ডিভাইস ছেড়ে যাওয়ার আগে এনক্রিপ্ট করে। এখন একটি সেট করুন বা অপেক্ষা করুন — প্রয়োজন হলে এটি অনুরোধ করা হবে।",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "এই অ্যাকাউন্টে সেট করা হয়েছে। সিঙ্ক করা শংসাপত্রগুলি ডিক্রিপ্ট করার জন্য প্রয়োজন হলে এটি অনুরোধ করা হবে।",
"Set passphrase": "পাসফ্রেজ সেট করুন",
- "Unlock now": "এখনই আনলক করুন",
"Forgot passphrase": "পাসফ্রেজ ভুলে গেছেন",
"Incorrect PIN": "ভুল PIN",
"App locked": "অ্যাপ লক করা হয়েছে",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PIN মিলছে না",
"Current PIN": "বর্তমান PIN",
"New PIN": "নতুন PIN",
- "Confirm new PIN": "নতুন PIN নিশ্চিত করুন"
+ "Confirm new PIN": "নতুন PIN নিশ্চিত করুন",
+ "Manage Sync": "সিঙ্ক ব্যবস্থাপনা",
+ "Imported book files and library metadata": "আমদানি করা বইয়ের ফাইল ও লাইব্রেরির মেটাডেটা",
+ "Last-read position, bookmarks, and per-book preferences": "শেষ পঠিত অবস্থান, বুকমার্ক এবং প্রতি-বই পছন্দসমূহ",
+ "Highlights and notes": "হাইলাইট এবং নোট",
+ "Fonts": "ফন্ট",
+ "Custom font files": "কাস্টম ফন্ট ফাইল",
+ "Backgrounds": "পটভূমিসমূহ",
+ "Custom background textures": "কাস্টম পটভূমির টেক্সচার",
+ "OPDS catalogs": "OPDS ক্যাটালগ",
+ "Saved catalog URLs and (encrypted) credentials": "সংরক্ষিত ক্যাটালগ URL এবং (এনক্রিপ্ট করা) ক্রেডেনশিয়াল",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "ভুল সিঙ্ক পাসফ্রেজ — সিঙ্ক করা ক্রেডেনশিয়াল ডিক্রিপ্ট করা যায়নি",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "সার্ভারের সিঙ্ক পাসফ্রেজ ডেটা রিসেট করা হয়েছে। নতুন পাসফ্রেজ দিয়ে আপনার ক্রেডেনশিয়াল পুনরায় এনক্রিপ্ট করা হচ্ছে…",
+ "Failed to decrypt synced credentials": "সিঙ্ক করা ক্রেডেনশিয়াল ডিক্রিপ্ট করতে ব্যর্থ",
+ "Imported dictionary bundles and settings": "আমদানি করা অভিধান বান্ডিল এবং সেটিংস",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "আপনার ডিভাইসগুলোর মধ্যে কী সিঙ্ক হবে তা বেছে নিন। কোনো বিভাগ নিষ্ক্রিয় করলে এই ডিভাইসটি সেই ধরনের সারি পাঠানো বা গ্রহণ করা বন্ধ করে দেয়। সার্ভারে ইতিমধ্যে থাকা কিছুই পরিবর্তন হয় না, পুনরায় সক্রিয় করলে যেখানে থেমেছিলেন সেখান থেকে আবার শুরু হয়।",
+ "Data Sync": "ডেটা সিঙ্ক",
+ "Manage Fonts": "ফন্ট পরিচালনা",
+ "App settings": "অ্যাপ সেটিংস",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "থিম, হাইলাইট রং, ইন্টিগ্রেশন (KOSync, Readwise, Hardcover) এবং অভিধানের ক্রম",
+ "Required while Dictionaries sync is enabled": "অভিধান সিঙ্ক সক্রিয় থাকাকালীন প্রয়োজনীয়",
+ "Unavailable": "অনুপলব্ধ"
}
diff --git a/apps/readest-app/public/locales/bo/translation.json b/apps/readest-app/public/locales/bo/translation.json
index 05fed2d6..4e127e03 100644
--- a/apps/readest-app/public/locales/bo/translation.json
+++ b/apps/readest-app/public/locales/bo/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "སྦྲེལ་རྟགས་གཅད་པ",
"Apply Theme Colors to PDF": "PDF ལ་བརྗོད་དོན་ཚོས་གཞི་སྤྱོད་པ",
"Name": "མིང",
- "Unavailable": "རག་མི་ཐུབ",
"Remove": "བསུབ།",
"Edit OPDS Catalog": "OPDS དཀར་ཆག་རྩོམ་སྒྲིག",
"Save Changes": "བསྒྱུར་བཅོས་ཉར་ཚགས།",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "ཁྱོད་ཀྱི་སྒྲིག་ཆས་ལས་མ་འགྲོ་གོང་གལ་ཆེའི་མཉམ་སྦྱོར་ས་སྟོང་རྣམས་ (དཔེར་ན་ OPDS དཀར་ཆག་གི་ངོས་འཛིན་ཆ་འཕྲིན) གསང་སྦས་སུ་སྒྱུར། ད་ལྟ་གཅིག་སྒྲིག་པའམ་སྒུག་ཡོད། — དགོས་མཁོ་འབྱུང་སྐབས་ཞུ་འདུག",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "ཁྱེད་ཀྱི་རྩིས་ཐོ་འདིར་སྒྲིག་ཟིན། མཉམ་སྦྱོར་གྱི་ངོས་འཛིན་ཆ་འཕྲིན་གསང་སྦས་འགྲོལ་སྐབས་དགོས་ཚེ་ཞུ་འདུག",
"Set passphrase": "གསང་ཚིག་སྒྲིག་པ།",
- "Unlock now": "ད་ལྟ་ཁ་ཕྱེ།",
"Forgot passphrase": "གསང་ཚིག་བརྗེད་སོང་།",
"Incorrect PIN": "PIN ནོར་འདུག",
"App locked": "མཉེན་ཆས་སྒོ་བརྒྱབ་ཡོད",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN མི་འདྲ",
"Current PIN": "ད་ལྟའི་ PIN",
"New PIN": "PIN གསར་པ",
- "Confirm new PIN": "PIN གསར་པ་གཏན་འཁེལ"
+ "Confirm new PIN": "PIN གསར་པ་གཏན་འཁེལ",
+ "Manage Sync": "མཉམ་འགྲོ་སྟངས་འཛིན།",
+ "Imported book files and library metadata": "ནང་འཇུག་བྱས་པའི་དཔེ་ཆའི་ཡིག་ཆ་དང་དཔེ་མཛོད་མཛོད་གནད་སྡུད།",
+ "Last-read position, bookmarks, and per-book preferences": "མཐའ་མཇུག་ཀློག་སའི་གནས་ས། དཔེ་རྟགས། དཔེ་ཆ་རེ་རེའི་འདེམས་སྒྲིག།",
+ "Highlights and notes": "གསལ་རྟགས་དང་ཟིན་བྲིས།",
+ "Fonts": "ཡིག་གཟུགས།",
+ "Custom font files": "རང་འདེམས་ཡིག་གཟུགས་ཀྱི་ཡིག་ཆ།",
+ "Backgrounds": "རྒྱབ་ལྗོངས།",
+ "Custom background textures": "རང་འདེམས་རྒྱབ་ལྗོངས་ཀྱི་རི་མོ།",
+ "OPDS catalogs": "OPDS དཀར་ཆག།",
+ "Saved catalog URLs and (encrypted) credentials": "ཉར་ཚགས་བྱས་པའི་དཀར་ཆག་གི་URL་དང་(གསང་འཇུག་བྱས་པའི་)ཐོབ་ཐང་ལག་འཁྱེར།",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "མཉམ་འགྲོ་གསང་གྲངས་ནོར་འདུག — མཉམ་འགྲོ་བྱས་པའི་ཐོབ་ཐང་ལག་འཁྱེར་ཁ་ཕྱེ་མི་ཐུབ།",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "ཞབས་ཞུ་བའི་ཐོག་གི་མཉམ་འགྲོ་གསང་གྲངས་ཀྱི་གནད་སྡུད་སླར་སྒྲིག་བྱས་སོང་། གསང་གྲངས་གསར་པས་ཁྱེད་ཀྱི་ཐོབ་ཐང་ལག་འཁྱེར་སླར་གསང་འཇུག་བྱེད་བཞིན་པ་ཡིན…",
+ "Failed to decrypt synced credentials": "མཉམ་འགྲོ་བྱས་པའི་ཐོབ་ཐང་ལག་འཁྱེར་ཁ་ཕྱེ་བར་ཕམ་ཉེས་བྱུང་།",
+ "Imported dictionary bundles and settings": "ནང་འཇུག་བྱས་པའི་ཚིག་མཛོད་ཐུམ་སྒྲིལ་དང་སྒྲིག་འགོད།",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "ཁྱེད་ཀྱི་སྒྲིག་ཆས་ཁག་གི་བར་ལ་གང་མཉམ་འགྲོ་དགོས་པ་འདེམས་རོགས། སྡེ་ཚན་ཞིག་ནུས་མེད་བཟོས་ན། སྒྲིག་ཆས་འདིས་རིགས་དེའི་ཡིག་ཆ་སྐུར་སྤྲོད་དམ་ལེན་པ་མཚམས་འཇོག་བྱེད། ཞབས་ཞུ་བ་སྟེང་གནས་ཟིན་པའི་གང་ཡང་འགྱུར་ལྡོག་མི་ཐེབས། ཡང་བསྐྱར་ནུས་ཅན་བཟོས་ཚེ། མཚམས་འཇོག་སའི་གནས་ནས་མུ་མཐུད་འགྲོ་བ་ཡིན།",
+ "Data Sync": "གཞི་གྲངས་མཉམ་འགྲོ།",
+ "Manage Fonts": "ཡིག་གཟུགས་སྟངས་འཛིན།",
+ "App settings": "མཉེན་ཆས་སྒྲིག་འགོད།",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "བརྗོད་གཞི། གསལ་རྟགས་ཁ་དོག ཟུང་འབྲེལ་ (KOSync, Readwise, Hardcover) དང་ཚིག་མཛོད་ཀྱི་གོ་རིམ།",
+ "Required while Dictionaries sync is enabled": "ཚིག་མཛོད་ཁག་མཉམ་འགྲོ་སྤྱོད་སྐབས་དགོས་མཁོ་ཡོད།",
+ "Unavailable": "བཀོལ་མི་ཐུབ།"
}
diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json
index ae151e80..a420f8ba 100644
--- a/apps/readest-app/public/locales/de/translation.json
+++ b/apps/readest-app/public/locales/de/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Bindestriche trennen",
"Apply Theme Colors to PDF": "Designfarben auf PDF anwenden",
"Name": "Name",
- "Unavailable": "Nicht verfügbar",
"Remove": "Entfernen",
"Edit OPDS Catalog": "OPDS-Katalog bearbeiten",
"Save Changes": "Änderungen speichern",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Verschlüsselt sensible synchronisierte Felder (z. B. OPDS-Katalog-Anmeldedaten), bevor sie Ihr Gerät verlassen. Legen Sie jetzt eine fest oder warten Sie — sie wird bei Bedarf angefordert.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Für dieses Konto festgelegt. Wird bei Bedarf angefordert, um synchronisierte Anmeldedaten zu entschlüsseln.",
"Set passphrase": "Passphrase festlegen",
- "Unlock now": "Jetzt entsperren",
"Forgot passphrase": "Passphrase vergessen",
"Incorrect PIN": "Falsche PIN",
"App locked": "App gesperrt",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PINs stimmen nicht überein",
"Current PIN": "Aktuelle PIN",
"New PIN": "Neue PIN",
- "Confirm new PIN": "Neue PIN bestätigen"
+ "Confirm new PIN": "Neue PIN bestätigen",
+ "Manage Sync": "Synchronisierung verwalten",
+ "Imported book files and library metadata": "Importierte Buchdateien und Bibliotheksmetadaten",
+ "Last-read position, bookmarks, and per-book preferences": "Zuletzt gelesene Position, Lesezeichen und buchspezifische Einstellungen",
+ "Highlights and notes": "Hervorhebungen und Notizen",
+ "Fonts": "Schriftarten",
+ "Custom font files": "Benutzerdefinierte Schriftdateien",
+ "Backgrounds": "Hintergründe",
+ "Custom background textures": "Benutzerdefinierte Hintergrundtexturen",
+ "OPDS catalogs": "OPDS-Kataloge",
+ "Saved catalog URLs and (encrypted) credentials": "Gespeicherte Katalog-URLs und (verschlüsselte) Anmeldedaten",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Falsche Sync-Passphrase — synchronisierte Anmeldedaten konnten nicht entschlüsselt werden",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Sync-Passphrase auf dem Server wurde zurückgesetzt. Anmeldedaten werden mit der neuen Passphrase neu verschlüsselt…",
+ "Failed to decrypt synced credentials": "Synchronisierte Anmeldedaten konnten nicht entschlüsselt werden",
+ "Imported dictionary bundles and settings": "Importierte Wörterbuch-Pakete und Einstellungen",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Lege fest, was zwischen deinen Geräten synchronisiert wird. Beim Deaktivieren einer Kategorie sendet und empfängt dieses Gerät keine Einträge dieser Art mehr. Bereits auf dem Server vorhandene Daten bleiben unverändert, beim erneuten Aktivieren wird dort fortgesetzt, wo du aufgehört hast.",
+ "Data Sync": "Datensynchronisierung",
+ "Manage Fonts": "Schriftarten verwalten",
+ "App settings": "App-Einstellungen",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Design, Hervorhebungsfarben, Integrationen (KOSync, Readwise, Hardcover) und Wörterbuchreihenfolge",
+ "Required while Dictionaries sync is enabled": "Erforderlich, solange die Synchronisierung von Wörterbüchern aktiviert ist",
+ "Unavailable": "Nicht verfügbar"
}
diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json
index 56a20775..8ac53a38 100644
--- a/apps/readest-app/public/locales/el/translation.json
+++ b/apps/readest-app/public/locales/el/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Διαχωρισμός παύλων",
"Apply Theme Colors to PDF": "Εφαρμογή χρωμάτων θέματος σε PDF",
"Name": "Όνομα",
- "Unavailable": "Μη διαθέσιμο",
"Remove": "Αφαίρεση",
"Edit OPDS Catalog": "Επεξεργασία καταλόγου OPDS",
"Save Changes": "Αποθήκευση αλλαγών",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Κρυπτογραφεί ευαίσθητα συγχρονισμένα πεδία (όπως διαπιστευτήρια καταλόγου OPDS) πριν φύγουν από τη συσκευή σας. Ορίστε μία τώρα ή περιμένετε — θα ζητηθεί όταν χρειαστεί.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Έχει οριστεί σε αυτόν τον λογαριασμό. Θα ζητηθεί όταν χρειαστεί για την αποκρυπτογράφηση συγχρονισμένων διαπιστευτηρίων.",
"Set passphrase": "Ορισμός φράσης πρόσβασης",
- "Unlock now": "Ξεκλείδωμα τώρα",
"Forgot passphrase": "Ξεχάσατε τη φράση πρόσβασης",
"Incorrect PIN": "Λανθασμένο PIN",
"App locked": "Η εφαρμογή είναι κλειδωμένη",
@@ -1378,5 +1376,26 @@
"PINs do not match": "Τα PIN δεν ταιριάζουν",
"Current PIN": "Τρέχον PIN",
"New PIN": "Νέο PIN",
- "Confirm new PIN": "Επιβεβαίωση νέου PIN"
+ "Confirm new PIN": "Επιβεβαίωση νέου PIN",
+ "Manage Sync": "Διαχείριση συγχρονισμού",
+ "Imported book files and library metadata": "Εισηγμένα αρχεία βιβλίων και μεταδεδομένα βιβλιοθήκης",
+ "Last-read position, bookmarks, and per-book preferences": "Τελευταία θέση ανάγνωσης, σελιδοδείκτες και προτιμήσεις ανά βιβλίο",
+ "Highlights and notes": "Επισημάνσεις και σημειώσεις",
+ "Fonts": "Γραμματοσειρές",
+ "Custom font files": "Προσαρμοσμένα αρχεία γραμματοσειρών",
+ "Backgrounds": "Φόντα",
+ "Custom background textures": "Προσαρμοσμένες υφές φόντου",
+ "OPDS catalogs": "Κατάλογοι OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "Αποθηκευμένες διευθύνσεις καταλόγων και (κρυπτογραφημένα) διαπιστευτήρια",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Λανθασμένη φράση πρόσβασης συγχρονισμού — δεν ήταν δυνατή η αποκρυπτογράφηση των συγχρονισμένων διαπιστευτηρίων",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Τα δεδομένα της φράσης πρόσβασης συγχρονισμού στον διακομιστή επαναφέρθηκαν. Επανακρυπτογράφηση των διαπιστευτηρίων σας με τη νέα φράση πρόσβασης…",
+ "Failed to decrypt synced credentials": "Αποτυχία αποκρυπτογράφησης των συγχρονισμένων διαπιστευτηρίων",
+ "Imported dictionary bundles and settings": "Εισηγμένα πακέτα λεξικών και ρυθμίσεις",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Επιλέξτε τι συγχρονίζεται μεταξύ των συσκευών σας. Η απενεργοποίηση μιας κατηγορίας σταματά αυτή τη συσκευή από το να στέλνει ή να λαμβάνει εγγραφές αυτού του τύπου. Ό,τι υπάρχει ήδη στον διακομιστή παραμένει ως έχει, η εκ νέου ενεργοποίηση συνεχίζει από εκεί που σταματήσατε.",
+ "Data Sync": "Συγχρονισμός δεδομένων",
+ "Manage Fonts": "Διαχείριση γραμματοσειρών",
+ "App settings": "Ρυθμίσεις εφαρμογής",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Θέμα, χρώματα επισήμανσης, ενσωματώσεις (KOSync, Readwise, Hardcover) και σειρά λεξικών",
+ "Required while Dictionaries sync is enabled": "Απαιτείται όσο είναι ενεργός ο συγχρονισμός Λεξικών",
+ "Unavailable": "Μη διαθέσιμο"
}
diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json
index b84789d4..59dd8065 100644
--- a/apps/readest-app/public/locales/es/translation.json
+++ b/apps/readest-app/public/locales/es/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "Dividir guiones",
"Apply Theme Colors to PDF": "Aplicar colores del tema al PDF",
"Name": "Nombre",
- "Unavailable": "No disponible",
"Remove": "Eliminar",
"Edit OPDS Catalog": "Editar catálogo OPDS",
"Save Changes": "Guardar cambios",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Cifra los campos sensibles sincronizados (como las credenciales del catálogo OPDS) antes de que salgan de tu dispositivo. Establece una ahora o espera — se solicitará cuando sea necesario.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Establecida en esta cuenta. Se solicitará cuando sea necesario descifrar las credenciales sincronizadas.",
"Set passphrase": "Establecer frase de contraseña",
- "Unlock now": "Desbloquear ahora",
"Forgot passphrase": "Olvidé la frase de contraseña",
"Incorrect PIN": "PIN incorrecto",
"App locked": "Aplicación bloqueada",
@@ -1402,5 +1400,26 @@
"PINs do not match": "Los PIN no coinciden",
"Current PIN": "PIN actual",
"New PIN": "Nuevo PIN",
- "Confirm new PIN": "Confirmar nuevo PIN"
+ "Confirm new PIN": "Confirmar nuevo PIN",
+ "Manage Sync": "Gestionar sincronización",
+ "Imported book files and library metadata": "Archivos de libros importados y metadatos de la biblioteca",
+ "Last-read position, bookmarks, and per-book preferences": "Última posición de lectura, marcadores y preferencias por libro",
+ "Highlights and notes": "Resaltados y notas",
+ "Fonts": "Fuentes",
+ "Custom font files": "Archivos de fuentes personalizadas",
+ "Backgrounds": "Fondos",
+ "Custom background textures": "Texturas de fondo personalizadas",
+ "OPDS catalogs": "Catálogos OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URLs de catálogos guardadas y credenciales (cifradas)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Frase de contraseña de sincronización incorrecta — no se pudieron descifrar las credenciales sincronizadas",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Se restablecieron los datos de la frase de contraseña de sincronización en el servidor. Volviendo a cifrar tus credenciales con la nueva frase…",
+ "Failed to decrypt synced credentials": "No se pudieron descifrar las credenciales sincronizadas",
+ "Imported dictionary bundles and settings": "Paquetes de diccionarios importados y ajustes",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Elige qué se sincroniza entre tus dispositivos. Al desactivar una categoría, este dispositivo deja de enviar o recibir entradas de ese tipo. Lo que ya está en el servidor se mantiene intacto, y al reactivarla se reanuda desde donde lo dejaste.",
+ "Data Sync": "Sincronización de datos",
+ "Manage Fonts": "Administrar fuentes",
+ "App settings": "Ajustes de la aplicación",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, colores de resaltado, integraciones (KOSync, Readwise, Hardcover) y orden de los diccionarios",
+ "Required while Dictionaries sync is enabled": "Necesario mientras la sincronización de Diccionarios esté activada",
+ "Unavailable": "No disponible"
}
diff --git a/apps/readest-app/public/locales/fa/translation.json b/apps/readest-app/public/locales/fa/translation.json
index ef35cdcd..1d7ddc61 100644
--- a/apps/readest-app/public/locales/fa/translation.json
+++ b/apps/readest-app/public/locales/fa/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "تقسیم خطتیرهها",
"Apply Theme Colors to PDF": "اعمال رنگهای پوسته روی PDF",
"Name": "نام",
- "Unavailable": "ناموجود",
"Remove": "حذف",
"Edit OPDS Catalog": "ویرایش کاتالوگ OPDS",
"Save Changes": "ذخیره تغییرات",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "فیلدهای حساس همگامسازیشده (مانند اعتبارنامههای کاتالوگ OPDS) را قبل از خروج از دستگاه شما رمزگذاری میکند. اکنون یکی تنظیم کنید یا منتظر بمانید — هنگام نیاز درخواست خواهد شد.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "در این حساب تنظیم شده است. هنگام نیاز برای رمزگشایی اعتبارنامههای همگامسازیشده درخواست خواهد شد.",
"Set passphrase": "تنظیم عبارت عبور",
- "Unlock now": "اکنون باز کن",
"Forgot passphrase": "عبارت عبور را فراموش کردهاید",
"Incorrect PIN": "PIN نادرست",
"App locked": "برنامه قفل است",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PINها مطابقت ندارند",
"Current PIN": "PIN فعلی",
"New PIN": "PIN جدید",
- "Confirm new PIN": "تأیید PIN جدید"
+ "Confirm new PIN": "تأیید PIN جدید",
+ "Manage Sync": "مدیریت همگامسازی",
+ "Imported book files and library metadata": "فایلهای کتاب وارد شده و فراداده کتابخانه",
+ "Last-read position, bookmarks, and per-book preferences": "آخرین موقعیت مطالعه، نشانکها و تنظیمات هر کتاب",
+ "Highlights and notes": "هایلایتها و یادداشتها",
+ "Fonts": "قلمها",
+ "Custom font files": "فایلهای قلم سفارشی",
+ "Backgrounds": "پسزمینهها",
+ "Custom background textures": "بافتهای پسزمینه سفارشی",
+ "OPDS catalogs": "کاتالوگهای OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "نشانیهای ذخیرهشده کاتالوگ و اعتبارنامههای (رمزنگاریشده)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "عبارت عبور همگامسازی نادرست است — رمزگشایی اعتبارنامههای همگامشده ممکن نیست",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "دادههای عبارت عبور همگامسازی روی سرور بازنشانی شد. در حال رمزنگاری مجدد اعتبارنامهها با عبارت عبور جدید…",
+ "Failed to decrypt synced credentials": "رمزگشایی اعتبارنامههای همگامشده ناموفق بود",
+ "Imported dictionary bundles and settings": "بستههای فرهنگلغت وارد شده و تنظیمات",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "انتخاب کنید چه چیزی بین دستگاههای شما همگامسازی شود. غیرفعال کردن یک دسته باعث میشود این دستگاه ارسال یا دریافت ردیفهای آن نوع را متوقف کند. آنچه از قبل روی سرور است دستنخورده باقی میماند، و با فعالسازی مجدد، از همان جایی که متوقف شدهاید ادامه مییابد.",
+ "Data Sync": "همگامسازی دادهها",
+ "Manage Fonts": "مدیریت قلمها",
+ "App settings": "تنظیمات برنامه",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "پوسته، رنگهای هایلایت، یکپارچهسازیها (KOSync، Readwise، Hardcover) و ترتیب فرهنگلغتها",
+ "Required while Dictionaries sync is enabled": "هنگام فعالبودن همگامسازی فرهنگلغتها لازم است",
+ "Unavailable": "در دسترس نیست"
}
diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json
index 9fec0822..6af9be6a 100644
--- a/apps/readest-app/public/locales/fr/translation.json
+++ b/apps/readest-app/public/locales/fr/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "Séparer les traits d'union",
"Apply Theme Colors to PDF": "Appliquer les couleurs du thème au PDF",
"Name": "Nom",
- "Unavailable": "Indisponible",
"Remove": "Supprimer",
"Edit OPDS Catalog": "Modifier le catalogue OPDS",
"Save Changes": "Enregistrer les modifications",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Chiffre les champs synchronisés sensibles (comme les identifiants du catalogue OPDS) avant qu'ils ne quittent votre appareil. Définissez-en une maintenant ou attendez — elle sera demandée si nécessaire.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Définie pour ce compte. Sera demandée lorsque nécessaire pour déchiffrer les identifiants synchronisés.",
"Set passphrase": "Définir la phrase secrète",
- "Unlock now": "Déverrouiller maintenant",
"Forgot passphrase": "Phrase secrète oubliée",
"Incorrect PIN": "PIN incorrect",
"App locked": "Application verrouillée",
@@ -1402,5 +1400,26 @@
"PINs do not match": "Les PIN ne correspondent pas",
"Current PIN": "PIN actuel",
"New PIN": "Nouveau PIN",
- "Confirm new PIN": "Confirmer le nouveau PIN"
+ "Confirm new PIN": "Confirmer le nouveau PIN",
+ "Manage Sync": "Gérer la synchronisation",
+ "Imported book files and library metadata": "Fichiers de livres importés et métadonnées de la bibliothèque",
+ "Last-read position, bookmarks, and per-book preferences": "Dernière position de lecture, signets et préférences par livre",
+ "Highlights and notes": "Surlignages et notes",
+ "Fonts": "Polices",
+ "Custom font files": "Fichiers de polices personnalisées",
+ "Backgrounds": "Arrière-plans",
+ "Custom background textures": "Textures d'arrière-plan personnalisées",
+ "OPDS catalogs": "Catalogues OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URLs de catalogues enregistrées et identifiants (chiffrés)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Phrase secrète de synchronisation incorrecte — les identifiants synchronisés n'ont pas pu être déchiffrés",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Les données de phrase secrète de synchronisation sur le serveur ont été réinitialisées. Rechiffrement de vos identifiants avec la nouvelle phrase secrète…",
+ "Failed to decrypt synced credentials": "Impossible de déchiffrer les identifiants synchronisés",
+ "Imported dictionary bundles and settings": "Paquets de dictionnaires importés et paramètres",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Choisissez ce qui est synchronisé entre vos appareils. Désactiver une catégorie empêche cet appareil d'envoyer ou de recevoir des entrées de ce type. Ce qui est déjà sur le serveur reste intact, la réactivation reprend là où vous vous étiez arrêté.",
+ "Data Sync": "Synchronisation des données",
+ "Manage Fonts": "Gérer les polices",
+ "App settings": "Paramètres de l’application",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Thème, couleurs de surlignage, intégrations (KOSync, Readwise, Hardcover) et ordre des dictionnaires",
+ "Required while Dictionaries sync is enabled": "Requis tant que la synchronisation des dictionnaires est activée",
+ "Unavailable": "Indisponible"
}
diff --git a/apps/readest-app/public/locales/he/translation.json b/apps/readest-app/public/locales/he/translation.json
index 47495423..d273fa29 100644
--- a/apps/readest-app/public/locales/he/translation.json
+++ b/apps/readest-app/public/locales/he/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "פיצול מקפים",
"Apply Theme Colors to PDF": "החל צבעי ערכת נושא על PDF",
"Name": "שם",
- "Unavailable": "לא זמין",
"Remove": "הסר",
"Edit OPDS Catalog": "עריכת קטלוג OPDS",
"Save Changes": "שמור שינויים",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "מצפין שדות מסונכרנים רגישים (כמו פרטי התחברות לקטלוג OPDS) לפני שהם עוזבים את המכשיר שלך. הגדר ביטוי עכשיו או המתן — נבקש אותו כשיידרש.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "הוגדר בחשבון זה. נבקש אותו כשיידרש לפענח פרטי התחברות מסונכרנים.",
"Set passphrase": "הגדרת ביטוי סיסמה",
- "Unlock now": "פתח כעת",
"Forgot passphrase": "שכחת את ביטוי הסיסמה",
"Incorrect PIN": "PIN שגוי",
"App locked": "האפליקציה נעולה",
@@ -1402,5 +1400,26 @@
"PINs do not match": "ה-PINs אינם תואמים",
"Current PIN": "PIN נוכחי",
"New PIN": "PIN חדש",
- "Confirm new PIN": "אשר PIN חדש"
+ "Confirm new PIN": "אשר PIN חדש",
+ "Manage Sync": "ניהול סנכרון",
+ "Imported book files and library metadata": "קובצי ספרים מיובאים ומטא-נתוני הספרייה",
+ "Last-read position, bookmarks, and per-book preferences": "מיקום קריאה אחרון, סימניות והעדפות לכל ספר",
+ "Highlights and notes": "הדגשות והערות",
+ "Fonts": "גופנים",
+ "Custom font files": "קובצי גופנים מותאמים אישית",
+ "Backgrounds": "רקעים",
+ "Custom background textures": "טקסטורות רקע מותאמות אישית",
+ "OPDS catalogs": "קטלוגי OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "כתובות קטלוגים שמורות ופרטי גישה (מוצפנים)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "סיסמת סנכרון שגויה — לא ניתן לפענח את פרטי הגישה המסונכרנים",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "נתוני סיסמת הסנכרון בשרת אופסו. מצפין מחדש את פרטי הגישה עם הסיסמה החדשה…",
+ "Failed to decrypt synced credentials": "פענוח פרטי הגישה המסונכרנים נכשל",
+ "Imported dictionary bundles and settings": "חבילות מילונים מיובאות והגדרות",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "בחר מה מסונכרן בין המכשירים שלך. השבתת קטגוריה גורמת למכשיר זה להפסיק לשלוח או לקבל רשומות מהסוג הזה. מה שכבר נמצא בשרת נשאר כפי שהוא, והפעלה מחדש ממשיכה מהמקום שבו עצרת.",
+ "Data Sync": "סנכרון נתונים",
+ "Manage Fonts": "ניהול גופנים",
+ "App settings": "הגדרות אפליקציה",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "ערכת נושא, צבעי הדגשה, שילובים (KOSync, Readwise, Hardcover) וסדר המילונים",
+ "Required while Dictionaries sync is enabled": "נדרש כל עוד סנכרון המילונים מופעל",
+ "Unavailable": "לא זמין"
}
diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json
index 08c53fb0..45b9156a 100644
--- a/apps/readest-app/public/locales/hi/translation.json
+++ b/apps/readest-app/public/locales/hi/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "हाइफ़न विभाजित करें",
"Apply Theme Colors to PDF": "PDF पर थीम रंग लागू करें",
"Name": "नाम",
- "Unavailable": "अनुपलब्ध",
"Remove": "हटाएँ",
"Edit OPDS Catalog": "OPDS कैटलॉग संपादित करें",
"Save Changes": "परिवर्तन सहेजें",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "संवेदनशील सिंक किए गए फ़ील्ड (जैसे OPDS कैटलॉग क्रेडेंशियल) को आपके डिवाइस से बाहर जाने से पहले एन्क्रिप्ट करता है। अभी एक सेट करें या प्रतीक्षा करें — आवश्यकता पड़ने पर इसका अनुरोध किया जाएगा।",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "इस खाते पर सेट किया गया है। सिंक किए गए क्रेडेंशियल को डिक्रिप्ट करने के लिए आवश्यकता पड़ने पर इसका अनुरोध किया जाएगा।",
"Set passphrase": "पासफ़्रेज़ सेट करें",
- "Unlock now": "अभी अनलॉक करें",
"Forgot passphrase": "पासफ़्रेज़ भूल गए",
"Incorrect PIN": "गलत PIN",
"App locked": "ऐप लॉक है",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PIN मेल नहीं खाते",
"Current PIN": "वर्तमान PIN",
"New PIN": "नया PIN",
- "Confirm new PIN": "नए PIN की पुष्टि करें"
+ "Confirm new PIN": "नए PIN की पुष्टि करें",
+ "Manage Sync": "सिंक प्रबंधित करें",
+ "Imported book files and library metadata": "आयातित पुस्तक फ़ाइलें और लाइब्रेरी मेटाडेटा",
+ "Last-read position, bookmarks, and per-book preferences": "अंतिम पठन स्थिति, बुकमार्क और प्रति-पुस्तक प्राथमिकताएँ",
+ "Highlights and notes": "हाइलाइट और नोट्स",
+ "Fonts": "फ़ॉन्ट",
+ "Custom font files": "कस्टम फ़ॉन्ट फ़ाइलें",
+ "Backgrounds": "पृष्ठभूमियाँ",
+ "Custom background textures": "कस्टम पृष्ठभूमि बनावट",
+ "OPDS catalogs": "OPDS कैटलॉग",
+ "Saved catalog URLs and (encrypted) credentials": "सहेजे गए कैटलॉग URL और (एन्क्रिप्टेड) क्रेडेंशियल्स",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "गलत सिंक पासफ़्रेज़ — सिंक की गई क्रेडेंशियल्स को डिक्रिप्ट नहीं किया जा सका",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "सर्वर पर सिंक पासफ़्रेज़ डेटा रीसेट कर दिया गया। आपकी क्रेडेंशियल्स को नए पासफ़्रेज़ से पुनः एन्क्रिप्ट किया जा रहा है…",
+ "Failed to decrypt synced credentials": "सिंक की गई क्रेडेंशियल्स को डिक्रिप्ट करने में विफल",
+ "Imported dictionary bundles and settings": "आयातित शब्दकोश बंडल और सेटिंग्स",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "चुनें कि आपके डिवाइसों के बीच क्या सिंक हो। किसी श्रेणी को अक्षम करने पर यह डिवाइस उस प्रकार की प्रविष्टियाँ भेजना या प्राप्त करना बंद कर देता है। सर्वर पर पहले से मौजूद कुछ भी नहीं बदलता, फिर से सक्षम करने पर वहीं से जारी होता है जहाँ आपने रोका था।",
+ "Data Sync": "डेटा सिंक",
+ "Manage Fonts": "फ़ॉन्ट प्रबंधित करें",
+ "App settings": "ऐप सेटिंग्स",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "थीम, हाइलाइट रंग, एकीकरण (KOSync, Readwise, Hardcover) और शब्दकोश क्रम",
+ "Required while Dictionaries sync is enabled": "शब्दकोश सिंक सक्षम होने पर आवश्यक",
+ "Unavailable": "अनुपलब्ध"
}
diff --git a/apps/readest-app/public/locales/hu/translation.json b/apps/readest-app/public/locales/hu/translation.json
index 667c53e1..fbf8b50d 100644
--- a/apps/readest-app/public/locales/hu/translation.json
+++ b/apps/readest-app/public/locales/hu/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Kötőjelek felosztása",
"Apply Theme Colors to PDF": "Téma színeinek alkalmazása PDF-re",
"Name": "Név",
- "Unavailable": "Nem elérhető",
"Remove": "Eltávolítás",
"Edit OPDS Catalog": "OPDS katalógus szerkesztése",
"Save Changes": "Módosítások mentése",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Titkosítja az érzékeny szinkronizált mezőket (például OPDS-katalógus hitelesítő adatait), mielőtt elhagyják az eszközét. Állítson be egyet most vagy várjon — szükség esetén kérni fogjuk.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Beállítva ezen a fiókon. Szükség esetén kérni fogjuk a szinkronizált hitelesítő adatok visszafejtéséhez.",
"Set passphrase": "Jelmondat beállítása",
- "Unlock now": "Feloldás most",
"Forgot passphrase": "Elfelejtett jelmondat",
"Incorrect PIN": "Helytelen PIN",
"App locked": "Az alkalmazás zárolva van",
@@ -1378,5 +1376,26 @@
"PINs do not match": "A PIN-kódok nem egyeznek",
"Current PIN": "Jelenlegi PIN",
"New PIN": "Új PIN",
- "Confirm new PIN": "Új PIN megerősítése"
+ "Confirm new PIN": "Új PIN megerősítése",
+ "Manage Sync": "Szinkronizálás kezelése",
+ "Imported book files and library metadata": "Importált könyvfájlok és könyvtár-metaadatok",
+ "Last-read position, bookmarks, and per-book preferences": "Utolsó olvasási pozíció, könyvjelzők és könyvenkénti beállítások",
+ "Highlights and notes": "Kiemelések és jegyzetek",
+ "Fonts": "Betűtípusok",
+ "Custom font files": "Egyéni betűtípus-fájlok",
+ "Backgrounds": "Hátterek",
+ "Custom background textures": "Egyéni háttértextúrák",
+ "OPDS catalogs": "OPDS katalógusok",
+ "Saved catalog URLs and (encrypted) credentials": "Mentett katalógus-URL-ek és (titkosított) hitelesítő adatok",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Hibás szinkronizálási jelszó — a szinkronizált hitelesítő adatok nem voltak visszafejthetők",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "A kiszolgálón lévő szinkronizálási jelszóadatok visszaállítva. A hitelesítő adatok újratitkosítása az új jelszóval folyamatban…",
+ "Failed to decrypt synced credentials": "A szinkronizált hitelesítő adatok visszafejtése sikertelen",
+ "Imported dictionary bundles and settings": "Importált szótárcsomagok és beállítások",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Válaszd ki, mi szinkronizálódjon az eszközeid között. Egy kategória letiltása megakadályozza, hogy ez az eszköz ilyen típusú bejegyzéseket küldjön vagy fogadjon. A szerveren már lévő adatok érintetlenek maradnak, az újbóli engedélyezés onnan folytatódik, ahol abbahagytad.",
+ "Data Sync": "Adatszinkronizálás",
+ "Manage Fonts": "Betűtípusok kezelése",
+ "App settings": "Alkalmazásbeállítások",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Téma, kiemelési színek, integrációk (KOSync, Readwise, Hardcover) és szótárak sorrendje",
+ "Required while Dictionaries sync is enabled": "Szükséges, amíg a Szótárak szinkronizálása be van kapcsolva",
+ "Unavailable": "Nem elérhető"
}
diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json
index 2a66e228..6f684119 100644
--- a/apps/readest-app/public/locales/id/translation.json
+++ b/apps/readest-app/public/locales/id/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "Pisahkan Tanda Hubung",
"Apply Theme Colors to PDF": "Terapkan Warna Tema ke PDF",
"Name": "Nama",
- "Unavailable": "Tidak Tersedia",
"Remove": "Hapus",
"Edit OPDS Catalog": "Edit Katalog OPDS",
"Save Changes": "Simpan Perubahan",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Mengenkripsi bidang tersinkron yang sensitif (seperti kredensial katalog OPDS) sebelum meninggalkan perangkat Anda. Setel sekarang atau tunggu — akan diminta saat dibutuhkan.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Disetel pada akun ini. Akan diminta saat dibutuhkan untuk mendekripsi kredensial yang tersinkron.",
"Set passphrase": "Setel frasa sandi",
- "Unlock now": "Buka kunci sekarang",
"Forgot passphrase": "Lupa frasa sandi",
"Incorrect PIN": "PIN salah",
"App locked": "Aplikasi terkunci",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN tidak cocok",
"Current PIN": "PIN saat ini",
"New PIN": "PIN baru",
- "Confirm new PIN": "Konfirmasi PIN baru"
+ "Confirm new PIN": "Konfirmasi PIN baru",
+ "Manage Sync": "Kelola sinkronisasi",
+ "Imported book files and library metadata": "Berkas buku yang diimpor dan metadata pustaka",
+ "Last-read position, bookmarks, and per-book preferences": "Posisi baca terakhir, penanda, dan preferensi per buku",
+ "Highlights and notes": "Sorotan dan catatan",
+ "Fonts": "Fon",
+ "Custom font files": "Berkas fon kustom",
+ "Backgrounds": "Latar belakang",
+ "Custom background textures": "Tekstur latar belakang kustom",
+ "OPDS catalogs": "Katalog OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL katalog tersimpan dan kredensial (terenkripsi)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Frasa sandi sinkronisasi salah — kredensial yang disinkronkan tidak dapat didekripsi",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Data frasa sandi sinkronisasi di server telah direset. Mengenkripsi ulang kredensial Anda dengan frasa sandi baru…",
+ "Failed to decrypt synced credentials": "Gagal mendekripsi kredensial yang disinkronkan",
+ "Imported dictionary bundles and settings": "Bundel kamus yang diimpor dan pengaturan",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Pilih apa saja yang disinkronkan antar perangkatmu. Menonaktifkan sebuah kategori menghentikan perangkat ini mengirim atau menerima entri jenis itu. Apa pun yang sudah ada di server tetap utuh, mengaktifkannya kembali akan melanjutkan dari tempat kamu berhenti.",
+ "Data Sync": "Sinkronisasi Data",
+ "Manage Fonts": "Kelola Fon",
+ "App settings": "Pengaturan aplikasi",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, warna sorotan, integrasi (KOSync, Readwise, Hardcover), dan urutan kamus",
+ "Required while Dictionaries sync is enabled": "Diperlukan saat sinkronisasi Kamus diaktifkan",
+ "Unavailable": "Tidak tersedia"
}
diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json
index 59213eaf..8dfd8b1a 100644
--- a/apps/readest-app/public/locales/it/translation.json
+++ b/apps/readest-app/public/locales/it/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "Dividi trattini",
"Apply Theme Colors to PDF": "Applica colori tema al PDF",
"Name": "Nome",
- "Unavailable": "Non disponibile",
"Remove": "Rimuovi",
"Edit OPDS Catalog": "Modifica catalogo OPDS",
"Save Changes": "Salva modifiche",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Crittografa i campi sincronizzati sensibili (come le credenziali del catalogo OPDS) prima che lascino il tuo dispositivo. Impostane una ora o attendi — verrà richiesta quando necessario.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Impostata su questo account. Verrà richiesta quando necessario per decrittografare le credenziali sincronizzate.",
"Set passphrase": "Imposta passphrase",
- "Unlock now": "Sblocca ora",
"Forgot passphrase": "Passphrase dimenticata",
"Incorrect PIN": "PIN errato",
"App locked": "App bloccata",
@@ -1402,5 +1400,26 @@
"PINs do not match": "I PIN non corrispondono",
"Current PIN": "PIN attuale",
"New PIN": "Nuovo PIN",
- "Confirm new PIN": "Conferma nuovo PIN"
+ "Confirm new PIN": "Conferma nuovo PIN",
+ "Manage Sync": "Gestisci sincronizzazione",
+ "Imported book files and library metadata": "File dei libri importati e metadati della libreria",
+ "Last-read position, bookmarks, and per-book preferences": "Ultima posizione di lettura, segnalibri e preferenze per libro",
+ "Highlights and notes": "Evidenziazioni e note",
+ "Fonts": "Caratteri",
+ "Custom font files": "File di caratteri personalizzati",
+ "Backgrounds": "Sfondi",
+ "Custom background textures": "Texture di sfondo personalizzate",
+ "OPDS catalogs": "Cataloghi OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL dei cataloghi salvati e credenziali (cifrate)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Passphrase di sincronizzazione errata — impossibile decifrare le credenziali sincronizzate",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "I dati della passphrase di sincronizzazione sul server sono stati reimpostati. Crittografia delle credenziali con la nuova passphrase in corso…",
+ "Failed to decrypt synced credentials": "Impossibile decifrare le credenziali sincronizzate",
+ "Imported dictionary bundles and settings": "Pacchetti di dizionari importati e impostazioni",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Scegli cosa sincronizzare tra i tuoi dispositivi. Disabilitare una categoria impedisce a questo dispositivo di inviare o ricevere voci di quel tipo. Quanto già presente sul server resta intatto, riabilitandola la sincronizzazione riprende da dove l'hai interrotta.",
+ "Data Sync": "Sincronizzazione dati",
+ "Manage Fonts": "Gestisci caratteri",
+ "App settings": "Impostazioni app",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, colori delle evidenziazioni, integrazioni (KOSync, Readwise, Hardcover) e ordine dei dizionari",
+ "Required while Dictionaries sync is enabled": "Necessario mentre la sincronizzazione dei Dizionari è attiva",
+ "Unavailable": "Non disponibile"
}
diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json
index 933cca34..7975e40c 100644
--- a/apps/readest-app/public/locales/ja/translation.json
+++ b/apps/readest-app/public/locales/ja/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "ハイフンで分割",
"Apply Theme Colors to PDF": "テーマカラーをPDFに適用",
"Name": "名前",
- "Unavailable": "利用不可",
"Remove": "削除",
"Edit OPDS Catalog": "OPDSカタログを編集",
"Save Changes": "変更を保存",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "機密性の高い同期フィールド(OPDS カタログの認証情報など)を、デバイスから出る前に暗号化します。今すぐ設定するか、待つこともできます — 必要なときに要求されます。",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "このアカウントで設定済みです。同期された資格情報を復号化する必要があるときに要求されます。",
"Set passphrase": "パスフレーズを設定",
- "Unlock now": "今すぐロック解除",
"Forgot passphrase": "パスフレーズを忘れました",
"Incorrect PIN": "PINが正しくありません",
"App locked": "アプリがロックされています",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PINが一致しません",
"Current PIN": "現在のPIN",
"New PIN": "新しいPIN",
- "Confirm new PIN": "新しいPINの確認"
+ "Confirm new PIN": "新しいPINの確認",
+ "Manage Sync": "同期を管理",
+ "Imported book files and library metadata": "インポートした書籍ファイルとライブラリのメタデータ",
+ "Last-read position, bookmarks, and per-book preferences": "最終閲覧位置、ブックマーク、書籍ごとの設定",
+ "Highlights and notes": "ハイライトとノート",
+ "Fonts": "フォント",
+ "Custom font files": "カスタムフォントファイル",
+ "Backgrounds": "背景",
+ "Custom background textures": "カスタム背景テクスチャ",
+ "OPDS catalogs": "OPDS カタログ",
+ "Saved catalog URLs and (encrypted) credentials": "保存済みのカタログ URL と(暗号化された)認証情報",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "同期パスフレーズが違います — 同期された認証情報を復号できませんでした",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "サーバーの同期パスフレーズデータがリセットされました。新しいパスフレーズで認証情報を再暗号化しています…",
+ "Failed to decrypt synced credentials": "同期された認証情報を復号できませんでした",
+ "Imported dictionary bundles and settings": "インポートした辞書バンドルと設定",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "デバイス間で同期する項目を選択します。カテゴリを無効にすると、このデバイスはその種類のデータを送受信しなくなります。サーバーに既にあるデータはそのまま残り、再度有効にすると停止した位置から再開します。",
+ "Data Sync": "データ同期",
+ "Manage Fonts": "フォントを管理",
+ "App settings": "アプリ設定",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "テーマ、ハイライトの色、連携 (KOSync、Readwise、Hardcover)、辞書の順序",
+ "Required while Dictionaries sync is enabled": "辞書の同期が有効な間は必須",
+ "Unavailable": "利用不可"
}
diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json
index cc050f8e..0175e430 100644
--- a/apps/readest-app/public/locales/ko/translation.json
+++ b/apps/readest-app/public/locales/ko/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "하이픈 분리",
"Apply Theme Colors to PDF": "PDF에 테마 색상 적용",
"Name": "이름",
- "Unavailable": "사용 불가",
"Remove": "삭제",
"Edit OPDS Catalog": "OPDS 카탈로그 편집",
"Save Changes": "변경 사항 저장",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "민감한 동기화 필드(예: OPDS 카탈로그 자격 증명)를 기기에서 나가기 전에 암호화합니다. 지금 설정하거나 나중에 — 필요할 때 요청됩니다.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "이 계정에 설정되어 있습니다. 동기화된 자격 증명을 복호화해야 할 때 요청됩니다.",
"Set passphrase": "암호 문구 설정",
- "Unlock now": "지금 잠금 해제",
"Forgot passphrase": "암호 문구를 잊으셨나요",
"Incorrect PIN": "잘못된 PIN",
"App locked": "앱이 잠겼습니다",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN이 일치하지 않습니다",
"Current PIN": "현재 PIN",
"New PIN": "새 PIN",
- "Confirm new PIN": "새 PIN 확인"
+ "Confirm new PIN": "새 PIN 확인",
+ "Manage Sync": "동기화 관리",
+ "Imported book files and library metadata": "가져온 도서 파일과 서재 메타데이터",
+ "Last-read position, bookmarks, and per-book preferences": "마지막 읽은 위치, 북마크, 도서별 환경설정",
+ "Highlights and notes": "하이라이트와 노트",
+ "Fonts": "글꼴",
+ "Custom font files": "사용자 지정 글꼴 파일",
+ "Backgrounds": "배경",
+ "Custom background textures": "사용자 지정 배경 텍스처",
+ "OPDS catalogs": "OPDS 카탈로그",
+ "Saved catalog URLs and (encrypted) credentials": "저장된 카탈로그 URL과 (암호화된) 자격 증명",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "동기화 암호가 잘못되었습니다 — 동기화된 자격 증명을 복호화할 수 없습니다",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "서버의 동기화 암호 데이터가 재설정되었습니다. 새 암호로 자격 증명을 다시 암호화하는 중입니다…",
+ "Failed to decrypt synced credentials": "동기화된 자격 증명을 복호화하지 못했습니다",
+ "Imported dictionary bundles and settings": "가져온 사전 번들과 설정",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "기기 간에 동기화할 항목을 선택하세요. 카테고리를 비활성화하면 이 기기는 해당 종류의 항목을 보내거나 받지 않습니다. 서버에 이미 있는 데이터는 그대로 유지되며, 다시 활성화하면 중단한 지점부터 이어집니다.",
+ "Data Sync": "데이터 동기화",
+ "Manage Fonts": "글꼴 관리",
+ "App settings": "앱 설정",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "테마, 하이라이트 색상, 연동 (KOSync, Readwise, Hardcover), 사전 순서",
+ "Required while Dictionaries sync is enabled": "사전 동기화가 켜져 있는 동안 필요",
+ "Unavailable": "사용 불가"
}
diff --git a/apps/readest-app/public/locales/ms/translation.json b/apps/readest-app/public/locales/ms/translation.json
index c67665cd..f09c19fc 100644
--- a/apps/readest-app/public/locales/ms/translation.json
+++ b/apps/readest-app/public/locales/ms/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "Pisahkan Sempang",
"Apply Theme Colors to PDF": "Gunakan Warna Tema pada PDF",
"Name": "Nama",
- "Unavailable": "Tidak Tersedia",
"Remove": "Alih keluar",
"Edit OPDS Catalog": "Edit Katalog OPDS",
"Save Changes": "Simpan Perubahan",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Mengenkripsi medan tersegerak sensitif (seperti bukti kelayakan katalog OPDS) sebelum ia meninggalkan peranti anda. Tetapkan satu sekarang atau tunggu — ia akan diminta apabila diperlukan.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Ditetapkan pada akaun ini. Akan diminta apabila diperlukan untuk menyahsulit bukti kelayakan yang disegerakkan.",
"Set passphrase": "Tetapkan frasa laluan",
- "Unlock now": "Buka kunci sekarang",
"Forgot passphrase": "Lupa frasa laluan",
"Incorrect PIN": "PIN salah",
"App locked": "Aplikasi terkunci",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN tidak sepadan",
"Current PIN": "PIN semasa",
"New PIN": "PIN baharu",
- "Confirm new PIN": "Sahkan PIN baharu"
+ "Confirm new PIN": "Sahkan PIN baharu",
+ "Manage Sync": "Urus penyegerakan",
+ "Imported book files and library metadata": "Fail buku yang diimport dan metadata pustaka",
+ "Last-read position, bookmarks, and per-book preferences": "Kedudukan bacaan terakhir, penanda buku dan keutamaan setiap buku",
+ "Highlights and notes": "Sorotan dan nota",
+ "Fonts": "Fon",
+ "Custom font files": "Fail fon tersuai",
+ "Backgrounds": "Latar belakang",
+ "Custom background textures": "Tekstur latar belakang tersuai",
+ "OPDS catalogs": "Katalog OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL katalog yang disimpan dan kelayakan (disulitkan)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Frasa laluan penyegerakan salah — kelayakan yang disegerakkan tidak dapat dinyahsulit",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Data frasa laluan penyegerakan pada pelayan telah ditetapkan semula. Menyulitkan semula kelayakan anda dengan frasa laluan baharu…",
+ "Failed to decrypt synced credentials": "Gagal menyahsulit kelayakan yang disegerakkan",
+ "Imported dictionary bundles and settings": "Himpunan kamus yang diimport dan tetapan",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Pilih apa yang disegerakkan antara peranti anda. Melumpuhkan kategori menghentikan peranti ini daripada menghantar atau menerima entri jenis itu. Apa-apa yang sudah ada pada pelayan dibiarkan, mengaktifkannya semula akan menyambung dari tempat anda berhenti.",
+ "Data Sync": "Penyegerakan Data",
+ "Manage Fonts": "Urus Fon",
+ "App settings": "Tetapan aplikasi",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, warna sorotan, integrasi (KOSync, Readwise, Hardcover), dan susunan kamus",
+ "Required while Dictionaries sync is enabled": "Diperlukan semasa penyegerakan Kamus didayakan",
+ "Unavailable": "Tidak tersedia"
}
diff --git a/apps/readest-app/public/locales/nl/translation.json b/apps/readest-app/public/locales/nl/translation.json
index 5bde351c..a09943e2 100644
--- a/apps/readest-app/public/locales/nl/translation.json
+++ b/apps/readest-app/public/locales/nl/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Afbreekstreepjes splitsen",
"Apply Theme Colors to PDF": "Themakleuren toepassen op PDF",
"Name": "Naam",
- "Unavailable": "Niet beschikbaar",
"Remove": "Verwijderen",
"Edit OPDS Catalog": "OPDS-catalogus bewerken",
"Save Changes": "Wijzigingen opslaan",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Versleutelt gevoelige gesynchroniseerde velden (zoals OPDS-cataloguscredentials) voordat ze je apparaat verlaten. Stel er nu een in of wacht — er wordt om gevraagd wanneer nodig.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Ingesteld voor dit account. Wordt opgevraagd wanneer nodig om gesynchroniseerde inloggegevens te ontsleutelen.",
"Set passphrase": "Wachtwoordzin instellen",
- "Unlock now": "Nu ontgrendelen",
"Forgot passphrase": "Wachtwoordzin vergeten",
"Incorrect PIN": "Onjuiste PIN",
"App locked": "App vergrendeld",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PINs komen niet overeen",
"Current PIN": "Huidige PIN",
"New PIN": "Nieuwe PIN",
- "Confirm new PIN": "Nieuwe PIN bevestigen"
+ "Confirm new PIN": "Nieuwe PIN bevestigen",
+ "Manage Sync": "Synchronisatie beheren",
+ "Imported book files and library metadata": "Geïmporteerde boekbestanden en bibliotheekmetadata",
+ "Last-read position, bookmarks, and per-book preferences": "Laatst gelezen positie, bladwijzers en voorkeuren per boek",
+ "Highlights and notes": "Markeringen en notities",
+ "Fonts": "Lettertypen",
+ "Custom font files": "Aangepaste lettertypebestanden",
+ "Backgrounds": "Achtergronden",
+ "Custom background textures": "Aangepaste achtergrondtexturen",
+ "OPDS catalogs": "OPDS-catalogi",
+ "Saved catalog URLs and (encrypted) credentials": "Opgeslagen catalogus-URL's en (versleutelde) inloggegevens",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Onjuiste synchronisatiewachtwoordzin — gesynchroniseerde inloggegevens konden niet worden ontsleuteld",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Synchronisatiewachtwoordzingegevens op de server zijn gereset. Inloggegevens worden opnieuw versleuteld met de nieuwe wachtwoordzin…",
+ "Failed to decrypt synced credentials": "Kan gesynchroniseerde inloggegevens niet ontsleutelen",
+ "Imported dictionary bundles and settings": "Geïmporteerde woordenboekpakketten en instellingen",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Kies wat er tussen je apparaten wordt gesynchroniseerd. Een categorie uitschakelen zorgt dat dit apparaat geen items van dat type meer verstuurt of ontvangt. Alles wat al op de server staat blijft ongewijzigd, en bij opnieuw inschakelen wordt verdergegaan waar je was gestopt.",
+ "Data Sync": "Gegevenssynchronisatie",
+ "Manage Fonts": "Lettertypen beheren",
+ "App settings": "App-instellingen",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Thema, markeringskleuren, integraties (KOSync, Readwise, Hardcover) en woordenboekvolgorde",
+ "Required while Dictionaries sync is enabled": "Vereist zolang synchronisatie van Woordenboeken is ingeschakeld",
+ "Unavailable": "Niet beschikbaar"
}
diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json
index 58cbea17..8d8a9584 100644
--- a/apps/readest-app/public/locales/pl/translation.json
+++ b/apps/readest-app/public/locales/pl/translation.json
@@ -1207,7 +1207,6 @@
"Split Hyphens": "Dziel łączniki",
"Apply Theme Colors to PDF": "Zastosuj kolory motywu do PDF",
"Name": "Nazwa",
- "Unavailable": "Niedostępne",
"Remove": "Usuń",
"Edit OPDS Catalog": "Edytuj katalog OPDS",
"Save Changes": "Zapisz zmiany",
@@ -1400,7 +1399,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Szyfruje wrażliwe synchronizowane pola (np. dane uwierzytelniające katalogu OPDS) przed opuszczeniem Twojego urządzenia. Ustaw je teraz lub poczekaj — zostanie poproszone, gdy będzie potrzebne.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Ustawione na tym koncie. Zostanie poproszone, gdy będzie potrzebne do odszyfrowania zsynchronizowanych danych uwierzytelniających.",
"Set passphrase": "Ustaw hasło",
- "Unlock now": "Odblokuj teraz",
"Forgot passphrase": "Zapomniałem hasła",
"Incorrect PIN": "Nieprawidłowy PIN",
"App locked": "Aplikacja zablokowana",
@@ -1426,5 +1424,26 @@
"PINs do not match": "PIN-y nie pasują do siebie",
"Current PIN": "Obecny PIN",
"New PIN": "Nowy PIN",
- "Confirm new PIN": "Potwierdź nowy PIN"
+ "Confirm new PIN": "Potwierdź nowy PIN",
+ "Manage Sync": "Zarządzaj synchronizacją",
+ "Imported book files and library metadata": "Zaimportowane pliki książek i metadane biblioteki",
+ "Last-read position, bookmarks, and per-book preferences": "Ostatnia pozycja czytania, zakładki i ustawienia poszczególnych książek",
+ "Highlights and notes": "Podświetlenia i notatki",
+ "Fonts": "Czcionki",
+ "Custom font files": "Niestandardowe pliki czcionek",
+ "Backgrounds": "Tła",
+ "Custom background textures": "Niestandardowe tekstury tła",
+ "OPDS catalogs": "Katalogi OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "Zapisane adresy URL katalogów i (zaszyfrowane) dane uwierzytelniające",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Nieprawidłowe hasło synchronizacji — nie można odszyfrować zsynchronizowanych danych uwierzytelniających",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Dane hasła synchronizacji na serwerze zostały zresetowane. Ponowne szyfrowanie danych uwierzytelniających przy użyciu nowego hasła…",
+ "Failed to decrypt synced credentials": "Nie udało się odszyfrować zsynchronizowanych danych uwierzytelniających",
+ "Imported dictionary bundles and settings": "Zaimportowane pakiety słowników i ustawienia",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Wybierz, co ma być synchronizowane między Twoimi urządzeniami. Wyłączenie kategorii sprawia, że to urządzenie przestaje wysyłać i odbierać wpisy tego typu. To, co jest już na serwerze, pozostaje nietknięte, a ponowne włączenie wznawia synchronizację od miejsca, w którym ją zatrzymałeś.",
+ "Data Sync": "Synchronizacja danych",
+ "Manage Fonts": "Zarządzaj czcionkami",
+ "App settings": "Ustawienia aplikacji",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Motyw, kolory podświetleń, integracje (KOSync, Readwise, Hardcover) oraz kolejność słowników",
+ "Required while Dictionaries sync is enabled": "Wymagane, gdy włączona jest synchronizacja Słowników",
+ "Unavailable": "Niedostępne"
}
diff --git a/apps/readest-app/public/locales/pt-BR/translation.json b/apps/readest-app/public/locales/pt-BR/translation.json
index 68b4e677..fe344985 100644
--- a/apps/readest-app/public/locales/pt-BR/translation.json
+++ b/apps/readest-app/public/locales/pt-BR/translation.json
@@ -1376,7 +1376,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Criptografa campos sincronizados sensíveis (como credenciais de catálogo OPDS) antes que saiam do seu dispositivo. Defina uma agora ou aguarde — será solicitada quando necessário.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Definida nesta conta. Será solicitada quando necessária para descriptografar credenciais sincronizadas.",
"Set passphrase": "Definir frase secreta",
- "Unlock now": "Desbloquear agora",
"Forgot passphrase": "Esqueci a frase secreta",
"Incorrect PIN": "PIN incorreto",
"App locked": "Aplicativo bloqueado",
@@ -1402,5 +1401,25 @@
"PINs do not match": "Os PINs não coincidem",
"Current PIN": "PIN atual",
"New PIN": "Novo PIN",
- "Confirm new PIN": "Confirmar novo PIN"
+ "Confirm new PIN": "Confirmar novo PIN",
+ "Data Sync": "Sincronização de Dados",
+ "Manage Sync": "Gerenciar Sincronização",
+ "Imported book files and library metadata": "Arquivos de livros importados e metadados da biblioteca",
+ "Last-read position, bookmarks, and per-book preferences": "Última posição lida, marcadores e preferências por livro",
+ "Highlights and notes": "Destaques e notas",
+ "Imported dictionary bundles and settings": "Pacotes de dicionários importados e configurações",
+ "Fonts": "Fontes",
+ "Custom font files": "Arquivos de fontes personalizadas",
+ "Backgrounds": "Planos de fundo",
+ "Custom background textures": "Texturas de plano de fundo personalizadas",
+ "OPDS catalogs": "Catálogos OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URLs de catálogos salvos e credenciais (criptografadas)",
+ "App settings": "Configurações do aplicativo",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, cores de destaque, integrações (KOSync, Readwise, Hardcover) e ordem dos dicionários",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Escolha o que sincronizar entre seus dispositivos. Desativar uma categoria impede este dispositivo de enviar ou receber dados desse tipo. O que já está no servidor não é alterado; ao reativar, a sincronização retoma de onde parou.",
+ "Required while Dictionaries sync is enabled": "Obrigatório enquanto a sincronização de Dicionários estiver ativada",
+ "Manage Fonts": "Gerenciar fontes",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Senha de sincronização incorreta — não foi possível descriptografar as credenciais sincronizadas",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Os dados da senha de sincronização no servidor foram redefinidos. Recriptografando suas credenciais com a nova senha…",
+ "Failed to decrypt synced credentials": "Falha ao descriptografar credenciais sincronizadas"
}
diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json
index 1d0be808..098e3dbb 100644
--- a/apps/readest-app/public/locales/pt/translation.json
+++ b/apps/readest-app/public/locales/pt/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "Dividir hífens",
"Apply Theme Colors to PDF": "Aplicar cores do tema ao PDF",
"Name": "Nome",
- "Unavailable": "Indisponível",
"Remove": "Remover",
"Edit OPDS Catalog": "Editar catálogo OPDS",
"Save Changes": "Salvar alterações",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Encripta campos sincronizados sensíveis (como credenciais do catálogo OPDS) antes de saírem do seu dispositivo. Defina uma agora ou aguarde — será solicitada quando necessário.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Definida nesta conta. Será solicitada quando for necessária para desencriptar credenciais sincronizadas.",
"Set passphrase": "Definir frase-passe",
- "Unlock now": "Desbloquear agora",
"Forgot passphrase": "Esqueci a frase-passe",
"Incorrect PIN": "PIN incorreto",
"App locked": "Aplicação bloqueada",
@@ -1402,5 +1400,26 @@
"PINs do not match": "Os PIN não coincidem",
"Current PIN": "PIN atual",
"New PIN": "Novo PIN",
- "Confirm new PIN": "Confirmar novo PIN"
+ "Confirm new PIN": "Confirmar novo PIN",
+ "Manage Sync": "Gerenciar sincronização",
+ "Imported book files and library metadata": "Arquivos de livros importados e metadados da biblioteca",
+ "Last-read position, bookmarks, and per-book preferences": "Última posição de leitura, marcadores e preferências por livro",
+ "Highlights and notes": "Destaques e notas",
+ "Fonts": "Fontes",
+ "Custom font files": "Arquivos de fontes personalizadas",
+ "Backgrounds": "Fundos",
+ "Custom background textures": "Texturas de fundo personalizadas",
+ "OPDS catalogs": "Catálogos OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URLs de catálogos salvas e credenciais (criptografadas)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Frase secreta de sincronização incorreta — não foi possível descriptografar as credenciais sincronizadas",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Os dados da frase secreta de sincronização no servidor foram redefinidos. Recriptografando suas credenciais com a nova frase…",
+ "Failed to decrypt synced credentials": "Falha ao descriptografar as credenciais sincronizadas",
+ "Imported dictionary bundles and settings": "Pacotes de dicionários importados e configurações",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Escolha o que será sincronizado entre seus dispositivos. Desativar uma categoria impede este dispositivo de enviar ou receber registros desse tipo. O que já está no servidor permanece intacto, e ao reativar a sincronização retoma de onde você parou.",
+ "Data Sync": "Sincronização de dados",
+ "Manage Fonts": "Gerenciar fontes",
+ "App settings": "Configurações do app",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, cores de destaque, integrações (KOSync, Readwise, Hardcover) e ordem dos dicionários",
+ "Required while Dictionaries sync is enabled": "Necessário enquanto a sincronização de Dicionários estiver ativada",
+ "Unavailable": "Indisponível"
}
diff --git a/apps/readest-app/public/locales/ro/translation.json b/apps/readest-app/public/locales/ro/translation.json
index 126bee04..5e4869be 100644
--- a/apps/readest-app/public/locales/ro/translation.json
+++ b/apps/readest-app/public/locales/ro/translation.json
@@ -1194,7 +1194,6 @@
"Split Hyphens": "Desparte cratimele",
"Apply Theme Colors to PDF": "Aplică culorile temei la PDF",
"Name": "Nume",
- "Unavailable": "Indisponibil",
"Remove": "Elimină",
"Edit OPDS Catalog": "Editare catalog OPDS",
"Save Changes": "Salvare modificări",
@@ -1376,7 +1375,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Criptează câmpurile sensibile sincronizate (cum ar fi datele de autentificare ale catalogului OPDS) înainte ca acestea să părăsească dispozitivul tău. Setează una acum sau așteaptă — va fi solicitată când va fi nevoie.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Setată pe acest cont. Va fi solicitată atunci când va fi necesară pentru a decripta datele de autentificare sincronizate.",
"Set passphrase": "Setează fraza de acces",
- "Unlock now": "Deblochează acum",
"Forgot passphrase": "Am uitat fraza de acces",
"Incorrect PIN": "PIN incorect",
"App locked": "Aplicația este blocată",
@@ -1402,5 +1400,26 @@
"PINs do not match": "PIN-urile nu se potrivesc",
"Current PIN": "PIN actual",
"New PIN": "PIN nou",
- "Confirm new PIN": "Confirmă PIN-ul nou"
+ "Confirm new PIN": "Confirmă PIN-ul nou",
+ "Manage Sync": "Gestionează sincronizarea",
+ "Imported book files and library metadata": "Fișiere de cărți importate și metadate ale bibliotecii",
+ "Last-read position, bookmarks, and per-book preferences": "Ultima poziție de citire, marcaje și preferințe pentru fiecare carte",
+ "Highlights and notes": "Evidențieri și note",
+ "Fonts": "Fonturi",
+ "Custom font files": "Fișiere de fonturi personalizate",
+ "Backgrounds": "Fundaluri",
+ "Custom background textures": "Texturi de fundal personalizate",
+ "OPDS catalogs": "Cataloage OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL-uri de cataloage salvate și acreditări (criptate)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Frază de acces pentru sincronizare incorectă — acreditările sincronizate nu au putut fi decriptate",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Datele frazei de acces pentru sincronizare de pe server au fost resetate. Se recriptează acreditările cu noua frază de acces…",
+ "Failed to decrypt synced credentials": "Decriptarea acreditărilor sincronizate a eșuat",
+ "Imported dictionary bundles and settings": "Pachete de dicționare importate și setări",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Alege ce se sincronizează între dispozitivele tale. Dezactivarea unei categorii oprește acest dispozitiv să trimită sau să primească intrări de acel tip. Ce există deja pe server rămâne neschimbat, iar reactivarea reia din locul în care te-ai oprit.",
+ "Data Sync": "Sincronizare date",
+ "Manage Fonts": "Gestionează fonturile",
+ "App settings": "Setări aplicație",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Temă, culorile evidențierilor, integrări (KOSync, Readwise, Hardcover) și ordinea dicționarelor",
+ "Required while Dictionaries sync is enabled": "Necesar cât timp sincronizarea Dicționarelor este activată",
+ "Unavailable": "Indisponibil"
}
diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json
index 0430d8a0..87b77bad 100644
--- a/apps/readest-app/public/locales/ru/translation.json
+++ b/apps/readest-app/public/locales/ru/translation.json
@@ -1207,7 +1207,6 @@
"Split Hyphens": "Разделить дефисы",
"Apply Theme Colors to PDF": "Применить цвета темы к PDF",
"Name": "Имя",
- "Unavailable": "Недоступно",
"Remove": "Удалить",
"Edit OPDS Catalog": "Редактировать каталог OPDS",
"Save Changes": "Сохранить изменения",
@@ -1400,7 +1399,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Шифрует конфиденциальные синхронизируемые поля (например, учётные данные каталога OPDS) перед тем, как они покинут ваше устройство. Задайте её сейчас или позже — она будет запрошена при необходимости.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Задана для этого аккаунта. Будет запрошена при необходимости для расшифровки синхронизированных учётных данных.",
"Set passphrase": "Задать секретную фразу",
- "Unlock now": "Разблокировать сейчас",
"Forgot passphrase": "Забыли секретную фразу",
"Incorrect PIN": "Неверный PIN",
"App locked": "Приложение заблокировано",
@@ -1426,5 +1424,26 @@
"PINs do not match": "PIN-коды не совпадают",
"Current PIN": "Текущий PIN",
"New PIN": "Новый PIN",
- "Confirm new PIN": "Подтвердить новый PIN"
+ "Confirm new PIN": "Подтвердить новый PIN",
+ "Manage Sync": "Управление синхронизацией",
+ "Imported book files and library metadata": "Импортированные файлы книг и метаданные библиотеки",
+ "Last-read position, bookmarks, and per-book preferences": "Последняя позиция чтения, закладки и настройки для каждой книги",
+ "Highlights and notes": "Выделения и заметки",
+ "Fonts": "Шрифты",
+ "Custom font files": "Пользовательские файлы шрифтов",
+ "Backgrounds": "Фоны",
+ "Custom background textures": "Пользовательские текстуры фона",
+ "OPDS catalogs": "Каталоги OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "Сохранённые URL каталогов и (зашифрованные) учётные данные",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Неверная парольная фраза синхронизации — не удалось расшифровать синхронизированные учётные данные",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Данные парольной фразы синхронизации на сервере были сброшены. Перешифровка учётных данных с новой парольной фразой…",
+ "Failed to decrypt synced credentials": "Не удалось расшифровать синхронизированные учётные данные",
+ "Imported dictionary bundles and settings": "Импортированные пакеты словарей и настройки",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Выберите, что синхронизируется между вашими устройствами. При отключении категории это устройство перестаёт отправлять и получать записи такого типа. То, что уже на сервере, остаётся без изменений, а при повторном включении синхронизация возобновится с того места, где вы остановились.",
+ "Data Sync": "Синхронизация данных",
+ "Manage Fonts": "Управление шрифтами",
+ "App settings": "Настройки приложения",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Тема, цвета выделений, интеграции (KOSync, Readwise, Hardcover) и порядок словарей",
+ "Required while Dictionaries sync is enabled": "Требуется, пока включена синхронизация Словарей",
+ "Unavailable": "Недоступно"
}
diff --git a/apps/readest-app/public/locales/si/translation.json b/apps/readest-app/public/locales/si/translation.json
index c9420ed8..49bb5fb3 100644
--- a/apps/readest-app/public/locales/si/translation.json
+++ b/apps/readest-app/public/locales/si/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "හයිෆන් බෙදන්න",
"Apply Theme Colors to PDF": "PDF වෙත තේමා වර්ණ යොදන්න",
"Name": "නම",
- "Unavailable": "ලබාගත නොහැක",
"Remove": "ඉවත් කරන්න",
"Edit OPDS Catalog": "OPDS නාමාවලිය සංස්කරණය",
"Save Changes": "වෙනස්කම් සුරකින්න",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "ඔබේ උපාංගයෙන් පිටවීමට පෙර සංවේදී සමමුහුර්ත ක්ෂේත්ර (OPDS නාමාවලි අක්තපත්ර වැනි) සංකේතාංකනය කරයි. දැන් එකක් සකසන්න හෝ රැඳී සිටින්න — අවශ්ය වූ විට එය ඉල්ලනු ඇත.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "මෙම ගිණුමේ සකස් කර ඇත. සමමුහුර්ත අක්තපත්ර විකේතනය කිරීම සඳහා අවශ්ය වූ විට එය ඉල්ලනු ඇත.",
"Set passphrase": "මුරපදය සකසන්න",
- "Unlock now": "දැන් අගුළු හරින්න",
"Forgot passphrase": "මුරපදය අමතකද",
"Incorrect PIN": "වැරදි PIN",
"App locked": "යෙදුම අගුළු දමා ඇත",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PINs නොගැලපේ",
"Current PIN": "වත්මන් PIN",
"New PIN": "නව PIN",
- "Confirm new PIN": "නව PIN තහවුරු කරන්න"
+ "Confirm new PIN": "නව PIN තහවුරු කරන්න",
+ "Manage Sync": "සමමුහූර්තය කළමනාකරණය",
+ "Imported book files and library metadata": "ආයාතිත පොත් ගොනු සහ පුස්තකාල පාර-දත්ත",
+ "Last-read position, bookmarks, and per-book preferences": "අවසන් වරට කියවූ ස්ථානය, පිටු සලකුණු සහ එක් එක් පොතේ අභිප්රේත",
+ "Highlights and notes": "උද්දීපන සහ සටහන්",
+ "Fonts": "අකුරු",
+ "Custom font files": "අභිරුචි අකුරු ගොනු",
+ "Backgrounds": "පසුබිම්",
+ "Custom background textures": "අභිරුචි පසුබිම් වයන",
+ "OPDS catalogs": "OPDS නාමාවලි",
+ "Saved catalog URLs and (encrypted) credentials": "සුරකින ලද නාමාවලි URL සහ (සංකේතන කළ) අක්තපත්ර",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "වැරදි සමමුහූර්ත මුරපදය — සමමුහූර්ත කළ අක්තපත්ර විකේතනය කළ නොහැක",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "සේවාදායකයේ සමමුහූර්ත මුරපද දත්ත යළි සැකසීය. නව මුරපදය යටතේ ඔබේ අක්තපත්ර යළි සංකේතනය වෙමින්…",
+ "Failed to decrypt synced credentials": "සමමුහූර්ත කළ අක්තපත්ර විකේතනය කිරීමට අසමත් විය",
+ "Imported dictionary bundles and settings": "ආයාතිත ශබ්දකෝෂ පැකේජ සහ සැකසීම්",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "ඔබේ උපාංග අතර කුමක් සමමුහූර්ත කළ යුතුද යන්න තෝරන්න. කාණ්ඩයක් අක්රිය කිරීමෙන් මෙම උපාංගයෙන් එම වර්ගයේ පේළි යැවීම හෝ ලැබීම නවතී. සේවාදායකයේ දැනටමත් ඇති දේ එලෙසම පවතී, නැවත සක්රිය කළ විට ඔබ නැවැත්වූ තැනින් යළි ආරම්භ වේ.",
+ "Data Sync": "දත්ත සමමුහූර්තය",
+ "Manage Fonts": "අකුරු කළමනාකරණය",
+ "App settings": "යෙදුමේ සැකසුම්",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "තේමාව, උද්දීපන වර්ණ, ඒකාබද්ධතා (KOSync, Readwise, Hardcover) සහ ශබ්දකෝෂ අනුපිළිවෙල",
+ "Required while Dictionaries sync is enabled": "ශබ්දකෝෂ සමමුහූර්තය සක්රිය වී ඇති විට අවශ්යයි",
+ "Unavailable": "ලද නොහැක"
}
diff --git a/apps/readest-app/public/locales/sl/translation.json b/apps/readest-app/public/locales/sl/translation.json
index f845524c..09c632ad 100644
--- a/apps/readest-app/public/locales/sl/translation.json
+++ b/apps/readest-app/public/locales/sl/translation.json
@@ -1207,7 +1207,6 @@
"Split Hyphens": "Razdeli vezaje",
"Apply Theme Colors to PDF": "Uporabi barve teme za PDF",
"Name": "Ime",
- "Unavailable": "Nedosegljivo",
"Remove": "Odstrani",
"Edit OPDS Catalog": "Uredi katalog OPDS",
"Save Changes": "Shrani spremembe",
@@ -1400,7 +1399,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Šifrira občutljiva sinhronizirana polja (na primer poverilnice kataloga OPDS), preden zapustijo vašo napravo. Nastavite ga zdaj ali počakajte — zahtevan bo, ko bo potreben.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Nastavljeno za ta račun. Zahtevano bo, ko bo potrebno za dešifriranje sinhroniziranih poverilnic.",
"Set passphrase": "Nastavi geslo",
- "Unlock now": "Odkleni zdaj",
"Forgot passphrase": "Pozabljeno geslo",
"Incorrect PIN": "Napačen PIN",
"App locked": "Aplikacija je zaklenjena",
@@ -1426,5 +1424,26 @@
"PINs do not match": "PIN-i se ne ujemajo",
"Current PIN": "Trenutni PIN",
"New PIN": "Nov PIN",
- "Confirm new PIN": "Potrdite nov PIN"
+ "Confirm new PIN": "Potrdite nov PIN",
+ "Manage Sync": "Upravljaj sinhronizacijo",
+ "Imported book files and library metadata": "Uvožene datoteke knjig in metapodatki knjižnice",
+ "Last-read position, bookmarks, and per-book preferences": "Zadnji položaj branja, zaznamki in nastavitve za posamezno knjigo",
+ "Highlights and notes": "Označbe in opombe",
+ "Fonts": "Pisave",
+ "Custom font files": "Datoteke pisav po meri",
+ "Backgrounds": "Ozadja",
+ "Custom background textures": "Teksture ozadja po meri",
+ "OPDS catalogs": "Katalogi OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "Shranjeni naslovi URL katalogov in (šifrirana) poverilnice",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Napačno sinhronizacijsko geslo — sinhroniziranih poverilnic ni bilo mogoče dešifrirati",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Podatki o sinhronizacijskem geslu na strežniku so bili ponastavljeni. Vaše poverilnice se ponovno šifrirajo z novim geslom…",
+ "Failed to decrypt synced credentials": "Dešifriranje sinhroniziranih poverilnic ni uspelo",
+ "Imported dictionary bundles and settings": "Uvoženi paketi slovarjev in nastavitve",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Izberi, kaj naj se sinhronizira med tvojimi napravami. Onemogočanje kategorije ustavi to napravo, da bi pošiljala ali prejemala vnose te vrste. Kar je že na strežniku, ostane nespremenjeno, ob ponovnem omogočanju pa se sinhronizacija nadaljuje tam, kjer si končal.",
+ "Data Sync": "Sinhronizacija podatkov",
+ "Manage Fonts": "Upravljanje pisav",
+ "App settings": "Nastavitve aplikacije",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, barve označb, integracije (KOSync, Readwise, Hardcover) in vrstni red slovarjev",
+ "Required while Dictionaries sync is enabled": "Zahtevano, dokler je sinhronizacija Slovarjev omogočena",
+ "Unavailable": "Ni na voljo"
}
diff --git a/apps/readest-app/public/locales/sv/translation.json b/apps/readest-app/public/locales/sv/translation.json
index e4b7606d..aacb6746 100644
--- a/apps/readest-app/public/locales/sv/translation.json
+++ b/apps/readest-app/public/locales/sv/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Dela bindestreck",
"Apply Theme Colors to PDF": "Tillämpa temafärger på PDF",
"Name": "Namn",
- "Unavailable": "Inte tillgängligt",
"Remove": "Ta bort",
"Edit OPDS Catalog": "Redigera OPDS-katalog",
"Save Changes": "Spara ändringar",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Krypterar känsliga synkroniserade fält (t.ex. OPDS-katalogautentiseringsuppgifter) innan de lämnar din enhet. Ange en nu eller vänta — den efterfrågas när det behövs.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Inställd för det här kontot. Efterfrågas när det behövs för att dekryptera synkroniserade autentiseringsuppgifter.",
"Set passphrase": "Ange lösenfras",
- "Unlock now": "Lås upp nu",
"Forgot passphrase": "Glömt lösenfras",
"Incorrect PIN": "Felaktig PIN",
"App locked": "Appen är låst",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PIN-koderna stämmer inte överens",
"Current PIN": "Nuvarande PIN",
"New PIN": "Ny PIN",
- "Confirm new PIN": "Bekräfta ny PIN"
+ "Confirm new PIN": "Bekräfta ny PIN",
+ "Manage Sync": "Hantera synkronisering",
+ "Imported book files and library metadata": "Importerade bokfiler och biblioteksmetadata",
+ "Last-read position, bookmarks, and per-book preferences": "Senast lästa position, bokmärken och inställningar per bok",
+ "Highlights and notes": "Markeringar och anteckningar",
+ "Fonts": "Teckensnitt",
+ "Custom font files": "Anpassade teckensnittsfiler",
+ "Backgrounds": "Bakgrunder",
+ "Custom background textures": "Anpassade bakgrundstexturer",
+ "OPDS catalogs": "OPDS-kataloger",
+ "Saved catalog URLs and (encrypted) credentials": "Sparade katalog-URL:er och (krypterade) inloggningsuppgifter",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Fel synklösenfras — synkroniserade inloggningsuppgifter kunde inte dekrypteras",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Synklösenfrasdata på servern återställdes. Krypterar om dina inloggningsuppgifter med den nya lösenfrasen…",
+ "Failed to decrypt synced credentials": "Det gick inte att dekryptera synkroniserade inloggningsuppgifter",
+ "Imported dictionary bundles and settings": "Importerade ordbokspaket och inställningar",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Välj vad som synkroniseras mellan dina enheter. Att inaktivera en kategori gör att den här enheten slutar skicka eller ta emot poster av den typen. Det som redan finns på servern lämnas orört, och när du aktiverar igen fortsätter synkroniseringen där du slutade.",
+ "Data Sync": "Datasynkronisering",
+ "Manage Fonts": "Hantera teckensnitt",
+ "App settings": "Appinställningar",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, markeringsfärger, integrationer (KOSync, Readwise, Hardcover) och ordbokens ordning",
+ "Required while Dictionaries sync is enabled": "Krävs så länge synkronisering av Ordböcker är aktiverad",
+ "Unavailable": "Ej tillgänglig"
}
diff --git a/apps/readest-app/public/locales/ta/translation.json b/apps/readest-app/public/locales/ta/translation.json
index d050d52e..8eca72bf 100644
--- a/apps/readest-app/public/locales/ta/translation.json
+++ b/apps/readest-app/public/locales/ta/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "ஹைபன்களைப் பிரி",
"Apply Theme Colors to PDF": "PDF-க்கு தீம் நிறங்களைப் பயன்படுத்து",
"Name": "பெயர்",
- "Unavailable": "கிடைக்கவில்லை",
"Remove": "நீக்கு",
"Edit OPDS Catalog": "OPDS பட்டியலைத் திருத்து",
"Save Changes": "மாற்றங்களைச் சேமி",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "உங்கள் சாதனத்தை விட்டு வெளியேறுவதற்கு முன், முக்கியமான ஒத்திசைக்கப்பட்ட புலங்களை (OPDS பட்டியல் சான்றுகள் போன்றவை) குறியாக்கம் செய்கிறது. இப்போது ஒன்றை அமைக்கவும் அல்லது காத்திருக்கவும் — தேவைப்படும் போது கேட்கப்படும்.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "இந்த கணக்கில் அமைக்கப்பட்டுள்ளது. ஒத்திசைக்கப்பட்ட சான்றுகளை விகுதியாக்க தேவைப்படும்போது கேட்கப்படும்.",
"Set passphrase": "கடவுச்சொற்றொடரை அமைக்கவும்",
- "Unlock now": "இப்போது பூட்டை திறக்கவும்",
"Forgot passphrase": "கடவுச்சொற்றொடரை மறந்துவிட்டீர்களா",
"Incorrect PIN": "தவறான PIN",
"App locked": "செயலி பூட்டப்பட்டுள்ளது",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PIN கள் பொருந்தவில்லை",
"Current PIN": "தற்போதைய PIN",
"New PIN": "புதிய PIN",
- "Confirm new PIN": "புதிய PIN ஐ உறுதிப்படுத்து"
+ "Confirm new PIN": "புதிய PIN ஐ உறுதிப்படுத்து",
+ "Manage Sync": "ஒத்திசைவை நிர்வகிக்க",
+ "Imported book files and library metadata": "இறக்குமதி செய்யப்பட்ட புத்தக கோப்புகள் மற்றும் நூலக மெட்டாடேட்டா",
+ "Last-read position, bookmarks, and per-book preferences": "கடைசியாக படித்த இடம், புக்மார்க்குகள் மற்றும் ஒவ்வொரு புத்தகத்திற்கான விருப்பங்கள்",
+ "Highlights and notes": "ஹைலைட்டுகள் மற்றும் குறிப்புகள்",
+ "Fonts": "எழுத்துருக்கள்",
+ "Custom font files": "தனிப்பயன் எழுத்துரு கோப்புகள்",
+ "Backgrounds": "பின்னணிகள்",
+ "Custom background textures": "தனிப்பயன் பின்னணி அமைப்புகள்",
+ "OPDS catalogs": "OPDS பட்டியல்கள்",
+ "Saved catalog URLs and (encrypted) credentials": "சேமிக்கப்பட்ட பட்டியல் URLs மற்றும் (குறியாக்கப்பட்ட) சான்றுகள்",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "தவறான ஒத்திசைவு கடவுச்சொற்றொடர் — ஒத்திசைக்கப்பட்ட சான்றுகளை குறியாக்கம் நீக்க முடியவில்லை",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "சேவையகத்தில் ஒத்திசைவு கடவுச்சொற்றொடர் தரவு மீட்டமைக்கப்பட்டது. புதிய கடவுச்சொற்றொடர் மூலம் உங்கள் சான்றுகள் மீண்டும் குறியாக்கம் செய்யப்படுகின்றன…",
+ "Failed to decrypt synced credentials": "ஒத்திசைக்கப்பட்ட சான்றுகளின் குறியாக்கத்தை நீக்க முடியவில்லை",
+ "Imported dictionary bundles and settings": "இறக்குமதி செய்யப்பட்ட அகராதி பொதிகள் மற்றும் அமைப்புகள்",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "உங்கள் சாதனங்களுக்கு இடையே எது ஒத்திசைக்க வேண்டும் என்பதைத் தேர்ந்தெடுக்கவும். ஒரு பிரிவை முடக்கும்போது, அந்த வகை பதிவுகளை அனுப்புவதையும் பெறுவதையும் இந்த சாதனம் நிறுத்தும். சர்வரில் ஏற்கனவே உள்ளவை அப்படியே இருக்கும், மீண்டும் இயக்கும்போது நீங்கள் நிறுத்திய இடத்திலிருந்து தொடரும்.",
+ "Data Sync": "தரவு ஒத்திசைவு",
+ "Manage Fonts": "எழுத்துருக்களை நிர்வகி",
+ "App settings": "ஆப் அமைப்புகள்",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "தீம், ஹைலைட் வண்ணங்கள், ஒருங்கிணைப்புகள் (KOSync, Readwise, Hardcover) மற்றும் அகராதி வரிசை",
+ "Required while Dictionaries sync is enabled": "அகராதிகள் ஒத்திசைவு இயக்கத்தில் இருக்கும்போது தேவை",
+ "Unavailable": "கிடைக்கவில்லை"
}
diff --git a/apps/readest-app/public/locales/th/translation.json b/apps/readest-app/public/locales/th/translation.json
index cc20bb6f..2385bf9e 100644
--- a/apps/readest-app/public/locales/th/translation.json
+++ b/apps/readest-app/public/locales/th/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "แยกยัติภังค์",
"Apply Theme Colors to PDF": "ใช้สีธีมกับ PDF",
"Name": "ชื่อ",
- "Unavailable": "ไม่พร้อมใช้งาน",
"Remove": "ลบ",
"Edit OPDS Catalog": "แก้ไขแคตตาล็อก OPDS",
"Save Changes": "บันทึกการเปลี่ยนแปลง",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "เข้ารหัสฟิลด์ที่ซิงค์ซึ่งมีข้อมูลละเอียดอ่อน (เช่น ข้อมูลรับรองแคตตาล็อก OPDS) ก่อนออกจากอุปกรณ์ของคุณ ตั้งค่าเดี๋ยวนี้หรือรอไว้ก่อน — ระบบจะร้องขอเมื่อจำเป็น",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "ตั้งค่าไว้ในบัญชีนี้แล้ว จะถูกร้องขอเมื่อจำเป็นต้องถอดรหัสข้อมูลรับรองที่ซิงค์ไว้",
"Set passphrase": "ตั้งค่าวลีรหัสผ่าน",
- "Unlock now": "ปลดล็อกตอนนี้",
"Forgot passphrase": "ลืมวลีรหัสผ่าน",
"Incorrect PIN": "PIN ไม่ถูกต้อง",
"App locked": "แอปถูกล็อก",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN ไม่ตรงกัน",
"Current PIN": "PIN ปัจจุบัน",
"New PIN": "PIN ใหม่",
- "Confirm new PIN": "ยืนยัน PIN ใหม่"
+ "Confirm new PIN": "ยืนยัน PIN ใหม่",
+ "Manage Sync": "จัดการการซิงค์",
+ "Imported book files and library metadata": "ไฟล์หนังสือที่นำเข้าและข้อมูลเมตาของคลัง",
+ "Last-read position, bookmarks, and per-book preferences": "ตำแหน่งที่อ่านล่าสุด บุ๊กมาร์ก และค่ากำหนดของแต่ละเล่ม",
+ "Highlights and notes": "ไฮไลต์และบันทึก",
+ "Fonts": "แบบอักษร",
+ "Custom font files": "ไฟล์แบบอักษรที่กำหนดเอง",
+ "Backgrounds": "พื้นหลัง",
+ "Custom background textures": "พื้นผิวพื้นหลังที่กำหนดเอง",
+ "OPDS catalogs": "แคตตาล็อก OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL แคตตาล็อกที่บันทึกไว้และข้อมูลรับรอง (ที่เข้ารหัส)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "วลีรหัสผ่านซิงค์ไม่ถูกต้อง — ไม่สามารถถอดรหัสข้อมูลรับรองที่ซิงค์ได้",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "ข้อมูลวลีรหัสผ่านซิงค์บนเซิร์ฟเวอร์ถูกรีเซ็ตแล้ว กำลังเข้ารหัสข้อมูลรับรองของคุณใหม่ด้วยวลีรหัสผ่านใหม่…",
+ "Failed to decrypt synced credentials": "ไม่สามารถถอดรหัสข้อมูลรับรองที่ซิงค์ได้",
+ "Imported dictionary bundles and settings": "ชุดพจนานุกรมที่นำเข้าและการตั้งค่า",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "เลือกสิ่งที่ซิงค์ระหว่างอุปกรณ์ของคุณ การปิดหมวดหมู่จะหยุดอุปกรณ์นี้จากการส่งหรือรับรายการประเภทนั้น สิ่งที่อยู่บนเซิร์ฟเวอร์อยู่แล้วจะไม่ถูกแตะต้อง การเปิดใช้งานอีกครั้งจะดำเนินการต่อจากจุดที่คุณหยุดไว้",
+ "Data Sync": "ซิงค์ข้อมูล",
+ "Manage Fonts": "จัดการแบบอักษร",
+ "App settings": "การตั้งค่าแอป",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "ธีม สีไฮไลต์ การเชื่อมต่อ (KOSync, Readwise, Hardcover) และลำดับพจนานุกรม",
+ "Required while Dictionaries sync is enabled": "จำเป็นเมื่อเปิดใช้การซิงค์พจนานุกรม",
+ "Unavailable": "ไม่พร้อมใช้งาน"
}
diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json
index 7d1bc4f6..63528de7 100644
--- a/apps/readest-app/public/locales/tr/translation.json
+++ b/apps/readest-app/public/locales/tr/translation.json
@@ -1181,7 +1181,6 @@
"Split Hyphens": "Tireleri Böl",
"Apply Theme Colors to PDF": "Tema Renklerini PDF'ye Uygula",
"Name": "Ad",
- "Unavailable": "Kullanılamaz",
"Remove": "Kaldır",
"Edit OPDS Catalog": "OPDS Kataloğunu Düzenle",
"Save Changes": "Değişiklikleri Kaydet",
@@ -1352,7 +1351,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Hassas eşitlenen alanları (OPDS kataloğu kimlik bilgileri gibi) cihazınızdan ayrılmadan önce şifreler. Şimdi bir tane belirleyin ya da bekleyin — gerektiğinde istenecektir.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Bu hesapta ayarlandı. Eşitlenen kimlik bilgilerinin şifresini çözmek için gerektiğinde istenecektir.",
"Set passphrase": "Parolayı belirle",
- "Unlock now": "Şimdi kilidi aç",
"Forgot passphrase": "Parolayı unuttum",
"Incorrect PIN": "Yanlış PIN",
"App locked": "Uygulama kilitli",
@@ -1378,5 +1376,26 @@
"PINs do not match": "PIN'ler eşleşmiyor",
"Current PIN": "Mevcut PIN",
"New PIN": "Yeni PIN",
- "Confirm new PIN": "Yeni PIN'i onayla"
+ "Confirm new PIN": "Yeni PIN'i onayla",
+ "Manage Sync": "Eşitlemeyi yönet",
+ "Imported book files and library metadata": "İçe aktarılan kitap dosyaları ve kütüphane meta verileri",
+ "Last-read position, bookmarks, and per-book preferences": "Son okuma konumu, yer imleri ve kitap başına tercihler",
+ "Highlights and notes": "Vurgular ve notlar",
+ "Fonts": "Yazı tipleri",
+ "Custom font files": "Özel yazı tipi dosyaları",
+ "Backgrounds": "Arka planlar",
+ "Custom background textures": "Özel arka plan dokuları",
+ "OPDS catalogs": "OPDS katalogları",
+ "Saved catalog URLs and (encrypted) credentials": "Kayıtlı katalog URL'leri ve (şifrelenmiş) kimlik bilgileri",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Yanlış eşitleme parolası — eşitlenmiş kimlik bilgileri çözülemedi",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Sunucudaki eşitleme parolası verisi sıfırlandı. Kimlik bilgileriniz yeni parolayla yeniden şifreleniyor…",
+ "Failed to decrypt synced credentials": "Eşitlenmiş kimlik bilgileri çözülemedi",
+ "Imported dictionary bundles and settings": "İçe aktarılan sözlük paketleri ve ayarlar",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Cihazlarınız arasında neyin eşitleneceğini seçin. Bir kategoriyi devre dışı bırakmak, bu cihazın o türden kayıtları göndermesini veya almasını durdurur. Sunucuda zaten bulunan veriler olduğu gibi kalır, yeniden etkinleştirdiğinizde eşitleme bıraktığınız yerden devam eder.",
+ "Data Sync": "Veri eşitleme",
+ "Manage Fonts": "Yazı tiplerini yönet",
+ "App settings": "Uygulama ayarları",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Tema, vurgu renkleri, entegrasyonlar (KOSync, Readwise, Hardcover) ve sözlük sırası",
+ "Required while Dictionaries sync is enabled": "Sözlük eşitlemesi etkinken gereklidir",
+ "Unavailable": "Kullanılamıyor"
}
diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json
index 27015036..0f327564 100644
--- a/apps/readest-app/public/locales/uk/translation.json
+++ b/apps/readest-app/public/locales/uk/translation.json
@@ -1207,7 +1207,6 @@
"Split Hyphens": "Розділити дефіси",
"Apply Theme Colors to PDF": "Застосувати кольори теми до PDF",
"Name": "Ім'я",
- "Unavailable": "Недоступно",
"Remove": "Видалити",
"Edit OPDS Catalog": "Редагувати каталог OPDS",
"Save Changes": "Зберегти зміни",
@@ -1400,7 +1399,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Шифрує конфіденційні синхронізовані поля (наприклад, облікові дані каталогу OPDS) перед тим, як вони залишать ваш пристрій. Установіть її зараз або зачекайте — її буде запитано за потреби.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Установлено для цього облікового запису. Запитуватиметься за потреби для розшифрування синхронізованих облікових даних.",
"Set passphrase": "Установити парольну фразу",
- "Unlock now": "Розблокувати зараз",
"Forgot passphrase": "Забули парольну фразу",
"Incorrect PIN": "Неправильний PIN",
"App locked": "Програму заблоковано",
@@ -1426,5 +1424,26 @@
"PINs do not match": "PIN-коди не збігаються",
"Current PIN": "Поточний PIN",
"New PIN": "Новий PIN",
- "Confirm new PIN": "Підтвердити новий PIN"
+ "Confirm new PIN": "Підтвердити новий PIN",
+ "Manage Sync": "Керування синхронізацією",
+ "Imported book files and library metadata": "Імпортовані файли книжок і метадані бібліотеки",
+ "Last-read position, bookmarks, and per-book preferences": "Остання позиція читання, закладки та налаштування для кожної книжки",
+ "Highlights and notes": "Виділення та нотатки",
+ "Fonts": "Шрифти",
+ "Custom font files": "Користувацькі файли шрифтів",
+ "Backgrounds": "Фони",
+ "Custom background textures": "Користувацькі текстури фону",
+ "OPDS catalogs": "Каталоги OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "Збережені URL каталогів та (зашифровані) облікові дані",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Невірна парольна фраза синхронізації — не вдалося розшифрувати синхронізовані облікові дані",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Дані парольної фрази синхронізації на сервері було скинуто. Перешифрування облікових даних із новою парольною фразою…",
+ "Failed to decrypt synced credentials": "Не вдалося розшифрувати синхронізовані облікові дані",
+ "Imported dictionary bundles and settings": "Імпортовані пакети словників і налаштування",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Виберіть, що синхронізується між вашими пристроями. Вимкнення категорії зупиняє цей пристрій від надсилання або отримання записів цього типу. Те, що вже на сервері, залишається без змін, а повторне ввімкнення відновлює синхронізацію з того місця, де ви зупинилися.",
+ "Data Sync": "Синхронізація даних",
+ "Manage Fonts": "Керування шрифтами",
+ "App settings": "Налаштування застосунку",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Тема, кольори виділень, інтеграції (KOSync, Readwise, Hardcover) і порядок словників",
+ "Required while Dictionaries sync is enabled": "Потрібне, доки увімкнено синхронізацію Словників",
+ "Unavailable": "Недоступно"
}
diff --git a/apps/readest-app/public/locales/uz/translation.json b/apps/readest-app/public/locales/uz/translation.json
index 673348eb..862b6d8b 100644
--- a/apps/readest-app/public/locales/uz/translation.json
+++ b/apps/readest-app/public/locales/uz/translation.json
@@ -1352,7 +1352,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Maxfiy sinxronlangan maydonlarni (masalan, OPDS katalogi hisob ma’lumotlari) qurilmangizdan chiqishidan oldin shifrlaydi. Hozir o‘rnating yoki kuting — kerak bo‘lganda so‘raladi.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Ushbu hisobda o‘rnatilgan. Sinxronlangan hisob ma’lumotlarini deshifrlash uchun kerak bo‘lganda so‘raladi.",
"Set passphrase": "Parol iborasini o‘rnatish",
- "Unlock now": "Hozir qulfdan chiqarish",
"Forgot passphrase": "Parol iborasini unutdingizmi",
"Incorrect PIN": "Noto'g'ri PIN",
"App locked": "Ilova qulflangan",
@@ -1378,5 +1377,25 @@
"PINs do not match": "PIN'lar mos kelmaydi",
"Current PIN": "Joriy PIN",
"New PIN": "Yangi PIN",
- "Confirm new PIN": "Yangi PIN'ni tasdiqlash"
+ "Confirm new PIN": "Yangi PIN'ni tasdiqlash",
+ "Data Sync": "Maʼlumotlarni sinxronlash",
+ "Manage Sync": "Sinxronlashni boshqarish",
+ "Imported book files and library metadata": "Import qilingan kitob fayllari va kutubxona metamaʼlumotlari",
+ "Last-read position, bookmarks, and per-book preferences": "Soʻnggi oʻqilgan joy, xatcho‘plar va har bir kitob uchun sozlamalar",
+ "Highlights and notes": "Belgilar va eslatmalar",
+ "Imported dictionary bundles and settings": "Import qilingan lugʻat paketlari va sozlamalari",
+ "Fonts": "Shriftlar",
+ "Custom font files": "Maxsus shrift fayllari",
+ "Backgrounds": "Fonlar",
+ "Custom background textures": "Maxsus fon teksturalari",
+ "OPDS catalogs": "OPDS kataloglari",
+ "Saved catalog URLs and (encrypted) credentials": "Saqlangan katalog URL manzillari va (shifrlangan) hisob maʼlumotlari",
+ "App settings": "Ilova sozlamalari",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Mavzu, belgilash ranglari, integratsiyalar (KOSync, Readwise, Hardcover) va lugʻatlar tartibi",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Qurilmalaringiz oʻrtasida nimani sinxronlashni tanlang. Toifani oʻchirib qoʻyish bu qurilmaning shu turdagi maʼlumotlarni yuborish yoki qabul qilishini toʻxtatadi. Serverdagi mavjud maʼlumotlar oʻzgarmaydi; qaytadan yoqilganda toʻxtagan joydan davom etadi.",
+ "Required while Dictionaries sync is enabled": "Lugʻatlar sinxronlashi yoqilgan ekan, talab qilinadi",
+ "Manage Fonts": "Shriftlarni boshqarish",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Sinxronlash paroli notoʻgʻri — sinxronlangan hisob maʼlumotlari shifrini ochib boʻlmadi",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Serverdagi sinxronlash paroli maʼlumotlari tiklandi. Hisob maʼlumotlaringiz yangi parol bilan qayta shifrlanmoqda…",
+ "Failed to decrypt synced credentials": "Sinxronlangan hisob maʼlumotlari shifrini ochib boʻlmadi"
}
diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json
index 63136846..7ba4ecb4 100644
--- a/apps/readest-app/public/locales/vi/translation.json
+++ b/apps/readest-app/public/locales/vi/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "Tách gạch nối",
"Apply Theme Colors to PDF": "Áp dụng màu chủ đề cho PDF",
"Name": "Tên",
- "Unavailable": "Không khả dụng",
"Remove": "Xóa",
"Edit OPDS Catalog": "Chỉnh sửa danh mục OPDS",
"Save Changes": "Lưu thay đổi",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "Mã hóa các trường được đồng bộ nhạy cảm (như thông tin đăng nhập danh mục OPDS) trước khi chúng rời khỏi thiết bị của bạn. Đặt ngay bây giờ hoặc chờ — sẽ được yêu cầu khi cần.",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "Đã đặt trên tài khoản này. Sẽ được yêu cầu khi cần để giải mã thông tin đăng nhập đã đồng bộ.",
"Set passphrase": "Đặt cụm mật khẩu",
- "Unlock now": "Mở khóa ngay",
"Forgot passphrase": "Quên cụm mật khẩu",
"Incorrect PIN": "Mã PIN không đúng",
"App locked": "Ứng dụng đã khóa",
@@ -1354,5 +1352,26 @@
"PINs do not match": "Mã PIN không khớp",
"Current PIN": "Mã PIN hiện tại",
"New PIN": "Mã PIN mới",
- "Confirm new PIN": "Xác nhận mã PIN mới"
+ "Confirm new PIN": "Xác nhận mã PIN mới",
+ "Manage Sync": "Quản lý đồng bộ",
+ "Imported book files and library metadata": "Tệp sách đã nhập và siêu dữ liệu thư viện",
+ "Last-read position, bookmarks, and per-book preferences": "Vị trí đọc cuối, dấu trang và tuỳ chọn theo từng sách",
+ "Highlights and notes": "Tô sáng và ghi chú",
+ "Fonts": "Phông chữ",
+ "Custom font files": "Tệp phông chữ tuỳ chỉnh",
+ "Backgrounds": "Hình nền",
+ "Custom background textures": "Họa tiết nền tuỳ chỉnh",
+ "OPDS catalogs": "Danh mục OPDS",
+ "Saved catalog URLs and (encrypted) credentials": "URL danh mục đã lưu và thông tin đăng nhập (đã mã hoá)",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "Cụm mật khẩu đồng bộ không đúng — không thể giải mã thông tin đăng nhập đã đồng bộ",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "Dữ liệu cụm mật khẩu đồng bộ trên máy chủ đã được đặt lại. Đang mã hoá lại thông tin đăng nhập của bạn bằng cụm mật khẩu mới…",
+ "Failed to decrypt synced credentials": "Không thể giải mã thông tin đăng nhập đã đồng bộ",
+ "Imported dictionary bundles and settings": "Gói từ điển đã nhập và cài đặt",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "Chọn những gì sẽ đồng bộ giữa các thiết bị của bạn. Tắt một danh mục sẽ ngăn thiết bị này gửi hoặc nhận các mục thuộc loại đó. Bất kỳ dữ liệu nào đã có trên máy chủ vẫn được giữ nguyên, bật lại sẽ tiếp tục từ nơi bạn đã dừng.",
+ "Data Sync": "Đồng bộ dữ liệu",
+ "Manage Fonts": "Quản lý phông chữ",
+ "App settings": "Cài đặt ứng dụng",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "Chủ đề, màu tô sáng, tích hợp (KOSync, Readwise, Hardcover) và thứ tự từ điển",
+ "Required while Dictionaries sync is enabled": "Bắt buộc khi đồng bộ Từ điển đang bật",
+ "Unavailable": "Không khả dụng"
}
diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json
index 2d24e521..4b9222e5 100644
--- a/apps/readest-app/public/locales/zh-CN/translation.json
+++ b/apps/readest-app/public/locales/zh-CN/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "拆分连字符",
"Apply Theme Colors to PDF": "将主题颜色应用于 PDF",
"Name": "名称",
- "Unavailable": "不可用",
"Remove": "移除",
"Edit OPDS Catalog": "编辑 OPDS 目录",
"Save Changes": "保存更改",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "在敏感的同步字段(例如 OPDS 目录凭据)离开您的设备之前对其进行加密。立即设置或稍后再设 — 需要时会请求输入。",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "已在此账户上设置。需要解密同步凭据时将请求输入。",
"Set passphrase": "设置密语",
- "Unlock now": "立即解锁",
"Forgot passphrase": "忘记密语",
"Incorrect PIN": "PIN 码错误",
"App locked": "应用已锁定",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN 码不匹配",
"Current PIN": "当前 PIN 码",
"New PIN": "新 PIN 码",
- "Confirm new PIN": "确认新 PIN 码"
+ "Confirm new PIN": "确认新 PIN 码",
+ "Manage Sync": "管理同步",
+ "Imported book files and library metadata": "导入的书籍文件和书库元数据",
+ "Last-read position, bookmarks, and per-book preferences": "最近阅读位置、书签和单本书籍的偏好设置",
+ "Highlights and notes": "高亮和笔记",
+ "Fonts": "字体",
+ "Custom font files": "自定义字体文件",
+ "Backgrounds": "背景",
+ "Custom background textures": "自定义背景纹理",
+ "OPDS catalogs": "OPDS 目录",
+ "Saved catalog URLs and (encrypted) credentials": "已保存的目录链接和(加密的)凭据",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "同步密码错误——无法解密已同步的凭据",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "服务器上的同步密码数据已被重置。正在使用新密码重新加密你的凭据……",
+ "Failed to decrypt synced credentials": "无法解密已同步的凭据",
+ "Imported dictionary bundles and settings": "导入的词典包和设置",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "选择哪些内容在你的设备间同步。停用某个类别后,此设备将停止发送和接收该类的记录。服务器上已有的内容不受影响,重新启用后会从你停下的位置继续同步。",
+ "Data Sync": "数据同步",
+ "Manage Fonts": "管理字体",
+ "App settings": "应用设置",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "主题、高亮颜色、第三方集成(KOSync、Readwise、Hardcover)以及词典顺序",
+ "Required while Dictionaries sync is enabled": "启用词典同步时必需",
+ "Unavailable": "不可用"
}
diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json
index 39db2695..5092f322 100644
--- a/apps/readest-app/public/locales/zh-TW/translation.json
+++ b/apps/readest-app/public/locales/zh-TW/translation.json
@@ -1168,7 +1168,6 @@
"Split Hyphens": "拆分連字號",
"Apply Theme Colors to PDF": "將主題顏色套用至 PDF",
"Name": "名稱",
- "Unavailable": "無法使用",
"Remove": "移除",
"Edit OPDS Catalog": "編輯 OPDS 目錄",
"Save Changes": "儲存變更",
@@ -1328,7 +1327,6 @@
"Encrypts sensitive synced fields (like OPDS catalog credentials) before they leave your device. Set one now or wait — it will be requested when needed.": "在敏感的同步欄位(例如 OPDS 目錄憑證)離開您的裝置之前對其進行加密。立即設定或稍後再設 — 需要時會請求輸入。",
"Set on this account. Will be requested when needed to decrypt synced credentials.": "已在此帳戶上設定。需要解密同步憑證時將請求輸入。",
"Set passphrase": "設定密語",
- "Unlock now": "立即解鎖",
"Forgot passphrase": "忘記密語",
"Incorrect PIN": "PIN 碼錯誤",
"App locked": "應用程式已鎖定",
@@ -1354,5 +1352,26 @@
"PINs do not match": "PIN 碼不相符",
"Current PIN": "目前 PIN 碼",
"New PIN": "新 PIN 碼",
- "Confirm new PIN": "確認新 PIN 碼"
+ "Confirm new PIN": "確認新 PIN 碼",
+ "Manage Sync": "管理同步",
+ "Imported book files and library metadata": "已匯入的書籍檔案與書庫中繼資料",
+ "Last-read position, bookmarks, and per-book preferences": "最近閱讀位置、書籤與單本書籍的偏好設定",
+ "Highlights and notes": "螢光標記與筆記",
+ "Fonts": "字型",
+ "Custom font files": "自訂字型檔案",
+ "Backgrounds": "背景",
+ "Custom background textures": "自訂背景紋理",
+ "OPDS catalogs": "OPDS 目錄",
+ "Saved catalog URLs and (encrypted) credentials": "已儲存的目錄網址與(已加密的)認證資訊",
+ "Wrong sync passphrase — synced credentials could not be decrypted": "同步密碼錯誤——無法解密已同步的認證資訊",
+ "Sync passphrase data on the server was reset. Re-encrypting your credentials under the new passphrase…": "伺服器上的同步密碼資料已重設。正在以新密碼重新加密你的認證資訊……",
+ "Failed to decrypt synced credentials": "無法解密已同步的認證資訊",
+ "Imported dictionary bundles and settings": "已匯入的字典包與設定",
+ "Choose what syncs across your devices. Disabling a category stops this device from sending or receiving rows of that kind. Anything already on the server is left alone, re-enabling resumes from where you stopped.": "選擇要在你的裝置間同步哪些內容。停用某個類別後,此裝置將停止傳送或接收該類的記錄。伺服器上已有的內容不會被更動,重新啟用後會從你停下的位置繼續同步。",
+ "Data Sync": "資料同步",
+ "Manage Fonts": "管理字型",
+ "App settings": "應用程式設定",
+ "Theme, highlight colours, integrations (KOSync, Readwise, Hardcover), and dictionary order": "主題、螢光標記顏色、第三方整合(KOSync、Readwise、Hardcover)以及詞典順序",
+ "Required while Dictionaries sync is enabled": "啟用詞典同步時必須",
+ "Unavailable": "無法使用"
}
diff --git a/apps/readest-app/src/__tests__/services/constants.test.ts b/apps/readest-app/src/__tests__/services/constants.test.ts
index 88aa6398..e0aa7dee 100644
--- a/apps/readest-app/src/__tests__/services/constants.test.ts
+++ b/apps/readest-app/src/__tests__/services/constants.test.ts
@@ -243,13 +243,17 @@ describe('services/constants', () => {
expect(DEFAULT_SYSTEM_SETTINGS.screenBrightness!).toBeLessThanOrEqual(100);
});
- it('seeds syncCategories with all four SyncCategory keys', () => {
+ it('seeds syncCategories with every SyncCategory key, all enabled', () => {
const cats = DEFAULT_SYSTEM_SETTINGS.syncCategories!;
expect(cats).toEqual({
book: true,
progress: true,
note: true,
dictionary: true,
+ font: true,
+ texture: true,
+ opds_catalog: true,
+ settings: true,
});
});
diff --git a/apps/readest-app/src/__tests__/services/sync/replicaPublish.test.ts b/apps/readest-app/src/__tests__/services/sync/replicaPublish.test.ts
index 091d0e1b..9b5ce676 100644
--- a/apps/readest-app/src/__tests__/services/sync/replicaPublish.test.ts
+++ b/apps/readest-app/src/__tests__/services/sync/replicaPublish.test.ts
@@ -237,6 +237,85 @@ describe('publishReplicaManifest', () => {
});
});
+describe('publishReplica* sync category gate', () => {
+ // When the user disables a category (e.g., dictionary) the publish
+ // path is a silent no-op. The local store stays mutable; the data
+ // just doesn't fan out to the server. Re-enabling resumes pushes
+ // automatically — no manual flush required.
+ const disableCategory = async (category: string): Promise => {
+ const { useSettingsStore } = await import('@/store/settingsStore');
+ useSettingsStore.setState({
+ settings: { syncCategories: { [category]: false } } as never,
+ } as never);
+ };
+
+ const restoreCategories = async (): Promise => {
+ const { useSettingsStore } = await import('@/store/settingsStore');
+ useSettingsStore.setState({ settings: undefined } as never);
+ };
+
+ afterEach(async () => {
+ await restoreCategories();
+ });
+
+ test('publishReplicaUpsert is a no-op when its kind is disabled', async () => {
+ await disableCategory('dictionary');
+ const ctx = makeFakeCtx();
+ (getReplicaSync as ReturnType).mockReturnValue(ctx);
+ (getUserID as ReturnType).mockResolvedValue('user-1');
+ await upsertDict(baseDict());
+ expect(ctx.manager.markDirty).not.toHaveBeenCalled();
+ });
+
+ test('publishReplicaDelete is a no-op when its kind is disabled', async () => {
+ await disableCategory('dictionary');
+ const ctx = makeFakeCtx();
+ (getReplicaSync as ReturnType).mockReturnValue(ctx);
+ (getUserID as ReturnType).mockResolvedValue('user-1');
+ await publishReplicaDelete('dictionary', 'content-hash-abc');
+ expect(ctx.manager.markDirty).not.toHaveBeenCalled();
+ });
+
+ test('publishReplicaManifest is a no-op when its kind is disabled', async () => {
+ await disableCategory('dictionary');
+ const ctx = makeFakeCtx();
+ (getReplicaSync as ReturnType).mockReturnValue(ctx);
+ (getUserID as ReturnType).mockResolvedValue('user-1');
+ await publishReplicaManifest('dictionary', 'content-hash-abc', []);
+ expect(ctx.manager.markDirty).not.toHaveBeenCalled();
+ });
+
+ test('settings is force-enabled when dictionary is on (dependency cascade)', async () => {
+ // settings: false but dictionary: true (the dependent) → settings
+ // must still publish, otherwise dictionary cross-device sync breaks.
+ const { useSettingsStore } = await import('@/store/settingsStore');
+ useSettingsStore.setState({
+ settings: { syncCategories: { settings: false, dictionary: true } } as never,
+ } as never);
+ const ctx = makeFakeCtx();
+ (getReplicaSync as ReturnType).mockReturnValue(ctx);
+ (getUserID as ReturnType).mockResolvedValue('user-1');
+ const { settingsAdapter } = await import('@/services/sync/adapters/settings');
+ registerReplicaAdapter(settingsAdapter);
+ await publishReplicaUpsert('settings', { name: 'singleton', patch: {} }, 'singleton');
+ expect(ctx.manager.markDirty).toHaveBeenCalled();
+ });
+
+ test('settings publish is gated when both settings AND its dependent (dictionary) are off', async () => {
+ const { useSettingsStore } = await import('@/store/settingsStore');
+ useSettingsStore.setState({
+ settings: { syncCategories: { settings: false, dictionary: false } } as never,
+ } as never);
+ const ctx = makeFakeCtx();
+ (getReplicaSync as ReturnType).mockReturnValue(ctx);
+ (getUserID as ReturnType).mockResolvedValue('user-1');
+ const { settingsAdapter } = await import('@/services/sync/adapters/settings');
+ registerReplicaAdapter(settingsAdapter);
+ await publishReplicaUpsert('settings', { name: 'singleton', patch: {} }, 'singleton');
+ expect(ctx.manager.markDirty).not.toHaveBeenCalled();
+ });
+});
+
// Suppress unused import lint when running standalone
void hlcPack;
void ({} as Hlc);
diff --git a/apps/readest-app/src/__tests__/services/sync/syncCategories.test.ts b/apps/readest-app/src/__tests__/services/sync/syncCategories.test.ts
new file mode 100644
index 00000000..38421319
--- /dev/null
+++ b/apps/readest-app/src/__tests__/services/sync/syncCategories.test.ts
@@ -0,0 +1,131 @@
+import { afterEach, beforeEach, describe, expect, test } from 'vitest';
+
+import {
+ SYNC_CATEGORIES,
+ isSyncCategoryEnabled,
+ isSyncCategoryLocked,
+} from '@/services/sync/syncCategories';
+import { useSettingsStore } from '@/store/settingsStore';
+import type { SyncCategory, SystemSettings } from '@/types/settings';
+
+const setSettings = (patch: Partial): void => {
+ useSettingsStore.setState({
+ settings: { ...patch } as SystemSettings,
+ setSettings: (s: SystemSettings) => useSettingsStore.setState({ settings: s }),
+ } as ReturnType);
+};
+
+const clearSettings = (): void => {
+ useSettingsStore.setState({
+ settings: undefined,
+ } as unknown as ReturnType);
+};
+
+beforeEach(() => clearSettings());
+afterEach(() => clearSettings());
+
+describe('isSyncCategoryEnabled', () => {
+ test('defaults to true when settings are not loaded yet', () => {
+ expect(isSyncCategoryEnabled('book')).toBe(true);
+ expect(isSyncCategoryEnabled('dictionary')).toBe(true);
+ });
+
+ test('defaults to true when syncCategories map is missing', () => {
+ setSettings({});
+ expect(isSyncCategoryEnabled('book')).toBe(true);
+ expect(isSyncCategoryEnabled('opds_catalog')).toBe(true);
+ });
+
+ test('returns true when category is explicitly true', () => {
+ setSettings({ syncCategories: { dictionary: true } });
+ expect(isSyncCategoryEnabled('dictionary')).toBe(true);
+ });
+
+ test('returns false only when category is explicitly false', () => {
+ setSettings({ syncCategories: { dictionary: false } });
+ expect(isSyncCategoryEnabled('dictionary')).toBe(false);
+ // Other unset categories still default to true.
+ expect(isSyncCategoryEnabled('font')).toBe(true);
+ });
+
+ test('settings is togglable on its own', () => {
+ setSettings({
+ syncCategories: { settings: false, dictionary: false } as Partial<
+ Record
+ >,
+ });
+ // With dictionary off, the user's settings:false stands.
+ expect(isSyncCategoryEnabled('settings')).toBe(false);
+ });
+
+ test('settings is FORCED on when dictionary is enabled (dependency cascade)', () => {
+ setSettings({
+ syncCategories: { settings: false, dictionary: true } as Partial<
+ Record
+ >,
+ });
+ // Dictionary's providerOrder / providerEnabled / webSearches live
+ // inside the settings replica, so disabling settings while
+ // dictionary is on would silently break dictionary cross-device
+ // sync. The cascade prevents that footgun.
+ expect(isSyncCategoryEnabled('settings')).toBe(true);
+ });
+
+ test('infrastructure kinds outside SYNC_CATEGORIES are always enabled', () => {
+ setSettings({
+ syncCategories: { progress: false } as Partial>,
+ });
+ expect(isSyncCategoryEnabled('font_metadata')).toBe(true); // unknown id
+ });
+
+ describe('isSyncCategoryLocked', () => {
+ test('returns false for categories with no dependents', () => {
+ expect(isSyncCategoryLocked('book')).toBe(false);
+ expect(isSyncCategoryLocked('font')).toBe(false);
+ });
+
+ test('returns false for `settings` when dictionary is disabled', () => {
+ setSettings({
+ syncCategories: { dictionary: false } as Partial>,
+ });
+ expect(isSyncCategoryLocked('settings')).toBe(false);
+ });
+
+ test('returns true for `settings` when dictionary is enabled', () => {
+ setSettings({
+ syncCategories: { dictionary: true } as Partial>,
+ });
+ expect(isSyncCategoryLocked('settings')).toBe(true);
+ });
+
+ test('returns true for `settings` when dictionary defaults to enabled (no map)', () => {
+ setSettings({});
+ expect(isSyncCategoryLocked('settings')).toBe(true);
+ });
+ });
+
+ test('legacy SyncType ids map to categories (configs → progress, books → book, notes → note)', () => {
+ setSettings({ syncCategories: { progress: false, book: false, note: false } });
+ expect(isSyncCategoryEnabled('configs')).toBe(false);
+ expect(isSyncCategoryEnabled('config')).toBe(false);
+ expect(isSyncCategoryEnabled('books')).toBe(false);
+ expect(isSyncCategoryEnabled('notes')).toBe(false);
+ });
+});
+
+describe('SYNC_CATEGORIES', () => {
+ test('covers all eight user-facing categories (incl. settings)', () => {
+ expect([...SYNC_CATEGORIES].sort()).toEqual(
+ [
+ 'book',
+ 'dictionary',
+ 'font',
+ 'note',
+ 'opds_catalog',
+ 'progress',
+ 'settings',
+ 'texture',
+ ].sort(),
+ );
+ });
+});
diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx
index a1930069..0f4e5234 100644
--- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx
+++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx
@@ -104,6 +104,11 @@ const SettingsMenu: React.FC = ({ onPullLibrary, setIsDropdow
setIsDropdownOpen?.(false);
};
+ const handleManageSync = () => {
+ router.push('/user?section=sync');
+ setIsDropdownOpen?.(false);
+ };
+
const cycleThemeMode = () => {
const nextMode = themeMode === 'auto' ? 'light' : themeMode === 'light' ? 'dark' : 'auto';
setThemeMode(nextMode);
@@ -410,10 +415,11 @@ const SettingsMenu: React.FC = ({ onPullLibrary, setIsDropdow