feat(reader): middle mouse button autoscroll in scrolled mode (#4955)

* feat(reader): add middle mouse button autoscroll in scrolled mode

Middle-clicking a book in scrolled mode on desktop apps plants an anchor
indicator and scrolls with a velocity proportional to the pointer's
distance from it, like browser autoscroll (#4951). A quick click sticks
until the next click, wheel, or Escape; press-move-release scrolls only
while held. Vertical-writing books autoscroll along the horizontal axis.

The middle button's default is suppressed while the feature is armed so
WebView2's native autoscroll cannot double-drive on Windows. A new
Middle-Click Autoscroll toggle in the Scroll settings section (desktop
only, default on) turns it off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(reader): drop the middle-click autoscroll toggle

Middle-click autoscroll is a common desktop convention and middle click
has no other use in the reader, so it is always enabled on desktop apps
in scrolled mode instead of being a setting.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(i18n): translate missing strings across all locales

Fill in translations for 69 keys that landed on main without an i18n
pass (search modes, cloud sync and Google Drive settings, page turn
animation styles, TTS states, Word Lens hints, file browser sorting,
watched-folder auto-import) in all 33 locales, plus the English plural
variants for the search result count.

Keys the scanner would prune (strings it cannot see statically on this
branch) are left untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Huang Xin
2026-07-06 12:01:30 +09:00
committed by GitHub
parent da00a94f66
commit 6f3b401c24
41 changed files with 2519 additions and 34 deletions
@@ -1945,5 +1945,68 @@
"Find:": "بحث:",
"Enable rule": "تفعيل القاعدة",
"Disable rule": "تعطيل القاعدة",
"Progress Read": "تقدم القراءة"
"Progress Read": "تقدم القراءة",
"Auto-import new books from this folder": "استيراد الكتب الجديدة تلقائيًا من هذا المجلد",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "عند إضافة كتب جديدة إلى هذا المجلد، يتم استيرادها تلقائيًا في المرة التالية التي يُفتح فيها Readest أو يعود إلى المقدمة.",
"Reading aloud": "جارٍ القراءة بصوت عالٍ",
"Open Book": "فتح الكتاب",
"Stop reading aloud": "إيقاف القراءة بصوت عالٍ",
"Enter at least two words": "أدخل كلمتين على الأقل",
"Search failed": "فشل البحث",
"Search with regex": "البحث بالتعابير النمطية",
"Words to find near each other": "كلمات يُبحث عنها بالقرب من بعضها",
"Contains": "يحتوي على",
"Whole Words": "كلمات كاملة",
"Regular Expression": "تعبير نمطي",
"Nearby Words": "كلمات متقاربة",
"Within N words": "ضمن N كلمات",
"Not for regex": "غير متاح للتعابير النمطية",
"No results found": "لم يتم العثور على نتائج",
"{{count}} results_zero": "لا توجد نتائج",
"{{count}} results_one": "نتيجة واحدة",
"{{count}} results_two": "نتيجتان",
"{{count}} results_few": "{{count}} نتائج",
"{{count}} results_many": "{{count}} نتيجةً",
"{{count}} results_other": "{{count}} نتيجة",
"Failed to seek": "فشل الانتقال",
"Chapter progress": "تقدم الفصل",
"{{elapsed}} of {{total}}": "{{elapsed}} من {{total}}",
"Decrease Contrast": "تقليل التباين",
"Reset Contrast": "إعادة تعيين التباين",
"Increase Contrast": "زيادة التباين",
"Google Drive session expired. Reconnect in Settings.": "انتهت صلاحية جلسة Google Drive. أعد الاتصال من الإعدادات.",
"Cloud sync session expired. Reconnect in Settings.": "انتهت صلاحية جلسة المزامنة السحابية. أعد الاتصال من الإعدادات.",
"Push": "دفع",
"Slide": "انزلاق",
"Page Curl": "طي الصفحة",
"Animation Style": "نمط الرسوم المتحركة",
"Appearance": "المظهر",
"Sets the text size of dictionary results, independent of the reading view.": "يحدد حجم نص نتائج القاموس بشكل مستقل عن عرض القراءة.",
"Authentication failed. Reconnect in Settings.": "فشلت المصادقة. أعد الاتصال من الإعدادات.",
"Full Sync": "مزامنة كاملة",
"Re-check every book instead of only changed ones.": "إعادة فحص كل كتاب بدلاً من الكتب المتغيرة فقط.",
"Waiting for sign-in…": "في انتظار تسجيل الدخول…",
"Reconnect": "إعادة الاتصال",
"Connected as {{account}}": "متصل باسم {{account}}",
". Make Google Drive the active cloud provider.": ". اجعل Google Drive مزود السحابة النشط.",
"Use Google Drive": "استخدام Google Drive",
"Sign-in opens in your browser.": "يتم فتح تسجيل الدخول في متصفحك.",
"Readest only accesses the files it creates in your Drive.": "لا يصل Readest إلا إلى الملفات التي ينشئها في Drive الخاص بك.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "زامن مكتبتك وتقدم القراءة والتمييزات مع خادم WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "زامن مكتبتك وتقدم القراءة والتمييزات مع Google Drive الخاص بك.",
"Configured": "تم الإعداد",
"Third-party Cloud Sync": "مزامنة سحابية من جهة خارجية",
"Use WebDAV": "استخدام WebDAV",
"Cloud Sync": "المزامنة السحابية",
"Available on Plus, Pro, or Lifetime": "متاح في Plus أو Pro أو Lifetime",
"Extra Large": "كبير جدًا",
"Hint size": "حجم التلميح",
"Gloss text size above the word": "حجم نص التلميح الظاهر فوق الكلمة",
"Hint color": "لون التلميح",
"Adjust Text Selection": "ضبط تحديد النص",
"Your books will appear here": "ستظهر كتبك هنا",
"Reading aloud continues in the background": "تستمر القراءة بصوت عالٍ في الخلفية",
"Stopped reading aloud": "تم إيقاف القراءة بصوت عالٍ",
"Read aloud stopped": "توقفت القراءة بصوت عالٍ"
}
@@ -1813,5 +1813,64 @@
"Find:": "খুঁজুন:",
"Enable rule": "নিয়ম সক্রিয় করুন",
"Disable rule": "নিয়ম নিষ্ক্রিয় করুন",
"Progress Read": "পড়ার অগ্রগতি"
"Progress Read": "পড়ার অগ্রগতি",
"Auto-import new books from this folder": "এই ফোল্ডার থেকে নতুন বই স্বয়ংক্রিয়ভাবে আমদানি করুন",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "এই ফোল্ডারে নতুন বই যোগ করা হলে, পরের বার Readest খুললে বা সামনে ফিরে এলে সেগুলি স্বয়ংক্রিয়ভাবে আমদানি করা হবে।",
"Reading aloud": "উচ্চস্বরে পড়া হচ্ছে",
"Open Book": "বই খুলুন",
"Stop reading aloud": "উচ্চস্বরে পড়া বন্ধ করুন",
"Enter at least two words": "কমপক্ষে দুটি শব্দ লিখুন",
"Search failed": "অনুসন্ধান ব্যর্থ হয়েছে",
"Search with regex": "রেগুলার এক্সপ্রেশন দিয়ে খুঁজুন",
"Words to find near each other": "একে অপরের কাছাকাছি খোঁজার শব্দ",
"Contains": "অন্তর্ভুক্ত",
"Whole Words": "পূর্ণ শব্দ",
"Regular Expression": "রেগুলার এক্সপ্রেশন",
"Nearby Words": "কাছাকাছি শব্দ",
"Within N words": "N শব্দের মধ্যে",
"Not for regex": "রেগুলার এক্সপ্রেশনের জন্য নয়",
"No results found": "কোনো ফলাফল পাওয়া যায়নি",
"{{count}} results_one": "{{count}}টি ফলাফল",
"{{count}} results_other": "{{count}}টি ফলাফল",
"Failed to seek": "নির্দিষ্ট অবস্থানে যাওয়া যায়নি",
"Chapter progress": "অধ্যায়ের অগ্রগতি",
"{{elapsed}} of {{total}}": "{{total}} এর মধ্যে {{elapsed}}",
"Decrease Contrast": "কন্ট্রাস্ট কমান",
"Reset Contrast": "কন্ট্রাস্ট রিসেট করুন",
"Increase Contrast": "কন্ট্রাস্ট বাড়ান",
"Google Drive session expired. Reconnect in Settings.": "Google Drive সেশনের মেয়াদ শেষ হয়ে গেছে। সেটিংসে পুনরায় সংযোগ করুন।",
"Cloud sync session expired. Reconnect in Settings.": "ক্লাউড সিঙ্ক সেশনের মেয়াদ শেষ হয়ে গেছে। সেটিংসে পুনরায় সংযোগ করুন।",
"Push": "পুশ",
"Slide": "স্লাইড",
"Page Curl": "পেজ কার্ল",
"Animation Style": "অ্যানিমেশন শৈলী",
"Appearance": "চেহারা",
"Sets the text size of dictionary results, independent of the reading view.": "পড়ার ভিউ থেকে স্বাধীনভাবে অভিধানের ফলাফলের টেক্সটের আকার নির্ধারণ করে।",
"Authentication failed. Reconnect in Settings.": "প্রমাণীকরণ ব্যর্থ হয়েছে। সেটিংসে পুনরায় সংযোগ করুন।",
"Full Sync": "সম্পূর্ণ সিঙ্ক",
"Re-check every book instead of only changed ones.": "শুধু পরিবর্তিত বই নয়, প্রতিটি বই পুনরায় পরীক্ষা করুন।",
"Waiting for sign-in…": "সাইন ইনের জন্য অপেক্ষা করা হচ্ছে…",
"Reconnect": "পুনরায় সংযোগ করুন",
"Connected as {{account}}": "{{account}} হিসেবে সংযুক্ত",
". Make Google Drive the active cloud provider.": "। Google Drive-কে সক্রিয় ক্লাউড প্রদানকারী করুন।",
"Use Google Drive": "Google Drive ব্যবহার করুন",
"Sign-in opens in your browser.": "সাইন ইন আপনার ব্রাউজারে খুলবে।",
"Readest only accesses the files it creates in your Drive.": "Readest শুধুমাত্র আপনার Drive-এ নিজে তৈরি করা ফাইলগুলিতেই প্রবেশ করে।",
"Sync your library, reading progress, and highlights with a WebDAV server.": "আপনার লাইব্রেরি, পড়ার অগ্রগতি এবং হাইলাইটগুলি একটি WebDAV সার্ভারের সাথে সিঙ্ক করুন।",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "আপনার লাইব্রেরি, পড়ার অগ্রগতি এবং হাইলাইটগুলি আপনার Google Drive-এর সাথে সিঙ্ক করুন।",
"Configured": "কনফিগার করা হয়েছে",
"Third-party Cloud Sync": "তৃতীয় পক্ষের ক্লাউড সিঙ্ক",
"Use WebDAV": "WebDAV ব্যবহার করুন",
"Cloud Sync": "ক্লাউড সিঙ্ক",
"Available on Plus, Pro, or Lifetime": "Plus, Pro বা Lifetime-এ উপলব্ধ",
"Extra Large": "অতিরিক্ত বড়",
"Hint size": "ইঙ্গিতের আকার",
"Gloss text size above the word": "শব্দের উপরে ইঙ্গিত টেক্সটের আকার",
"Hint color": "ইঙ্গিতের রং",
"Adjust Text Selection": "টেক্সট নির্বাচন সামঞ্জস্য করুন",
"Your books will appear here": "আপনার বইগুলি এখানে দেখা যাবে",
"Reading aloud continues in the background": "উচ্চস্বরে পড়া ব্যাকগ্রাউন্ডে চলতে থাকবে",
"Stopped reading aloud": "উচ্চস্বরে পড়া বন্ধ করা হয়েছে",
"Read aloud stopped": "উচ্চস্বরে পড়া বন্ধ হয়েছে"
}
@@ -1774,5 +1774,69 @@
"Find:": "འཚོལ་བཤེར།:",
"Enable rule": "སྲིད་སྒྲིག་སྤྱོད་པ།",
"Disable rule": "སྲིད་སྒྲིག་སྒོ་བརྒྱབ།",
"Progress Read": "ཀློག་པའི་ཡར་འཕེལ།"
"Progress Read": "ཀློག་པའི་ཡར་འཕེལ།",
"Auto-import new books from this folder": "ཡིག་སྣོད་འདིའི་ནང་གི་དཔེ་དེབ་གསར་པ་རང་འགུལ་ནང་འདྲེན་བྱེད།",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "ཡིག་སྣོད་འདིའི་ནང་དཔེ་དེབ་གསར་པ་ཁ་སྣོན་བྱས་ཚེ། ཐེངས་རྗེས་མར་ Readest ཁ་ཕྱེ་བའམ་མདུན་ངོས་སུ་ཕྱིར་ལོག་སྐབས་རང་འགུལ་གྱིས་ནང་འདྲེན་བྱེད།",
"Reading aloud": "སྒྲ་ཀློག་བྱེད་བཞིན་པ།",
"Open Book": "དཔེ་དེབ་ཁ་ཕྱེ་བ།",
"Stop reading aloud": "སྒྲ་ཀློག་མཚམས་འཇོག",
"Enter at least two words": "ཉུང་མཐར་ཚིག་གཉིས་ནང་འཇུག་བྱེད་རོགས།",
"Search failed": "འཚོལ་བཤེར་མ་ཐུབ།",
"Search with regex": "Regex བེད་སྤྱད་ནས་འཚོལ་བཤེར་བྱེད།",
"Words to find near each other": "ཕན་ཚུན་ཉེ་སར་འཚོལ་བྱའི་ཚིག་རྣམས།",
"Contains": "འདུས་པ།",
"Whole Words": "ཚིག་བྱང་ཆ་ཚང་།",
"Regular Expression": "Regex",
"Nearby Words": "ཉེ་འཁོར་གྱི་ཚིག",
"Within N words": "ཚིག N ནང་ཚུན།",
"Not for regex": "Regex ལ་མི་སྤྱོད།",
"No results found": "འབྲས་བུ་མ་རྙེད།",
"{{count}} results_other": "འབྲས་བུ་ {{count}}།",
"Failed to seek": "མཆོང་སྐྱོད་བྱེད་མ་ཐུབ།",
"Chapter progress": "ལེའུའི་འཕེལ་རིམ།",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "བསྡུར་ཚད་ཆུང་དུ་གཏོང་།",
"Reset Contrast": "བསྡུར་ཚད་བསྐྱར་སྒྲིག",
"Increase Contrast": "བསྡུར་ཚད་ཆེ་རུ་གཏོང་།",
"Google Drive session expired. Reconnect in Settings.": "Google Drive ནང་བསྐྱོད་ཀྱི་དུས་ཡུན་རྫོགས་ཟིན། སྒྲིག་སྟངས་ནང་ནས་ཡང་བསྐྱར་འབྲེལ་མཐུད་གནང་།",
"Cloud sync session expired. Reconnect in Settings.": "སྤྲིན་མཉམ་སྒྲིག་གི་ནང་བསྐྱོད་དུས་ཡུན་རྫོགས་ཟིན། སྒྲིག་སྟངས་ནང་ནས་ཡང་བསྐྱར་འབྲེལ་མཐུད་གནང་།",
"Push": "འདེད་པ།",
"Slide": "བཤུད་པ།",
"Page Curl": "ཤོག་ལྷེ་སྒྲིལ་བ།",
"Animation Style": "འགུལ་རིས་ཀྱི་རྣམ་པ།",
"Appearance": "ཕྱི་རྣམ།",
"Sets the text size of dictionary results, independent of the reading view.": "ཚིག་མཛོད་ཀྱི་འབྲས་བུའི་ཡི་གེའི་ཆེ་ཆུང་སྒྲིག་པ་དང་། ཀློག་པའི་ངོས་དང་འབྲེལ་བ་མེད།",
"Authentication failed. Reconnect in Settings.": "ངོ་སྤྲོད་མ་ཐུབ། སྒྲིག་སྟངས་ནང་ནས་ཡང་བསྐྱར་འབྲེལ་མཐུད་གནང་།",
"Full Sync": "ཡོངས་རྫོགས་མཉམ་སྒྲིག",
"Re-check every book instead of only changed ones.": "འགྱུར་བ་བྱུང་བའི་དཔེ་དེབ་ཁོ་ན་མིན་པར་དཔེ་དེབ་ཡོངས་ལ་བསྐྱར་ཞིབ་བྱེད།",
"Waiting for sign-in…": "ནང་བསྐྱོད་ལ་སྒུག་བཞིན་པ།…",
"Reconnect": "ཡང་བསྐྱར་འབྲེལ་མཐུད།",
"Connected as {{account}}": "{{account}} ཐོག་ནས་འབྲེལ་མཐུད་ཟིན།",
". Make Google Drive the active cloud provider.": "། Google Drive དེ་སྤྱོད་བཞིན་པའི་སྤྲིན་ཞབས་ཞུ་མཁོ་སྤྲོད་པར་སྒྲིག་པ།",
"Use Google Drive": "Google Drive བེད་སྤྱོད།",
"Sign-in opens in your browser.": "ནང་བསྐྱོད་ཁྱེད་ཀྱི་བརྡར་ཞིབ་ཆས་ནང་ཁ་ཕྱེ་ངེས།",
"Readest only accesses the files it creates in your Drive.": "Readest ཀྱིས་ཁྱེད་ཀྱི་ Drive ནང་རང་ཉིད་ཀྱིས་བཟོས་པའི་ཡིག་ཆ་ཁོ་ནར་ལྟ་སྤྱོད་བྱེད།",
"Filter": "འཚག་འདེམས།",
"Sort by": "རིམ་སྒྲིག་བྱེད་སྟངས།",
"Date modified": "བཟོ་བཅོས་ཚེས་གྲངས།",
"Date created": "གསར་བཟོའི་ཚེས་གྲངས།",
"Sort ascending": "འཕར་རིམ་གྱིས་རིམ་སྒྲིག",
"Sort descending": "འཕྲི་རིམ་གྱིས་རིམ་སྒྲིག",
"Sync your library, reading progress, and highlights with a WebDAV server.": "ཁྱེད་ཀྱི་དཔེ་མཛོད་དང་། ཀློག་པའི་ཡར་འཕེལ། གཙོ་གནད་བཅས་ WebDAV ཞབས་ཞུ་འཕྲུལ་ཆས་དང་མཉམ་སྒྲིག་བྱེད།",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "ཁྱེད་ཀྱི་དཔེ་མཛོད་དང་། ཀློག་པའི་ཡར་འཕེལ། གཙོ་གནད་བཅས་ཁྱེད་ཀྱི་ Google Drive དང་མཉམ་སྒྲིག་བྱེད།",
"Configured": "བཀོད་སྒྲིག་ཟིན།",
"Third-party Cloud Sync": "ཕྱོགས་གསུམ་པའི་སྤྲིན་མཉམ་སྒྲིག",
"Use WebDAV": "WebDAV བེད་སྤྱོད།",
"Cloud Sync": "སྤྲིན་མཉམ་སྒྲིག",
"Available on Plus, Pro, or Lifetime": "Plus, Pro, Lifetime འཆར་གཞི་ལ་ཐོབ་ཐུབ།",
"Extra Large": "ཧ་ཅང་ཆེ་བ།",
"Hint size": "བརྡ་སྟོན་གྱི་ཆེ་ཆུང་།",
"Gloss text size above the word": "ཚིག་གི་སྟེང་གི་བརྡ་སྟོན་ཡི་གེའི་ཆེ་ཆུང་།",
"Hint color": "བརྡ་སྟོན་གྱི་ཚོན་མདོག",
"Adjust Text Selection": "ཡི་གེ་འདེམས་པ་སྙོམ་སྒྲིག",
"Your books will appear here": "ཁྱེད་ཀྱི་དཔེ་དེབ་འདིར་མངོན་ངེས།",
"Reading aloud continues in the background": "སྒྲ་ཀློག་རྒྱབ་ལྗོངས་སུ་མུ་མཐུད་འགྲོ་བཞིན་ཡོད།",
"Stopped reading aloud": "སྒྲ་ཀློག་མཚམས་བཞག་ཟིན།",
"Read aloud stopped": "སྒྲ་ཀློག་མཚམས་ཆད་ཟིན།"
}
@@ -1813,5 +1813,64 @@
"Find:": "Suchen:",
"Enable rule": "Regel aktivieren",
"Disable rule": "Regel deaktivieren",
"Progress Read": "Lesefortschritt"
"Progress Read": "Lesefortschritt",
"Auto-import new books from this folder": "Neue Bücher aus diesem Ordner automatisch importieren",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Wenn neue Bücher zu diesem Ordner hinzugefügt werden, werden sie automatisch importiert, sobald Readest das nächste Mal geöffnet oder in den Vordergrund geholt wird.",
"Reading aloud": "Vorlesen läuft",
"Open Book": "Buch öffnen",
"Stop reading aloud": "Vorlesen stoppen",
"Enter at least two words": "Mindestens zwei Wörter eingeben",
"Search failed": "Suche fehlgeschlagen",
"Search with regex": "Mit Regex suchen",
"Words to find near each other": "Wörter, die nahe beieinander stehen sollen",
"Contains": "Enthält",
"Whole Words": "Ganze Wörter",
"Regular Expression": "Regulärer Ausdruck",
"Nearby Words": "Benachbarte Wörter",
"Within N words": "Innerhalb von N Wörtern",
"Not for regex": "Nicht für Regex",
"No results found": "Keine Ergebnisse gefunden",
"{{count}} results_one": "{{count}} Ergebnis",
"{{count}} results_other": "{{count}} Ergebnisse",
"Failed to seek": "Spulen fehlgeschlagen",
"Chapter progress": "Kapitelfortschritt",
"{{elapsed}} of {{total}}": "{{elapsed}} von {{total}}",
"Decrease Contrast": "Kontrast verringern",
"Reset Contrast": "Kontrast zurücksetzen",
"Increase Contrast": "Kontrast erhöhen",
"Google Drive session expired. Reconnect in Settings.": "Google Drive-Sitzung abgelaufen. In den Einstellungen erneut verbinden.",
"Cloud sync session expired. Reconnect in Settings.": "Cloud-Sync-Sitzung abgelaufen. In den Einstellungen erneut verbinden.",
"Push": "Schieben",
"Slide": "Gleiten",
"Page Curl": "Umblättern",
"Animation Style": "Animationsstil",
"Appearance": "Erscheinungsbild",
"Sets the text size of dictionary results, independent of the reading view.": "Legt die Textgröße der Wörterbuchergebnisse fest, unabhängig von der Leseansicht.",
"Authentication failed. Reconnect in Settings.": "Authentifizierung fehlgeschlagen. In den Einstellungen erneut verbinden.",
"Full Sync": "Vollständige Synchronisierung",
"Re-check every book instead of only changed ones.": "Alle Bücher erneut prüfen statt nur geänderte.",
"Waiting for sign-in…": "Warten auf Anmeldung…",
"Reconnect": "Erneut verbinden",
"Connected as {{account}}": "Verbunden als {{account}}",
". Make Google Drive the active cloud provider.": ". Google Drive als aktiven Cloud-Anbieter festlegen.",
"Use Google Drive": "Google Drive verwenden",
"Sign-in opens in your browser.": "Die Anmeldung wird in Ihrem Browser geöffnet.",
"Readest only accesses the files it creates in your Drive.": "Readest greift nur auf die Dateien zu, die es in Ihrem Drive erstellt.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Synchronisieren Sie Ihre Bibliothek, Ihren Lesefortschritt und Ihre Markierungen mit einem WebDAV-Server.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Synchronisieren Sie Ihre Bibliothek, Ihren Lesefortschritt und Ihre Markierungen mit Ihrem Google Drive.",
"Configured": "Konfiguriert",
"Third-party Cloud Sync": "Cloud-Synchronisierung von Drittanbietern",
"Use WebDAV": "WebDAV verwenden",
"Cloud Sync": "Cloud-Synchronisierung",
"Available on Plus, Pro, or Lifetime": "Verfügbar mit Plus, Pro oder Lifetime",
"Extra Large": "Extra groß",
"Hint size": "Hinweisgröße",
"Gloss text size above the word": "Textgröße des Hinweises über dem Wort",
"Hint color": "Hinweisfarbe",
"Adjust Text Selection": "Textauswahl anpassen",
"Your books will appear here": "Ihre Bücher erscheinen hier",
"Reading aloud continues in the background": "Das Vorlesen wird im Hintergrund fortgesetzt",
"Stopped reading aloud": "Vorlesen gestoppt",
"Read aloud stopped": "Vorlesen wurde gestoppt"
}
@@ -1813,5 +1813,64 @@
"Find:": "Εύρεση:",
"Enable rule": "Ενεργοποίηση κανόνα",
"Disable rule": "Απενεργοποίηση κανόνα",
"Progress Read": "Πρόοδος ανάγνωσης"
"Progress Read": "Πρόοδος ανάγνωσης",
"Auto-import new books from this folder": "Αυτόματη εισαγωγή νέων βιβλίων από αυτόν τον φάκελο",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Όταν προστίθενται νέα βιβλία σε αυτόν τον φάκελο, θα εισάγονται αυτόματα την επόμενη φορά που το Readest θα ανοίξει ή θα επανέλθει στο προσκήνιο.",
"Reading aloud": "Ανάγνωση σε εξέλιξη",
"Open Book": "Άνοιγμα βιβλίου",
"Stop reading aloud": "Διακοπή ανάγνωσης",
"Enter at least two words": "Εισαγάγετε τουλάχιστον δύο λέξεις",
"Search failed": "Η αναζήτηση απέτυχε",
"Search with regex": "Αναζήτηση με regex",
"Words to find near each other": "Λέξεις που πρέπει να βρίσκονται κοντά η μία στην άλλη",
"Contains": "Περιέχει",
"Whole Words": "Ολόκληρες λέξεις",
"Regular Expression": "Κανονική έκφραση",
"Nearby Words": "Κοντινές λέξεις",
"Within N words": "Εντός N λέξεων",
"Not for regex": "Όχι για regex",
"No results found": "Δεν βρέθηκαν αποτελέσματα",
"{{count}} results_one": "{{count}} αποτέλεσμα",
"{{count}} results_other": "{{count}} αποτελέσματα",
"Failed to seek": "Αποτυχία μετάβασης",
"Chapter progress": "Πρόοδος κεφαλαίου",
"{{elapsed}} of {{total}}": "{{elapsed}} από {{total}}",
"Decrease Contrast": "Μείωση αντίθεσης",
"Reset Contrast": "Επαναφορά αντίθεσης",
"Increase Contrast": "Αύξηση αντίθεσης",
"Google Drive session expired. Reconnect in Settings.": "Η συνεδρία Google Drive έληξε. Επανασυνδεθείτε στις Ρυθμίσεις.",
"Cloud sync session expired. Reconnect in Settings.": "Η συνεδρία συγχρονισμού cloud έληξε. Επανασυνδεθείτε στις Ρυθμίσεις.",
"Push": "Ώθηση",
"Slide": "Ολίσθηση",
"Page Curl": "Γύρισμα σελίδας",
"Animation Style": "Στυλ κίνησης",
"Appearance": "Εμφάνιση",
"Sets the text size of dictionary results, independent of the reading view.": "Ορίζει το μέγεθος κειμένου των αποτελεσμάτων λεξικού, ανεξάρτητα από την προβολή ανάγνωσης.",
"Authentication failed. Reconnect in Settings.": "Ο έλεγχος ταυτότητας απέτυχε. Επανασυνδεθείτε στις Ρυθμίσεις.",
"Full Sync": "Πλήρης συγχρονισμός",
"Re-check every book instead of only changed ones.": "Επανέλεγχος όλων των βιβλίων αντί μόνο όσων άλλαξαν.",
"Waiting for sign-in…": "Αναμονή για σύνδεση…",
"Reconnect": "Επανασύνδεση",
"Connected as {{account}}": "Έχετε συνδεθεί ως {{account}}",
". Make Google Drive the active cloud provider.": ". Ορίστε το Google Drive ως ενεργό πάροχο cloud.",
"Use Google Drive": "Χρήση Google Drive",
"Sign-in opens in your browser.": "Η σύνδεση ανοίγει στο πρόγραμμα περιήγησής σας.",
"Readest only accesses the files it creates in your Drive.": "Το Readest έχει πρόσβαση μόνο στα αρχεία που δημιουργεί στο Drive σας.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Συγχρονίστε τη βιβλιοθήκη, την πρόοδο ανάγνωσης και τις επισημάνσεις σας με έναν διακομιστή WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Συγχρονίστε τη βιβλιοθήκη, την πρόοδο ανάγνωσης και τις επισημάνσεις σας με το Google Drive σας.",
"Configured": "Ρυθμισμένο",
"Third-party Cloud Sync": "Συγχρονισμός cloud τρίτων",
"Use WebDAV": "Χρήση WebDAV",
"Cloud Sync": "Συγχρονισμός cloud",
"Available on Plus, Pro, or Lifetime": "Διαθέσιμο με Plus, Pro ή Lifetime",
"Extra Large": "Πολύ μεγάλο",
"Hint size": "Μέγεθος υπόδειξης",
"Gloss text size above the word": "Μέγεθος κειμένου της υπόδειξης πάνω από τη λέξη",
"Hint color": "Χρώμα υπόδειξης",
"Adjust Text Selection": "Προσαρμογή επιλογής κειμένου",
"Your books will appear here": "Τα βιβλία σας θα εμφανιστούν εδώ",
"Reading aloud continues in the background": "Η ανάγνωση συνεχίζεται στο παρασκήνιο",
"Stopped reading aloud": "Η ανάγνωση σταμάτησε",
"Read aloud stopped": "Η ανάγνωση διακόπηκε"
}
@@ -70,5 +70,7 @@
"Imported {{count}} annotations_other": "Imported {{count}} annotations",
"Recently read": "Recently read",
"Show recently read": "Show recently read",
"Your books will appear here": "Your books will appear here"
"Your books will appear here": "Your books will appear here",
"{{count}} results_one": "{{count}} result",
"{{count}} results_other": "{{count}} results"
}
@@ -1846,5 +1846,65 @@
"Find:": "Buscar:",
"Enable rule": "Activar regla",
"Disable rule": "Desactivar regla",
"Progress Read": "Progreso de Lectura"
"Progress Read": "Progreso de Lectura",
"Auto-import new books from this folder": "Importar automáticamente los libros nuevos de esta carpeta",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Cuando se añadan libros nuevos a esta carpeta, se importarán automáticamente la próxima vez que Readest se abra o vuelva a primer plano.",
"Reading aloud": "Leyendo en voz alta",
"Open Book": "Abrir libro",
"Stop reading aloud": "Detener la lectura en voz alta",
"Enter at least two words": "Introduce al menos dos palabras",
"Search failed": "Búsqueda fallida",
"Search with regex": "Buscar con regex",
"Words to find near each other": "Palabras que deben aparecer cerca unas de otras",
"Contains": "Contiene",
"Whole Words": "Palabras completas",
"Regular Expression": "Expresión regular",
"Nearby Words": "Palabras cercanas",
"Within N words": "A menos de N palabras",
"Not for regex": "No disponible con regex",
"No results found": "No se encontraron resultados",
"{{count}} results_one": "{{count}} resultado",
"{{count}} results_many": "{{count}} de resultados",
"{{count}} results_other": "{{count}} resultados",
"Failed to seek": "No se pudo cambiar la posición",
"Chapter progress": "Progreso del capítulo",
"{{elapsed}} of {{total}}": "{{elapsed}} de {{total}}",
"Decrease Contrast": "Disminuir contraste",
"Reset Contrast": "Restablecer contraste",
"Increase Contrast": "Aumentar contraste",
"Google Drive session expired. Reconnect in Settings.": "La sesión de Google Drive ha caducado. Vuelve a conectar en Ajustes.",
"Cloud sync session expired. Reconnect in Settings.": "La sesión de sincronización en la nube ha caducado. Vuelve a conectar en Ajustes.",
"Push": "Empuje",
"Slide": "Deslizamiento",
"Page Curl": "Curvatura de página",
"Animation Style": "Estilo de animación",
"Appearance": "Apariencia",
"Sets the text size of dictionary results, independent of the reading view.": "Establece el tamaño del texto de los resultados del diccionario, independiente de la vista de lectura.",
"Authentication failed. Reconnect in Settings.": "Autenticación fallida. Vuelve a conectar en Ajustes.",
"Full Sync": "Sincronización total",
"Re-check every book instead of only changed ones.": "Vuelve a comprobar todos los libros, no solo los modificados.",
"Waiting for sign-in…": "Esperando el inicio de sesión…",
"Reconnect": "Volver a conectar",
"Connected as {{account}}": "Conectado como {{account}}",
". Make Google Drive the active cloud provider.": ". Haz que Google Drive sea el proveedor de nube activo.",
"Use Google Drive": "Usar Google Drive",
"Sign-in opens in your browser.": "El inicio de sesión se abre en tu navegador.",
"Readest only accesses the files it creates in your Drive.": "Readest solo accede a los archivos que crea en tu Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sincroniza tu biblioteca, progreso de lectura y resaltados con un servidor WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sincroniza tu biblioteca, progreso de lectura y resaltados con tu Google Drive.",
"Configured": "Configurado",
"Third-party Cloud Sync": "Sincronización en la nube de terceros",
"Use WebDAV": "Usar WebDAV",
"Cloud Sync": "Sincronización en la nube",
"Available on Plus, Pro, or Lifetime": "Disponible con Plus, Pro o De por vida",
"Extra Large": "Extra grande",
"Hint size": "Tamaño de la pista",
"Gloss text size above the word": "Tamaño del texto de la pista sobre la palabra",
"Hint color": "Color de la pista",
"Adjust Text Selection": "Ajustar selección de texto",
"Your books will appear here": "Tus libros aparecerán aquí",
"Reading aloud continues in the background": "La lectura en voz alta continúa en segundo plano",
"Stopped reading aloud": "Lectura en voz alta detenida",
"Read aloud stopped": "Lectura en voz alta detenida"
}
@@ -1813,5 +1813,64 @@
"Find:": "جستجو:",
"Enable rule": "فعال کردن قانون",
"Disable rule": "غیرفعال کردن قانون",
"Progress Read": "وضعیت مطالعه"
"Progress Read": "وضعیت مطالعه",
"Auto-import new books from this folder": "وارد کردن خودکار کتاب‌های جدید از این پوشه",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "وقتی کتاب‌های جدیدی به این پوشه اضافه شوند، دفعه بعدی که Readest باز شود یا به پیش‌زمینه بازگردد، به‌طور خودکار وارد می‌شوند.",
"Reading aloud": "در حال خواندن با صدای بلند",
"Open Book": "باز کردن کتاب",
"Stop reading aloud": "توقف خواندن با صدای بلند",
"Enter at least two words": "حداقل دو کلمه وارد کنید",
"Search failed": "جستجو ناموفق بود",
"Search with regex": "جستجو با عبارت باقاعده",
"Words to find near each other": "کلماتی که باید نزدیک هم پیدا شوند",
"Contains": "شامل",
"Whole Words": "کل کلمات",
"Regular Expression": "عبارت باقاعده",
"Nearby Words": "کلمات نزدیک",
"Within N words": "در محدوده N کلمه",
"Not for regex": "برای عبارت باقاعده در دسترس نیست",
"No results found": "نتیجه‌ای یافت نشد",
"{{count}} results_one": "{{count}} نتیجه",
"{{count}} results_other": "{{count}} نتیجه",
"Failed to seek": "جابه‌جایی ناموفق بود",
"Chapter progress": "پیشرفت فصل",
"{{elapsed}} of {{total}}": "{{elapsed}} از {{total}}",
"Decrease Contrast": "کاهش کنتراست",
"Reset Contrast": "بازنشانی کنتراست",
"Increase Contrast": "افزایش کنتراست",
"Google Drive session expired. Reconnect in Settings.": "نشست Google Drive منقضی شده است. در تنظیمات دوباره متصل شوید.",
"Cloud sync session expired. Reconnect in Settings.": "نشست همگام‌سازی ابری منقضی شده است. در تنظیمات دوباره متصل شوید.",
"Push": "هل دادن",
"Slide": "لغزش",
"Page Curl": "پیچش صفحه",
"Animation Style": "سبک انیمیشن",
"Appearance": "ظاهر",
"Sets the text size of dictionary results, independent of the reading view.": "اندازه متن نتایج فرهنگ لغت را مستقل از نمای مطالعه تنظیم می‌کند.",
"Authentication failed. Reconnect in Settings.": "احراز هویت ناموفق بود. در تنظیمات دوباره متصل شوید.",
"Full Sync": "همگام‌سازی کامل",
"Re-check every book instead of only changed ones.": "بررسی دوباره همه کتاب‌ها به‌جای فقط کتاب‌های تغییرکرده.",
"Waiting for sign-in…": "در انتظار ورود…",
"Reconnect": "اتصال دوباره",
"Connected as {{account}}": "متصل به‌عنوان {{account}}",
". Make Google Drive the active cloud provider.": ". Google Drive را ارائه‌دهنده فعال ابری قرار دهید.",
"Use Google Drive": "استفاده از Google Drive",
"Sign-in opens in your browser.": "ورود در مرورگر شما باز می‌شود.",
"Readest only accesses the files it creates in your Drive.": "Readest فقط به فایل‌هایی دسترسی دارد که خودش در Drive شما ایجاد می‌کند.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "کتابخانه، وضعیت مطالعه و هایلایت‌های خود را با یک سرور WebDAV همگام‌سازی کنید.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "کتابخانه، وضعیت مطالعه و هایلایت‌های خود را با Google Drive خود همگام‌سازی کنید.",
"Configured": "پیکربندی شده",
"Third-party Cloud Sync": "همگام‌سازی ابری شخص ثالث",
"Use WebDAV": "استفاده از WebDAV",
"Cloud Sync": "همگام‌سازی ابری",
"Available on Plus, Pro, or Lifetime": "در Plus، Pro یا Lifetime در دسترس است",
"Extra Large": "خیلی بزرگ",
"Hint size": "اندازه توضیح",
"Gloss text size above the word": "اندازه متن توضیح بالای کلمه",
"Hint color": "رنگ توضیح",
"Adjust Text Selection": "تنظیم انتخاب متن",
"Your books will appear here": "کتاب‌های شما اینجا نمایش داده می‌شوند",
"Reading aloud continues in the background": "خواندن با صدای بلند در پس‌زمینه ادامه می‌یابد",
"Stopped reading aloud": "خواندن با صدای بلند متوقف شد",
"Read aloud stopped": "خواندن با صدای بلند متوقف شده است"
}
@@ -1846,5 +1846,65 @@
"Find:": "Rechercher :",
"Enable rule": "Activer la règle",
"Disable rule": "Désactiver la règle",
"Progress Read": "Progression de lecture"
"Progress Read": "Progression de lecture",
"Auto-import new books from this folder": "Importer automatiquement les nouveaux livres de ce dossier",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Lorsque de nouveaux livres sont ajoutés à ce dossier, ils sont importés automatiquement à la prochaine ouverture de Readest ou à son retour au premier plan.",
"Reading aloud": "Lecture à haute voix",
"Open Book": "Ouvrir le livre",
"Stop reading aloud": "Arrêter la lecture à haute voix",
"Enter at least two words": "Saisissez au moins deux mots",
"Search failed": "Échec de la recherche",
"Search with regex": "Rechercher avec une regex",
"Words to find near each other": "Mots à trouver à proximité les uns des autres",
"Contains": "Contient",
"Whole Words": "Mots entiers",
"Regular Expression": "Expression régulière",
"Nearby Words": "Mots proches",
"Within N words": "À moins de N mots",
"Not for regex": "Indisponible avec les regex",
"No results found": "Aucun résultat trouvé",
"{{count}} results_one": "{{count}} résultat",
"{{count}} results_many": "{{count}} de résultats",
"{{count}} results_other": "{{count}} résultats",
"Failed to seek": "Échec du positionnement",
"Chapter progress": "Progression du chapitre",
"{{elapsed}} of {{total}}": "{{elapsed}} sur {{total}}",
"Decrease Contrast": "Diminuer le contraste",
"Reset Contrast": "Réinitialiser le contraste",
"Increase Contrast": "Augmenter le contraste",
"Google Drive session expired. Reconnect in Settings.": "Session Google Drive expirée. Reconnectez-vous dans les Réglages.",
"Cloud sync session expired. Reconnect in Settings.": "Session de synchronisation cloud expirée. Reconnectez-vous dans les Réglages.",
"Push": "Poussée",
"Slide": "Glissement",
"Page Curl": "Courbure de page",
"Animation Style": "Style d'animation",
"Appearance": "Apparence",
"Sets the text size of dictionary results, independent of the reading view.": "Définit la taille du texte des résultats du dictionnaire, indépendamment de la vue de lecture.",
"Authentication failed. Reconnect in Settings.": "Échec de l'authentification. Reconnectez-vous dans les Réglages.",
"Full Sync": "Synchronisation complète",
"Re-check every book instead of only changed ones.": "Revérifie tous les livres, pas seulement ceux modifiés.",
"Waiting for sign-in…": "En attente de connexion…",
"Reconnect": "Se reconnecter",
"Connected as {{account}}": "Connecté en tant que {{account}}",
". Make Google Drive the active cloud provider.": ". Faites de Google Drive le fournisseur cloud actif.",
"Use Google Drive": "Utiliser Google Drive",
"Sign-in opens in your browser.": "La connexion s'ouvre dans votre navigateur.",
"Readest only accesses the files it creates in your Drive.": "Readest accède uniquement aux fichiers qu'il crée dans votre Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Synchronisez votre bibliothèque, votre progression de lecture et vos surlignages avec un serveur WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Synchronisez votre bibliothèque, votre progression de lecture et vos surlignages avec votre Google Drive.",
"Configured": "Configuré",
"Third-party Cloud Sync": "Synchronisation cloud tierce",
"Use WebDAV": "Utiliser WebDAV",
"Cloud Sync": "Synchronisation cloud",
"Available on Plus, Pro, or Lifetime": "Disponible avec Plus, Pro ou À vie",
"Extra Large": "Très grand",
"Hint size": "Taille de l'indice",
"Gloss text size above the word": "Taille du texte de l'indice au-dessus du mot",
"Hint color": "Couleur de l'indice",
"Adjust Text Selection": "Ajuster la sélection de texte",
"Your books will appear here": "Vos livres apparaîtront ici",
"Reading aloud continues in the background": "La lecture à haute voix continue en arrière-plan",
"Stopped reading aloud": "Lecture à haute voix arrêtée",
"Read aloud stopped": "Lecture à haute voix arrêtée"
}
@@ -1846,5 +1846,65 @@
"Find:": "חיפוש:",
"Enable rule": "הפעל כלל",
"Disable rule": "השבת כלל",
"Progress Read": "התקדמות קריאה"
"Progress Read": "התקדמות קריאה",
"Auto-import new books from this folder": "ייבוא אוטומטי של ספרים חדשים מתיקייה זו",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "כאשר ספרים חדשים מתווספים לתיקייה זו, הם ייובאו אוטומטית בפעם הבאה ש-Readest ייפתח או יחזור לחזית.",
"Reading aloud": "מקריא בקול",
"Open Book": "פתח ספר",
"Stop reading aloud": "הפסק הקראה בקול",
"Enter at least two words": "הזן לפחות שתי מילים",
"Search failed": "החיפוש נכשל",
"Search with regex": "חיפוש עם ביטוי רגולרי",
"Words to find near each other": "מילים לחיפוש בסמיכות זו לזו",
"Contains": "מכיל",
"Whole Words": "מילים שלמות",
"Regular Expression": "ביטוי רגולרי",
"Nearby Words": "מילים סמוכות",
"Within N words": "בטווח של N מילים",
"Not for regex": "לא זמין לביטוי רגולרי",
"No results found": "לא נמצאו תוצאות",
"{{count}} results_one": "תוצאה אחת",
"{{count}} results_two": "{{count}} תוצאות",
"{{count}} results_other": "{{count}} תוצאות",
"Failed to seek": "הדילוג נכשל",
"Chapter progress": "התקדמות הפרק",
"{{elapsed}} of {{total}}": "{{elapsed}} מתוך {{total}}",
"Decrease Contrast": "הפחת ניגודיות",
"Reset Contrast": "אפס ניגודיות",
"Increase Contrast": "הגבר ניגודיות",
"Google Drive session expired. Reconnect in Settings.": "פג תוקף החיבור ל-Google Drive. התחבר מחדש בהגדרות.",
"Cloud sync session expired. Reconnect in Settings.": "פג תוקף החיבור לסנכרון הענן. התחבר מחדש בהגדרות.",
"Push": "דחיפה",
"Slide": "החלקה",
"Page Curl": "קיפול דף",
"Animation Style": "סגנון אנימציה",
"Appearance": "מראה",
"Sets the text size of dictionary results, independent of the reading view.": "קובע את גודל הטקסט של תוצאות המילון, ללא תלות בתצוגת הקריאה.",
"Authentication failed. Reconnect in Settings.": "האימות נכשל. התחבר מחדש בהגדרות.",
"Full Sync": "סנכרון מלא",
"Re-check every book instead of only changed ones.": "בדיקה מחדש של כל ספר במקום רק אלה שהשתנו.",
"Waiting for sign-in…": "ממתין להתחברות…",
"Reconnect": "התחבר מחדש",
"Connected as {{account}}": "מחובר כ-{{account}}",
". Make Google Drive the active cloud provider.": ". הפוך את Google Drive לספק הענן הפעיל.",
"Use Google Drive": "השתמש ב-Google Drive",
"Sign-in opens in your browser.": "ההתחברות נפתחת בדפדפן שלך.",
"Readest only accesses the files it creates in your Drive.": "Readest ניגש רק לקבצים שהוא יוצר ב-Drive שלך.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "סנכרן את הספרייה, התקדמות הקריאה וההדגשות שלך עם שרת WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "סנכרן את הספרייה, התקדמות הקריאה וההדגשות שלך עם Google Drive שלך.",
"Configured": "מוגדר",
"Third-party Cloud Sync": "סנכרון ענן של צד שלישי",
"Use WebDAV": "השתמש ב-WebDAV",
"Cloud Sync": "סנכרון ענן",
"Available on Plus, Pro, or Lifetime": "זמין ב-Plus, Pro או Lifetime",
"Extra Large": "גדול במיוחד",
"Hint size": "גודל הרמז",
"Gloss text size above the word": "גודל טקסט הרמז שמעל המילה",
"Hint color": "צבע הרמז",
"Adjust Text Selection": "התאמת בחירת טקסט",
"Your books will appear here": "הספרים שלך יופיעו כאן",
"Reading aloud continues in the background": "ההקראה בקול ממשיכה ברקע",
"Stopped reading aloud": "ההקראה בקול הופסקה",
"Read aloud stopped": "ההקראה הופסקה"
}
@@ -1813,5 +1813,64 @@
"Find:": "खोजें:",
"Enable rule": "नियम सक्षम करें",
"Disable rule": "नियम अक्षम करें",
"Progress Read": "पढ़ने की प्रगति"
"Progress Read": "पढ़ने की प्रगति",
"Auto-import new books from this folder": "इस फ़ोल्डर से नई पुस्तकें स्वतः आयात करें",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "जब इस फ़ोल्डर में नई पुस्तकें जोड़ी जाती हैं, तो अगली बार Readest खुलने या अग्रभूमि में लौटने पर वे स्वचालित रूप से आयात हो जाएँगी।",
"Reading aloud": "उच्च स्वर में पढ़ा जा रहा है",
"Open Book": "पुस्तक खोलें",
"Stop reading aloud": "उच्च स्वर में पढ़ना रोकें",
"Enter at least two words": "कम से कम दो शब्द दर्ज करें",
"Search failed": "खोज विफल रही",
"Search with regex": "रेगुलर एक्सप्रेशन से खोजें",
"Words to find near each other": "एक-दूसरे के पास खोजे जाने वाले शब्द",
"Contains": "शामिल है",
"Whole Words": "पूरे शब्द",
"Regular Expression": "रेगुलर एक्सप्रेशन",
"Nearby Words": "आस-पास के शब्द",
"Within N words": "N शब्दों के भीतर",
"Not for regex": "रेगुलर एक्सप्रेशन के लिए नहीं",
"No results found": "कोई परिणाम नहीं मिला",
"{{count}} results_one": "{{count}} परिणाम",
"{{count}} results_other": "{{count}} परिणाम",
"Failed to seek": "सीक करने में विफल",
"Chapter progress": "अध्याय की प्रगति",
"{{elapsed}} of {{total}}": "{{total}} में से {{elapsed}}",
"Decrease Contrast": "विरोधाभास कम करें",
"Reset Contrast": "विरोधाभास रीसेट करें",
"Increase Contrast": "विरोधाभास बढ़ाएं",
"Google Drive session expired. Reconnect in Settings.": "Google Drive सत्र समाप्त हो गया। सेटिंग्स में फिर से कनेक्ट करें।",
"Cloud sync session expired. Reconnect in Settings.": "क्लाउड सिंक सत्र समाप्त हो गया। सेटिंग्स में फिर से कनेक्ट करें।",
"Push": "पुश",
"Slide": "स्लाइड",
"Page Curl": "पेज कर्ल",
"Animation Style": "एनीमेशन शैली",
"Appearance": "दिखावट",
"Sets the text size of dictionary results, independent of the reading view.": "पठन दृश्य से स्वतंत्र रूप से शब्दकोश परिणामों के टेक्स्ट का आकार सेट करता है।",
"Authentication failed. Reconnect in Settings.": "प्रमाणीकरण विफल रहा। सेटिंग्स में फिर से कनेक्ट करें।",
"Full Sync": "पूर्ण सिंक",
"Re-check every book instead of only changed ones.": "केवल बदली गई पुस्तकों के बजाय हर पुस्तक की फिर से जाँच करें।",
"Waiting for sign-in…": "साइन-इन की प्रतीक्षा में…",
"Reconnect": "फिर से कनेक्ट करें",
"Connected as {{account}}": "{{account}} के रूप में कनेक्टेड",
". Make Google Drive the active cloud provider.": "। Google Drive को सक्रिय क्लाउड प्रदाता बनाएं।",
"Use Google Drive": "Google Drive का उपयोग करें",
"Sign-in opens in your browser.": "साइन-इन आपके ब्राउज़र में खुलता है।",
"Readest only accesses the files it creates in your Drive.": "Readest केवल उन्हीं फ़ाइलों तक पहुँचता है जिन्हें वह आपकी Drive में बनाता है।",
"Sync your library, reading progress, and highlights with a WebDAV server.": "अपनी लाइब्रेरी, पढ़ने की प्रगति और हाइलाइट्स को WebDAV सर्वर से सिंक करें।",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "अपनी लाइब्रेरी, पढ़ने की प्रगति और हाइलाइट्स को अपनी Google Drive से सिंक करें।",
"Configured": "कॉन्फ़िगर किया गया",
"Third-party Cloud Sync": "तृतीय-पक्ष क्लाउड सिंक",
"Use WebDAV": "WebDAV का उपयोग करें",
"Cloud Sync": "क्लाउड सिंक",
"Available on Plus, Pro, or Lifetime": "Plus, Pro या Lifetime में उपलब्ध",
"Extra Large": "बहुत बड़ा",
"Hint size": "संकेत का आकार",
"Gloss text size above the word": "शब्द के ऊपर दिखने वाले संकेत टेक्स्ट का आकार",
"Hint color": "संकेत का रंग",
"Adjust Text Selection": "टेक्स्ट चयन समायोजित करें",
"Your books will appear here": "आपकी पुस्तकें यहाँ दिखाई देंगी",
"Reading aloud continues in the background": "उच्च स्वर में पढ़ना पृष्ठभूमि में जारी रहता है",
"Stopped reading aloud": "उच्च स्वर में पढ़ना रोक दिया गया",
"Read aloud stopped": "उच्च स्वर में पढ़ना रुक गया"
}
@@ -1813,5 +1813,64 @@
"Find:": "Keresés:",
"Enable rule": "Szabály engedélyezése",
"Disable rule": "Szabály letiltása",
"Progress Read": "Olvasási haladás"
"Progress Read": "Olvasási haladás",
"Auto-import new books from this folder": "Új könyvek automatikus importálása ebből a mappából",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Amikor új könyvek kerülnek ebbe a mappába, a Readest automatikusan importálja őket a következő megnyitáskor vagy előtérbe kerüléskor.",
"Reading aloud": "Felolvasás folyamatban",
"Open Book": "Könyv megnyitása",
"Stop reading aloud": "Felolvasás leállítása",
"Enter at least two words": "Adjon meg legalább két szót",
"Search failed": "A keresés sikertelen",
"Search with regex": "Keresés regexszel",
"Words to find near each other": "Egymáshoz közel keresendő szavak",
"Contains": "Tartalmazza",
"Whole Words": "Teljes szavak",
"Regular Expression": "Reguláris kifejezés",
"Nearby Words": "Közeli szavak",
"Within N words": "N szón belül",
"Not for regex": "Regexnél nem használható",
"No results found": "Nincs találat",
"{{count}} results_one": "{{count}} találat",
"{{count}} results_other": "{{count}} találat",
"Failed to seek": "Az ugrás sikertelen",
"Chapter progress": "Fejezet haladás",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "Kontraszt csökkentése",
"Reset Contrast": "Kontraszt visszaállítása",
"Increase Contrast": "Kontraszt növelése",
"Google Drive session expired. Reconnect in Settings.": "A Google Drive-munkamenet lejárt. Csatlakozzon újra a Beállításokban.",
"Cloud sync session expired. Reconnect in Settings.": "A felhőszinkronizálási munkamenet lejárt. Csatlakozzon újra a Beállításokban.",
"Push": "Tolás",
"Slide": "Csúsztatás",
"Page Curl": "Lapozás",
"Animation Style": "Animáció stílusa",
"Appearance": "Megjelenés",
"Sets the text size of dictionary results, independent of the reading view.": "A szótári találatok szövegméretét állítja be, az olvasási nézettől függetlenül.",
"Authentication failed. Reconnect in Settings.": "A hitelesítés sikertelen. Csatlakozzon újra a Beállításokban.",
"Full Sync": "Teljes szinkronizálás",
"Re-check every book instead of only changed ones.": "Minden könyv újraellenőrzése, nem csak a módosultaké.",
"Waiting for sign-in…": "Várakozás a bejelentkezésre…",
"Reconnect": "Újracsatlakozás",
"Connected as {{account}}": "Csatlakozva mint {{account}}",
". Make Google Drive the active cloud provider.": ". Tegye a Google Drive-ot az aktív felhőszolgáltatóvá.",
"Use Google Drive": "Google Drive használata",
"Sign-in opens in your browser.": "A bejelentkezés a böngészőben nyílik meg.",
"Readest only accesses the files it creates in your Drive.": "A Readest csak azokhoz a fájlokhoz fér hozzá, amelyeket ő hozott létre a Drive-jában.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Szinkronizálja könyvtárát, olvasási haladását és kiemeléseit egy WebDAV-szerverrel.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Szinkronizálja könyvtárát, olvasási haladását és kiemeléseit a Google Drive-jával.",
"Configured": "Beállítva",
"Third-party Cloud Sync": "Külső felhőszinkronizálás",
"Use WebDAV": "WebDAV használata",
"Cloud Sync": "Felhőszinkronizálás",
"Available on Plus, Pro, or Lifetime": "Elérhető Plus, Pro vagy Lifetime csomaggal",
"Extra Large": "Extra nagy",
"Hint size": "Felirat mérete",
"Gloss text size above the word": "A szó feletti felirat szövegmérete",
"Hint color": "Felirat színe",
"Adjust Text Selection": "Szövegkijelölés módosítása",
"Your books will appear here": "Itt jelennek meg a könyvei",
"Reading aloud continues in the background": "A felolvasás a háttérben folytatódik",
"Stopped reading aloud": "A felolvasás leállt",
"Read aloud stopped": "Felolvasás leállítva"
}
@@ -1780,5 +1780,63 @@
"Find:": "Cari:",
"Enable rule": "Aktifkan aturan",
"Disable rule": "Nonaktifkan aturan",
"Progress Read": "Progres Membaca"
"Progress Read": "Progres Membaca",
"Auto-import new books from this folder": "Impor otomatis buku baru dari folder ini",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Saat buku baru ditambahkan ke folder ini, buku akan diimpor secara otomatis saat berikutnya Readest dibuka atau kembali ke latar depan.",
"Reading aloud": "Sedang membacakan",
"Open Book": "Buka Buku",
"Stop reading aloud": "Hentikan pembacaan",
"Enter at least two words": "Masukkan setidaknya dua kata",
"Search failed": "Pencarian gagal",
"Search with regex": "Cari dengan ekspresi reguler",
"Words to find near each other": "Kata-kata yang akan dicari berdekatan",
"Contains": "Mengandung",
"Whole Words": "Kata Utuh",
"Regular Expression": "Ekspresi Reguler",
"Nearby Words": "Kata Berdekatan",
"Within N words": "Dalam jarak N kata",
"Not for regex": "Tidak berlaku untuk ekspresi reguler",
"No results found": "Tidak ada hasil ditemukan",
"{{count}} results_other": "{{count}} hasil",
"Failed to seek": "Gagal menggeser posisi",
"Chapter progress": "Kemajuan bab",
"{{elapsed}} of {{total}}": "{{elapsed}} dari {{total}}",
"Decrease Contrast": "Kurangi Kontras",
"Reset Contrast": "Atur Ulang Kontras",
"Increase Contrast": "Tingkatkan Kontras",
"Google Drive session expired. Reconnect in Settings.": "Sesi Google Drive kedaluwarsa. Hubungkan ulang di Pengaturan.",
"Cloud sync session expired. Reconnect in Settings.": "Sesi sinkronisasi cloud kedaluwarsa. Hubungkan ulang di Pengaturan.",
"Push": "Dorong",
"Slide": "Geser",
"Page Curl": "Lengkung Halaman",
"Animation Style": "Gaya Animasi",
"Appearance": "Tampilan",
"Sets the text size of dictionary results, independent of the reading view.": "Mengatur ukuran teks hasil kamus, tidak bergantung pada tampilan baca.",
"Authentication failed. Reconnect in Settings.": "Autentikasi gagal. Hubungkan ulang di Pengaturan.",
"Full Sync": "Sinkronisasi Penuh",
"Re-check every book instead of only changed ones.": "Periksa ulang semua buku, bukan hanya yang berubah.",
"Waiting for sign-in…": "Menunggu proses masuk…",
"Reconnect": "Hubungkan Ulang",
"Connected as {{account}}": "Terhubung sebagai {{account}}",
". Make Google Drive the active cloud provider.": ". Jadikan Google Drive penyedia cloud yang aktif.",
"Use Google Drive": "Gunakan Google Drive",
"Sign-in opens in your browser.": "Proses masuk akan terbuka di browser Anda.",
"Readest only accesses the files it creates in your Drive.": "Readest hanya mengakses file yang dibuatnya di Drive Anda.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sinkronkan perpustakaan, progres membaca, dan sorotan Anda dengan server WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sinkronkan perpustakaan, progres membaca, dan sorotan Anda dengan Google Drive Anda.",
"Configured": "Terkonfigurasi",
"Third-party Cloud Sync": "Sinkronisasi Cloud Pihak Ketiga",
"Use WebDAV": "Gunakan WebDAV",
"Cloud Sync": "Sinkronisasi Cloud",
"Available on Plus, Pro, or Lifetime": "Tersedia di paket Plus, Pro, atau Seumur Hidup",
"Extra Large": "Sangat Besar",
"Hint size": "Ukuran petunjuk",
"Gloss text size above the word": "Ukuran teks keterangan di atas kata",
"Hint color": "Warna petunjuk",
"Adjust Text Selection": "Sesuaikan Pilihan Teks",
"Your books will appear here": "Buku Anda akan muncul di sini",
"Reading aloud continues in the background": "Pembacaan berlanjut di latar belakang",
"Stopped reading aloud": "Pembacaan dihentikan",
"Read aloud stopped": "Pembacaan telah berhenti"
}
@@ -1846,5 +1846,65 @@
"Find:": "Trova:",
"Enable rule": "Attiva regola",
"Disable rule": "Disattiva regola",
"Progress Read": "Progresso di lettura"
"Progress Read": "Progresso di lettura",
"Auto-import new books from this folder": "Importa automaticamente i nuovi libri da questa cartella",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Quando vengono aggiunti nuovi libri a questa cartella, verranno importati automaticamente alla prossima apertura di Readest o al suo ritorno in primo piano.",
"Reading aloud": "Lettura ad alta voce",
"Open Book": "Apri libro",
"Stop reading aloud": "Interrompi la lettura ad alta voce",
"Enter at least two words": "Inserisci almeno due parole",
"Search failed": "Ricerca non riuscita",
"Search with regex": "Cerca con regex",
"Words to find near each other": "Parole da trovare vicine tra loro",
"Contains": "Contiene",
"Whole Words": "Parole intere",
"Regular Expression": "Espressione regolare",
"Nearby Words": "Parole vicine",
"Within N words": "Entro N parole",
"Not for regex": "Non disponibile con regex",
"No results found": "Nessun risultato trovato",
"{{count}} results_one": "{{count}} risultato",
"{{count}} results_many": "{{count}} di risultati",
"{{count}} results_other": "{{count}} risultati",
"Failed to seek": "Impossibile cambiare posizione",
"Chapter progress": "Progresso capitolo",
"{{elapsed}} of {{total}}": "{{elapsed}} di {{total}}",
"Decrease Contrast": "Diminuisci contrasto",
"Reset Contrast": "Reimposta contrasto",
"Increase Contrast": "Aumenta contrasto",
"Google Drive session expired. Reconnect in Settings.": "Sessione Google Drive scaduta. Riconnetti dalle Impostazioni.",
"Cloud sync session expired. Reconnect in Settings.": "Sessione di sincronizzazione cloud scaduta. Riconnetti dalle Impostazioni.",
"Push": "Spinta",
"Slide": "Scivolamento",
"Page Curl": "Curvatura pagina",
"Animation Style": "Stile animazione",
"Appearance": "Aspetto",
"Sets the text size of dictionary results, independent of the reading view.": "Imposta la dimensione del testo dei risultati del dizionario, indipendente dalla vista di lettura.",
"Authentication failed. Reconnect in Settings.": "Autenticazione non riuscita. Riconnetti dalle Impostazioni.",
"Full Sync": "Sincronizzazione completa",
"Re-check every book instead of only changed ones.": "Ricontrolla tutti i libri, non solo quelli modificati.",
"Waiting for sign-in…": "In attesa dell'accesso…",
"Reconnect": "Riconnetti",
"Connected as {{account}}": "Collegato come {{account}}",
". Make Google Drive the active cloud provider.": ". Imposta Google Drive come provider cloud attivo.",
"Use Google Drive": "Usa Google Drive",
"Sign-in opens in your browser.": "L'accesso si apre nel browser.",
"Readest only accesses the files it creates in your Drive.": "Readest accede solo ai file che crea nel tuo Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sincronizza la tua biblioteca, il progresso di lettura e le evidenziazioni con un server WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sincronizza la tua biblioteca, il progresso di lettura e le evidenziazioni con il tuo Google Drive.",
"Configured": "Configurato",
"Third-party Cloud Sync": "Sincronizzazione cloud di terze parti",
"Use WebDAV": "Usa WebDAV",
"Cloud Sync": "Sincronizzazione cloud",
"Available on Plus, Pro, or Lifetime": "Disponibile con Plus, Pro o a Vita",
"Extra Large": "Molto grande",
"Hint size": "Dimensione del suggerimento",
"Gloss text size above the word": "Dimensione del testo del suggerimento sopra la parola",
"Hint color": "Colore del suggerimento",
"Adjust Text Selection": "Regola la selezione del testo",
"Your books will appear here": "I tuoi libri appariranno qui",
"Reading aloud continues in the background": "La lettura ad alta voce continua in background",
"Stopped reading aloud": "Lettura ad alta voce interrotta",
"Read aloud stopped": "Lettura ad alta voce interrotta"
}
@@ -1780,5 +1780,63 @@
"Find:": "検索:",
"Enable rule": "ルールを有効化",
"Disable rule": "ルールを無効化",
"Progress Read": "読書進捗"
"Progress Read": "読書進捗",
"Auto-import new books from this folder": "このフォルダから新しい本を自動インポート",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "このフォルダに新しい本が追加されると、次回 Readest を開いたときやフォアグラウンドに戻ったときに自動的にインポートします。",
"Reading aloud": "読み上げ中",
"Open Book": "本を開く",
"Stop reading aloud": "読み上げを停止",
"Enter at least two words": "単語を 2 つ以上入力してください",
"Search failed": "検索に失敗しました",
"Search with regex": "正規表現で検索",
"Words to find near each other": "互いに近くにある単語",
"Contains": "含む",
"Whole Words": "単語全体",
"Regular Expression": "正規表現",
"Nearby Words": "近接単語",
"Within N words": "N 語以内",
"Not for regex": "正規表現では無効",
"No results found": "結果が見つかりませんでした",
"{{count}} results_other": "{{count}} 件の結果",
"Failed to seek": "シークに失敗しました",
"Chapter progress": "章の進捗",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "コントラストを下げる",
"Reset Contrast": "コントラストをリセット",
"Increase Contrast": "コントラストを上げる",
"Google Drive session expired. Reconnect in Settings.": "Google Drive のセッションが期限切れです。設定で再接続してください。",
"Cloud sync session expired. Reconnect in Settings.": "クラウド同期のセッションが期限切れです。設定で再接続してください。",
"Push": "プッシュ",
"Slide": "スライド",
"Page Curl": "ページカール",
"Animation Style": "アニメーションスタイル",
"Appearance": "外観",
"Sets the text size of dictionary results, independent of the reading view.": "辞書の検索結果の文字サイズを、読書画面とは独立して設定します。",
"Authentication failed. Reconnect in Settings.": "認証に失敗しました。設定で再接続してください。",
"Full Sync": "完全同期",
"Re-check every book instead of only changed ones.": "変更のあった本だけでなく、すべての本を再チェックします。",
"Waiting for sign-in…": "サインインを待っています…",
"Reconnect": "再接続",
"Connected as {{account}}": "{{account}} として接続済み",
". Make Google Drive the active cloud provider.": "。Google Drive を使用するクラウドプロバイダーに設定します。",
"Use Google Drive": "Google Drive を使用",
"Sign-in opens in your browser.": "サインインはブラウザで開きます。",
"Readest only accesses the files it creates in your Drive.": "Readest がアクセスするのは、Drive 内に自身が作成したファイルのみです。",
"Sync your library, reading progress, and highlights with a WebDAV server.": "ライブラリ、読書進捗、ハイライトを WebDAV サーバーと同期します。",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "ライブラリ、読書進捗、ハイライトを Google Drive と同期します。",
"Configured": "設定済み",
"Third-party Cloud Sync": "サードパーティのクラウド同期",
"Use WebDAV": "WebDAV を使用",
"Cloud Sync": "クラウド同期",
"Available on Plus, Pro, or Lifetime": "Plus、Pro、Lifetime プランで利用可能",
"Extra Large": "特大",
"Hint size": "ヒントのサイズ",
"Gloss text size above the word": "単語の上に表示される注釈の文字サイズ",
"Hint color": "ヒントの色",
"Adjust Text Selection": "テキスト選択を調整",
"Your books will appear here": "ここに本が表示されます",
"Reading aloud continues in the background": "読み上げはバックグラウンドで継続します",
"Stopped reading aloud": "読み上げを停止しました",
"Read aloud stopped": "読み上げが停止しました"
}
@@ -1780,5 +1780,63 @@
"Find:": "찾기:",
"Enable rule": "규칙 활성화",
"Disable rule": "규칙 비활성화",
"Progress Read": "읽기 진행 상황"
"Progress Read": "읽기 진행 상황",
"Auto-import new books from this folder": "이 폴더에서 새 책 자동 가져오기",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "이 폴더에 새 책이 추가되면 다음에 Readest를 열거나 포그라운드로 돌아올 때 자동으로 가져옵니다.",
"Reading aloud": "음성 읽기 중",
"Open Book": "책 열기",
"Stop reading aloud": "음성 읽기 중지",
"Enter at least two words": "단어를 두 개 이상 입력하세요",
"Search failed": "검색에 실패했습니다",
"Search with regex": "정규식으로 검색",
"Words to find near each other": "서로 가까이에서 찾을 단어",
"Contains": "포함",
"Whole Words": "전체 단어",
"Regular Expression": "정규 표현식",
"Nearby Words": "인접 단어",
"Within N words": "N 단어 이내",
"Not for regex": "정규식에는 적용되지 않음",
"No results found": "결과를 찾을 수 없습니다",
"{{count}} results_other": "{{count}}개의 결과",
"Failed to seek": "탐색에 실패했습니다",
"Chapter progress": "챕터 진행률",
"{{elapsed}} of {{total}}": "{{total}} 중 {{elapsed}}",
"Decrease Contrast": "대비 낮추기",
"Reset Contrast": "대비 재설정",
"Increase Contrast": "대비 높이기",
"Google Drive session expired. Reconnect in Settings.": "Google Drive 세션이 만료되었습니다. 설정에서 다시 연결하세요.",
"Cloud sync session expired. Reconnect in Settings.": "클라우드 동기화 세션이 만료되었습니다. 설정에서 다시 연결하세요.",
"Push": "밀기",
"Slide": "슬라이드",
"Page Curl": "책장 넘김",
"Animation Style": "애니메이션 스타일",
"Appearance": "모양",
"Sets the text size of dictionary results, independent of the reading view.": "읽기 화면과 별개로 사전 결과의 텍스트 크기를 설정합니다.",
"Authentication failed. Reconnect in Settings.": "인증에 실패했습니다. 설정에서 다시 연결하세요.",
"Full Sync": "전체 동기화",
"Re-check every book instead of only changed ones.": "변경된 책만이 아니라 모든 책을 다시 확인합니다.",
"Waiting for sign-in…": "로그인을 기다리는 중…",
"Reconnect": "다시 연결",
"Connected as {{account}}": "{{account}}(으)로 연결됨",
". Make Google Drive the active cloud provider.": ". Google Drive를 사용할 클라우드 제공업체로 설정합니다.",
"Use Google Drive": "Google Drive 사용",
"Sign-in opens in your browser.": "로그인은 브라우저에서 열립니다.",
"Readest only accesses the files it creates in your Drive.": "Readest는 Drive에서 직접 만든 파일에만 접근합니다.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "라이브러리, 읽기 진행 상황, 하이라이트를 WebDAV 서버와 동기화합니다.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "라이브러리, 읽기 진행 상황, 하이라이트를 Google Drive와 동기화합니다.",
"Configured": "설정됨",
"Third-party Cloud Sync": "타사 클라우드 동기화",
"Use WebDAV": "WebDAV 사용",
"Cloud Sync": "클라우드 동기화",
"Available on Plus, Pro, or Lifetime": "Plus, Pro, Lifetime 요금제에서 사용 가능",
"Extra Large": "매우 큼",
"Hint size": "힌트 크기",
"Gloss text size above the word": "단어 위에 표시되는 주석 텍스트 크기",
"Hint color": "힌트 색상",
"Adjust Text Selection": "텍스트 선택 조정",
"Your books will appear here": "책이 여기에 표시됩니다",
"Reading aloud continues in the background": "백그라운드에서 음성 읽기가 계속됩니다",
"Stopped reading aloud": "음성 읽기를 중지했습니다",
"Read aloud stopped": "음성 읽기가 중지되었습니다"
}
@@ -1780,5 +1780,63 @@
"Find:": "Cari:",
"Enable rule": "Dayakan peraturan",
"Disable rule": "Nyahdayakan peraturan",
"Progress Read": "Kemajuan Membaca"
"Progress Read": "Kemajuan Membaca",
"Auto-import new books from this folder": "Auto-import buku baharu dari folder ini",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Apabila buku baharu ditambahkan ke folder ini, buku tersebut akan diimport secara automatik pada kali berikutnya Readest dibuka atau kembali ke latar depan.",
"Reading aloud": "Sedang membaca dengan kuat",
"Open Book": "Buka Buku",
"Stop reading aloud": "Hentikan bacaan kuat",
"Enter at least two words": "Masukkan sekurang-kurangnya dua perkataan",
"Search failed": "Carian gagal",
"Search with regex": "Cari dengan regex",
"Words to find near each other": "Perkataan yang dicari berdekatan antara satu sama lain",
"Contains": "Mengandungi",
"Whole Words": "Seluruh Perkataan",
"Regular Expression": "Ungkapan Biasa",
"Nearby Words": "Perkataan Berdekatan",
"Within N words": "Dalam lingkungan N perkataan",
"Not for regex": "Tidak untuk regex",
"No results found": "Tiada hasil dijumpai",
"{{count}} results_other": "{{count}} hasil",
"Failed to seek": "Gagal mengubah kedudukan main",
"Chapter progress": "Kemajuan bab",
"{{elapsed}} of {{total}}": "{{elapsed}} daripada {{total}}",
"Decrease Contrast": "Kurangkan Kontras",
"Reset Contrast": "Tetapkan Semula Kontras",
"Increase Contrast": "Tingkatkan Kontras",
"Google Drive session expired. Reconnect in Settings.": "Sesi Google Drive telah tamat tempoh. Sambung semula di Tetapan.",
"Cloud sync session expired. Reconnect in Settings.": "Sesi segerak awan telah tamat tempoh. Sambung semula di Tetapan.",
"Push": "Tolak",
"Slide": "Luncur",
"Page Curl": "Lengkung Halaman",
"Animation Style": "Gaya Animasi",
"Appearance": "Penampilan",
"Sets the text size of dictionary results, independent of the reading view.": "Menetapkan saiz teks hasil kamus, tidak bergantung pada paparan bacaan.",
"Authentication failed. Reconnect in Settings.": "Pengesahan gagal. Sambung semula di Tetapan.",
"Full Sync": "Segerak Penuh",
"Re-check every book instead of only changed ones.": "Semak semula setiap buku dan bukan hanya yang berubah.",
"Waiting for sign-in…": "Menunggu log masuk…",
"Reconnect": "Sambung Semula",
"Connected as {{account}}": "Disambungkan sebagai {{account}}",
". Make Google Drive the active cloud provider.": ". Jadikan Google Drive sebagai penyedia awan yang aktif.",
"Use Google Drive": "Guna Google Drive",
"Sign-in opens in your browser.": "Log masuk akan dibuka dalam pelayar anda.",
"Readest only accesses the files it creates in your Drive.": "Readest hanya mengakses fail yang diciptanya dalam Drive anda.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Segerakkan perpustakaan, kemajuan bacaan dan penonjolan anda dengan pelayan WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Segerakkan perpustakaan, kemajuan bacaan dan penonjolan anda dengan Google Drive anda.",
"Configured": "Telah dikonfigurasi",
"Third-party Cloud Sync": "Segerak Awan Pihak Ketiga",
"Use WebDAV": "Guna WebDAV",
"Cloud Sync": "Segerak Awan",
"Available on Plus, Pro, or Lifetime": "Tersedia pada pelan Plus, Pro atau Seumur Hidup",
"Extra Large": "Sangat Besar",
"Hint size": "Saiz petunjuk",
"Gloss text size above the word": "Saiz teks keterangan di atas perkataan",
"Hint color": "Warna petunjuk",
"Adjust Text Selection": "Laraskan Pilihan Teks",
"Your books will appear here": "Buku anda akan dipaparkan di sini",
"Reading aloud continues in the background": "Bacaan kuat diteruskan di latar belakang",
"Stopped reading aloud": "Berhenti membaca dengan kuat",
"Read aloud stopped": "Bacaan kuat dihentikan"
}
@@ -1813,5 +1813,64 @@
"Find:": "Zoeken:",
"Enable rule": "Regel inschakelen",
"Disable rule": "Regel uitschakelen",
"Progress Read": "Leesvoortgang"
"Progress Read": "Leesvoortgang",
"Auto-import new books from this folder": "Nieuwe boeken uit deze map automatisch importeren",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Wanneer nieuwe boeken aan deze map worden toegevoegd, worden ze automatisch geïmporteerd zodra Readest de volgende keer wordt geopend of weer op de voorgrond komt.",
"Reading aloud": "Bezig met voorlezen",
"Open Book": "Boek openen",
"Stop reading aloud": "Voorlezen stoppen",
"Enter at least two words": "Voer minstens twee woorden in",
"Search failed": "Zoeken mislukt",
"Search with regex": "Zoeken met regex",
"Words to find near each other": "Woorden die dicht bij elkaar moeten staan",
"Contains": "Bevat",
"Whole Words": "Hele woorden",
"Regular Expression": "Reguliere expressie",
"Nearby Words": "Nabije woorden",
"Within N words": "Binnen N woorden",
"Not for regex": "Niet voor regex",
"No results found": "Geen resultaten gevonden",
"{{count}} results_one": "{{count}} resultaat",
"{{count}} results_other": "{{count}} resultaten",
"Failed to seek": "Doorspoelen mislukt",
"Chapter progress": "Hoofdstukvoortgang",
"{{elapsed}} of {{total}}": "{{elapsed}} van {{total}}",
"Decrease Contrast": "Contrast verlagen",
"Reset Contrast": "Contrast resetten",
"Increase Contrast": "Contrast verhogen",
"Google Drive session expired. Reconnect in Settings.": "Google Drive-sessie verlopen. Verbind opnieuw via Instellingen.",
"Cloud sync session expired. Reconnect in Settings.": "Cloudsynchronisatie-sessie verlopen. Verbind opnieuw via Instellingen.",
"Push": "Duwen",
"Slide": "Schuiven",
"Page Curl": "Omslaan",
"Animation Style": "Animatiestijl",
"Appearance": "Uiterlijk",
"Sets the text size of dictionary results, independent of the reading view.": "Stelt de tekstgrootte van woordenboekresultaten in, onafhankelijk van de leesweergave.",
"Authentication failed. Reconnect in Settings.": "Verificatie mislukt. Verbind opnieuw via Instellingen.",
"Full Sync": "Volledige synchronisatie",
"Re-check every book instead of only changed ones.": "Controleer elk boek opnieuw in plaats van alleen gewijzigde boeken.",
"Waiting for sign-in…": "Wachten op inloggen…",
"Reconnect": "Opnieuw verbinden",
"Connected as {{account}}": "Verbonden als {{account}}",
". Make Google Drive the active cloud provider.": ". Maak Google Drive de actieve cloudprovider.",
"Use Google Drive": "Google Drive gebruiken",
"Sign-in opens in your browser.": "Inloggen opent in je browser.",
"Readest only accesses the files it creates in your Drive.": "Readest heeft alleen toegang tot de bestanden die het zelf in je Drive aanmaakt.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Synchroniseer je bibliotheek, leesvoortgang en markeringen met een WebDAV-server.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Synchroniseer je bibliotheek, leesvoortgang en markeringen met je Google Drive.",
"Configured": "Geconfigureerd",
"Third-party Cloud Sync": "Cloudsynchronisatie van derden",
"Use WebDAV": "WebDAV gebruiken",
"Cloud Sync": "Cloudsynchronisatie",
"Available on Plus, Pro, or Lifetime": "Beschikbaar met Plus, Pro of Lifetime",
"Extra Large": "Extra groot",
"Hint size": "Hintgrootte",
"Gloss text size above the word": "Tekstgrootte van de hint boven het woord",
"Hint color": "Hintkleur",
"Adjust Text Selection": "Tekstselectie aanpassen",
"Your books will appear here": "Je boeken verschijnen hier",
"Reading aloud continues in the background": "Voorlezen gaat door op de achtergrond",
"Stopped reading aloud": "Voorlezen gestopt",
"Read aloud stopped": "Voorlezen is gestopt"
}
@@ -1879,5 +1879,66 @@
"Find:": "Znajdź:",
"Enable rule": "Włącz regułę",
"Disable rule": "Wyłącz regułę",
"Progress Read": "Postęp czytania"
"Progress Read": "Postęp czytania",
"Auto-import new books from this folder": "Automatycznie importuj nowe książki z tego folderu",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Gdy do tego folderu zostaną dodane nowe książki, zostaną one automatycznie zaimportowane przy następnym uruchomieniu Readest lub powrocie aplikacji na pierwszy plan.",
"Reading aloud": "Czytanie na głos",
"Open Book": "Otwórz książkę",
"Stop reading aloud": "Zatrzymaj czytanie na głos",
"Enter at least two words": "Wpisz co najmniej dwa słowa",
"Search failed": "Wyszukiwanie nie powiodło się",
"Search with regex": "Szukaj z użyciem wyrażenia regularnego",
"Words to find near each other": "Słowa do znalezienia blisko siebie",
"Contains": "Zawiera",
"Whole Words": "Całe słowa",
"Regular Expression": "Wyrażenie regularne",
"Nearby Words": "Słowa w pobliżu",
"Within N words": "W obrębie N słów",
"Not for regex": "Nie dotyczy wyrażeń regularnych",
"No results found": "Nie znaleziono wyników",
"{{count}} results_one": "{{count}} wynik",
"{{count}} results_few": "{{count}} wyniki",
"{{count}} results_many": "{{count}} wyników",
"{{count}} results_other": "{{count}} wyniku",
"Failed to seek": "Nie udało się przewinąć",
"Chapter progress": "Postęp rozdziału",
"{{elapsed}} of {{total}}": "{{elapsed}} z {{total}}",
"Decrease Contrast": "Zmniejsz kontrast",
"Reset Contrast": "Zresetuj kontrast",
"Increase Contrast": "Zwiększ kontrast",
"Google Drive session expired. Reconnect in Settings.": "Sesja Google Drive wygasła. Połącz ponownie w Ustawieniach.",
"Cloud sync session expired. Reconnect in Settings.": "Sesja synchronizacji w chmurze wygasła. Połącz ponownie w Ustawieniach.",
"Push": "Przesunięcie",
"Slide": "Nasunięcie",
"Page Curl": "Zawijanie strony",
"Animation Style": "Styl animacji",
"Appearance": "Wygląd",
"Sets the text size of dictionary results, independent of the reading view.": "Ustawia rozmiar tekstu wyników słownika, niezależnie od widoku czytania.",
"Authentication failed. Reconnect in Settings.": "Uwierzytelnianie nie powiodło się. Połącz ponownie w Ustawieniach.",
"Full Sync": "Pełna synchronizacja",
"Re-check every book instead of only changed ones.": "Sprawdzaj ponownie wszystkie książki, a nie tylko zmienione.",
"Waiting for sign-in…": "Oczekiwanie na zalogowanie…",
"Reconnect": "Połącz ponownie",
"Connected as {{account}}": "Połączono jako {{account}}",
". Make Google Drive the active cloud provider.": ". Ustaw Google Drive jako aktywnego dostawcę chmury.",
"Use Google Drive": "Użyj Google Drive",
"Sign-in opens in your browser.": "Logowanie otworzy się w przeglądarce.",
"Readest only accesses the files it creates in your Drive.": "Readest ma dostęp tylko do plików, które sam tworzy na Twoim Dysku Google.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Synchronizuj bibliotekę, postęp czytania i zaznaczenia z serwerem WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Synchronizuj bibliotekę, postęp czytania i zaznaczenia ze swoim Google Drive.",
"Configured": "Skonfigurowano",
"Third-party Cloud Sync": "Zewnętrzna synchronizacja w chmurze",
"Use WebDAV": "Użyj WebDAV",
"Cloud Sync": "Synchronizacja w chmurze",
"Available on Plus, Pro, or Lifetime": "Dostępne w planach Plus, Pro lub Lifetime",
"Extra Large": "Bardzo duży",
"Hint size": "Rozmiar podpowiedzi",
"Gloss text size above the word": "Rozmiar tekstu podpowiedzi nad słowem",
"Hint color": "Kolor podpowiedzi",
"Adjust Text Selection": "Dostosuj zaznaczenie tekstu",
"Your books will appear here": "Tutaj pojawią się Twoje książki",
"Reading aloud continues in the background": "Czytanie na głos jest kontynuowane w tle",
"Stopped reading aloud": "Zatrzymano czytanie na głos",
"Read aloud stopped": "Czytanie na głos zatrzymane"
}
@@ -1846,5 +1846,65 @@
"Find:": "Localizar:",
"Enable rule": "Ativar regra",
"Disable rule": "Desativar regra",
"Progress Read": "Progresso de leitura"
"Progress Read": "Progresso de leitura",
"Auto-import new books from this folder": "Importar automaticamente os livros novos desta pasta",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Quando novos livros forem adicionados a esta pasta, eles serão importados automaticamente na próxima vez que o Readest abrir ou voltar ao primeiro plano.",
"Reading aloud": "Lendo em voz alta",
"Open Book": "Abrir livro",
"Stop reading aloud": "Parar a leitura em voz alta",
"Enter at least two words": "Digite pelo menos duas palavras",
"Search failed": "A pesquisa falhou",
"Search with regex": "Pesquisar com regex",
"Words to find near each other": "Palavras a serem encontradas próximas umas das outras",
"Contains": "Contém",
"Whole Words": "Palavras inteiras",
"Regular Expression": "Expressão regular",
"Nearby Words": "Palavras próximas",
"Within N words": "A menos de N palavras",
"Not for regex": "Não disponível com regex",
"No results found": "Nenhum resultado encontrado",
"{{count}} results_one": "{{count}} resultado",
"{{count}} results_many": "{{count}} de resultados",
"{{count}} results_other": "{{count}} resultados",
"Failed to seek": "Falha ao mudar de posição",
"Chapter progress": "Progresso do capítulo",
"{{elapsed}} of {{total}}": "{{elapsed}} de {{total}}",
"Decrease Contrast": "Diminuir contraste",
"Reset Contrast": "Redefinir contraste",
"Increase Contrast": "Aumentar contraste",
"Google Drive session expired. Reconnect in Settings.": "A sessão do Google Drive expirou. Reconecte em Configurações.",
"Cloud sync session expired. Reconnect in Settings.": "A sessão de sincronização na nuvem expirou. Reconecte em Configurações.",
"Push": "Empurrar",
"Slide": "Deslizar",
"Page Curl": "Curvatura de página",
"Animation Style": "Estilo de animação",
"Appearance": "Aparência",
"Sets the text size of dictionary results, independent of the reading view.": "Define o tamanho do texto dos resultados do dicionário, independente da visualização de leitura.",
"Authentication failed. Reconnect in Settings.": "A autenticação falhou. Reconecte em Configurações.",
"Full Sync": "Sincronização completa",
"Re-check every book instead of only changed ones.": "Verifica novamente todos os livros, não apenas os alterados.",
"Waiting for sign-in…": "Aguardando login…",
"Reconnect": "Reconectar",
"Connected as {{account}}": "Conectado como {{account}}",
". Make Google Drive the active cloud provider.": ". Torne o Google Drive o provedor de nuvem ativo.",
"Use Google Drive": "Usar o Google Drive",
"Sign-in opens in your browser.": "O login abre no seu navegador.",
"Readest only accesses the files it creates in your Drive.": "O Readest só acessa os arquivos que cria no seu Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sincronize sua biblioteca, progresso de leitura e destaques com um servidor WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sincronize sua biblioteca, progresso de leitura e destaques com o seu Google Drive.",
"Configured": "Configurado",
"Third-party Cloud Sync": "Sincronização na nuvem de terceiros",
"Use WebDAV": "Usar WebDAV",
"Cloud Sync": "Sincronização na nuvem",
"Available on Plus, Pro, or Lifetime": "Disponível com Plus, Pro ou Vitalício",
"Extra Large": "Extra grande",
"Hint size": "Tamanho da dica",
"Gloss text size above the word": "Tamanho do texto da dica sobre a palavra",
"Hint color": "Cor da dica",
"Adjust Text Selection": "Ajustar seleção de texto",
"Your books will appear here": "Seus livros aparecerão aqui",
"Reading aloud continues in the background": "A leitura em voz alta continua em segundo plano",
"Stopped reading aloud": "Leitura em voz alta interrompida",
"Read aloud stopped": "Leitura em voz alta interrompida"
}
@@ -1846,5 +1846,65 @@
"Find:": "Localizar:",
"Enable rule": "Ativar regra",
"Disable rule": "Desativar regra",
"Progress Read": "Progresso de Leitura"
"Progress Read": "Progresso de Leitura",
"Auto-import new books from this folder": "Importar automaticamente os livros novos desta pasta",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Quando forem adicionados livros novos a esta pasta, serão importados automaticamente na próxima vez que o Readest abrir ou voltar ao primeiro plano.",
"Reading aloud": "A ler em voz alta",
"Open Book": "Abrir Livro",
"Stop reading aloud": "Parar a leitura em voz alta",
"Enter at least two words": "Introduza pelo menos duas palavras",
"Search failed": "A pesquisa falhou",
"Search with regex": "Pesquisar com regex",
"Words to find near each other": "Palavras a encontrar próximas umas das outras",
"Contains": "Contém",
"Whole Words": "Palavras Inteiras",
"Regular Expression": "Expressão Regular",
"Nearby Words": "Palavras Próximas",
"Within N words": "A menos de N palavras",
"Not for regex": "Não disponível com regex",
"No results found": "Nenhum resultado encontrado",
"{{count}} results_one": "{{count}} resultado",
"{{count}} results_many": "{{count}} de resultados",
"{{count}} results_other": "{{count}} resultados",
"Failed to seek": "Falha ao mudar de posição",
"Chapter progress": "Progresso do capítulo",
"{{elapsed}} of {{total}}": "{{elapsed}} de {{total}}",
"Decrease Contrast": "Diminuir Contraste",
"Reset Contrast": "Redefinir Contraste",
"Increase Contrast": "Aumentar Contraste",
"Google Drive session expired. Reconnect in Settings.": "A sessão do Google Drive expirou. Ligue novamente em Definições.",
"Cloud sync session expired. Reconnect in Settings.": "A sessão de sincronização na nuvem expirou. Ligue novamente em Definições.",
"Push": "Empurrar",
"Slide": "Deslizar",
"Page Curl": "Curvatura da Página",
"Animation Style": "Estilo de Animação",
"Appearance": "Aparência",
"Sets the text size of dictionary results, independent of the reading view.": "Define o tamanho do texto dos resultados do dicionário, independente da vista de leitura.",
"Authentication failed. Reconnect in Settings.": "A autenticação falhou. Ligue novamente em Definições.",
"Full Sync": "Sincronização Completa",
"Re-check every book instead of only changed ones.": "Volta a verificar todos os livros, não apenas os alterados.",
"Waiting for sign-in…": "A aguardar o início de sessão…",
"Reconnect": "Ligar novamente",
"Connected as {{account}}": "Ligado como {{account}}",
". Make Google Drive the active cloud provider.": ". Torne o Google Drive o fornecedor de nuvem ativo.",
"Use Google Drive": "Usar o Google Drive",
"Sign-in opens in your browser.": "O início de sessão abre no seu navegador.",
"Readest only accesses the files it creates in your Drive.": "O Readest só acede aos ficheiros que cria no seu Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sincronize a sua biblioteca, o progresso de leitura e os destaques com um servidor WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sincronize a sua biblioteca, o progresso de leitura e os destaques com o seu Google Drive.",
"Configured": "Configurado",
"Third-party Cloud Sync": "Sincronização na Nuvem de Terceiros",
"Use WebDAV": "Usar WebDAV",
"Cloud Sync": "Sincronização na Nuvem",
"Available on Plus, Pro, or Lifetime": "Disponível com Plus, Pro ou Vitalício",
"Extra Large": "Extra Grande",
"Hint size": "Tamanho da dica",
"Gloss text size above the word": "Tamanho do texto da dica sobre a palavra",
"Hint color": "Cor da dica",
"Adjust Text Selection": "Ajustar Seleção de Texto",
"Your books will appear here": "Os seus livros aparecerão aqui",
"Reading aloud continues in the background": "A leitura em voz alta continua em segundo plano",
"Stopped reading aloud": "Leitura em voz alta interrompida",
"Read aloud stopped": "Leitura em voz alta interrompida"
}
@@ -1846,5 +1846,65 @@
"Find:": "Găsește:",
"Enable rule": "Activează regula",
"Disable rule": "Dezactivează regula",
"Progress Read": "Progresul citirii"
"Progress Read": "Progresul citirii",
"Auto-import new books from this folder": "Importă automat cărțile noi din acest folder",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Când se adaugă cărți noi în acest folder, acestea vor fi importate automat data viitoare când Readest se deschide sau revine în prim-plan.",
"Reading aloud": "Se citește cu voce tare",
"Open Book": "Deschide cartea",
"Stop reading aloud": "Oprește citirea cu voce tare",
"Enter at least two words": "Introduceți cel puțin două cuvinte",
"Search failed": "Căutarea a eșuat",
"Search with regex": "Căutați cu regex",
"Words to find near each other": "Cuvinte care apar aproape unele de altele",
"Contains": "Conține",
"Whole Words": "Cuvinte întregi",
"Regular Expression": "Expresie regulată",
"Nearby Words": "Cuvinte apropiate",
"Within N words": "La cel mult N cuvinte",
"Not for regex": "Indisponibil pentru regex",
"No results found": "Nu s-au găsit rezultate",
"{{count}} results_one": "{{count}} rezultat",
"{{count}} results_few": "{{count}} rezultate",
"{{count}} results_other": "{{count}} de rezultate",
"Failed to seek": "Derularea a eșuat",
"Chapter progress": "Progresul capitolului",
"{{elapsed}} of {{total}}": "{{elapsed}} din {{total}}",
"Decrease Contrast": "Micșorează contrastul",
"Reset Contrast": "Resetează contrastul",
"Increase Contrast": "Mărește contrastul",
"Google Drive session expired. Reconnect in Settings.": "Sesiunea Google Drive a expirat. Reconectează-te în Setări.",
"Cloud sync session expired. Reconnect in Settings.": "Sesiunea de sincronizare în cloud a expirat. Reconectează-te în Setări.",
"Push": "Împingere",
"Slide": "Glisare",
"Page Curl": "Răsfoire de pagină",
"Animation Style": "Stil de animație",
"Appearance": "Aspect",
"Sets the text size of dictionary results, independent of the reading view.": "Setează dimensiunea textului rezultatelor din dicționar, independent de vizualizarea de lectură.",
"Authentication failed. Reconnect in Settings.": "Autentificarea a eșuat. Reconectează-te în Setări.",
"Full Sync": "Sincronizare integrală",
"Re-check every book instead of only changed ones.": "Verifică din nou toate cărțile, nu doar pe cele modificate.",
"Waiting for sign-in…": "Se așteaptă conectarea…",
"Reconnect": "Reconectare",
"Connected as {{account}}": "Conectat ca {{account}}",
". Make Google Drive the active cloud provider.": ". Setează Google Drive ca furnizor de cloud activ.",
"Use Google Drive": "Folosește Google Drive",
"Sign-in opens in your browser.": "Conectarea se deschide în browser.",
"Readest only accesses the files it creates in your Drive.": "Readest accesează doar fișierele pe care le creează în Drive-ul tău.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sincronizează-ți biblioteca, progresul citirii și evidențierile cu un server WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sincronizează-ți biblioteca, progresul citirii și evidențierile cu Google Drive-ul tău.",
"Configured": "Configurat",
"Third-party Cloud Sync": "Sincronizare în cloud prin terți",
"Use WebDAV": "Folosește WebDAV",
"Cloud Sync": "Sincronizare în cloud",
"Available on Plus, Pro, or Lifetime": "Disponibil cu Plus, Pro sau Pe viață",
"Extra Large": "Foarte mare",
"Hint size": "Dimensiunea indiciului",
"Gloss text size above the word": "Dimensiunea textului afișat deasupra cuvântului",
"Hint color": "Culoarea indiciului",
"Adjust Text Selection": "Ajustează selecția de text",
"Your books will appear here": "Cărțile tale vor apărea aici",
"Reading aloud continues in the background": "Citirea cu voce tare continuă în fundal",
"Stopped reading aloud": "Citirea cu voce tare a fost oprită",
"Read aloud stopped": "Citirea cu voce tare a fost oprită"
}
@@ -1879,5 +1879,66 @@
"Find:": "Найти:",
"Enable rule": "Включить правило",
"Disable rule": "Отключить правило",
"Progress Read": "Прогресс чтения"
"Progress Read": "Прогресс чтения",
"Auto-import new books from this folder": "Автоматический импорт новых книг из этой папки",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Когда в эту папку добавляются новые книги, они будут автоматически импортированы при следующем запуске Readest или его возвращении на передний план.",
"Reading aloud": "Чтение вслух",
"Open Book": "Открыть книгу",
"Stop reading aloud": "Остановить чтение вслух",
"Enter at least two words": "Введите не менее двух слов",
"Search failed": "Не удалось выполнить поиск",
"Search with regex": "Поиск по регулярному выражению",
"Words to find near each other": "Слова, которые нужно найти рядом",
"Contains": "Содержит",
"Whole Words": "Целые слова",
"Regular Expression": "Регулярное выражение",
"Nearby Words": "Слова рядом",
"Within N words": "В пределах N слов",
"Not for regex": "Не для регулярных выражений",
"No results found": "Ничего не найдено",
"{{count}} results_one": "{{count}} результат",
"{{count}} results_few": "{{count}} результата",
"{{count}} results_many": "{{count}} результатов",
"{{count}} results_other": "{{count}} результата",
"Failed to seek": "Не удалось перемотать",
"Chapter progress": "Прогресс главы",
"{{elapsed}} of {{total}}": "{{elapsed}} из {{total}}",
"Decrease Contrast": "Уменьшить контраст",
"Reset Contrast": "Сбросить контраст",
"Increase Contrast": "Увеличить контраст",
"Google Drive session expired. Reconnect in Settings.": "Сессия Google Drive истекла. Переподключитесь в настройках.",
"Cloud sync session expired. Reconnect in Settings.": "Сессия облачной синхронизации истекла. Переподключитесь в настройках.",
"Push": "Сдвиг",
"Slide": "Скольжение",
"Page Curl": "Загиб страницы",
"Animation Style": "Стиль анимации",
"Appearance": "Внешний вид",
"Sets the text size of dictionary results, independent of the reading view.": "Задаёт размер текста результатов словаря независимо от области чтения.",
"Authentication failed. Reconnect in Settings.": "Ошибка аутентификации. Переподключитесь в настройках.",
"Full Sync": "Полная синхронизация",
"Re-check every book instead of only changed ones.": "Проверять все книги, а не только изменённые.",
"Waiting for sign-in…": "Ожидание входа…",
"Reconnect": "Переподключиться",
"Connected as {{account}}": "Подключено как {{account}}",
". Make Google Drive the active cloud provider.": ". Сделать Google Drive активным облачным провайдером.",
"Use Google Drive": "Использовать Google Drive",
"Sign-in opens in your browser.": "Вход откроется в вашем браузере.",
"Readest only accesses the files it creates in your Drive.": "Readest получает доступ только к тем файлам, которые сам создаёт на вашем Google Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Синхронизируйте свою библиотеку, прогресс чтения и выделения с сервером WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Синхронизируйте свою библиотеку, прогресс чтения и выделения с вашим Google Drive.",
"Configured": "Настроено",
"Third-party Cloud Sync": "Сторонняя облачная синхронизация",
"Use WebDAV": "Использовать WebDAV",
"Cloud Sync": "Облачная синхронизация",
"Available on Plus, Pro, or Lifetime": "Доступно в тарифах Plus, Pro или Lifetime",
"Extra Large": "Очень большой",
"Hint size": "Размер подсказки",
"Gloss text size above the word": "Размер текста подсказки над словом",
"Hint color": "Цвет подсказки",
"Adjust Text Selection": "Настройка выделения текста",
"Your books will appear here": "Здесь появятся ваши книги",
"Reading aloud continues in the background": "Чтение вслух продолжается в фоновом режиме",
"Stopped reading aloud": "Чтение вслух остановлено",
"Read aloud stopped": "Озвучивание остановлено"
}
@@ -1813,5 +1813,64 @@
"Find:": "සොයන්න:",
"Enable rule": "නියමය සක්‍රීය කරන්න",
"Disable rule": "නියමය අක්‍රීය කරන්න",
"Progress Read": "කියවීමේ ප්‍රගතිය"
"Progress Read": "කියවීමේ ප්‍රගතිය",
"Auto-import new books from this folder": "මෙම ෆෝල්ඩරයෙන් නව පොත් ස්වයංක්‍රීයව ආයාත කරන්න",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "මෙම ෆෝල්ඩරයට නව පොත් එකතු වූ විට, ඊළඟ වතාවේ Readest විවෘත වන විට හෝ ඉදිරිපසට නැවත පැමිණෙන විට ඒවා ස්වයංක්‍රීයව ආයාත කෙරේ.",
"Reading aloud": "පවසා කියවමින්",
"Open Book": "පොත විවෘත කරන්න",
"Stop reading aloud": "පවසා කියවීම නවත්වන්න",
"Enter at least two words": "අවම වශයෙන් වචන දෙකක් ඇතුළත් කරන්න",
"Search failed": "සෙවීම අසාර්ථක විය",
"Search with regex": "regex සමඟ සොයන්න",
"Words to find near each other": "එකිනෙකට ආසන්නව සෙවීමට වචන",
"Contains": "අඩංගු වේ",
"Whole Words": "සම්පූර්ණ වචන",
"Regular Expression": "Regular Expression",
"Nearby Words": "ආසන්න වචන",
"Within N words": "වචන N ක් තුළ",
"Not for regex": "regex සඳහා නොවේ",
"No results found": "ප්‍රතිඵල හමු නොවීය",
"{{count}} results_one": "ප්‍රතිඵල {{count}}ක්",
"{{count}} results_other": "ප්‍රතිඵල {{count}}ක්",
"Failed to seek": "ස්ථානය වෙනස් කිරීමට නොහැකි විය",
"Chapter progress": "පරිච්ඡේද ප්‍රගතිය",
"{{elapsed}} of {{total}}": "{{total}} න් {{elapsed}}",
"Decrease Contrast": "පරස්පරය අඩු කරන්න",
"Reset Contrast": "පරස්පරය යළි සකසන්න",
"Increase Contrast": "පරස්පරය වැඩි කරන්න",
"Google Drive session expired. Reconnect in Settings.": "Google Drive සැසිය කල් ඉකුත් වී ඇත. සැකසුම් තුළ නැවත සම්බන්ධ වන්න.",
"Cloud sync session expired. Reconnect in Settings.": "Cloud සමමුහුර්ත සැසිය කල් ඉකුත් වී ඇත. සැකසුම් තුළ නැවත සම්බන්ධ වන්න.",
"Push": "තල්ලුව",
"Slide": "ලිස්සීම",
"Page Curl": "පිටු නැමීම",
"Animation Style": "සජීවිකරණ විලාසය",
"Appearance": "පෙනුම",
"Sets the text size of dictionary results, independent of the reading view.": "කියවීමේ දසුනෙන් ස්වාධීනව ශබ්දකෝෂ ප්‍රතිඵලවල අකුරු ප්‍රමාණය සකසයි.",
"Authentication failed. Reconnect in Settings.": "සත්‍යාපනය අසාර්ථක විය. සැකසුම් තුළ නැවත සම්බන්ධ වන්න.",
"Full Sync": "සම්පූර්ණ සමමුහුර්තය",
"Re-check every book instead of only changed ones.": "වෙනස් වූ පොත් පමණක් නොව සෑම පොතක්ම නැවත පරීක්ෂා කරන්න.",
"Waiting for sign-in…": "ඇතුල් වීම සඳහා රැඳී සිටිමින්…",
"Reconnect": "නැවත සම්බන්ධ වන්න",
"Connected as {{account}}": "{{account}} ලෙස සම්බන්ධ වී ඇත",
". Make Google Drive the active cloud provider.": ". Google Drive සක්‍රිය cloud සපයන්නා ලෙස සකසන්න.",
"Use Google Drive": "Google Drive භාවිතා කරන්න",
"Sign-in opens in your browser.": "ඇතුල් වීම ඔබේ බ්‍රව්සරයේ විවෘත වේ.",
"Readest only accesses the files it creates in your Drive.": "Readest ප්‍රවේශ වන්නේ ඔබේ Drive හි එය සාදන ගොනුවලට පමණි.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "ඔබේ පුස්තකාලය, කියවීමේ ප්‍රගතිය සහ ඉස්මතු කිරීම් WebDAV සේවාදායකයක් සමඟ සමමුහුර්ත කරන්න.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "ඔබේ පුස්තකාලය, කියවීමේ ප්‍රගතිය සහ ඉස්මතු කිරීම් ඔබේ Google Drive සමඟ සමමුහුර්ත කරන්න.",
"Configured": "වින්‍යාස කර ඇත",
"Third-party Cloud Sync": "තෙවන පාර්ශ්ව cloud සමමුහුර්තය",
"Use WebDAV": "WebDAV භාවිතා කරන්න",
"Cloud Sync": "Cloud සමමුහුර්තය",
"Available on Plus, Pro, or Lifetime": "Plus, Pro හෝ Lifetime හි ලබා ගත හැක",
"Extra Large": "ඉතා විශාල",
"Hint size": "ඉඟි ප්‍රමාණය",
"Gloss text size above the word": "වචනයට ඉහළින් ඇති ඉඟි අකුරු ප්‍රමාණය",
"Hint color": "ඉඟි වර්ණය",
"Adjust Text Selection": "පෙළ තේරීම ගලපන්න",
"Your books will appear here": "ඔබේ පොත් මෙහි දිස්වනු ඇත",
"Reading aloud continues in the background": "පවසා කියවීම පසුබිමේ දිගටම සිදු වේ",
"Stopped reading aloud": "පවසා කියවීම නවත්වන ලදී",
"Read aloud stopped": "පවසා කියවීම නතර විය"
}
@@ -1879,5 +1879,66 @@
"Find:": "Najdi:",
"Enable rule": "Omogoči pravilo",
"Disable rule": "Onemogoči pravilo",
"Progress Read": "Napredek branja"
"Progress Read": "Napredek branja",
"Auto-import new books from this folder": "Samodejni uvoz novih knjig iz te mape",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Ko so v to mapo dodane nove knjige, bodo samodejno uvožene, ko se Readest naslednjič odpre ali vrne v ospredje.",
"Reading aloud": "Branje na glas",
"Open Book": "Odpri knjigo",
"Stop reading aloud": "Ustavi branje na glas",
"Enter at least two words": "Vnesite vsaj dve besedi",
"Search failed": "Iskanje ni uspelo",
"Search with regex": "Iskanje z regularnim izrazom",
"Words to find near each other": "Besede, ki naj bodo blizu skupaj",
"Contains": "Vsebuje",
"Whole Words": "Cele besede",
"Regular Expression": "Regularni izraz",
"Nearby Words": "Bližnje besede",
"Within N words": "Znotraj N besed",
"Not for regex": "Ne velja za regularne izraze",
"No results found": "Ni najdenih rezultatov",
"{{count}} results_one": "{{count}} rezultat",
"{{count}} results_two": "{{count}} rezultata",
"{{count}} results_few": "{{count}} rezultati",
"{{count}} results_other": "{{count}} rezultatov",
"Failed to seek": "Premik ni uspel",
"Chapter progress": "Napredek poglavja",
"{{elapsed}} of {{total}}": "{{elapsed}} od {{total}}",
"Decrease Contrast": "Zmanjšaj kontrast",
"Reset Contrast": "Ponastavi kontrast",
"Increase Contrast": "Povečaj kontrast",
"Google Drive session expired. Reconnect in Settings.": "Seja Google Drive je potekla. Znova se povežite v Nastavitvah.",
"Cloud sync session expired. Reconnect in Settings.": "Seja sinhronizacije v oblaku je potekla. Znova se povežite v Nastavitvah.",
"Push": "Potisk",
"Slide": "Drsenje",
"Page Curl": "Zvijanje strani",
"Animation Style": "Slog animacije",
"Appearance": "Videz",
"Sets the text size of dictionary results, independent of the reading view.": "Nastavi velikost besedila rezultatov slovarja, neodvisno od pogleda branja.",
"Authentication failed. Reconnect in Settings.": "Preverjanje pristnosti ni uspelo. Znova se povežite v Nastavitvah.",
"Full Sync": "Polna sinhronizacija",
"Re-check every book instead of only changed ones.": "Znova preveri vse knjige, ne le spremenjenih.",
"Waiting for sign-in…": "Čakanje na prijavo…",
"Reconnect": "Znova poveži",
"Connected as {{account}}": "Povezano kot {{account}}",
". Make Google Drive the active cloud provider.": ". Nastavite Google Drive kot aktivnega ponudnika oblaka.",
"Use Google Drive": "Uporabi Google Drive",
"Sign-in opens in your browser.": "Prijava se odpre v vašem brskalniku.",
"Readest only accesses the files it creates in your Drive.": "Readest dostopa le do datotek, ki jih sam ustvari v vašem Google Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Sinhronizirajte knjižnico, napredek branja in označbe s strežnikom WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Sinhronizirajte knjižnico, napredek branja in označbe s svojim Google Drive.",
"Configured": "Nastavljeno",
"Third-party Cloud Sync": "Zunanja sinhronizacija v oblaku",
"Use WebDAV": "Uporabi WebDAV",
"Cloud Sync": "Sinhronizacija v oblaku",
"Available on Plus, Pro, or Lifetime": "Na voljo v paketih Plus, Pro ali Lifetime",
"Extra Large": "Zelo veliko",
"Hint size": "Velikost namiga",
"Gloss text size above the word": "Velikost besedila namiga nad besedo",
"Hint color": "Barva namiga",
"Adjust Text Selection": "Prilagodi izbiro besedila",
"Your books will appear here": "Tukaj se bodo prikazale vaše knjige",
"Reading aloud continues in the background": "Branje na glas se nadaljuje v ozadju",
"Stopped reading aloud": "Branje na glas ustavljeno",
"Read aloud stopped": "Branje na glas se je ustavilo"
}
@@ -1813,5 +1813,64 @@
"Find:": "Sök:",
"Enable rule": "Aktivera regel",
"Disable rule": "Inaktivera regel",
"Progress Read": "Läsframsteg"
"Progress Read": "Läsframsteg",
"Auto-import new books from this folder": "Importera nya böcker från den här mappen automatiskt",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "När nya böcker läggs till i den här mappen importeras de automatiskt nästa gång Readest öppnas eller återgår till förgrunden.",
"Reading aloud": "Läser upp",
"Open Book": "Öppna bok",
"Stop reading aloud": "Sluta läsa upp",
"Enter at least two words": "Ange minst två ord",
"Search failed": "Sökningen misslyckades",
"Search with regex": "Sök med regex",
"Words to find near each other": "Ord som ska hittas nära varandra",
"Contains": "Innehåller",
"Whole Words": "Hela ord",
"Regular Expression": "Reguljärt uttryck",
"Nearby Words": "Närliggande ord",
"Within N words": "Inom N ord",
"Not for regex": "Inte för regex",
"No results found": "Inga resultat hittades",
"{{count}} results_one": "{{count}} resultat",
"{{count}} results_other": "{{count}} resultat",
"Failed to seek": "Kunde inte spola",
"Chapter progress": "Kapitelframsteg",
"{{elapsed}} of {{total}}": "{{elapsed}} av {{total}}",
"Decrease Contrast": "Minska kontrast",
"Reset Contrast": "Återställ kontrast",
"Increase Contrast": "Öka kontrast",
"Google Drive session expired. Reconnect in Settings.": "Google Drive-sessionen har gått ut. Anslut igen i Inställningar.",
"Cloud sync session expired. Reconnect in Settings.": "Molnsynksessionen har gått ut. Anslut igen i Inställningar.",
"Push": "Skjut",
"Slide": "Glid",
"Page Curl": "Bläddring",
"Animation Style": "Animationsstil",
"Appearance": "Utseende",
"Sets the text size of dictionary results, independent of the reading view.": "Ställer in textstorleken för ordboksresultat, oberoende av läsvyn.",
"Authentication failed. Reconnect in Settings.": "Autentiseringen misslyckades. Anslut igen i Inställningar.",
"Full Sync": "Fullständig synk",
"Re-check every book instead of only changed ones.": "Kontrollera alla böcker igen i stället för bara ändrade.",
"Waiting for sign-in…": "Väntar på inloggning…",
"Reconnect": "Anslut igen",
"Connected as {{account}}": "Ansluten som {{account}}",
". Make Google Drive the active cloud provider.": ". Gör Google Drive till aktiv molnleverantör.",
"Use Google Drive": "Använd Google Drive",
"Sign-in opens in your browser.": "Inloggningen öppnas i din webbläsare.",
"Readest only accesses the files it creates in your Drive.": "Readest kommer bara åt de filer som appen skapar i din Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Synka ditt bibliotek, dina läsframsteg och markeringar med en WebDAV-server.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Synka ditt bibliotek, dina läsframsteg och markeringar med din Google Drive.",
"Configured": "Konfigurerad",
"Third-party Cloud Sync": "Tredjeparts molnsynk",
"Use WebDAV": "Använd WebDAV",
"Cloud Sync": "Molnsynk",
"Available on Plus, Pro, or Lifetime": "Tillgänglig med Plus, Pro eller Lifetime",
"Extra Large": "Extra stor",
"Hint size": "Hintstorlek",
"Gloss text size above the word": "Textstorlek för hinten ovanför ordet",
"Hint color": "Hintfärg",
"Adjust Text Selection": "Justera textmarkering",
"Your books will appear here": "Dina böcker visas här",
"Reading aloud continues in the background": "Uppläsningen fortsätter i bakgrunden",
"Stopped reading aloud": "Uppläsningen stoppades",
"Read aloud stopped": "Uppläsning stoppad"
}
@@ -1813,5 +1813,64 @@
"Find:": "தேடு:",
"Enable rule": "விதியை இயக்கு",
"Disable rule": "விதியை முடக்கு",
"Progress Read": "வாசிப்பு முன்னேற்றம்"
"Progress Read": "வாசிப்பு முன்னேற்றம்",
"Auto-import new books from this folder": "இந்த கோப்புறையிலிருந்து புதிய புத்தகங்களை தானாக இறக்குமதி செய்யவும்",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "இந்த கோப்புறையில் புதிய புத்தகங்கள் சேர்க்கப்படும்போது, அடுத்த முறை Readest திறக்கும்போது அல்லது முன்னணிக்குத் திரும்பும்போது அவை தானாக இறக்குமதி செய்யப்படும்.",
"Reading aloud": "உரை வாசிக்கப்படுகிறது",
"Open Book": "புத்தகத்தைத் திற",
"Stop reading aloud": "உரை வாசிப்பை நிறுத்து",
"Enter at least two words": "குறைந்தது இரண்டு வார்த்தைகளை உள்ளிடவும்",
"Search failed": "தேடல் தோல்வியடைந்தது",
"Search with regex": "regex மூலம் தேடவும்",
"Words to find near each other": "ஒன்றுக்கொன்று அருகில் தேட வேண்டிய வார்த்தைகள்",
"Contains": "உள்ளடக்கியது",
"Whole Words": "முழு வார்த்தைகள்",
"Regular Expression": "Regular Expression",
"Nearby Words": "அருகிலுள்ள வார்த்தைகள்",
"Within N words": "N வார்த்தைகளுக்குள்",
"Not for regex": "regex க்கு பொருந்தாது",
"No results found": "முடிவுகள் எதுவும் கிடைக்கவில்லை",
"{{count}} results_one": "{{count}} முடிவு",
"{{count}} results_other": "{{count}} முடிவுகள்",
"Failed to seek": "நகர்த்த முடியவில்லை",
"Chapter progress": "அத்தியாய முன்னேற்றம்",
"{{elapsed}} of {{total}}": "{{total}} இல் {{elapsed}}",
"Decrease Contrast": "மாறுபாட்டைக் குறை",
"Reset Contrast": "மாறுபாட்டை மீட்டமை",
"Increase Contrast": "மாறுபாட்டை அதிகரி",
"Google Drive session expired. Reconnect in Settings.": "Google Drive அமர்வு காலாவதியானது. அமைப்புகளில் மீண்டும் இணைக்கவும்.",
"Cloud sync session expired. Reconnect in Settings.": "Cloud ஒத்திசைவு அமர்வு காலாவதியானது. அமைப்புகளில் மீண்டும் இணைக்கவும்.",
"Push": "தள்ளல்",
"Slide": "சறுக்கல்",
"Page Curl": "பக்கச் சுருட்டல்",
"Animation Style": "அனிமேஷன் பாணி",
"Appearance": "தோற்றம்",
"Sets the text size of dictionary results, independent of the reading view.": "வாசிப்புக் காட்சியைச் சாராமல், அகராதி முடிவுகளின் உரை அளவை அமைக்கிறது.",
"Authentication failed. Reconnect in Settings.": "அங்கீகாரம் தோல்வியடைந்தது. அமைப்புகளில் மீண்டும் இணைக்கவும்.",
"Full Sync": "முழு ஒத்திசைவு",
"Re-check every book instead of only changed ones.": "மாற்றப்பட்ட புத்தகங்களை மட்டும் அல்லாமல் ஒவ்வொரு புத்தகத்தையும் மீண்டும் சரிபார்க்கவும்.",
"Waiting for sign-in…": "உள்நுழைவுக்காகக் காத்திருக்கிறது…",
"Reconnect": "மீண்டும் இணைக்கவும்",
"Connected as {{account}}": "{{account}} ஆக இணைக்கப்பட்டுள்ளது",
". Make Google Drive the active cloud provider.": ". Google Drive ஐ செயலில் உள்ள cloud வழங்குநராக அமைக்கவும்.",
"Use Google Drive": "Google Drive ஐப் பயன்படுத்தவும்",
"Sign-in opens in your browser.": "உள்நுழைவு உங்கள் உலாவியில் திறக்கும்.",
"Readest only accesses the files it creates in your Drive.": "Readest உங்கள் Drive இல் தானே உருவாக்கும் கோப்புகளை மட்டுமே அணுகும்.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "உங்கள் நூலகம், வாசிப்பு முன்னேற்றம் மற்றும் சிறப்பம்சங்களை ஒரு WebDAV சேவையகத்துடன் ஒத்திசைக்கவும்.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "உங்கள் நூலகம், வாசிப்பு முன்னேற்றம் மற்றும் சிறப்பம்சங்களை உங்கள் Google Drive உடன் ஒத்திசைக்கவும்.",
"Configured": "கட்டமைக்கப்பட்டது",
"Third-party Cloud Sync": "மூன்றாம் தரப்பு cloud ஒத்திசைவு",
"Use WebDAV": "WebDAV ஐப் பயன்படுத்தவும்",
"Cloud Sync": "Cloud ஒத்திசைவு",
"Available on Plus, Pro, or Lifetime": "Plus, Pro அல்லது Lifetime இல் கிடைக்கும்",
"Extra Large": "மிகப் பெரிய",
"Hint size": "குறிப்பு அளவு",
"Gloss text size above the word": "வார்த்தைக்கு மேலே உள்ள குறிப்பு உரையின் அளவு",
"Hint color": "குறிப்பு நிறம்",
"Adjust Text Selection": "உரை தேர்வை சரிசெய்யவும்",
"Your books will appear here": "உங்கள் புத்தகங்கள் இங்கே தோன்றும்",
"Reading aloud continues in the background": "உரை வாசிப்பு பின்னணியில் தொடர்கிறது",
"Stopped reading aloud": "உரை வாசிப்பு நிறுத்தப்பட்டது",
"Read aloud stopped": "உரை வாசிப்பு நின்றது"
}
@@ -1780,5 +1780,63 @@
"Find:": "ค้นหา:",
"Enable rule": "เปิดใช้กฎ",
"Disable rule": "ปิดใช้กฎ",
"Progress Read": "ความคืบหน้าในการอ่าน"
"Progress Read": "ความคืบหน้าในการอ่าน",
"Auto-import new books from this folder": "นำเข้าหนังสือใหม่จากโฟลเดอร์นี้โดยอัตโนมัติ",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "เมื่อมีหนังสือใหม่ถูกเพิ่มลงในโฟลเดอร์นี้ ระบบจะนำเข้าให้โดยอัตโนมัติเมื่อ Readest เปิดขึ้นหรือกลับมาทำงานในครั้งถัดไป",
"Reading aloud": "กำลังอ่านออกเสียง",
"Open Book": "เปิดหนังสือ",
"Stop reading aloud": "หยุดอ่านออกเสียง",
"Enter at least two words": "ป้อนอย่างน้อยสองคำ",
"Search failed": "การค้นหาล้มเหลว",
"Search with regex": "ค้นหาด้วยนิพจน์ปกติ",
"Words to find near each other": "คำที่ต้องการค้นหาให้อยู่ใกล้กัน",
"Contains": "ประกอบด้วย",
"Whole Words": "ทั้งคำ",
"Regular Expression": "นิพจน์ปกติ",
"Nearby Words": "คำที่อยู่ใกล้กัน",
"Within N words": "ภายใน N คำ",
"Not for regex": "ไม่ใช้กับนิพจน์ปกติ",
"No results found": "ไม่พบผลลัพธ์",
"{{count}} results_other": "ผลลัพธ์ {{count}} รายการ",
"Failed to seek": "ไม่สามารถเลื่อนตำแหน่งเล่นได้",
"Chapter progress": "ความคืบหน้าของบท",
"{{elapsed}} of {{total}}": "{{elapsed}} จาก {{total}}",
"Decrease Contrast": "ลดความคมชัด",
"Reset Contrast": "รีเซ็ตความคมชัด",
"Increase Contrast": "เพิ่มความคมชัด",
"Google Drive session expired. Reconnect in Settings.": "เซสชัน Google Drive หมดอายุ เชื่อมต่อใหม่ในการตั้งค่า",
"Cloud sync session expired. Reconnect in Settings.": "เซสชันซิงค์คลาวด์หมดอายุ เชื่อมต่อใหม่ในการตั้งค่า",
"Push": "ดัน",
"Slide": "สไลด์",
"Page Curl": "ม้วนกระดาษ",
"Animation Style": "รูปแบบภาพเคลื่อนไหว",
"Appearance": "รูปลักษณ์",
"Sets the text size of dictionary results, independent of the reading view.": "กำหนดขนาดตัวอักษรของผลลัพธ์พจนานุกรม โดยไม่ขึ้นกับมุมมองการอ่าน",
"Authentication failed. Reconnect in Settings.": "การยืนยันตัวตนล้มเหลว เชื่อมต่อใหม่ในการตั้งค่า",
"Full Sync": "ซิงค์แบบเต็ม",
"Re-check every book instead of only changed ones.": "ตรวจสอบหนังสือทุกเล่มอีกครั้งแทนที่จะตรวจเฉพาะเล่มที่เปลี่ยนแปลง",
"Waiting for sign-in…": "กำลังรอการเข้าสู่ระบบ…",
"Reconnect": "เชื่อมต่อใหม่",
"Connected as {{account}}": "เชื่อมต่อในชื่อ {{account}}",
". Make Google Drive the active cloud provider.": ". ตั้งให้ Google Drive เป็นผู้ให้บริการคลาวด์ที่ใช้งานอยู่",
"Use Google Drive": "ใช้ Google Drive",
"Sign-in opens in your browser.": "การเข้าสู่ระบบจะเปิดในเบราว์เซอร์ของคุณ",
"Readest only accesses the files it creates in your Drive.": "Readest จะเข้าถึงเฉพาะไฟล์ที่สร้างขึ้นเองใน Drive ของคุณเท่านั้น",
"Sync your library, reading progress, and highlights with a WebDAV server.": "ซิงค์คลังหนังสือ ความคืบหน้าการอ่าน และไฮไลต์ของคุณกับเซิร์ฟเวอร์ WebDAV",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "ซิงค์คลังหนังสือ ความคืบหน้าการอ่าน และไฮไลต์ของคุณกับ Google Drive ของคุณ",
"Configured": "กำหนดค่าแล้ว",
"Third-party Cloud Sync": "ซิงค์คลาวด์ของบุคคลที่สาม",
"Use WebDAV": "ใช้ WebDAV",
"Cloud Sync": "ซิงค์คลาวด์",
"Available on Plus, Pro, or Lifetime": "ใช้ได้ในแผน Plus, Pro หรือตลอดชีพ",
"Extra Large": "ใหญ่พิเศษ",
"Hint size": "ขนาดคำใบ้",
"Gloss text size above the word": "ขนาดข้อความคำใบ้ที่แสดงเหนือคำศัพท์",
"Hint color": "สีคำใบ้",
"Adjust Text Selection": "ปรับการเลือกข้อความ",
"Your books will appear here": "หนังสือของคุณจะแสดงที่นี่",
"Reading aloud continues in the background": "การอ่านออกเสียงดำเนินต่อในเบื้องหลัง",
"Stopped reading aloud": "หยุดอ่านออกเสียงแล้ว",
"Read aloud stopped": "การอ่านออกเสียงหยุดแล้ว"
}
@@ -1813,5 +1813,64 @@
"Find:": "Bul:",
"Enable rule": "Kuralı etkinleştir",
"Disable rule": "Kuralı devre dışı bırak",
"Progress Read": "Okuma İlerlemesi"
"Progress Read": "Okuma İlerlemesi",
"Auto-import new books from this folder": "Bu klasördeki yeni kitapları otomatik olarak içe aktar",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Bu klasöre yeni kitaplar eklendiğinde, Readest bir sonraki açılışında veya ön plana döndüğünde bunları otomatik olarak içe aktarır.",
"Reading aloud": "Sesli okuma",
"Open Book": "Kitabı Aç",
"Stop reading aloud": "Sesli okumayı durdur",
"Enter at least two words": "En az iki kelime girin",
"Search failed": "Arama başarısız oldu",
"Search with regex": "Regex ile ara",
"Words to find near each other": "Birbirine yakın aranacak kelimeler",
"Contains": "İçerir",
"Whole Words": "Tam Kelimeler",
"Regular Expression": "Düzenli İfade",
"Nearby Words": "Yakın Kelimeler",
"Within N words": "N kelime içinde",
"Not for regex": "Regex için geçerli değil",
"No results found": "Sonuç bulunamadı",
"{{count}} results_one": "{{count}} sonuç",
"{{count}} results_other": "{{count}} sonuç",
"Failed to seek": "Atlama başarısız oldu",
"Chapter progress": "Bölüm ilerlemesi",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "Kontrastı Azalt",
"Reset Contrast": "Kontrastı Sıfırla",
"Increase Contrast": "Kontrastı Artır",
"Google Drive session expired. Reconnect in Settings.": "Google Drive oturumu sona erdi. Ayarlar'dan yeniden bağlanın.",
"Cloud sync session expired. Reconnect in Settings.": "Bulut senkronizasyonu oturumu sona erdi. Ayarlar'dan yeniden bağlanın.",
"Push": "İtme",
"Slide": "Kaydırma",
"Page Curl": "Sayfa Kıvırma",
"Animation Style": "Animasyon Stili",
"Appearance": "Görünüm",
"Sets the text size of dictionary results, independent of the reading view.": "Sözlük sonuçlarının metin boyutunu okuma görünümünden bağımsız olarak ayarlar.",
"Authentication failed. Reconnect in Settings.": "Kimlik doğrulama başarısız oldu. Ayarlar'dan yeniden bağlanın.",
"Full Sync": "Tam Senkronizasyon",
"Re-check every book instead of only changed ones.": "Yalnızca değişen kitapları değil, tüm kitapları yeniden kontrol eder.",
"Waiting for sign-in…": "Giriş bekleniyor…",
"Reconnect": "Yeniden Bağlan",
"Connected as {{account}}": "{{account}} olarak bağlanıldı",
". Make Google Drive the active cloud provider.": ". Google Drive'ı etkin bulut sağlayıcısı yapın.",
"Use Google Drive": "Google Drive Kullan",
"Sign-in opens in your browser.": "Giriş tarayıcınızda açılır.",
"Readest only accesses the files it creates in your Drive.": "Readest yalnızca Drive'ınızda kendi oluşturduğu dosyalara erişir.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Kütüphanenizi, okuma ilerlemenizi ve vurgularınızı bir WebDAV sunucusuyla senkronize edin.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Kütüphanenizi, okuma ilerlemenizi ve vurgularınızı Google Drive'ınızla senkronize edin.",
"Configured": "Yapılandırıldı",
"Third-party Cloud Sync": "Üçüncü Taraf Bulut Senkronizasyonu",
"Use WebDAV": "WebDAV Kullan",
"Cloud Sync": "Bulut Senkronizasyonu",
"Available on Plus, Pro, or Lifetime": "Plus, Pro veya Lifetime planlarında kullanılabilir",
"Extra Large": "Çok Büyük",
"Hint size": "İpucu boyutu",
"Gloss text size above the word": "Kelimenin üzerindeki açıklama metninin boyutu",
"Hint color": "İpucu rengi",
"Adjust Text Selection": "Metin Seçimini Ayarla",
"Your books will appear here": "Kitaplarınız burada görünecek",
"Reading aloud continues in the background": "Sesli okuma arka planda devam ediyor",
"Stopped reading aloud": "Sesli okuma durduruldu",
"Read aloud stopped": "Sesli okuma durdu"
}
@@ -1879,5 +1879,66 @@
"Find:": "Знайти:",
"Enable rule": "Увімкнути правило",
"Disable rule": "Вимкнути правило",
"Progress Read": "Проґрес читання"
"Progress Read": "Проґрес читання",
"Auto-import new books from this folder": "Автоматично імпортувати нові книги з цієї папки",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Коли до цієї папки додаються нові книги, вони будуть автоматично імпортовані під час наступного запуску Readest або його повернення на передній план.",
"Reading aloud": "Читання вголос",
"Open Book": "Відкрити книгу",
"Stop reading aloud": "Зупинити читання вголос",
"Enter at least two words": "Введіть щонайменше два слова",
"Search failed": "Не вдалося виконати пошук",
"Search with regex": "Пошук за регулярним виразом",
"Words to find near each other": "Слова, які потрібно знайти поруч",
"Contains": "Містить",
"Whole Words": "Цілі слова",
"Regular Expression": "Регулярний вираз",
"Nearby Words": "Слова поруч",
"Within N words": "У межах N слів",
"Not for regex": "Не для регулярних виразів",
"No results found": "Нічого не знайдено",
"{{count}} results_one": "{{count}} результат",
"{{count}} results_few": "{{count}} результати",
"{{count}} results_many": "{{count}} результатів",
"{{count}} results_other": "{{count}} результата",
"Failed to seek": "Не вдалося перемотати",
"Chapter progress": "Проґрес розділу",
"{{elapsed}} of {{total}}": "{{elapsed}} з {{total}}",
"Decrease Contrast": "Зменшити контраст",
"Reset Contrast": "Скинути контраст",
"Increase Contrast": "Збільшити контраст",
"Google Drive session expired. Reconnect in Settings.": "Сеанс Google Drive завершився. Повторно під'єднайтеся в налаштуваннях.",
"Cloud sync session expired. Reconnect in Settings.": "Сеанс хмарної синхронізації завершився. Повторно під'єднайтеся в налаштуваннях.",
"Push": "Зсув",
"Slide": "Ковзання",
"Page Curl": "Загин сторінки",
"Animation Style": "Стиль анімації",
"Appearance": "Зовнішній вигляд",
"Sets the text size of dictionary results, independent of the reading view.": "Визначає розмір тексту результатів словника незалежно від області читання.",
"Authentication failed. Reconnect in Settings.": "Помилка автентифікації. Повторно під'єднайтеся в налаштуваннях.",
"Full Sync": "Повна синхронізація",
"Re-check every book instead of only changed ones.": "Перевіряти всі книги, а не лише змінені.",
"Waiting for sign-in…": "Очікування входу…",
"Reconnect": "Під'єднатися повторно",
"Connected as {{account}}": "Під'єднано як {{account}}",
". Make Google Drive the active cloud provider.": ". Зробити Google Drive активним хмарним провайдером.",
"Use Google Drive": "Використовувати Google Drive",
"Sign-in opens in your browser.": "Вхід відкриється у вашому браузері.",
"Readest only accesses the files it creates in your Drive.": "Readest має доступ лише до файлів, які сам створює у вашому Google Drive.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Синхронізуйте свою бібліотеку, проґрес читання та виділення із сервером WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Синхронізуйте свою бібліотеку, проґрес читання та виділення з вашим Google Drive.",
"Configured": "Налаштовано",
"Third-party Cloud Sync": "Стороння хмарна синхронізація",
"Use WebDAV": "Використовувати WebDAV",
"Cloud Sync": "Хмарна синхронізація",
"Available on Plus, Pro, or Lifetime": "Доступно в планах Plus, Pro або Lifetime",
"Extra Large": "Дуже великий",
"Hint size": "Розмір підказки",
"Gloss text size above the word": "Розмір тексту підказки над словом",
"Hint color": "Колір підказки",
"Adjust Text Selection": "Коригування виділення тексту",
"Your books will appear here": "Тут з'являться ваші книги",
"Reading aloud continues in the background": "Читання вголос триває у фоновому режимі",
"Stopped reading aloud": "Читання вголос зупинено",
"Read aloud stopped": "Озвучування зупинено"
}
@@ -1813,5 +1813,64 @@
"Find:": "Topish:",
"Enable rule": "Qoidani yoqish",
"Disable rule": "Qoidani ochirish",
"Progress Read": "Oʻqish jarayoni"
"Progress Read": "Oʻqish jarayoni",
"Auto-import new books from this folder": "Bu papkadan yangi kitoblarni avtomatik import qilish",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Bu papkaga yangi kitoblar qoʻshilganda, Readest keyingi safar ochilganda yoki qayta faollashganda ular avtomatik import qilinadi.",
"Reading aloud": "Ovoz chiqarib oʻqilmoqda",
"Open Book": "Kitobni ochish",
"Stop reading aloud": "Ovoz chiqarib oʻqishni toʻxtatish",
"Enter at least two words": "Kamida ikkita soʻz kiriting",
"Search failed": "Qidirib boʻlmadi",
"Search with regex": "Regex bilan qidirish",
"Words to find near each other": "Bir-biriga yaqin qidiriladigan soʻzlar",
"Contains": "Oʻz ichiga oladi",
"Whole Words": "Butun soʻzlar",
"Regular Expression": "Regulyar ifoda",
"Nearby Words": "Yaqin soʻzlar",
"Within N words": "N soʻz ichida",
"Not for regex": "Regex uchun emas",
"No results found": "Natijalar topilmadi",
"{{count}} results_one": "{{count}} ta natija",
"{{count}} results_other": "{{count}} ta natija",
"Failed to seek": "Kerakli joyga oʻtib boʻlmadi",
"Chapter progress": "Bob jarayoni",
"{{elapsed}} of {{total}}": "{{total}} dan {{elapsed}}",
"Decrease Contrast": "Kontrastni kamaytirish",
"Reset Contrast": "Kontrastni tiklash",
"Increase Contrast": "Kontrastni oshirish",
"Google Drive session expired. Reconnect in Settings.": "Google Drive seansi muddati tugadi. Sozlamalardan qayta ulaning.",
"Cloud sync session expired. Reconnect in Settings.": "Bulutli sinxronlash seansi muddati tugadi. Sozlamalardan qayta ulaning.",
"Push": "Itarish",
"Slide": "Sirpanish",
"Page Curl": "Varaqlash",
"Animation Style": "Animatsiya uslubi",
"Appearance": "Koʻrinish",
"Sets the text size of dictionary results, independent of the reading view.": "Lugʻat natijalari matn oʻlchamini oʻqish koʻrinishidan mustaqil belgilaydi.",
"Authentication failed. Reconnect in Settings.": "Autentifikatsiya muvaffaqiyatsiz. Sozlamalardan qayta ulaning.",
"Full Sync": "Toʻliq sinxronlash",
"Re-check every book instead of only changed ones.": "Faqat oʻzgargan kitoblar emas, barcha kitoblarni qayta tekshirish.",
"Waiting for sign-in…": "Kirish kutilmoqda…",
"Reconnect": "Qayta ulanish",
"Connected as {{account}}": "{{account}} sifatida ulangan",
". Make Google Drive the active cloud provider.": ". Google Drive-ni faol bulut provayderi qiling.",
"Use Google Drive": "Google Drive-dan foydalanish",
"Sign-in opens in your browser.": "Kirish brauzeringizda ochiladi.",
"Readest only accesses the files it creates in your Drive.": "Readest Drive-ingizda faqat oʻzi yaratgan fayllarga kiradi.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Kutubxonangiz, oʻqish jarayoni va belgilashlaringizni WebDAV serveri bilan sinxronlang.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Kutubxonangiz, oʻqish jarayoni va belgilashlaringizni Google Drive bilan sinxronlang.",
"Configured": "Sozlangan",
"Third-party Cloud Sync": "Uchinchi tomon bulutli sinxronlash",
"Use WebDAV": "WebDAV-dan foydalanish",
"Cloud Sync": "Bulutli sinxronlash",
"Available on Plus, Pro, or Lifetime": "Plus, Pro yoki Umrbod rejalarida mavjud",
"Extra Large": "Juda katta",
"Hint size": "Izoh oʻlchami",
"Gloss text size above the word": "Soʻz ustida koʻrsatiladigan izoh matni oʻlchami",
"Hint color": "Izoh rangi",
"Adjust Text Selection": "Matn tanlovini sozlash",
"Your books will appear here": "Kitoblaringiz shu yerda paydo boʻladi",
"Reading aloud continues in the background": "Ovoz chiqarib oʻqish fonda davom etadi",
"Stopped reading aloud": "Ovoz chiqarib oʻqish toʻxtatildi",
"Read aloud stopped": "Ovoz chiqarib oʻqish toʻxtadi"
}
@@ -1780,5 +1780,63 @@
"Find:": "Tìm:",
"Enable rule": "Bật quy tắc",
"Disable rule": "Tắt quy tắc",
"Progress Read": "Tiến độ đọc"
"Progress Read": "Tiến độ đọc",
"Auto-import new books from this folder": "Tự động nhập sách mới từ thư mục này",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "Khi có sách mới được thêm vào thư mục này, chúng sẽ được nhập tự động vào lần tiếp theo Readest được mở hoặc quay lại nền trước.",
"Reading aloud": "Đang đọc to",
"Open Book": "Mở sách",
"Stop reading aloud": "Dừng đọc to",
"Enter at least two words": "Nhập ít nhất hai từ",
"Search failed": "Tìm kiếm thất bại",
"Search with regex": "Tìm kiếm bằng biểu thức chính quy",
"Words to find near each other": "Các từ cần tìm ở gần nhau",
"Contains": "Chứa",
"Whole Words": "Toàn bộ từ",
"Regular Expression": "Biểu thức chính quy",
"Nearby Words": "Từ gần nhau",
"Within N words": "Trong phạm vi N từ",
"Not for regex": "Không áp dụng cho biểu thức chính quy",
"No results found": "Không tìm thấy kết quả",
"{{count}} results_other": "{{count}} kết quả",
"Failed to seek": "Không thể tua",
"Chapter progress": "Tiến độ chương",
"{{elapsed}} of {{total}}": "{{elapsed}} trên {{total}}",
"Decrease Contrast": "Giảm tương phản",
"Reset Contrast": "Đặt lại tương phản",
"Increase Contrast": "Tăng tương phản",
"Google Drive session expired. Reconnect in Settings.": "Phiên Google Drive đã hết hạn. Kết nối lại trong Cài đặt.",
"Cloud sync session expired. Reconnect in Settings.": "Phiên đồng bộ đám mây đã hết hạn. Kết nối lại trong Cài đặt.",
"Push": "Đẩy",
"Slide": "Trượt",
"Page Curl": "Lật giấy",
"Animation Style": "Kiểu hiệu ứng động",
"Appearance": "Giao diện",
"Sets the text size of dictionary results, independent of the reading view.": "Đặt cỡ chữ của kết quả từ điển, không phụ thuộc vào chế độ xem đọc.",
"Authentication failed. Reconnect in Settings.": "Xác thực thất bại. Kết nối lại trong Cài đặt.",
"Full Sync": "Đồng bộ đầy đủ",
"Re-check every book instead of only changed ones.": "Kiểm tra lại mọi cuốn sách thay vì chỉ những cuốn đã thay đổi.",
"Waiting for sign-in…": "Đang chờ đăng nhập…",
"Reconnect": "Kết nối lại",
"Connected as {{account}}": "Đã kết nối với tư cách {{account}}",
". Make Google Drive the active cloud provider.": ". Đặt Google Drive làm nhà cung cấp đám mây đang hoạt động.",
"Use Google Drive": "Dùng Google Drive",
"Sign-in opens in your browser.": "Đăng nhập sẽ mở trong trình duyệt của bạn.",
"Readest only accesses the files it creates in your Drive.": "Readest chỉ truy cập các tệp do chính nó tạo trong Drive của bạn.",
"Sync your library, reading progress, and highlights with a WebDAV server.": "Đồng bộ thư viện, tiến trình đọc và điểm nổi bật của bạn với máy chủ WebDAV.",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "Đồng bộ thư viện, tiến trình đọc và điểm nổi bật của bạn với Google Drive của bạn.",
"Configured": "Đã cấu hình",
"Third-party Cloud Sync": "Đồng bộ đám mây bên thứ ba",
"Use WebDAV": "Dùng WebDAV",
"Cloud Sync": "Đồng bộ đám mây",
"Available on Plus, Pro, or Lifetime": "Khả dụng với gói Plus, Pro hoặc Trọn đời",
"Extra Large": "Rất lớn",
"Hint size": "Cỡ gợi ý",
"Gloss text size above the word": "Cỡ chữ của chú giải phía trên từ",
"Hint color": "Màu gợi ý",
"Adjust Text Selection": "Điều chỉnh vùng chọn văn bản",
"Your books will appear here": "Sách của bạn sẽ xuất hiện ở đây",
"Reading aloud continues in the background": "Đọc to tiếp tục chạy trong nền",
"Stopped reading aloud": "Đã dừng đọc to",
"Read aloud stopped": "Đọc to đã dừng"
}
@@ -1780,5 +1780,63 @@
"Find:": "查找:",
"Enable rule": "启用规则",
"Disable rule": "禁用规则",
"Progress Read": "阅读进度"
"Progress Read": "阅读进度",
"Auto-import new books from this folder": "自动导入此文件夹中的新书",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "当此文件夹中添加了新书时,下次打开 Readest 或返回前台时将自动导入。",
"Reading aloud": "正在朗读",
"Open Book": "打开书籍",
"Stop reading aloud": "停止朗读",
"Enter at least two words": "请至少输入两个单词",
"Search failed": "搜索失败",
"Search with regex": "使用正则表达式搜索",
"Words to find near each other": "要就近查找的单词",
"Contains": "包含",
"Whole Words": "整个单词",
"Regular Expression": "正则表达式",
"Nearby Words": "邻近单词",
"Within N words": "N 个单词以内",
"Not for regex": "不适用于正则表达式",
"No results found": "未找到结果",
"{{count}} results_other": "{{count}} 个结果",
"Failed to seek": "跳转失败",
"Chapter progress": "章节进度",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "降低对比度",
"Reset Contrast": "重置对比度",
"Increase Contrast": "提高对比度",
"Google Drive session expired. Reconnect in Settings.": "Google Drive 会话已过期。请在设置中重新连接。",
"Cloud sync session expired. Reconnect in Settings.": "云同步会话已过期。请在设置中重新连接。",
"Push": "平移",
"Slide": "覆盖",
"Page Curl": "仿真",
"Animation Style": "动画样式",
"Appearance": "外观",
"Sets the text size of dictionary results, independent of the reading view.": "设置词典结果的文字大小,与阅读界面相互独立。",
"Authentication failed. Reconnect in Settings.": "认证失败。请在设置中重新连接。",
"Full Sync": "完全同步",
"Re-check every book instead of only changed ones.": "重新检查所有书籍,而不仅是有变动的书籍。",
"Waiting for sign-in…": "等待登录…",
"Reconnect": "重新连接",
"Connected as {{account}}": "已以 {{account}} 身份连接",
". Make Google Drive the active cloud provider.": "。将 Google Drive 设为当前使用的云服务提供商。",
"Use Google Drive": "使用 Google Drive",
"Sign-in opens in your browser.": "登录将在浏览器中打开。",
"Readest only accesses the files it creates in your Drive.": "Readest 只会访问它在您的 Drive 中创建的文件。",
"Sync your library, reading progress, and highlights with a WebDAV server.": "将您的书库、阅读进度和高亮与 WebDAV 服务器同步。",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "将您的书库、阅读进度和高亮与您的 Google Drive 同步。",
"Configured": "已配置",
"Third-party Cloud Sync": "第三方云同步",
"Use WebDAV": "使用 WebDAV",
"Cloud Sync": "云同步",
"Available on Plus, Pro, or Lifetime": "Plus、Pro 或 Lifetime 套餐可用",
"Extra Large": "特大",
"Hint size": "提示大小",
"Gloss text size above the word": "单词上方注释文字的大小",
"Hint color": "提示颜色",
"Adjust Text Selection": "调整文本选择",
"Your books will appear here": "您的书籍将显示在这里",
"Reading aloud continues in the background": "语音朗读在后台继续",
"Stopped reading aloud": "已停止语音朗读",
"Read aloud stopped": "语音朗读已停止"
}
@@ -1780,5 +1780,63 @@
"Find:": "尋找:",
"Enable rule": "啟用規則",
"Disable rule": "停用規則",
"Progress Read": "閱讀進度"
"Progress Read": "閱讀進度",
"Auto-import new books from this folder": "自動匯入此資料夾中的新書",
"When new books are added to this folder, import them automatically the next time Readest opens or returns to the foreground.": "當此資料夾中加入新書時,下次開啟 Readest 或回到前景時將自動匯入。",
"Reading aloud": "朗讀中",
"Open Book": "打開書籍",
"Stop reading aloud": "停止朗讀",
"Enter at least two words": "請至少輸入兩個單詞",
"Search failed": "搜尋失敗",
"Search with regex": "使用正規表示式搜尋",
"Words to find near each other": "要就近尋找的單詞",
"Contains": "包含",
"Whole Words": "整個單詞",
"Regular Expression": "正規表示式",
"Nearby Words": "鄰近單詞",
"Within N words": "N 個單詞以內",
"Not for regex": "不適用於正規表示式",
"No results found": "未找到結果",
"{{count}} results_other": "{{count}} 個結果",
"Failed to seek": "跳轉失敗",
"Chapter progress": "章節進度",
"{{elapsed}} of {{total}}": "{{elapsed}} / {{total}}",
"Decrease Contrast": "降低對比度",
"Reset Contrast": "重設對比度",
"Increase Contrast": "提高對比度",
"Google Drive session expired. Reconnect in Settings.": "Google Drive 工作階段已過期。請在設定中重新連線。",
"Cloud sync session expired. Reconnect in Settings.": "雲同步工作階段已過期。請在設定中重新連線。",
"Push": "平移",
"Slide": "覆蓋",
"Page Curl": "擬真",
"Animation Style": "動畫樣式",
"Appearance": "外觀",
"Sets the text size of dictionary results, independent of the reading view.": "設定詞典結果的文字大小,與閱讀介面相互獨立。",
"Authentication failed. Reconnect in Settings.": "驗證失敗。請在設定中重新連線。",
"Full Sync": "完全同步",
"Re-check every book instead of only changed ones.": "重新檢查所有書籍,而不僅是有變動的書籍。",
"Waiting for sign-in…": "等待登入…",
"Reconnect": "重新連線",
"Connected as {{account}}": "已以 {{account}} 身分連線",
". Make Google Drive the active cloud provider.": "。將 Google Drive 設為目前使用的雲端服務供應商。",
"Use Google Drive": "使用 Google Drive",
"Sign-in opens in your browser.": "登入將在瀏覽器中開啟。",
"Readest only accesses the files it creates in your Drive.": "Readest 只會存取它在您的 Drive 中建立的檔案。",
"Sync your library, reading progress, and highlights with a WebDAV server.": "將您的書庫、閱讀進度和高亮與 WebDAV 伺服器同步。",
"Google Drive": "Google Drive",
"Sync your library, reading progress, and highlights with your Google Drive.": "將您的書庫、閱讀進度和高亮與您的 Google Drive 同步。",
"Configured": "已設定",
"Third-party Cloud Sync": "第三方雲同步",
"Use WebDAV": "使用 WebDAV",
"Cloud Sync": "雲同步",
"Available on Plus, Pro, or Lifetime": "Plus、Pro 或 Lifetime 方案可用",
"Extra Large": "特大",
"Hint size": "提示大小",
"Gloss text size above the word": "單詞上方註釋文字的大小",
"Hint color": "提示顏色",
"Adjust Text Selection": "調整文字選取",
"Your books will appear here": "您的書籍將顯示在這裡",
"Reading aloud continues in the background": "朗讀將在背景繼續",
"Stopped reading aloud": "已停止朗讀",
"Read aloud stopped": "朗讀已停止"
}
@@ -0,0 +1,145 @@
import { describe, test, expect, vi } from 'vitest';
import {
Autoscroller,
AUTOSCROLL_DEAD_ZONE_PX,
AUTOSCROLL_SPEED_PER_PX,
AUTOSCROLL_MAX_VELOCITY,
} from '@/app/reader/utils/autoscroller';
// Middle-click autoscroll core (#4951). The controller is pure logic driven by
// an injected rAF/clock so the speed model and the press/release state machine
// can be tested deterministically.
const createHarness = () => {
let frameCb: FrameRequestCallback | null = null;
let time = 0;
const deltas: number[] = [];
const onStop = vi.fn();
const scroller = new Autoscroller({
scrollBy: (delta) => deltas.push(delta),
onStop,
raf: (cb) => {
frameCb = cb;
return 1;
},
caf: () => {
frameCb = null;
},
now: () => time,
});
// Advance the clock and fire the pending animation frame (which re-arms itself).
const step = (ms: number) => {
time += ms;
const cb = frameCb;
frameCb = null;
cb?.(time);
};
const scrolledTotal = () => deltas.reduce((a, b) => a + b, 0);
const hasPendingFrame = () => frameCb !== null;
return { scroller, deltas, onStop, step, scrolledTotal, hasPendingFrame };
};
describe('Autoscroller speed model', () => {
test('is inactive until started', () => {
const { scroller, hasPendingFrame } = createHarness();
expect(scroller.active).toBe(false);
expect(hasPendingFrame()).toBe(false);
scroller.start(100, 100, 'y');
expect(scroller.active).toBe(true);
expect(hasPendingFrame()).toBe(true);
});
test('does not scroll while the pointer stays within the dead zone', () => {
const { scroller, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX - 2);
step(100);
step(100);
expect(scrolledTotal()).toBe(0);
});
test('scrolls proportionally to the distance beyond the dead zone', () => {
const { scroller, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
// 50px beyond the dead zone -> 50 * SPEED px/s; 100ms -> a tenth of that.
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX + 50);
step(100);
expect(scrolledTotal()).toBe((50 * AUTOSCROLL_SPEED_PER_PX) / 10);
});
test('scrolls backwards when the pointer is before the anchor', () => {
const { scroller, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
scroller.move(100, 100 - AUTOSCROLL_DEAD_ZONE_PX - 50);
step(100);
expect(scrolledTotal()).toBe(-(50 * AUTOSCROLL_SPEED_PER_PX) / 10);
});
test('uses the x displacement on the horizontal axis and ignores y', () => {
const { scroller, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'x');
scroller.move(100 + AUTOSCROLL_DEAD_ZONE_PX + 50, 500);
step(100);
expect(scrolledTotal()).toBe((50 * AUTOSCROLL_SPEED_PER_PX) / 10);
});
test('caps the scroll velocity', () => {
const { scroller, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX + 100000);
step(100);
expect(scrolledTotal()).toBe(AUTOSCROLL_MAX_VELOCITY / 10);
});
test('emits whole pixels and carries the fractional remainder', () => {
const { scroller, deltas, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
// 2px beyond the dead zone -> 2 * SPEED px/s (20px/s by default): a 10ms
// frame yields 0.2px, below one pixel, so nothing may be emitted per frame.
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX + 2);
for (let i = 0; i < 10; i++) step(10);
expect(scrolledTotal()).toBe((2 * AUTOSCROLL_SPEED_PER_PX) / 10);
expect(deltas.every((d) => Number.isInteger(d))).toBe(true);
});
});
describe('Autoscroller press/release state machine', () => {
test('release after dragging beyond the dead zone stops scrolling', () => {
const { scroller, onStop, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX + 50);
step(100);
const scrolledWhileHeld = scrolledTotal();
expect(scrolledWhileHeld).toBeGreaterThan(0);
scroller.release();
expect(scroller.active).toBe(false);
expect(onStop).toHaveBeenCalledTimes(1);
step(100);
expect(scrolledTotal()).toBe(scrolledWhileHeld);
});
test('a quick release near the anchor enters sticky mode', () => {
const { scroller, onStop, step, scrolledTotal } = createHarness();
scroller.start(100, 100, 'y');
scroller.move(100, 105);
scroller.release();
expect(scroller.active).toBe(true);
expect(onStop).not.toHaveBeenCalled();
scroller.move(100, 100 + AUTOSCROLL_DEAD_ZONE_PX + 50);
step(100);
expect(scrolledTotal()).toBeGreaterThan(0);
scroller.stop();
expect(scroller.active).toBe(false);
expect(onStop).toHaveBeenCalledTimes(1);
});
test('stop is idempotent and cancels the frame loop', () => {
const { scroller, onStop, hasPendingFrame } = createHarness();
scroller.stop();
expect(onStop).not.toHaveBeenCalled();
scroller.start(100, 100, 'y');
scroller.stop();
scroller.stop();
expect(onStop).toHaveBeenCalledTimes(1);
expect(hasPendingFrame()).toBe(false);
});
});
@@ -0,0 +1,35 @@
import clsx from 'clsx';
import React from 'react';
import { AutoscrollAnchor } from '../hooks/useMiddleClickAutoscroll';
// The anchor marker shown while middle-click autoscroll is engaged: a circle
// with arrows along the scroll axis, akin to the browsers' autoscroll bullet.
const AutoscrollIndicator: React.FC<{ anchor: AutoscrollAnchor }> = ({ anchor }) => (
<div
aria-hidden='true'
className='pointer-events-none absolute z-20 -translate-x-1/2 -translate-y-1/2'
style={{ left: anchor.left, top: anchor.top }}
>
<svg
width='30'
height='30'
viewBox='0 0 30 30'
className={clsx('text-base-content', anchor.axis === 'x' && 'rotate-90')}
>
<circle
cx='15'
cy='15'
r='13.5'
className='fill-base-100'
fillOpacity='0.85'
stroke='currentColor'
strokeWidth='1'
/>
<path d='M15 4.5 L18.5 10 h-7 Z' fill='currentColor' />
<path d='M15 25.5 L18.5 20 h-7 Z' fill='currentColor' />
<circle cx='15' cy='15' r='2' fill='currentColor' />
</svg>
</div>
);
export default AutoscrollIndicator;
@@ -51,6 +51,8 @@ import {
handleKeyup,
handleMousedown,
handleMouseup,
handleMousemove,
handleAuxclick,
handleClick,
handleWheel,
handleTouchStart,
@@ -76,7 +78,9 @@ import { isMetered } from '@/utils/network';
import { eventDispatcher } from '@/utils/event';
import { isFontType } from '@/utils/font';
import { getScrollGapAttr } from '@/utils/webtoon';
import { useMiddleClickAutoscroll } from '../hooks/useMiddleClickAutoscroll';
import { ParagraphControl } from './paragraph';
import AutoscrollIndicator from './AutoscrollIndicator';
import Spinner from '@/components/Spinner';
import KOSyncConflictResolver from './KOSyncResolver';
import ImageViewer from './ImageViewer';
@@ -399,6 +403,8 @@ const FoliateViewer: React.FC<{
detail.doc.addEventListener('keyup', handleKeyup.bind(null, bookKey));
detail.doc.addEventListener('mousedown', handleMousedown.bind(null, bookKey));
detail.doc.addEventListener('mouseup', handleMouseup.bind(null, bookKey));
detail.doc.addEventListener('mousemove', handleMousemove.bind(null, bookKey));
detail.doc.addEventListener('auxclick', handleAuxclick.bind(null, bookKey));
detail.doc.addEventListener(
'click',
handleClick.bind(null, bookKey, doubleClickDisabled, !!bookData?.isFixedLayout),
@@ -509,6 +515,7 @@ const FoliateViewer: React.FC<{
const { handlePageFlip } = usePagination(bookKey, viewRef, containerRef);
const mouseHandlers = useMouseEvent(bookKey, handlePageFlip);
const touchHandlers = useTouchEvent(bookKey);
const autoscrollAnchor = useMiddleClickAutoscroll(bookKey, viewRef, containerRef);
const [selectedImage, setSelectedImage] = useState<string | null>(null);
const [selectedTableHtml, setSelectedTableHtml] = useState<string | null>(null);
@@ -952,6 +959,7 @@ const FoliateViewer: React.FC<{
{...mouseHandlers}
{...touchHandlers}
/>
{autoscrollAnchor && <AutoscrollIndicator anchor={autoscrollAnchor} />}
<BrightnessOverlay visible={overlayVisible} level={overlayLevel} />
<ParagraphControl bookKey={bookKey} viewRef={viewRef} gridInsets={gridInsets} />
{((!docLoaded.current && loading) || viewState?.loading) && (
@@ -0,0 +1,158 @@
import { useEffect, useRef, useState } from 'react';
import { useEnv } from '@/context/EnvContext';
import { FoliateView } from '@/types/view';
import { useReaderStore } from '@/store/readerStore';
import { eventDispatcher } from '@/utils/event';
import { Autoscroller, AutoscrollAxis } from '../utils/autoscroller';
import { setAutoscrollArmed, setAutoscrollTracking } from '../utils/iframeEventHandlers';
export interface AutoscrollAnchor {
left: number;
top: number;
axis: AutoscrollAxis;
}
// Middle-click autoscroll (#4951): desktop-only, scrolled mode. A middle-button
// press in the book iframe plants an anchor; pointer distance from it drives the
// scroll velocity (see Autoscroller). Movement is tracked in screen coordinates
// so iframe/window coordinate spaces and transforms don't matter; the returned
// anchor is in reading-container coordinates for the indicator overlay.
export const useMiddleClickAutoscroll = (
bookKey: string,
viewRef: React.RefObject<FoliateView | null>,
containerRef: React.RefObject<HTMLDivElement | null>,
) => {
const { appService } = useEnv();
const { getViewSettings } = useReaderStore();
const viewSettings = getViewSettings(bookKey);
const [anchor, setAnchor] = useState<AutoscrollAnchor | null>(null);
const armed = !!appService?.isDesktopApp && !!viewSettings?.scrolled;
const armedRef = useRef(armed);
armedRef.current = armed;
// Undoes the per-session wiring (window listeners, cursors); set on start.
const sessionCleanupRef = useRef<(() => void) | null>(null);
// A left click that ends a sticky session must only end it, not also turn the
// page; single clicks arrive well after the mousedown, hence a time window.
const swallowClicksBeforeRef = useRef(0);
const scrollerRef = useRef<Autoscroller | null>(null);
if (!scrollerRef.current) {
scrollerRef.current = new Autoscroller({
scrollBy: (delta) => {
const renderer = viewRef.current?.renderer;
if (renderer) renderer.containerPosition += delta;
},
onStop: () => {
setAnchor(null);
setAutoscrollTracking(false);
sessionCleanupRef.current?.();
sessionCleanupRef.current = null;
},
});
}
const startSession = (windowX: number, windowY: number, screenX: number, screenY: number) => {
const scroller = scrollerRef.current!;
const renderer = viewRef.current?.renderer;
const container = containerRef.current;
if (!renderer?.scrolled || !container) return;
// Vertical-writing books scroll along the horizontal axis in scrolled mode.
const axis: AutoscrollAxis = renderer.scrollProp === 'scrollLeft' ? 'x' : 'y';
scroller.start(screenX, screenY, axis);
const cursor = axis === 'x' ? 'ew-resize' : 'ns-resize';
const docs = renderer.getContents().map(({ doc }) => doc);
docs.forEach((doc) => (doc.documentElement.style.cursor = cursor));
container.style.cursor = cursor;
const onMousemove = (event: MouseEvent) => scroller.move(event.screenX, event.screenY);
const onMousedown = () => scroller.stop();
const onMouseup = (event: MouseEvent) => {
if (event.button === 1) scroller.release();
};
const onWheel = () => scroller.stop();
const onKeydown = (event: KeyboardEvent) => {
if (event.key === 'Escape') scroller.stop();
};
const onBlur = () => scroller.stop();
window.addEventListener('mousemove', onMousemove, true);
window.addEventListener('mousedown', onMousedown, true);
window.addEventListener('mouseup', onMouseup, true);
window.addEventListener('wheel', onWheel, true);
window.addEventListener('keydown', onKeydown, true);
window.addEventListener('blur', onBlur);
sessionCleanupRef.current = () => {
docs.forEach((doc) => (doc.documentElement.style.cursor = ''));
container.style.cursor = '';
window.removeEventListener('mousemove', onMousemove, true);
window.removeEventListener('mousedown', onMousedown, true);
window.removeEventListener('mouseup', onMouseup, true);
window.removeEventListener('wheel', onWheel, true);
window.removeEventListener('keydown', onKeydown, true);
window.removeEventListener('blur', onBlur);
};
setAutoscrollTracking(true);
const containerRect = container.getBoundingClientRect();
setAnchor({ left: windowX - containerRect.left, top: windowY - containerRect.top, axis });
};
useEffect(() => {
const scroller = scrollerRef.current!;
const onMessage = (msg: MessageEvent) => {
const data = msg.data;
if (!data?.type) return;
switch (data.type) {
case 'iframe-mousedown':
if (scroller.active) {
// Any press ends the session; a left press would otherwise also
// click through to a page turn, so swallow its click.
if (data.button === 0) swallowClicksBeforeRef.current = Date.now() + 500;
scroller.stop();
} else if (data.bookKey === bookKey && data.button === 1 && armedRef.current) {
startSession(
data.windowX ?? data.clientX,
data.windowY ?? data.clientY,
data.screenX,
data.screenY,
);
}
break;
case 'iframe-mouseup':
if (data.button === 1) scroller.release();
break;
case 'iframe-mousemove':
scroller.move(data.screenX, data.screenY);
break;
case 'iframe-wheel':
scroller.stop();
break;
case 'iframe-keydown':
if (data.key === 'Escape') scroller.stop();
break;
}
};
const onSingleClick = () => Date.now() < swallowClicksBeforeRef.current;
window.addEventListener('message', onMessage);
eventDispatcher.onSync('iframe-single-click', onSingleClick);
return () => {
window.removeEventListener('message', onMessage);
eventDispatcher.offSync('iframe-single-click', onSingleClick);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [bookKey]);
useEffect(() => {
setAutoscrollArmed(bookKey, armed);
if (!armed) scrollerRef.current?.stop();
return () => setAutoscrollArmed(bookKey, false);
}, [bookKey, armed]);
useEffect(() => {
return () => scrollerRef.current?.stop();
}, []);
return anchor;
};
@@ -0,0 +1,110 @@
// Middle-click autoscroll core (#4951). Browser-style: pressing the middle
// button plants an anchor; the pointer's distance from the anchor sets the
// scroll velocity. Releasing after a drag stops; a quick release near the
// anchor enters sticky mode, which keeps scrolling until an explicit stop.
// Pure logic — the caller feeds pointer positions (screen coordinates) and
// receives per-frame scroll deltas, so it can be tested with an injected
// rAF/clock and reused for any scrollable target.
export type AutoscrollAxis = 'x' | 'y';
// Pointer travel around the anchor that produces no scroll, so the anchor
// isn't impossibly twitchy to rest on.
export const AUTOSCROLL_DEAD_ZONE_PX = 12;
// Scroll velocity in px/s gained per pixel of pointer offset beyond the dead zone.
export const AUTOSCROLL_SPEED_PER_PX = 10;
// Velocity ceiling in px/s.
export const AUTOSCROLL_MAX_VELOCITY = 4000;
interface AutoscrollerOptions {
scrollBy: (delta: number) => void;
onStop?: () => void;
raf?: (cb: FrameRequestCallback) => number;
caf?: (id: number) => void;
now?: () => number;
}
export class Autoscroller {
#opts: AutoscrollerOptions;
#active = false;
#held = false;
#movedBeyondDeadZone = false;
#axis: AutoscrollAxis = 'y';
#anchor = 0;
#pointer = 0;
#lastTime = 0;
// Sub-pixel remainder carried between frames so slow speeds still move even
// if the scroll target rounds positions to whole pixels.
#residual = 0;
#frameId: number | null = null;
constructor(opts: AutoscrollerOptions) {
this.#opts = opts;
}
get active() {
return this.#active;
}
start(x: number, y: number, axis: AutoscrollAxis) {
this.stop();
this.#active = true;
this.#held = true;
this.#movedBeyondDeadZone = false;
this.#axis = axis;
this.#anchor = axis === 'x' ? x : y;
this.#pointer = this.#anchor;
this.#lastTime = (this.#opts.now ?? performance.now.bind(performance))();
this.#residual = 0;
this.#requestFrame();
}
move(x: number, y: number) {
if (!this.#active) return;
this.#pointer = this.#axis === 'x' ? x : y;
if (Math.abs(this.#pointer - this.#anchor) > AUTOSCROLL_DEAD_ZONE_PX) {
this.#movedBeyondDeadZone = true;
}
}
// Middle button released: a press that dragged beyond the dead zone was a
// hold-to-scroll gesture and ends here; a quick click near the anchor sticks.
release() {
if (!this.#active || !this.#held) return;
this.#held = false;
if (this.#movedBeyondDeadZone) this.stop();
}
stop() {
if (!this.#active) return;
this.#active = false;
if (this.#frameId !== null) {
(this.#opts.caf ?? cancelAnimationFrame)(this.#frameId);
this.#frameId = null;
}
this.#opts.onStop?.();
}
#requestFrame() {
this.#frameId = (this.#opts.raf ?? requestAnimationFrame)((time) => this.#tick(time));
}
#tick(time: number) {
this.#frameId = null;
if (!this.#active) return;
const dt = Math.max(0, time - this.#lastTime);
this.#lastTime = time;
const offset = this.#pointer - this.#anchor;
const beyond = Math.abs(offset) - AUTOSCROLL_DEAD_ZONE_PX;
if (beyond > 0) {
const velocity = Math.min(beyond * AUTOSCROLL_SPEED_PER_PX, AUTOSCROLL_MAX_VELOCITY);
this.#residual += Math.sign(offset) * velocity * (dt / 1000);
const whole = Math.trunc(this.#residual);
if (whole !== 0) {
this.#residual -= whole;
this.#opts.scrollBy(whole);
}
}
this.#requestFrame();
}
}
@@ -6,6 +6,42 @@ let lastClickTime = 0;
let longHoldTimeout: ReturnType<typeof setTimeout> | null = null;
let isMouseDown = false;
// Middle-click autoscroll (#4951). Books where the feature is armed (desktop
// app, scrolled mode, setting on) get the middle button's defaults suppressed,
// so the WebView's own autoscroll (WebView2) can't scroll alongside ours and a
// middle-clicked link doesn't open. These handlers run in the main realm, so
// the hook toggles this state directly.
const autoscrollArmedBooks = new Set<string>();
// Whether an autoscroll session is running; gates mousemove forwarding so the
// stream costs nothing while idle.
let autoscrollTracking = false;
export const setAutoscrollArmed = (bookKey: string, armed: boolean) => {
if (armed) autoscrollArmedBooks.add(bookKey);
else autoscrollArmedBooks.delete(bookKey);
};
export const setAutoscrollTracking = (tracking: boolean) => {
autoscrollTracking = tracking;
};
// The event's position in main-window viewport coordinates: iframe client
// coordinates offset by the frame's on-screen rect. The rect already includes
// any zoom transform on the frame's ancestors, so client sizes are rescaled.
const getWindowPoint = (event: MouseEvent) => {
const win = event.view;
const frame = win?.frameElement;
if (!win || !frame) return { windowX: event.clientX, windowY: event.clientY };
const rect = frame.getBoundingClientRect();
const { clientWidth, clientHeight } = win.document.documentElement;
const scaleX = clientWidth ? rect.width / clientWidth : 1;
const scaleY = clientHeight ? rect.height / clientHeight : 1;
return {
windowX: rect.left + event.clientX * scaleX,
windowY: rect.top + event.clientY * scaleY,
};
};
let keyboardState = {
key: '',
code: '',
@@ -94,6 +130,10 @@ export const handleMousedown = (bookKey: string, event: MouseEvent) => {
longHoldTimeout = null;
}, LONG_HOLD_THRESHOLD);
if (event.button === 1 && autoscrollArmedBooks.has(bookKey)) {
event.preventDefault();
}
window.postMessage(
{
type: 'iframe-mousedown',
@@ -105,12 +145,35 @@ export const handleMousedown = (bookKey: string, event: MouseEvent) => {
clientY: event.clientY,
offsetX: event.offsetX,
offsetY: event.offsetY,
// Anchor point for the autoscroll indicator, which renders in the parent.
...(event.button === 1 ? getWindowPoint(event) : null),
...getKeyStatus(event),
},
'*',
);
};
export const handleAuxclick = (bookKey: string, event: MouseEvent) => {
// Swallow the middle button's auxclick while autoscroll is armed so a
// middle-clicked link doesn't also navigate or open elsewhere.
if (event.button === 1 && autoscrollArmedBooks.has(bookKey)) {
event.preventDefault();
}
};
export const handleMousemove = (bookKey: string, event: MouseEvent) => {
if (!autoscrollTracking) return;
window.postMessage(
{
type: 'iframe-mousemove',
bookKey,
screenX: event.screenX,
screenY: event.screenY,
},
'*',
);
};
export const handleMouseup = (bookKey: string, event: MouseEvent) => {
isMouseDown = false;
// we will handle mouse back and forward buttons ourselves
+1
View File
@@ -20,6 +20,7 @@ export interface Renderer extends HTMLElement {
atStart: boolean;
atEnd: boolean;
containerPosition: number;
scrollProp: 'scrollLeft' | 'scrollTop';
sideProp: 'width' | 'height';
pageColors?: {
background: string;