Repository: LibreTranslate/LibreTranslate (language: python)

Issue:
Basque translation project needs update in Weblate
Comparing with English string quantity [161](https://hosted.weblate.org/projects/libretranslate/app/en/), there are less available in the Basque project: [143](https://hosted.weblate.org/projects/libretranslate/app/eu/)

For example "Albanian", "Chinese (traditional)", "Kabyle" and some other are missing.

I guess the "Basque" string has also to be added :smile: 

Thank you!



Discussion / hints:

Fix patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fee2cd1b5..82e89464a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -9,13 +9,6 @@ repos:
       name: " ✔️  Check TOML"
     - id: check-json
       name: " ✔️  Check JSON"
-  - repo: https://github.com/charliermarsh/ruff-pre-commit
-    rev: v0.0.277
-    hooks:
-      - id: ruff
-        name: " ⚡️ Formatting code with Ruff"
-        args:
-        - --fix
 
 ci:
     autofix_commit_msg: 🎨 [pre-commit] Auto format
diff --git a/libretranslate/locales/ar/LC_MESSAGES/messages.po b/libretranslate/locales/ar/LC_MESSAGES/messages.po
index 73a1c8c33..02934f18c 100644
--- a/libretranslate/locales/ar/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ar/LC_MESSAGES/messages.po
@@ -8,15 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-11-02 04:00+0000\n"
 "Last-Translator: Rex_sa <rex.sa@pm.me>\n"
-"Language-Team: Arabic <https://hosted.weblate.org/projects/libretranslate/app/ar/>\n"
 "Language: ar\n"
+"Language-Team: Arabic "
+"<https://hosted.weblate.org/projects/libretranslate/app/ar/>\n"
+"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : "
+"n%100>=3 && n%100<=10 ? 3 : n%100>=0 && n%100<=2 ? 4 : 5);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=0 && n%100<=2 ? 4 : 5);\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -91,8 +93,8 @@ msgstr "%(format)s الشكل غير مدعوم"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr "%(tname)s %(tcode)sغير متاحة كلغة هدف من %(sname)s %(scode)s"
 
 #: libretranslate/app.py:701
@@ -536,8 +538,8 @@ msgstr "تم نسخه"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "شكراً على تصحيحك ملاحظة الاقتراح لن يبدأ تطبيقه في الحال."
 
 #: libretranslate/templates/app.js.template:461
@@ -557,8 +559,7 @@ msgstr "اضغط على رابط \"المفاتيح\"."
 msgid "contact the server operator."
 msgstr "اتصل بمشغل الخادم."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "واجهة برمجة تطبيقات حرة ومفتوحة المصدر للترجمة الآلية"
@@ -566,11 +567,11 @@ msgstr "واجهة برمجة تطبيقات حرة ومفتوحة المصدر
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Free and Open Source Machine Translation API. ذاتي الاستيعاب، غير مباشر قادر"
-" وسهل التجهيز أدير خادمك الخاص في غضون دقائق."
+"Free and Open Source Machine Translation API. ذاتي الاستيعاب، غير مباشر "
+"قادر وسهل التجهيز أدير خادمك الخاص في غضون دقائق."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -718,12 +719,16 @@ msgstr "%(libretranslate)s المساهمون"
 #~ msgstr "Vietnamese"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "يجب استخدام واجهة برمجة التطبيقات العامة هذه للاختبار أو للاستخدام الشخصي أو"
-#~ " غير المتكرر. إذا كنت تريد تشغيل تطبيق إنتاجي ، من فضلك استخدم "
+#~ "يجب استخدام واجهة برمجة التطبيقات العامة"
+#~ " هذه للاختبار أو للاستخدام الشخصي أو"
+#~ " غير المتكرر. إذا كنت تريد تشغيل "
+#~ "تطبيق إنتاجي ، من فضلك استخدم "
 #~ "%(host_server)s أو %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -731,3 +736,4 @@ msgstr "%(libretranslate)s المساهمون"
 
 #~ msgid "get an API key"
 #~ msgstr "الحصول على مفتاح API"
+
diff --git a/libretranslate/locales/az/LC_MESSAGES/messages.po b/libretranslate/locales/az/LC_MESSAGES/messages.po
index ccf8754b0..9eca60a17 100644
--- a/libretranslate/locales/az/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/az/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-17 21:09+0000\n"
 "Last-Translator: Dinissantos <Dinissantos999@hotmail.com>\n"
-"Language-Team: Azerbaijani <https://hosted.weblate.org/projects/"
-"libretranslate/app/az/>\n"
 "Language: az\n"
+"Language-Team: Azerbaijani "
+"<https://hosted.weblate.org/projects/libretranslate/app/az/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -93,10 +92,9 @@ msgstr "%(format)s format dəstəkləmir"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, fuzzy, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
-msgstr ""
-"%(tname)s (%(tcode)s Ətraf dili kimi mövcud deyil %(sname)s (%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
+msgstr "%(tname)s (%(tcode)s Ətraf dili kimi mövcud deyil %(sname)s (%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -545,8 +543,8 @@ msgstr "Elan"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "Sizin düzeltmeniz üçün. Müəlliflik hüququqları qorunur."
 
 #: libretranslate/templates/app.js.template:461
@@ -566,8 +564,7 @@ msgstr "\"Get API Key\" linkini basın."
 msgid "contact the server operator."
 msgstr "server operatoru əlaqə edin."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Pulsuz və Açıq Source Machine Translation API"
@@ -575,11 +572,11 @@ msgstr "Pulsuz və Açıq Source Machine Translation API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Pulsuz və Open Source Machine Translation API. Self-səfərli, offline və asan"
-" quraşdırmaq. Yalnız bir neçə dərhal öz API server çalışır."
+"Pulsuz və Open Source Machine Translation API. Self-səfərli, offline və "
+"asan quraşdırmaq. Yalnız bir neçə dərhal öz API server çalışır."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -727,12 +724,16 @@ msgstr "%(libretranslate)s Kontributors"
 #~ msgstr " Vietnamese"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Bu ictimai API test üçün istifadə olunmalıdır, xüsusi və ya infrequent "
-#~ "istifadə. istehsalda bir proqram işləyirsinizsə, lütfen %(host_server)s ya "
+#~ "Bu ictimai API test üçün istifadə "
+#~ "olunmalıdır, xüsusi və ya infrequent "
+#~ "istifadə. istehsalda bir proqram "
+#~ "işləyirsinizsə, lütfen %(host_server)s ya "
 #~ "%(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -740,3 +741,4 @@ msgstr "%(libretranslate)s Kontributors"
 
 #~ msgid "get an API key"
 #~ msgstr "bir API əsas almaq"
+
diff --git a/libretranslate/locales/be/LC_MESSAGES/messages.po b/libretranslate/locales/be/LC_MESSAGES/messages.po
index 69551afb4..5dcabec8f 100644
--- a/libretranslate/locales/be/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/be/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Belarusian translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,111 +8,121 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-04-02 23:12+0000\n"
 "Last-Translator: rferee <rferee_subs@protonmail.com>\n"
-"Language-Team: Belarusian <https://hosted.weblate.org/projects/"
-"libretranslate/app/be/>\n"
 "Language: be\n"
+"Language-Team: Belarusian "
+"<https://hosted.weblate.org/projects/libretranslate/app/be/>\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 5.5-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Памылковы JSON-фармат"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Аўтавызначэнне"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Патрэбна аўтарызацыя"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Перавышаны ліміт запытаў"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Памылковы API ключ"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Калі ласка звяжыцеся з аператарам сэрверу каб атрымаць API ключ"
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Наведайце %(url)s каб атрымаць API ключ"
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Запаволенне:"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Памылковы запыт: параметар %(name)s адсутнічае"
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Памылковы запыт: запыт (%(size)s) перавышае дазволены ліміт тэксту "
 "(%(limit)s)"
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s не падтрымліваецца"
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "Фармат %(format)s не падтрымліваеецца"
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (%(tcode)s) не даступная як мова перакладу з %(sname)s (%(scode)s)"
+"%(tname)s (%(tcode)s) не даступная як мова перакладу з %(sname)s "
+"(%(scode)s)"
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Не атрымалася перакласці тэкст: %(text)s"
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Переклад файлаў вымкнуты на гэтым сэрвере."
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Памылковы запыт: пусты файл"
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Памылковы запыт: фармат файла не падтрымліваецца"
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Няслушная назва файла"
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Прапанаванні выключаны на гэтым сэрверы."
 
@@ -121,120 +131,176 @@ msgid "English"
 msgstr "Англійская"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Арабская"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Азербайджанская"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Кітайская"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Чешская"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Дацкая"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Нідэрландская"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Эсперанта"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Фінская"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Французская"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Нямецкая"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Грэчаская"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Іўрыт"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Хіндзі"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Венгерская"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Інданезійская"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Ірландская"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Італьянская"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Японская"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Карэйская"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Персідская"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Польская"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Партугальская"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Руская"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Славацкая"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Іспанская"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Шведская"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Турэцкая"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Украінская"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "В’етнамская"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -252,7 +318,7 @@ msgstr "пераклад"
 msgid "Translate text from a language to another"
 msgstr "Перакласць тэкст з адной мовы на іншую"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Перакладзены тэкст"
 
@@ -307,198 +373,202 @@ msgstr ""
 "* `html` - HTML-разметка\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "API ключ"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Перакласць файл з адной мовы на іншую"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Перакладзены файл"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Файл для перакладу"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Вызначыць мову аднаго тэксту"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Вызначэння"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Памылка вызначэння"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Тэкст для вызначэння"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Атрымаць налады для інтэрфэйсу"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "налады інтэрфэйсу"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "інтэрфейс"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Запрапанаваць як палепшыць пераклад"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Поспех"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Не аўтаразаваны"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Арыгінальны тэкст"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Запрапанаваны пераклад"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Мова арыгінальнага тэкста"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Мова прапанаванага перакладу"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "зваротная сувязь"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Код мовы"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Чалавекачытальная назва мовы (па-ангельску)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Коды падтрымліваемых моў"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Перакладзены(-я) тэкст(-а)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Паведамленне пра абмылу"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Прычына запаволення"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL-адрэса перакладзенага файла"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Ровень упэўненасці"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 "Абмежаванне колькаскі знакаў для гэтай мовы (-1 азначае адсутнасць "
 "абмежаванняў)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Час перакладу інтэрфэйсу перавышаны"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Ці увамкнёная база дадзеных API ключоў."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Ці патрэбен API ключ."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Ці ўвамкненна магчымасць адпраўляць прапановы."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Падтрымліваемыя фарматы файлаў"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Ці было адсыланне паспяховым"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Скапіяваць тэкст"
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Немагчыма спампаваць %(url)s"
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Невядомая памылка"
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Скапіявана"
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
-"Дзякуй за вашу заўвагу. Прыміце да ўвагі: Ваша прапанова не адразу набудзе "
-"моц."
+"Дзякуй за вашу заўвагу. Прыміце да ўвагі: Ваша прапанова не адразу "
+"набудзе моц."
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Няма даступных моў. Вы слушна ўсталявалі мадэлі?"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Увядзіце ваш API ключ. Калі вам патрэбен API ключ, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "націсніце на спасылку \"Атрымаць API ключ\"."
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "звяжыцеся з аператарам сэрвера."
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Бясплатнае API для машыннага перакладу з адкрытым выточным кодам"
 
@@ -518,149 +588,151 @@ msgstr "пераклад"
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr ""
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr "В’етнамская"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/be/meta.json b/libretranslate/locales/be/meta.json
new file mode 100644
index 000000000..7d4398d84
--- /dev/null
+++ b/libretranslate/locales/be/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "be",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/bg/LC_MESSAGES/messages.po b/libretranslate/locales/bg/LC_MESSAGES/messages.po
index d1dcc58b7..e2afd1e79 100644
--- a/libretranslate/locales/bg/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/bg/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 22:34+0000\n"
 "Last-Translator: Salif Mehmed <mail@salif.eu>\n"
-"Language-Team: Bulgarian <https://hosted.weblate.org/projects/libretranslate/"
-"app/bg/>\n"
 "Language: bg\n"
+"Language-Team: Bulgarian "
+"<https://hosted.weblate.org/projects/libretranslate/app/bg/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -742,3 +741,4 @@ msgstr "%(libretranslate)s Сътрудници"
 
 #~ msgid "get an API key"
 #~ msgstr "получаване на API ключ"
+
diff --git a/libretranslate/locales/bn/LC_MESSAGES/messages.po b/libretranslate/locales/bn/LC_MESSAGES/messages.po
index 07a7ca56e..b23ca25c2 100644
--- a/libretranslate/locales/bn/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/bn/LC_MESSAGES/messages.po
@@ -8,15 +8,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:20-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: bn <LL@li.org>\n"
 "Language: bn\n"
+"Language-Team: bn <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -71,14 +71,15 @@ msgstr "অবৈধ অনুরোধ: <x>০</x> একটি নম্বর
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
 msgstr ""
-"অবৈধ অনুরোধ: <x>০</x> পরামিতির মান হওয়া আবশ্যক <x>১</x> %(name)s %(value)s"
+"অবৈধ অনুরোধ: <x>০</x> পরামিতির মান হওয়া আবশ্যক <x>১</x> %(name)s "
+"%(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"অবৈধ অনুরোধ: অনুরোধ<x>০</x>সীমা অতিক্রান্ত<x>১</x>আপনি কি মনে করতে পারেন? "
-"%(size)s %(limit)s"
+"অবৈধ অনুরোধ: অনুরোধ<x>০</x>সীমা অতিক্রান্ত<x>১</x>আপনি কি মনে করতে পারেন?"
+" %(size)s %(limit)s"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -94,8 +95,8 @@ msgstr "<x>০</x> অসমর্থিত বিন্যাস %(format)s"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "<x>০</x> ( চিহ্ন)<x>১</x>উপলব্ধ নয় <x>২</x> ( চিহ্ন)<x>৩</x>আপনি কি মনে "
 "করতে পারেন? %(tname)s %(tcode)s %(sname)s %(scode)s"
@@ -541,8 +542,8 @@ msgstr "অনুলিপি করা হয়েছে"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "সংশোধন করার জন্য ধন্যবাদ. উল্লেখ্য, এই পরামর্শ কার্যকর করা হবে না।."
 
 #: libretranslate/templates/app.js.template:461
@@ -553,8 +554,8 @@ msgstr "কোনো ভাষা উপলব্ধ নেই। আপনি 
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
-"API-র মধ্যে পরিচয় পংক্তি লিখুন। যদি আপনার একটি API প্রয়োজন হয়, <x>০</x> "
-"%(instructions)s"
+"API-র মধ্যে পরিচয় পংক্তি লিখুন। যদি আপনার একটি API প্রয়োজন হয়, "
+"<x>০</x> %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -564,8 +565,7 @@ msgstr "\" API\" কি-র সাথে লিঙ্ক স্থাপন ক
 msgid "contact the server operator."
 msgstr "সার্ভার সার্ভারের সাথে যোগাযোগ করুন ।."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "মুক্ত এবং ওপেন সোর্স মেশিন অনুবাদ API"
@@ -573,11 +573,11 @@ msgstr "মুক্ত এবং ওপেন সোর্স মেশিন 
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"মুক্ত এবং ওপেন সোর্স মেশিন অনুবাদ API। স্ব-বিশ্লেষণ, অফ-লাইন অবস্থায় থাকা। "
-"কয়েক মিনিটের মধ্যে আপনার নিজস্ব API সার্ভার চালান।."
+"মুক্ত এবং ওপেন সোর্স মেশিন অনুবাদ API। স্ব-বিশ্লেষণ, অফ-লাইন অবস্থায় "
+"থাকা। কয়েক মিনিটের মধ্যে আপনার নিজস্ব API সার্ভার চালান।."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -712,10 +712,11 @@ msgstr "লাইসেন্স:"
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
-"সহ <x>০</x> ধরন <x>১</x> এবং বিদারনশীল <x>২</x> %(heart)s %(contributors)s "
-"%(engine)s"
+"সহ <x>০</x> ধরন <x>১</x> এবং বিদারনশীল <x>২</x> %(heart)s "
+"%(contributors)s %(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "<x>০</x> অংশগ্রহণকারী %(libretranslate)s"
+
diff --git a/libretranslate/locales/ca/LC_MESSAGES/messages.po b/libretranslate/locales/ca/LC_MESSAGES/messages.po
index 1a5626b22..980ffbbff 100644
--- a/libretranslate/locales/ca/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ca/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-03-07 08:01+0000\n"
 "Last-Translator: d <dmanye@gmail.com>\n"
-"Language-Team: Catalan <https://hosted.weblate.org/projects/libretranslate/app/ca/>\n"
 "Language: ca\n"
+"Language-Team: Catalan "
+"<https://hosted.weblate.org/projects/libretranslate/app/ca/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -42,8 +43,8 @@ msgstr "Clau API invàlida"
 #: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
-"Si us plau, contacta amb l'administrador del servidor per demanar una clau "
-"API"
+"Si us plau, contacta amb l'administrador del servidor per demanar una "
+"clau API"
 
 #: libretranslate/app.py:319
 #, python-format
@@ -95,8 +96,8 @@ msgstr "El format %(format)s no està implementat"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) no està disponible com a llengua de destí des de "
 "%(sname)s (%(scode)s)"
@@ -487,8 +488,8 @@ msgstr "Valor de confiança"
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
-"Límit d' entrada de caràcters per a aquest idioma (- 1 indica que no hi ha "
-"límit)"
+"Límit d' entrada de caràcters per a aquest idioma (- 1 indica que no hi "
+"ha límit)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -544,8 +545,8 @@ msgstr "S' ha copiat"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
 "Gràcies per la teva correcció. Noteu que el suggeriment no tindrà efecte "
 "immediatament."
@@ -557,8 +558,7 @@ msgstr "No hi ha idiomes disponibles. Has instal·lat correctament els models?"
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Escriviu la vostra clau API. Si necessiteu una clau API, %(instructions)s"
+msgstr "Escriviu la vostra clau API. Si necessiteu una clau API, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -568,8 +568,7 @@ msgstr "premeu l' enllaç \"Treta la clau de l' API.\"."
 msgid "contact the server operator."
 msgstr "contacteu amb l' operador del servidor."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API de traducció de la màquina lliure i oberta"
@@ -577,11 +576,12 @@ msgstr "API de traducció de la màquina lliure i oberta"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API de traducció de la màquina lliure i oberta. Auto- màquina, fora de línia"
-" capaç de configurar. Executa el vostre servidor API en només uns minuts."
+"API de traducció de la màquina lliure i oberta. Auto- màquina, fora de "
+"línia capaç de configurar. Executa el vostre servidor API en només uns "
+"minuts."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -726,9 +726,11 @@ msgstr "%(libretranslate)s Col· laboradors"
 #~ msgstr "vietnamita"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
 
 #~ msgid "host your own server"
@@ -736,3 +738,4 @@ msgstr "%(libretranslate)s Col· laboradors"
 
 #~ msgid "get an API key"
 #~ msgstr ""
+
diff --git a/libretranslate/locales/cs/LC_MESSAGES/messages.po b/libretranslate/locales/cs/LC_MESSAGES/messages.po
index 7107f796b..20b3d24f6 100644
--- a/libretranslate/locales/cs/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/cs/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-01-23 14:01+0000\n"
 "Last-Translator: Michal Čihař <michal@weblate.org>\n"
 "Language: cs\n"
@@ -66,12 +66,12 @@ msgstr "Neplatný požadavek: chybějící parametr %(name)s"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "Neplatná žádost: %(name)s parametr není číslo"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
+msgstr "Neplatná žádost: %(name)s 2 nařízení o kapitálových požadavcích. %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -131,7 +131,7 @@ msgstr "Angličtina"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "Albánie"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -143,15 +143,15 @@ msgstr "Ázerbájdžánština"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "Bengálsko"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "Bulharsky"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "Katalánština"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -159,7 +159,7 @@ msgstr "Čínština"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "Čína (tradiční)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -179,7 +179,7 @@ msgstr "Esperanto"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "Estonština"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -231,19 +231,19 @@ msgstr "Korejština"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "Lotyšsky"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "Litevština"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "Malay"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "Norština"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -259,7 +259,7 @@ msgstr "Portugalština"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "Rumunsko"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -271,7 +271,7 @@ msgstr "Slovenština"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "Slovinsky"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -283,11 +283,11 @@ msgstr "Švédština"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "Tagalog"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "Thajské"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -299,7 +299,7 @@ msgstr "Ukrajinština"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "Urdu"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -373,7 +373,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "Preferovaný počet alternativních překladů"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
diff --git a/libretranslate/locales/da/LC_MESSAGES/messages.po b/libretranslate/locales/da/LC_MESSAGES/messages.po
index ea3fa199f..51b6604ce 100644
--- a/libretranslate/locales/da/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/da/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-06-09 17:09+0000\n"
 "Last-Translator: Luna <social.pvxuu@slmail.me>\n"
-"Language-Team: Danish <https://hosted.weblate.org/projects/libretranslate/app/da/>\n"
 "Language: da\n"
+"Language-Team: Danish "
+"<https://hosted.weblate.org/projects/libretranslate/app/da/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -95,8 +96,8 @@ msgstr "%(format)s-format understøttes ikke"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) er ikke tilgængelig som målsprog fra %(sname)s "
 "(%(scode)s)"
@@ -542,8 +543,8 @@ msgstr "Kopieret"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
 "Tak for din rettelse. Bemærk, at forslaget ikke træder i kraft med det "
 "samme."
@@ -555,8 +556,7 @@ msgstr "Ingen tilgængelige sprog. Har du installeret modellerne korrekt?"
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Indtast din API-nøgle. Hvis du har brug for en API-nøgle, %(instructions)s"
+msgstr "Indtast din API-nøgle. Hvis du har brug for en API-nøgle, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -566,8 +566,7 @@ msgstr "tryk på linket \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "kontakt serveroperatøren."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Gratis og Open Source Maskinoversættelses-API"
@@ -575,8 +574,8 @@ msgstr "Gratis og Open Source Maskinoversættelses-API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "Gratis og Open Source Maskinoversættelses-API. Selv-hosted, kan bruges "
 "offline og er let at opsætte. Kør din egen API-server på blot et par "
@@ -728,12 +727,16 @@ msgstr "%(libretranslate)s Bidragsydere"
 #~ msgstr "Vietnamesisk"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Denne offentlige API bør bruges til test, personlig eller sjælden brug. Hvis"
-#~ " du har tænkt dig at køre en applikation i produktion, venligst "
+#~ "Denne offentlige API bør bruges til "
+#~ "test, personlig eller sjælden brug. Hvis"
+#~ " du har tænkt dig at køre en"
+#~ " applikation i produktion, venligst "
 #~ "%(host_server)s eller %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -741,3 +744,4 @@ msgstr "%(libretranslate)s Bidragsydere"
 
 #~ msgid "get an API key"
 #~ msgstr "få en API-nøgle"
+
diff --git a/libretranslate/locales/de/LC_MESSAGES/messages.po b/libretranslate/locales/de/LC_MESSAGES/messages.po
index 6f30a0979..e9ffc0e27 100644
--- a/libretranslate/locales/de/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/de/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-22 16:09+0000\n"
 "Last-Translator: Wuzzy <Wuzzy@disroot.org>\n"
-"Language-Team: German <https://hosted.weblate.org/projects/libretranslate/"
-"app/de/>\n"
 "Language: de\n"
+"Language-Team: German "
+"<https://hosted.weblate.org/projects/libretranslate/app/de/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -745,3 +744,4 @@ msgstr "den %(libretranslate)s-Mitwirkenden"
 
 #~ msgid "get an API key"
 #~ msgstr "holen Sie sich einen API-Schlüssel"
+
diff --git a/libretranslate/locales/el/LC_MESSAGES/messages.po b/libretranslate/locales/el/LC_MESSAGES/messages.po
index 6af674803..8c77b8a31 100644
--- a/libretranslate/locales/el/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/el/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-24 07:09+0000\n"
 "Last-Translator: Nikos Merianos <merianosnikos@gmail.com>\n"
-"Language-Team: Greek <https://hosted.weblate.org/projects/libretranslate/app/"
-"el/>\n"
 "Language: el\n"
+"Language-Team: Greek "
+"<https://hosted.weblate.org/projects/libretranslate/app/el/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7.1-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -73,14 +72,15 @@ msgstr "Μη έγκυρη αίτηση: Η παράμετρος %(name)s δεν
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
 msgstr ""
-"Μη έγκυρη αίτηση: Η παράμετρος %(name)s πρέπει να είναι &lt;= &gt; %(value)s"
+"Μη έγκυρη αίτηση: Η παράμετρος %(name)s πρέπει να είναι &lt;= &gt; "
+"%(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"Άκυρο αίτημα: το αίτημα(%(size)s) υπερβαίνει το όριο χαρακτήρων του κειμένου"
-" (%(limit)s)"
+"Άκυρο αίτημα: το αίτημα(%(size)s) υπερβαίνει το όριο χαρακτήρων του "
+"κειμένου (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -96,8 +96,8 @@ msgstr "Η μορφή %(format)s δεν υποστηρίζεται"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) δεν είναι διαθέσιμη ως γλώσσα-στόχος από %(sname)s "
 "(%(scode)s)"
@@ -487,8 +487,7 @@ msgstr "Εμπιστοσύνη αξία"
 
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
-msgstr ""
-"Χαρακτηριστικά όρια εισόδου για αυτή τη γλώσσα (-1 δεν υποδεικνύει όριο)"
+msgstr "Χαρακτηριστικά όρια εισόδου για αυτή τη γλώσσα (-1 δεν υποδεικνύει όριο)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -544,10 +543,11 @@ msgstr "Συνήγοροι"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Χάρη στη διόρθωση σας. Σημειώστε ότι η πρόταση δεν θα τεθεί σε ισχύ αμέσως."
+"Χάρη στη διόρθωση σας. Σημειώστε ότι η πρόταση δεν θα τεθεί σε ισχύ "
+"αμέσως."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
@@ -566,8 +566,7 @@ msgstr "πατήστε το σύνδεσμο \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "επικοινωνήστε με τον διαχειριστή server."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Δωρεάν και Open Source Machine μετάφραση API"
@@ -575,11 +574,12 @@ msgstr "Δωρεάν και Open Source Machine μετάφραση API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Δωρεάν και Open Source Machine Translation API. Self-hosted, offline ικανή "
-"και εύκολη στη ρύθμιση. Πατήστε το δικό σας διακομιστή API σε λίγα λεπτά."
+"Δωρεάν και Open Source Machine Translation API. Self-hosted, offline "
+"ικανή και εύκολη στη ρύθμιση. Πατήστε το δικό σας διακομιστή API σε λίγα "
+"λεπτά."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -729,12 +729,16 @@ msgstr "%(libretranslate)s Συμβαλλόμενοι"
 #~ msgstr "Βιετναμ Βιετνάμ"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Αυτό το δημόσιο API θα πρέπει να χρησιμοποιείται για δοκιμές, προσωπική ή "
-#~ "σπάνια χρήση. Εάν πρόκειται να εκτελέσετε μια εφαρμογή στην παραγωγή, "
+#~ "Αυτό το δημόσιο API θα πρέπει να"
+#~ " χρησιμοποιείται για δοκιμές, προσωπική ή"
+#~ " σπάνια χρήση. Εάν πρόκειται να "
+#~ "εκτελέσετε μια εφαρμογή στην παραγωγή, "
 #~ "παρακαλούμε %(host_server)s ή %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -742,3 +746,4 @@ msgstr "%(libretranslate)s Συμβαλλόμενοι"
 
 #~ msgid "get an API key"
 #~ msgstr "πάρετε ένα API key"
+
diff --git a/libretranslate/locales/eo/LC_MESSAGES/messages.po b/libretranslate/locales/eo/LC_MESSAGES/messages.po
index 473e0006c..675e50192 100644
--- a/libretranslate/locales/eo/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/eo/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-05-02 19:52+0000\n"
 "Last-Translator: Jorge Maldonado Ventura <jorgesumle@freakspot.net>\n"
 "Language: eo\n"
@@ -66,12 +66,14 @@ msgstr "Nevalida peto: mankas %(name)s parametro"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "Invalida peto: <x>0 0 0 0</x> parametro ne estas nombro %(name)s"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
 msgstr ""
+"Invalida peto: <x>0 0 0 0</x> parametro devas esti <x>1 1 1 1</x> "
+"%(name)s %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -129,7 +131,7 @@ msgstr "Angla"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "Albana albana"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -141,15 +143,15 @@ msgstr "Azerbajĝana"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "Bengala bengala"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "Bulgara Bulgaro"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "Katalana kataluno"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -157,7 +159,7 @@ msgstr "Ĉina"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "La ĉina (tradicia)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -177,7 +179,7 @@ msgstr "Esperanto"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "La estona"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -229,19 +231,19 @@ msgstr "Korea"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "La latva"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "Litova litovo"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "Malaja"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "Norvega"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -257,7 +259,7 @@ msgstr "Portugala"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "Rumana"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -269,7 +271,7 @@ msgstr "Slovaka"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "Slovena slovena"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -281,11 +283,11 @@ msgstr "Sveda"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "La tagaloga tagalo"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "Tajlanda"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -297,7 +299,7 @@ msgstr "Ukraina"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "La urdua"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -371,7 +373,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "Preferita nombro de alternativaj tradukoj"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
diff --git a/libretranslate/locales/es/LC_MESSAGES/messages.po b/libretranslate/locales/es/LC_MESSAGES/messages.po
index f9ee7c8a3..95e3dded6 100644
--- a/libretranslate/locales/es/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/es/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 22:34+0000\n"
 "Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
-"Language-Team: Spanish <https://hosted.weblate.org/projects/libretranslate/"
-"app/es/>\n"
 "Language: es\n"
+"Language-Team: Spanish "
+"<https://hosted.weblate.org/projects/libretranslate/app/es/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -746,3 +745,4 @@ msgstr "Colaboradores de %(libretranslate)s"
 
 #~ msgid "get an API key"
 #~ msgstr "obtén una clave API"
+
diff --git a/libretranslate/locales/et/LC_MESSAGES/messages.po b/libretranslate/locales/et/LC_MESSAGES/messages.po
index 278f456a0..e8bdb5e7a 100644
--- a/libretranslate/locales/et/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/et/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-02-01 18:01+0000\n"
 "Last-Translator: Priit Jõerüüt <hwlate@joeruut.com>\n"
-"Language-Team: Estonian <https://hosted.weblate.org/projects/libretranslate/app/et/>\n"
 "Language: et\n"
+"Language-Team: Estonian "
+"<https://hosted.weblate.org/projects/libretranslate/app/et/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -76,8 +77,8 @@ msgstr "Vigane taotlus: %(name)s parameeter peab olema ≤ %(value)s"
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"Vigane päring: päringu (%(size)s) suurus ületab tekstipäringutele lubatud "
-"ülempiiri (%(limit)s)"
+"Vigane päring: päringu (%(size)s) suurus ületab tekstipäringutele lubatud"
+" ülempiiri (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -93,11 +94,11 @@ msgstr "%(format)s vorming ei ole veel toetatud"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s keel (%(tcode)s) ei ole veel kasutatav sihtkeelena kui lähtekeel "
-"on %(sname)s keel (%(scode)s)"
+"%(tname)s keel (%(tcode)s) ei ole veel kasutatav sihtkeelena kui "
+"lähtekeel on %(sname)s keel (%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -485,8 +486,8 @@ msgstr "Usaldusväärsuse väärtus"
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
-"Lähteteksti tähemärkide mahu ülempiir selle keele kohta (-1 märgib ülempiiri"
-" puudumist)"
+"Lähteteksti tähemärkide mahu ülempiir selle keele kohta (-1 märgib "
+"ülempiiri puudumist)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -542,22 +543,20 @@ msgstr "Kopeeritud"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Täname tõlke parandusettepaneku eest. Palun arvesta, et ta ei tule koheselt "
-"kasutusele."
+"Täname tõlke parandusettepaneku eest. Palun arvesta, et ta ei tule "
+"koheselt kasutusele."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
-msgstr ""
-"Ühtegi keelt pole saadaval. Kas sa keelemudelid paigaldasid korrektselt?"
+msgstr "Ühtegi keelt pole saadaval. Kas sa keelemudelid paigaldasid korrektselt?"
 
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Sisesta siia oma API võti. Kui sul API võti on puudu, %(instructions)s"
+msgstr "Sisesta siia oma API võti. Kui sul API võti on puudu, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -567,8 +566,7 @@ msgstr "klõpsi linki „Osta API võti“."
 msgid "contact the server operator."
 msgstr "võta ühendust serveri haldajaga."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Vaba ja avatud lähtekoodiga masintõlke API"
@@ -576,12 +574,12 @@ msgstr "Vaba ja avatud lähtekoodiga masintõlke API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Vaba ja avatud lähtekoodiga masintõlke API. Majutatav oma serveris, toimib "
-"ka võrguühenduseta ja on hõlpsasti seadistatav. Võta oma API server "
-"kasutusele vaid mõne minutiga."
+"Vaba ja avatud lähtekoodiga masintõlke API. Majutatav oma serveris, "
+"toimib ka võrguühenduseta ja on hõlpsasti seadistatav. Võta oma API "
+"server kasutusele vaid mõne minutiga."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -702,8 +700,7 @@ msgstr "Avatud lähtekoodiga masintõlke API"
 
 #: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
-msgstr ""
-"Majutatav oma serveris. Toimib ka võrguühenduseta. Hõlpsasti seadistatav."
+msgstr "Majutatav oma serveris. Toimib ka võrguühenduseta. Hõlpsasti seadistatav."
 
 #: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
@@ -729,16 +726,21 @@ msgstr "%(libretranslate)s kaasautorid"
 #~ msgstr "vietnami"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Palun kasuta seda avalikku API't testimiseks, isiklikel eesmärkidel või "
-#~ "muudel harvadel juhtudel. Kui tahad kasutada API't mõnes "
-#~ "produktsioonirakenduses, siis palun %(host_server)s või %(get_api_key)s."
+#~ "Palun kasuta seda avalikku API't "
+#~ "testimiseks, isiklikel eesmärkidel või muudel"
+#~ " harvadel juhtudel. Kui tahad kasutada "
+#~ "API't mõnes produktsioonirakenduses, siis "
+#~ "palun %(host_server)s või %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "pane püsti oma server"
 
 #~ msgid "get an API key"
 #~ msgstr "või osta meie serveri API võti"
+
diff --git a/libretranslate/locales/eu/LC_MESSAGES/messages.po b/libretranslate/locales/eu/LC_MESSAGES/messages.po
index 3f5006abf..4dd37bfd0 100644
--- a/libretranslate/locales/eu/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/eu/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Basque translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,81 +8,90 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-20 23:03+0000\n"
 "Last-Translator: Urtzi Odriozola Lizaso <urtzi.odriozola@gmail.com>\n"
-"Language-Team: Basque <https://hosted.weblate.org/projects/libretranslate/"
-"app/eu/>\n"
 "Language: eu\n"
+"Language-Team: Basque "
+"<https://hosted.weblate.org/projects/libretranslate/app/eu/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.8-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "JSON formatu baliogabea"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Hautemate automatikoa"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Baimenik gabe"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Eskaera-mugaren urraketa gehiegi"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "API gako baliogabea"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
-msgstr ""
-"Mesedez, jarri harremanetan zerbitzari-operadorearekin API gakoa lortzeko"
+msgstr "Mesedez, jarri harremanetan zerbitzari-operadorearekin API gakoa lortzeko"
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Bisitatu %(url)s API gako bat lortzeko"
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Moteltzea:"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Eskaera baliogabea: %(name)s parametroa falta da"
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"Eskaera baliogabea: eskaerak (%(size)s) testu muga (%(limit)s) gainditzen du"
+"Eskaera baliogabea: eskaerak (%(size)s) testu muga (%(limit)s) gainditzen"
+" du"
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s ez da bateragarria"
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "%(format)s formatua ez da bateragarria"
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
@@ -91,28 +100,28 @@ msgstr ""
 "%(tname)s (%(tcode)s) ez dago eskuragarri helburu hizkuntza moduan "
 "%(sname)s-(e)tik (%(scode)s)"
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Ezin da testua itzuli: %(text)s"
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Fitxategi itzulpenak ez daude gaituta zerbitzari honetan."
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Eskaera baliogabea: fitxategi hutsa"
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Eskaera baliogabea: fitxategiaren formatua ez da bateragarria"
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Fitxategiaren izena baliogabea"
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Iradokizunak ez daude gaituta zerbitzari honetan."
 
@@ -121,119 +130,175 @@ msgid "English"
 msgstr "Ingelesa"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Arabiera"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azerbaijanera"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Txinera"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Txekiera"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Daniera"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Nederlandera"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperantoa"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finlandiera"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Frantsesa"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Alemana"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Greziera"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Hebreera"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Hindiera"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Hungariera"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonesiera"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irlandera"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italiera"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Japoniera"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Koreera"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Persiera"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Poloniera"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Portugesa"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Errusiera"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Eslovakiera"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Gaztelania"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Suediera"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Turkiera"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ukrainera"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -252,7 +317,7 @@ msgstr "itzuli"
 msgid "Translate text from a language to another"
 msgstr "Itzuli testua hizkuntza batetik bestera"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Itzulitako testua"
 
@@ -307,172 +372,176 @@ msgstr ""
 " * `html` - HTML etiketak\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "API gakoa"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Itzuli fitxategia hizkuntza batetik bestera"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Itzulitako fitxategia"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Itzultzeko fitxategia"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Hauteman testu bakar baten hizkuntza"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Hautemateak"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Hautemate errorea"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Hautemateko testua"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Eskuratu interfazeko ezarpen espezifikoak"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "interfaze ezarpenak"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "interfazea"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Bidali iradokizun bat itzulpena hobetzeko"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Arrakasta"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Baimenik gabea"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Jatorrizko testua"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Iradokitako itzulpena"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Jatorrizko testuaren hizkuntza"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Iradokitako itzulpenaren hizkuntza"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "iritzia"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Hizkuntzaren kodea"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Gizakiak uler dezakeen hizkuntzaren izena (ingelesez)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Helburuko hizkuntzen kode bateragarriak"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Itzulitako testua(k)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Errore mezua"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Moteltzeko arrazoia"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "Itzulitako fitxategiaren url"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Konfiantza balioa"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 "Karakterearen sarrera-muga hizkuntza honetarako (-1ek mugarik ez dagoela "
 "adierazten du)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Interfazeko itzulpen denbora"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "API gakoen datu-basea gaituta dagoen ala ez."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "API gako bat behar den ala ez."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Iradokizunak bidaltzea gaituta dagoen ala ez."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Fitxategi bateragarrien formatua"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Bidalketa arrakastatsua izan den ala ez"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Kopiatu testua"
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Ezin da %(url)s kargatu"
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Errore ezezaguna"
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Kopiatua"
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
@@ -480,25 +549,25 @@ msgstr ""
 "Eskerrik asko zuzenketagatik. Kontuan izan iradokizunak ez duela "
 "berehalakoan eraginik izango."
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Ez dago hizkuntza erabilgarririk. Modeloak ongi instalatu dituzu?"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Idatzi zure API gakoa. API gako bat behar baduzu, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "sakatu \"Lortu API Gakoa\" esteka."
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "jarri zerbitzari-operadorearekin harremanetan."
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Doako eta kode irekiko Itzulpen automatikoko APIa"
 
@@ -520,149 +589,151 @@ msgstr "itzulpena"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "API Dokak"
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Lortu API Gakoa"
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Ezarri API Gakoa"
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Aldatu hizkuntza"
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Editatu"
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr "Modu iluna/argia"
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Baztertu"
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "Itzulpen APIa"
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Itzuli testua"
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Itzuli fitxategiak"
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Itzuli hemendik:"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Aldatu jatorrizko eta helburuko hizkuntzak"
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Itzuli hona:"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Itzultzeko testua"
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Ezabatu testua"
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Iradoki itzulpena"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Utzi"
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Bidali"
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Fitxategi bateragarrien formatuak:"
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Fitxategia"
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Kendu fitxategia"
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Itzuli"
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Deskargatu"
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Eskaera"
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Erantzuna"
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "Kode Irekiko Itzulpen Automatikoko APIa"
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Norberak ostatatua. Konexio beharrik gabe. Konfiguratzeko erraza."
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Lizentzia:"
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr "%(contributors)sek %(heart)sez egina eta %(engine)sk sustatua"
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "%(libretranslate)s Laguntzaileak"
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/ext/LC_MESSAGES/messages.po b/libretranslate/locales/ext/LC_MESSAGES/messages.po
index 48336d0e0..860a3e72e 100644
--- a/libretranslate/locales/ext/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ext/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# ext translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,104 +8,114 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
 "Language: ext\n"
+"Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr ""
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr ""
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr ""
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr ""
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr ""
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr ""
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -114,119 +124,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
+msgid "Persian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:32
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -245,7 +311,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -297,199 +363,203 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
@@ -503,139 +573,127 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr ""
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -645,3 +703,21 @@ msgstr ""
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/ext/meta.json b/libretranslate/locales/ext/meta.json
new file mode 100644
index 000000000..94f476731
--- /dev/null
+++ b/libretranslate/locales/ext/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "ext",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/fa/LC_MESSAGES/messages.po b/libretranslate/locales/fa/LC_MESSAGES/messages.po
index f9e523cd0..ac0206fdb 100644
--- a/libretranslate/locales/fa/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/fa/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-07-26 07:54+0000\n"
 "Last-Translator: MjavadH <m.hacker0110@gmail.com>\n"
-"Language-Team: Persian <https://hosted.weblate.org/projects/libretranslate/app/fa/>\n"
 "Language: fa\n"
+"Language-Team: Persian "
+"<https://hosted.weblate.org/projects/libretranslate/app/fa/>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -75,8 +76,7 @@ msgstr "درخواست Invalid: %(name)s پارامتر باید &lt;= <x>1 1</x
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"درخواست نامعتبر: درخواست (%(size)s) از محدودیت متنی (%(limit)s) فراتر رفت"
+msgstr "درخواست نامعتبر: درخواست (%(size)s) از محدودیت متنی (%(limit)s) فراتر رفت"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -92,11 +92,11 @@ msgstr "فرمت %(format)s پشتیبانی نمی‌شود"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"(%(tcode)s) (%(tname)s) از (%(scode)s) (%(sname)s) به عنوان یک زبان هدف در "
-"دسترس نیست"
+"(%(tcode)s) (%(tname)s) از (%(scode)s) (%(sname)s) به عنوان یک زبان هدف "
+"در دسترس نیست"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -539,8 +539,8 @@ msgstr "کپی شد"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
 "از تصحیح شما سپاس‌گزاریم. توجه داشته باشید که این پیشنهاد بلافاصله اجرا "
 "نخواهد شد."
@@ -553,7 +553,8 @@ msgstr "هیچ زبانی در دسترس نیست. آیا مدل‌ها را ب
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
-"کلید API خود را وارد نمایید. اگر به یک کلید API نیاز دارید، %(instructions)s"
+"کلید API خود را وارد نمایید. اگر به یک کلید API نیاز دارید، "
+"%(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -563,8 +564,7 @@ msgstr "بر روی لینک \"دریافت کلید API\" کلیک کنید."
 msgid "contact the server operator."
 msgstr "با اپراتور سرور تماس بگیرید."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API ترجمه ماشینی رایگان و متن باز"
@@ -572,11 +572,11 @@ msgstr "API ترجمه ماشینی رایگان و متن باز"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API ترجمه ماشینی رایگان و متن باز. خود میزبان، با قابلیت راه‌اندازی آسان و "
-"آفلاین. سرور API خود را تنها در چند دقیقه اجرا کنید."
+"API ترجمه ماشینی رایگان و متن باز. خود میزبان، با قابلیت راه‌اندازی آسان "
+"و آفلاین. سرور API خود را تنها در چند دقیقه اجرا کنید."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -710,8 +710,7 @@ msgstr "مجوز:"
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
-msgstr ""
-"ساخته شده با %(heart)s توسط %(contributors)s و قدرت گرفته از %(engine)s"
+msgstr "ساخته شده با %(heart)s توسط %(contributors)s و قدرت گرفته از %(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
@@ -725,16 +724,21 @@ msgstr "مشارکت‌‌کنندگان %(libretranslate)s"
 #~ msgstr "ویتنامی"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "این API عمومی باید برای آزمایش، استفاده شخصی یا اختصاصی است. اگر قرار است "
-#~ "برنامه‌ای که برای محصول است با آن اجرا کنید، لطفا %(host_server)s یا "
-#~ "%(get_api_key)s."
+#~ "این API عمومی باید برای آزمایش، "
+#~ "استفاده شخصی یا اختصاصی است. اگر "
+#~ "قرار است برنامه‌ای که برای محصول "
+#~ "است با آن اجرا کنید، لطفا "
+#~ "%(host_server)s یا %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "در سرور خود میزبانی کنید"
 
 #~ msgid "get an API key"
 #~ msgstr "یک کلید API بگیرید"
+
diff --git a/libretranslate/locales/fi/LC_MESSAGES/messages.po b/libretranslate/locales/fi/LC_MESSAGES/messages.po
index b67f1c0d9..96a3b72cc 100644
--- a/libretranslate/locales/fi/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/fi/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-02-27 19:38+0000\n"
 "Last-Translator: Marko Korhonen <github@functionalhacker.korhonen.cc>\n"
-"Language-Team: Finnish <https://hosted.weblate.org/projects/libretranslate/app/fi/>\n"
 "Language: fi\n"
+"Language-Team: Finnish "
+"<https://hosted.weblate.org/projects/libretranslate/app/fi/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -70,14 +71,12 @@ msgstr "Virheellinen pyyntö: %(name)s Parametri ei ole numero"
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
-"Virheellinen pyyntö: %(name)s Parametrin on oltava <x>1 1</x> %(value)s"
+msgstr "Virheellinen pyyntö: %(name)s Parametrin on oltava <x>1 1</x> %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"Virheellinen pyyntö: pyyntö (%(size)s ylittää tekstin rajan (%(limit)s)"
+msgstr "Virheellinen pyyntö: pyyntö (%(size)s ylittää tekstin rajan (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -93,10 +92,9 @@ msgstr "%(format)s formaattia ei tueta"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
-msgstr ""
-"%(tname)s (%(tcode)s) ei ole saatavilla kohdekielenä %(sname)s (%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
+msgstr "%(tname)s (%(tcode)s) ei ole saatavilla kohdekielenä %(sname)s (%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -539,8 +537,8 @@ msgstr "Kopioitiin"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "Kiitos korjauksesta. Huomaa, että ehdotus ei tule heti voimaan."
 
 #: libretranslate/templates/app.js.template:461
@@ -560,8 +558,7 @@ msgstr "paina \"Get API Key\" -linkkiä."
 msgid "contact the server operator."
 msgstr "ota yhteyttä palvelimen ylläpitäjään."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Ilmainen ja avoimen lähdekoodin konekäännösrajapinta"
@@ -569,8 +566,8 @@ msgstr "Ilmainen ja avoimen lähdekoodin konekäännösrajapinta"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "Ilmainen ja avoimen lähdekoodin konekäännösrajapinta. Itseisännöity, "
 "offline-tilassa toimiva ja helppo asentaa. Käytä omaa API-palvelintasi "
@@ -722,16 +719,21 @@ msgstr "%(libretranslate)s Osallistujat"
 #~ msgstr "Vietnami"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Tämä julkinen API on käytettävissä testaamiseen, henkilökohtaiseen tai "
-#~ "harvaan käyttöön. Jos aiot käyttää sovellusta tuotannossa, ole hyvä "
-#~ "%(host_server)s tai %(get_api_key)s."
+#~ "Tämä julkinen API on käytettävissä "
+#~ "testaamiseen, henkilökohtaiseen tai harvaan "
+#~ "käyttöön. Jos aiot käyttää sovellusta "
+#~ "tuotannossa, ole hyvä %(host_server)s tai "
+#~ "%(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "isännöi oma palvelin"
 
 #~ msgid "get an API key"
 #~ msgstr "hanki API-avain"
+
diff --git a/libretranslate/locales/fil/LC_MESSAGES/messages.po b/libretranslate/locales/fil/LC_MESSAGES/messages.po
index 8a89df98f..9ed313993 100644
--- a/libretranslate/locales/fil/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/fil/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Filipino translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,113 +8,122 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-04-03 08:46+0000\n"
-"Last-Translator: searinminecraft <114207889+searinminecraft@users.noreply."
-"github.com>\n"
-"Language-Team: Filipino <https://hosted.weblate.org/projects/libretranslate/"
-"app/fil/>\n"
+"Last-Translator: searinminecraft "
+"<114207889+searinminecraft@users.noreply.github.com>\n"
 "Language: fil\n"
+"Language-Team: Filipino "
+"<https://hosted.weblate.org/projects/libretranslate/app/fil/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 =="
+" 4 || n % 10 == 6 || n % 10 == 9);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
-"|| n % 10 == 6 || n % 10 == 9);\n"
-"X-Generator: Weblate 5.5-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Hindi wastong JSON format"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "I-auto Detect"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Hindi awtorisado"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Masyadong maraming paglalabag sa limitasyon ng hiling"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Hindi wastong API key"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Makipag-ugnayan sa operator ng server para makakuha ng API key"
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Bisitahin ang %(url)s para makakuha ng API key"
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Slowdown:"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Hindi wastong hiling: nawawalang %(name)s na parameter"
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Hindi wastong hiling: lumalagpas ang hiling (%(size)s) ang limitasyon ng "
 "text (%(limit)s)"
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "Hindi sinusuportahan ang %(lang)s"
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "Hindi sinusuportahan ang %(format)s na format"
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
-"Ang %(tname)s (%(tcode)s) ay hindi available bilang target na wika galing sa "
-"%(sname)s (%(scode)s)"
+"Ang %(tname)s (%(tcode)s) ay hindi available bilang target na wika galing"
+" sa %(sname)s (%(scode)s)"
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Hindi masalin ang text: %(text)s"
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Ang pagsalin ng file ay naka-disable sa server na ito."
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Hindi wastong hiling: walang laman na file"
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Hindi wastong hiling: hindi sinusuportahan ang file format"
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Hindi wastong filename"
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Naka-disable ang mga mungkahi sa server na ito."
 
@@ -123,119 +132,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
+msgid "Persian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:32
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -254,7 +319,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -306,194 +371,198 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
@@ -512,149 +581,151 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr ""
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/fil/meta.json b/libretranslate/locales/fil/meta.json
new file mode 100644
index 000000000..241cc010f
--- /dev/null
+++ b/libretranslate/locales/fil/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "fil",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/fr/LC_MESSAGES/messages.po b/libretranslate/locales/fr/LC_MESSAGES/messages.po
index 171eff07d..1fd99a5c3 100644
--- a/libretranslate/locales/fr/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/fr/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-01-04 00:08+0000\n"
 "Last-Translator: EGuillemot <Elouen.Guillemot@gmail.com>\n"
 "Language: fr\n"
@@ -66,12 +66,12 @@ msgstr "Requête incorrecte : le paramètre %(name)s est manquant"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "Demande non valable: %(name)s paramètre n'est pas un nombre"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
+msgstr "Demande non valable: %(name)s paramètre doit être &lt;= %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -131,7 +131,7 @@ msgstr "Anglais"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "Albanais"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -143,15 +143,15 @@ msgstr "azéri"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "Bengali"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "Bulgare"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "Catalan"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -159,7 +159,7 @@ msgstr "chinois"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "Chinois (traditionnel)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -179,7 +179,7 @@ msgstr "espéranto"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "Estonien"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -231,19 +231,19 @@ msgstr "coréen"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "Lettonie"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "Lituanien"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "Malay"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "Norvège"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -259,7 +259,7 @@ msgstr "portugais"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "Roumain"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -271,7 +271,7 @@ msgstr "slovaque"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "Slovénie"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -283,11 +283,11 @@ msgstr "suédois"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "Tagalog"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "Thaï"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -299,7 +299,7 @@ msgstr "ukrainien"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "Ourdou"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -373,7 +373,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "Nombre préféré de traductions alternatives"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
diff --git a/libretranslate/locales/ga/LC_MESSAGES/messages.po b/libretranslate/locales/ga/LC_MESSAGES/messages.po
index 7e0d46657..96c3e125f 100644
--- a/libretranslate/locales/ga/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ga/LC_MESSAGES/messages.po
@@ -8,18 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-15 20:09+0000\n"
 "Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>\n"
-"Language-Team: Irish <https://hosted.weblate.org/projects/libretranslate/app/"
-"ga/>\n"
 "Language: ga\n"
+"Language-Team: Irish "
+"<https://hosted.weblate.org/projects/libretranslate/app/ga/>\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 "
+":(n>6 && n<11) ? 3 : 4;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :("
-"n>6 && n<11) ? 3 : 4;\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -73,8 +72,7 @@ msgstr "Iarratas neamhbhailí: ní uimhir é paraiméadar %(name)s"
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
-"Iarratas neamhbhailí: Caithfidh paraiméadar %(name)s a bheith <= %(value)s"
+msgstr "Iarratas neamhbhailí: Caithfidh paraiméadar %(name)s a bheith <= %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -97,8 +95,8 @@ msgstr "Ní thacaítear le formáid %(format)s"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) nach bhfuil ar fáil mar sprioctheanga ó %(sname)s "
 "(%(scode)s)"
@@ -488,8 +486,7 @@ msgstr "Luach muiníne"
 
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
-msgstr ""
-"Teorainn ionchuir charachtair don teanga seo (ní léiríonn -1 aon teorainn)"
+msgstr "Teorainn ionchuir charachtair don teanga seo (ní léiríonn -1 aon teorainn)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -545,22 +542,20 @@ msgstr "Cóipeáladh"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Go raibh maith agat as do cheartú. Tabhair faoi deara nach mbeidh an moladh "
-"i bhfeidhm ar shiúl."
+"Go raibh maith agat as do cheartú. Tabhair faoi deara nach mbeidh an "
+"moladh i bhfeidhm ar shiúl."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
-msgstr ""
-"Níl aon teangacha ar fáil. An raibh tú a shuiteáil na samhlacha i gceart?"
+msgstr "Níl aon teangacha ar fáil. An raibh tú a shuiteáil na samhlacha i gceart?"
 
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Clóscríobh isteach d'Eochair API. Má tá eochair API uait, %(instructions)s"
+msgstr "Clóscríobh isteach d'Eochair API. Má tá eochair API uait, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -570,8 +565,7 @@ msgstr "brúigh an nasc \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "déan teagmháil le hoibreoir an fhreastalaí."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API Aistriú Meaisín Foinse Oscailte saor in aisce"
@@ -579,11 +573,12 @@ msgstr "API Aistriú Meaisín Foinse Oscailte saor in aisce"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API Aistriú Meaisín Foinse Oscailte saor in aisce. Féin-óstach, as líne in "
-"ann agus éasca le socrú. Rith do fhreastalaí API féin i gceann cúpla nóiméad."
+"API Aistriú Meaisín Foinse Oscailte saor in aisce. Féin-óstach, as líne "
+"in ann agus éasca le socrú. Rith do fhreastalaí API féin i gceann cúpla "
+"nóiméad."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -717,8 +712,7 @@ msgstr "Ceadúnas:"
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
-msgstr ""
-"Déanta le %(heart)s ag %(contributors)s agus arna chumhachtú ag %(engine)s"
+msgstr "Déanta le %(heart)s ag %(contributors)s agus arna chumhachtú ag %(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
@@ -732,16 +726,22 @@ msgstr "%(libretranslate)s Rannpháirtithe"
 #~ msgstr "Vítneaimis Víneaimis"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Ba cheart an API poiblí seo a úsáid le haghaidh tástála, úsáide pearsanta nó"
-#~ " go minic. Má tá tú ag dul a reáchtáil iarratas i dtáirgeadh, le do thoil "
-#~ "%(host_server)s nó %(get_api_key)s."
+#~ "Ba cheart an API poiblí seo a "
+#~ "úsáid le haghaidh tástála, úsáide "
+#~ "pearsanta nó go minic. Má tá tú"
+#~ " ag dul a reáchtáil iarratas i "
+#~ "dtáirgeadh, le do thoil %(host_server)s "
+#~ "nó %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "óstach do fhreastalaí féin"
 
 #~ msgid "get an API key"
 #~ msgstr "a fháil eochair API"
+
diff --git a/libretranslate/locales/gl/LC_MESSAGES/messages.po b/libretranslate/locales/gl/LC_MESSAGES/messages.po
index 97d3530eb..3db79a919 100644
--- a/libretranslate/locales/gl/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/gl/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Galician translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,81 +8,90 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-01-17 09:47+0000\n"
 "Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
-"Language-Team: Galician <https://hosted.weblate.org/projects/libretranslate/"
-"app/gl/>\n"
 "Language: gl\n"
+"Language-Team: Galician "
+"<https://hosted.weblate.org/projects/libretranslate/app/gl/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.15.1-dev\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Formato JSON non válido"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Auto Detección"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Non autorizado"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Demasiadas peticións por enriba do límite"
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Chave API non válida"
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Contacte coa xerencia do servidor para obter unha chave da API"
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Visite %(url)s para obter unha chave API"
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Máis amodo:"
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Solicitude non válida: falta o parámetro %(name)s"
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Solicitude non válida: solicitude (%(size)s) supera o límite de texto "
 "(%(limit)s)"
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "Non hai soporte para %(lang)s"
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "Non hai soporte para o formato %(format)s"
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
@@ -91,28 +100,28 @@ msgstr ""
 "%(tname)s (%(tcode)s non está dispoñible como idioma a traducir desde "
 "%(sname)s (%(scode)s)"
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Non se pode traducir: %(text)s"
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "A tradución de ficheiros está desactivada neste servidor."
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Solicitude non válida: ficheiro baleiro"
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Solicitude non válida: o formato do ficheiro non está soportado"
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Nome de ficheiro non válido"
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "As suxestións están desactivadas neste servidor."
 
@@ -121,120 +130,176 @@ msgid "English"
 msgstr "Inglés"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Árabe"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Acerbaixano"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Chinés"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Checo"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Dinamarqués"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Neerlandés"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finés"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Francés"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Alemán"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Grego"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Hebreo"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Hindi"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Húngaro"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonesio"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irlandés"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italiano"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Xaponés"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Coreano"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Farsi"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Polaco"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Portugués"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Ruso"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Eslovaco"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Español"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Sueco"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Turco"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ucraniano"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Vietnamita"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -252,7 +317,7 @@ msgstr "traducir"
 msgid "Translate text from a language to another"
 msgstr "Traducir texto dun idioma a outro"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Texto traducido"
 
@@ -307,171 +372,174 @@ msgstr ""
 " * `html`- Marcado HTML\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "Chave API"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Traducir un ficheiro dun idioma a outro"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Ficheiro traducido"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Ficheiro a traducir"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Detectar idioma dun único texto"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Deteccións"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Erro na detección"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Texto a detectar"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Obter axustes específicos da interface"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "axustes da interface"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "interface"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Enviar unha suxestión para mellorar a tradución"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Correcto"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Non autorizado"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Texto orixinal"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Tradución suxerida"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Idioma do texto orixinal"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Idioma da tradución suxerida"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "opinión"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Código de idioma"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Nome do idioma en formato lexible (en Inglés)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Códigos de idioma obxectivo soportados"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Texto(s) traducido(s)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Mensaxe de erro"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Motivo da ralentización"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL do ficheiro traducido"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Valor de fiabilidade"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
-msgstr ""
-"Límite de caracteres de entrada par este idioma (-1 significa sen límite)"
+msgstr "Límite de caracteres de entrada par este idioma (-1 significa sen límite)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Marxe temporal para a tradución na interface"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Se a base de datos de chaves API está activada."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Se é precisa unha chave API."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Se está activado o envío de suxestións."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Formatos de ficheiro soportados"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Se o envío foi correcto"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Copiar texto"
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Non se cargou %(url)s"
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Erro descoñecido"
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Copiado"
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
@@ -479,37 +547,37 @@ msgstr ""
 "Grazas pola túa corrección. Ten en conta que a suxestión non ten efectos "
 "inmediatos."
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Sen idiomas dispoñibles. Instalaches os módulos correctamente?"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Escribe a túa Chave API. Se precisas unha Chave API, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "preme na ligazón \"Obter Chave API\"."
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "contacta coa xerencia do servidor."
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API da Tradución por Máquina de código Libre e Aberto"
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API da Tradución por Máquina de código Libre e Aberto. Auto-Hospedado, doado "
-"de instalar e sen precisar conexión. Executa o teu propio servidor API en só "
-"uns minutos."
+"API da Tradución por Máquina de código Libre e Aberto. Auto-Hospedado, "
+"doado de instalar e sen precisar conexión. Executa o teu propio servidor "
+"API en só uns minutos."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -519,142 +587,127 @@ msgstr "tradución"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "Docs da API"
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Obter Chave API"
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Establecer Chave API"
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Cambiar de Idioma"
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Editar"
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Desbotar"
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API de tradución"
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Traducir Texto"
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Traducir Ficheiros"
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Traducir desde"
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Intercambiar idiomas de orixe e obxectivo"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Traducir ao"
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Texto a traducir"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Eliminar texto"
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Suxerir tradución"
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Enviar"
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Formatos de ficheiro soportados:"
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Ficheiro"
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Eliminar ficheiro"
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Traduce"
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Descargar"
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Solicitar"
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Resposta"
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API de Tradución por Máquina de Código Aberto"
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Auto-Hospedado. Sen Conexión. Doado de Configurar."
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Licenza:"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-"Esta API pública só debe ser utilizada para probas, de xeito personal e "
-"pouco frecuente. Se vas a usar unha aplicación en produción, por favor "
-"%(host_server)s ou %(get_api_key)s."
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr "instala o teu propio servidor"
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr "obtén unha chave API"
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -664,3 +717,26 @@ msgstr "Feito con %(heart)s por %(contributors)s e grazas a %(engine)s"
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "Colaboradoras de %(libretranslate)s"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vietnamita"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "Esta API pública só debe ser "
+#~ "utilizada para probas, de xeito personal"
+#~ " e pouco frecuente. Se vas a "
+#~ "usar unha aplicación en produción, por"
+#~ " favor %(host_server)s ou %(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "instala o teu propio servidor"
+
+#~ msgid "get an API key"
+#~ msgstr "obtén unha chave API"
+
diff --git a/libretranslate/locales/gl/meta.json b/libretranslate/locales/gl/meta.json
new file mode 100644
index 000000000..2317495e1
--- /dev/null
+++ b/libretranslate/locales/gl/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "gl",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/he/LC_MESSAGES/messages.po b/libretranslate/locales/he/LC_MESSAGES/messages.po
index f9d929ffd..5ccb87135 100644
--- a/libretranslate/locales/he/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/he/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-05-01 11:52+0000\n"
 "Last-Translator: Tamir Ben-Arie <tamirben1@gmail.com>\n"
-"Language-Team: Hebrew <https://hosted.weblate.org/projects/libretranslate/app/he/>\n"
 "Language: he\n"
+"Language-Team: Hebrew "
+"<https://hosted.weblate.org/projects/libretranslate/app/he/>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -93,8 +94,8 @@ msgstr "פורמט %(format)s אינו נתמך"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr "(%(tname)s) (%(tcode)s)לא זמינה כשפת מטרה מהשפה %(sname)s (%(scode)s)"
 
 #: libretranslate/app.py:701
@@ -538,8 +539,8 @@ msgstr "שוטרים"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "תודה על התיקון שלך. שימו לב שההצעה לא תיכנס לתוקף מיד."
 
 #: libretranslate/templates/app.js.template:461
@@ -559,8 +560,7 @@ msgstr "לחצו על הקישור \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "צור קשר עם מפעיל השרת."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Free and Open Source Machine"
@@ -568,11 +568,11 @@ msgstr "Free and Open Source Machine"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Free and Open Source Machine Translation API עוין עצמי, לא מקוון מסוגל וקל "
-"להגדרה. הפעילו את שרת ה- API שלכם תוך מספר דקות בלבד."
+"Free and Open Source Machine Translation API עוין עצמי, לא מקוון מסוגל "
+"וקל להגדרה. הפעילו את שרת ה- API שלכם תוך מספר דקות בלבד."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -720,15 +720,21 @@ msgstr "תורמי %(libretranslate)s"
 #~ msgstr "וייטנאם"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "ממשק API ציבורי זה משמש לבדיקה, שימוש אישי או בלתי צפוי בלבד. אם אתה הולך "
-#~ "להפעיל יישום בסביבת פעילות מלאה, בבקשה %(host_server)s או %(get_api_key)s."
+#~ "ממשק API ציבורי זה משמש לבדיקה, "
+#~ "שימוש אישי או בלתי צפוי בלבד. אם"
+#~ " אתה הולך להפעיל יישום בסביבת פעילות"
+#~ " מלאה, בבקשה %(host_server)s או "
+#~ "%(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "מארח את השרת שלך"
 
 #~ msgid "get an API key"
 #~ msgstr "מפתח API"
+
diff --git a/libretranslate/locales/hi/LC_MESSAGES/messages.po b/libretranslate/locales/hi/LC_MESSAGES/messages.po
index 25554b4bc..91991aa3a 100644
--- a/libretranslate/locales/hi/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/hi/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-02-24 17:01+0000\n"
 "Last-Translator: Scrambled777 <weblate.scrambled777@simplelogin.com>\n"
-"Language-Team: Hindi <https://hosted.weblate.org/projects/libretranslate/app/hi/>\n"
 "Language: hi\n"
+"Language-Team: Hindi "
+"<https://hosted.weblate.org/projects/libretranslate/app/hi/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -91,11 +92,11 @@ msgstr "%(format)s प्रारूप समर्थित नहीं ह
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (d)%(tcode)s) से लक्ष्य भाषा के रूप में उपलब्ध नहीं है %(sname)s "
-"(d)%(scode)s)"
+"%(tname)s (d)%(tcode)s) से लक्ष्य भाषा के रूप में उपलब्ध नहीं है "
+"%(sname)s (d)%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -538,15 +539,13 @@ msgstr "कॉपी किया गया"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
-msgstr ""
-"आपके सुधार के लिए धन्यवाद। ध्यान दें कि सुझाव तुरंत प्रभावी नहीं होगा।."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
+msgstr "आपके सुधार के लिए धन्यवाद। ध्यान दें कि सुझाव तुरंत प्रभावी नहीं होगा।."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
-msgstr ""
-"कोई भाषा उपलब्ध नहीं है। क्या आप मॉडल को सही ढंग से स्थापित कर सकते हैं?"
+msgstr "कोई भाषा उपलब्ध नहीं है। क्या आप मॉडल को सही ढंग से स्थापित कर सकते हैं?"
 
 #: libretranslate/templates/app.js.template:528
 #, python-format
@@ -563,8 +562,7 @@ msgstr "\"API कुंजी प्राप्त करें\" लिंक
 msgid "contact the server operator."
 msgstr "सर्वर ऑपरेटर से संपर्क करें।."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "मुफ़्त और मुक्त स्रोत मशीन अनुवाद API"
@@ -572,11 +570,11 @@ msgstr "मुफ़्त और मुक्त स्रोत मशीन 
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"मुफ़्त और मुक्त स्रोत मशीन अनुवाद एपीआई। स्व-होस्टेड, ऑफ़लाइन सक्षम और सेटअप"
-" करने में आसान। कुछ ही मिनटों में अपना स्वयं का API सर्वर चलाएं।"
+"मुफ़्त और मुक्त स्रोत मशीन अनुवाद एपीआई। स्व-होस्टेड, ऑफ़लाइन सक्षम और "
+"सेटअप करने में आसान। कुछ ही मिनटों में अपना स्वयं का API सर्वर चलाएं।"
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -726,16 +724,21 @@ msgstr "%(libretranslate)s योगदानकर्ता"
 #~ msgstr "वियतनामी"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "इस सार्वजनिक API का उपयोग परीक्षण, व्यक्तिगत या गलत उपयोग के लिए किया जाना "
-#~ "चाहिए। यदि आप उत्पादन में आवेदन चला रहे हैं, तो कृपया ध्यान दें। "
-#~ "%(host_server)s या %(get_api_key)s।"
+#~ "इस सार्वजनिक API का उपयोग परीक्षण, "
+#~ "व्यक्तिगत या गलत उपयोग के लिए किया"
+#~ " जाना चाहिए। यदि आप उत्पादन में "
+#~ "आवेदन चला रहे हैं, तो कृपया ध्यान"
+#~ " दें। %(host_server)s या %(get_api_key)s।"
 
 #~ msgid "host your own server"
 #~ msgstr "अपने सर्वर को होस्ट करें"
 
 #~ msgid "get an API key"
 #~ msgstr "API कुंजी प्राप्त करें"
+
diff --git a/libretranslate/locales/hu/LC_MESSAGES/messages.po b/libretranslate/locales/hu/LC_MESSAGES/messages.po
index 0d1c56d8d..39a5be4a3 100644
--- a/libretranslate/locales/hu/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/hu/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-04-18 08:04+0000\n"
 "Last-Translator: Netesfiu <r4verino@gmail.com>\n"
 "Language: hu\n"
@@ -68,12 +68,12 @@ msgstr "Érvénytelen kérés: hiányzik a(z) %(name)s paraméter"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "Érvénytelen kérés: <x>0 0</x> paraméter nem szám %(name)s"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
+msgstr "Érvénytelen kérés: <x>0 0</x> paraméternek &lt;= %(value)s %(name)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -133,7 +133,7 @@ msgstr "Angol"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "Albáni"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -145,15 +145,15 @@ msgstr "Azerbajdzsán"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "Bengali"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "Bolgár"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "Katalán"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -161,7 +161,7 @@ msgstr "Kínai"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "Kína (hagyományos)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -181,7 +181,7 @@ msgstr "Eszperantó"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "Észtország"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -233,19 +233,19 @@ msgstr "Koreai"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "Lettország"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "Litvánia"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "Malajzia"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "Norvégia"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -261,7 +261,7 @@ msgstr "Portugál"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "Románia"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -273,7 +273,7 @@ msgstr "Szlovák"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "Szlovén"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -285,11 +285,11 @@ msgstr "Svéd"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "Tagalog"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "Thai"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -301,7 +301,7 @@ msgstr "Ukrán"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "Uram"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -375,7 +375,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "Előnyös számú alternatív fordítás"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
diff --git a/libretranslate/locales/id/LC_MESSAGES/messages.po b/libretranslate/locales/id/LC_MESSAGES/messages.po
index f9ef1b245..a91e563b1 100644
--- a/libretranslate/locales/id/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/id/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-06-08 12:27+0000\n"
 "Last-Translator: Wahyu Hamdani <mrhamdani0101@gmail.com>\n"
-"Language-Team: Indonesian <https://hosted.weblate.org/projects/libretranslate/app/id/>\n"
 "Language: id\n"
+"Language-Team: Indonesian "
+"<https://hosted.weblate.org/projects/libretranslate/app/id/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -65,8 +66,7 @@ msgstr "Permintaan tidak valid: parameter %(name)s tidak ada"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
-"permintaan tidak valid: <x>Sitemap</x> parameter bukan jumlah %(name)s"
+msgstr "permintaan tidak valid: <x>Sitemap</x> parameter bukan jumlah %(name)s"
 
 #: libretranslate/app.py:595
 #, python-format
@@ -96,11 +96,11 @@ msgstr "%(format)s format tidak didukung"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (%(tcode)s) tidak tersedia sebagai bahasa target dari %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) tidak tersedia sebagai bahasa target dari %(sname)s"
+" (%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -487,8 +487,7 @@ msgstr "Nilai kepercayaan"
 
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
-msgstr ""
-"Batas input karakter untuk bahasa ini (-1 menunjukkan tidak ada batasan)"
+msgstr "Batas input karakter untuk bahasa ini (-1 menunjukkan tidak ada batasan)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -544,16 +543,15 @@ msgstr "Disalin"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Terima kasih atas koreksi Anda. Perhatikan saran tidak akan mengambil efek "
-"segera."
+"Terima kasih atas koreksi Anda. Perhatikan saran tidak akan mengambil "
+"efek segera."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
-msgstr ""
-"Tidak ada bahasa yang tersedia. Apakah Anda menginstal model dengan benar?"
+msgstr "Tidak ada bahasa yang tersedia. Apakah Anda menginstal model dengan benar?"
 
 #: libretranslate/templates/app.js.template:528
 #, python-format
@@ -568,8 +566,7 @@ msgstr "tekan tautan \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "hubungi operator server."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API Translation API"
@@ -577,8 +574,8 @@ msgstr "API Translation API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "Gratis dan Open Source Machine Translation API. Secara mandiri, offline "
 "mampu dan mudah diatur. Jalankan server API Anda sendiri hanya dalam "
@@ -716,8 +713,7 @@ msgstr "Lisensi:"
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
-msgstr ""
-"Dibuat dengan %(heart)s oleh %(contributors)s dan didukung oleh %(engine)s"
+msgstr "Dibuat dengan %(heart)s oleh %(contributors)s dan didukung oleh %(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
@@ -731,16 +727,21 @@ msgstr "Kontributor %(libretranslate)s"
 #~ msgstr "Vietnam"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "API publik ini harus digunakan untuk pengujian, penggunaan pribadi, atau "
-#~ "jarang dipakai. Jika Anda akan menjalankan aplikasi dalam tahap produksi, "
-#~ "silakan %(host_server)s atau %(get_api_key)s."
+#~ "API publik ini harus digunakan untuk "
+#~ "pengujian, penggunaan pribadi, atau jarang "
+#~ "dipakai. Jika Anda akan menjalankan "
+#~ "aplikasi dalam tahap produksi, silakan "
+#~ "%(host_server)s atau %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "host server anda sendiri"
 
 #~ msgid "get an API key"
 #~ msgstr "dapatkan kunci API"
+
diff --git a/libretranslate/locales/it/LC_MESSAGES/messages.po b/libretranslate/locales/it/LC_MESSAGES/messages.po
index 1f315b133..74802e604 100644
--- a/libretranslate/locales/it/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/it/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 22:34+0000\n"
 "Last-Translator: Piero Toffanin <pt@masseranolabs.com>\n"
-"Language-Team: Italian <https://hosted.weblate.org/projects/libretranslate/"
-"app/it/>\n"
 "Language: it\n"
+"Language-Team: Italian "
+"<https://hosted.weblate.org/projects/libretranslate/app/it/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -745,3 +744,4 @@ msgstr "Contributori di %(libretranslate)s"
 
 #~ msgid "get an API key"
 #~ msgstr "ottieni una chiave API"
+
diff --git a/libretranslate/locales/ja/LC_MESSAGES/messages.po b/libretranslate/locales/ja/LC_MESSAGES/messages.po
index 014d2bb89..f26933894 100644
--- a/libretranslate/locales/ja/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ja/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-06 06:09+0000\n"
 "Last-Translator: VTF <vtf@msjp.pro>\n"
-"Language-Team: Japanese <https://hosted.weblate.org/projects/libretranslate/"
-"app/ja/>\n"
 "Language: ja\n"
+"Language-Team: Japanese "
+"<https://hosted.weblate.org/projects/libretranslate/app/ja/>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -93,8 +92,8 @@ msgstr "%(format)s フォーマットはサポートされていません"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr "%(tname)s (%(tcode)s) 対象言語は対象言語として利用できません。 %(sname)s (%(scode)s)"
 
 #: libretranslate/app.py:701
@@ -538,8 +537,8 @@ msgstr "コピーされました"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "修正ありがとうございます。 提案はすぐには反映しないことをご理解ください。"
 
 #: libretranslate/templates/app.js.template:461
@@ -559,8 +558,7 @@ msgstr "「APIキーを取得」リンクを押してください。"
 msgid "contact the server operator."
 msgstr "サーバーオペレータに連絡して下さい。"
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "フリーそしてオープンソースな機械翻訳API"
@@ -568,10 +566,9 @@ msgstr "フリーそしてオープンソースな機械翻訳API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
-msgstr "フリーでオープンソースな機械翻訳API。セルフホスト、オフラインで利用可能、セッ"
-"トアップも簡単。数分であなたのAPIサーバーを実行。"
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
+msgstr "フリーでオープンソースな機械翻訳API。セルフホスト、オフラインで利用可能、セットアップも簡単。数分であなたのAPIサーバーを実行。"
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -719,15 +716,19 @@ msgstr "%(libretranslate)s 貢献者"
 #~ msgstr "ベトナム"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "この公開API はテストまたは個人的、頻繁でない用途に使用してください。製品のアプリケーションに使用する場合は、%(host_server)s または "
-#~ "%(get_api_key)sしてください。"
+#~ "この公開API "
+#~ "はテストまたは個人的、頻繁でない用途に使用してください。製品のアプリケーションに使用する場合は、%(host_server)s "
+#~ "または %(get_api_key)sしてください。"
 
 #~ msgid "host your own server"
 #~ msgstr "自分のサーバーをホストする"
 
 #~ msgid "get an API key"
 #~ msgstr "APIキーを取得"
+
diff --git a/libretranslate/locales/kab/LC_MESSAGES/messages.po b/libretranslate/locales/kab/LC_MESSAGES/messages.po
index c74e69993..fcec54333 100644
--- a/libretranslate/locales/kab/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/kab/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Kabyle translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,79 +8,89 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-17 21:09+0000\n"
-"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
-"Language-Team: Kabyle <https://hosted.weblate.org/projects/libretranslate/"
-"app/kab/>\n"
+"Last-Translator: ButterflyOfFire "
+"<boffire@users.noreply.hosted.weblate.org>\n"
 "Language: kab\n"
+"Language-Team: Kabyle "
+"<https://hosted.weblate.org/projects/libretranslate/app/kab/>\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.8-dev\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Amasal JSON d arameɣtu"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Tifin tawurmant"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Ur yettusireg ara"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Aṭas n uɛeddi deg tilas n ussuter"
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Tasarut API d tarameɣtut"
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Ttxil-k·m, nermes amahal n uqeddac i wawway n tsarut API"
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Rzu ɣer %(url)s i wawway n tsarut API"
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Taẓayt:"
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Assuter arameɣtu: ixuṣṣ uɣewwar %(name)s"
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr "Assuter d arameɣtu: assuter(%(size)s) iɛedda tilas n uḍris (%(limit)s)"
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s ur yettusefrak ara"
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "Amasal %(format)s ur yettusefrak ara"
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
@@ -89,28 +99,28 @@ msgstr ""
 "%(tname)s (%(tcode)s) ur yelli ara am tutlayt tasaḍast n %(sname)s "
 "(%(scode)s)"
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Ur yizmir asuqel n uḍṛis: %(text)s"
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Asuqqel n yifuyla yensa ɣef uqeddac-a."
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Assuter arameɣtu: afaylu d ilem"
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Assuter d arameɣtu: amasal n ufaylu ur yettusefrak ara"
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Isem n ufaylu d armeɣtu"
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Isumar nsan ɣef uqeddac-a."
 
@@ -119,120 +129,176 @@ msgid "English"
 msgstr "Taglizit"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Taɛrabt"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Tazerbiǧanit"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Tacinwatt"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Tačikit"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Tadanit"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Tahulandit"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Taspirantit"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Tafinit"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Tafṛansist"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Talmanit"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Tagrigit"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Taɛebranit"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Tahendit"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Tahungaṛit"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Tandunizit"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Tirlandit"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Taṭelyanit"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Tajapunit"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Takurit"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Tafarsit"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Tapulunit"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Tapurtugit"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Tarusit"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Tasluvakt"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Taspenyulit"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Taswidit"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Taṭurkit"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Takrinit"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Tavyiṭnamit"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -250,7 +316,7 @@ msgstr "suqel"
 msgid "Translate text from a language to another"
 msgstr "Asuqqel n uḍris seg tutlayt ɣer tayeḍ"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Aḍris yettwasuqqlen"
 
@@ -305,205 +371,210 @@ msgstr ""
 " * `html` - Taṛekkazt HTML\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "Tasarutt API"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Asuqqel n ufaylu seg tutlayt ɣer tayeḍ"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Afaylu yettwasuqqlen"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Afaylu ara yettwasuqqlen"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Tifin n tutlayt n kra n uḍris"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Tifin"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Tuccḍa deg tifin"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Aḍris ara yettwafen"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Err-d iɣewwaren imaẓlayen n ugrudem"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "iɣewwaren n ugrudem"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "agrudem"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Azen asumer i usnerni n tsuqqilt"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Awwaḍ"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Ur yettusireg ara"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Aḍris aɣbalu"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Tasuqqilt i d-yettwasumren"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Tutlayt n uḍris aɣbalu"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Tutlayt n tsuqqilt i d-yettwasumren"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "tamawt"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Tangalt n tutlayt"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Isem n tutlayt igezzu umdan (s teglizit)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Tingalin n tutlayin tisaḍasin i yettwasefraken"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Aḍris(iḍrisen) yettwasuqqlen"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Izen n tuccḍa"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Ssebba n taẓayt"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL n ufaylu i yettwasuqqlen"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Azal n teflest"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr "Talast n unekcum n yisekkilen i tutlayt-a (-1 ur d-iskan kra n talast)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Akud n tsuqqilt ɣef ugrudem"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Yeskan ma yella taffa n yisefka n tsura API termed."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Yeskan-d ma tettwasra tasarut n API."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Yeskan ma yella tuzna n yisumar termed."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Imasalen n yifuyla i yettwasefraken"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Ma yella tuzna tɛedda"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Nɣel aḍris"
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "D awezɣi asali n %(url)s"
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Tuccḍa d tarussint"
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Yettwanɣel"
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr "Tanemmirt ɣef useɣti. Ẓer belli asumer ur iteṭṭef ara imir kan."
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Ulac tutlayin i yellan. Tesbeddeḍ tineɣrufin akken iwata?"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Sekcem tasarut-ik•im API. Ma yella tesriḍ tasarut API, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "sit ɣef useɣwen \"Awi tasarut API\"."
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "nermes amahal n uqeddac."
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API n tsuqqilt tawurmant tilellit, n uɣbalu yeldin"
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API n tsuqqilt tawurmant tilellit, n uɣbalu yeldin. Yezdeɣ i yiman-is, s war "
-"tuqqna, fessus i usebded. Senker aqeddac-ik·im API deg kra n tesdatin."
+"API n tsuqqilt tawurmant tilellit, n uɣbalu yeldin. Yezdeɣ i yiman-is, s "
+"war tuqqna, fessus i usebded. Senker aqeddac-ik·im API deg kra n "
+"tesdatin."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -513,149 +584,158 @@ msgstr "tasuqqilt"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "Tasemlit API"
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Awi tasarut API"
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Sbadu tasarut API"
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Beddel tutlayt"
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Ẓreg"
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Zgel"
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API n usuqqel"
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Suqqel aḍris"
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Suqqel ifuyla"
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Suqqel seg"
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Semmeskel aɣbalu d tutlayt tasaḍast"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Suqqel ɣer"
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Aḍris ara yettwasuqqlen"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Kkes aḍris"
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Sumer tasuqqilt"
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Sefsex"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Azen"
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Imasalen n ufaylu i yettwasefraken:"
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Afaylu"
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Kkes afaylu"
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Suqqel"
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Sader"
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Assuter"
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Tiririt"
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API n usuqqel awurman n uɣbalu yeldin"
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Yettwasezdeɣ i yiman-is. Iteddu s war tuqqna. Fessus i usesteb."
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Turagt:"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-"API-a azayaz ilaq ad yettuseqdec i usekyed, i useqdec uslig neɣ i useqdec ur "
-"negzi. Ma yella tesnekkreḍ asnas id-yettfarasen, ttxil-k·m seqdec "
-"%(host_server)s neɣ %(get_api_key)s."
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr "Sezdeɣ aqeddac inek·inem"
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr "Awi tasarut API"
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
-"Yettufeṣṣel s %(heart)s sɣur %(contributors)s, yella-d s lmendad n %(engine)s"
+"Yettufeṣṣel s %(heart)s sɣur %(contributors)s, yella-d s lmendad n "
+"%(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "Imttekkiyen n %(libretranslate)s"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Tavyiṭnamit"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "API-a azayaz ilaq ad yettuseqdec i "
+#~ "usekyed, i useqdec uslig neɣ i "
+#~ "useqdec ur negzi. Ma yella tesnekkreḍ"
+#~ " asnas id-yettfarasen, ttxil-k·m seqdec "
+#~ "%(host_server)s neɣ %(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "Sezdeɣ aqeddac inek·inem"
+
+#~ msgid "get an API key"
+#~ msgstr "Awi tasarut API"
+
diff --git a/libretranslate/locales/ko/LC_MESSAGES/messages.po b/libretranslate/locales/ko/LC_MESSAGES/messages.po
index 9aa3bd3eb..cdd4d4de4 100644
--- a/libretranslate/locales/ko/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ko/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-06-19 20:49+0000\n"
 "Last-Translator: Sungjoon Moon <sumoon@seoulsaram.org>\n"
 "Language: ko\n"
@@ -66,12 +66,12 @@ msgstr "잘못된 요청: %(name)s 파라미터 누락"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "잘못된 요청: <x>0 댓글</x> 매개변수는 수 없습니다 %(name)s"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
+msgstr "잘못된 요청: <x>0 댓글</x> 매개 변수는 &lt;= <x>1명 1명</x> %(name)s %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -127,7 +127,7 @@ msgstr "영어"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "알바니아"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -139,15 +139,15 @@ msgstr "아제르바이잔어"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "채용정보"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "카테고리"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -155,7 +155,7 @@ msgstr "중국어"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "한국어 (Korean)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -175,7 +175,7 @@ msgstr "에스페란토"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "에스토니아"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -227,19 +227,19 @@ msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "라트비아"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "담당자: Ms"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -255,7 +255,7 @@ msgstr "포르투칼어"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -267,7 +267,7 @@ msgstr "슬로바키아어"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "한국어"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -279,11 +279,11 @@ msgstr "스웨덴어"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "다운로드"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "뚱 베어"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -295,7 +295,7 @@ msgstr "우크라이나어"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "채용 정보"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -369,7 +369,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "다른 번역의 선호 번호"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
diff --git a/libretranslate/locales/lt/LC_MESSAGES/messages.po b/libretranslate/locales/lt/LC_MESSAGES/messages.po
index c2b7bd413..7479175be 100644
--- a/libretranslate/locales/lt/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/lt/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: lt\n"
diff --git a/libretranslate/locales/lv/LC_MESSAGES/messages.po b/libretranslate/locales/lv/LC_MESSAGES/messages.po
index ed5a8bb22..c617b46c8 100644
--- a/libretranslate/locales/lv/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/lv/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: lv\n"
diff --git a/libretranslate/locales/messages.pot b/libretranslate/locales/messages.pot
index 304d1d9d3..a9f883bdd 100644
--- a/libretranslate/locales/messages.pot
+++ b/libretranslate/locales/messages.pot
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/libretranslate/locales/mia/LC_MESSAGES/messages.po b/libretranslate/locales/mia/LC_MESSAGES/messages.po
index a22c5ca15..98a17cbf5 100644
--- a/libretranslate/locales/mia/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/mia/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# mia translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,109 +8,117 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-07-04 18:09+0000\n"
 "Last-Translator: \"Michael R. Lawrence\" <michaellonewolf359@gmail.com>\n"
-"Language-Team: Miami <https://hosted.weblate.org/projects/libretranslate/app/"
-"mia/>\n"
 "Language: mia\n"
+"Language-Team: Miami "
+"<https://hosted.weblate.org/projects/libretranslate/app/mia/>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 #, fuzzy
 msgid "Invalid JSON format"
 msgstr "moochi eelaamweekaneewiki JSON kiikoo"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr ""
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 #, fuzzy
 msgid "Unauthorized"
 msgstr "moochi koteelilo"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr ""
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Moochi API paahpahaakani"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "weekiyosiko"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, fuzzy, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr "maci kiikoo : kiikoo (%(size)s) mihši  awikawiko limit (%(limit)s)"
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, fuzzy, python-format
 msgid "%(lang)s is not supported"
 msgstr "moochi supported"
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -119,119 +127,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
+msgid "Persian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:32
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -250,7 +314,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -302,194 +366,198 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
@@ -508,149 +576,151 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr ""
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/mia/meta.json b/libretranslate/locales/mia/meta.json
new file mode 100644
index 000000000..72ccea110
--- /dev/null
+++ b/libretranslate/locales/mia/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "mia",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/ms/LC_MESSAGES/messages.po b/libretranslate/locales/ms/LC_MESSAGES/messages.po
index 2ca9641cb..5f4292991 100644
--- a/libretranslate/locales/ms/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ms/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: ms\n"
diff --git a/libretranslate/locales/nb/LC_MESSAGES/messages.po b/libretranslate/locales/nb/LC_MESSAGES/messages.po
index 21eb37a4b..fd2cd4a9b 100644
--- a/libretranslate/locales/nb/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/nb/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-03-25 12:01+0000\n"
 "Last-Translator: Kaleido Scope <senpai@firemail.cc>\n"
 "Language: nb_NO\n"
@@ -67,12 +67,12 @@ msgstr "Ugyldig forespørsel: manglende %(name)s-parameter"
 #: libretranslate/app.py:592
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
-msgstr ""
+msgstr "Ugyldig forespørsel: %(name)s parameteren er ikke et tall"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
+msgstr "Ugyldig forespørsel: %(name)s Parameteren må være &lt;= %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -133,7 +133,7 @@ msgstr "Engelsk"
 
 #: libretranslate/locales/.langs.py:2
 msgid "Albanian"
-msgstr ""
+msgstr "Albansk"
 
 #: libretranslate/locales/.langs.py:3
 msgid "Arabic"
@@ -145,15 +145,15 @@ msgstr "Aserbajdsjansk"
 
 #: libretranslate/locales/.langs.py:5
 msgid "Bengali"
-msgstr ""
+msgstr "Bengali"
 
 #: libretranslate/locales/.langs.py:6
 msgid "Bulgarian"
-msgstr ""
+msgstr "Bulgarsk"
 
 #: libretranslate/locales/.langs.py:7
 msgid "Catalan"
-msgstr ""
+msgstr "Katalansk"
 
 #: libretranslate/locales/.langs.py:8
 msgid "Chinese"
@@ -161,7 +161,7 @@ msgstr "Kinesisk"
 
 #: libretranslate/locales/.langs.py:9
 msgid "Chinese (traditional)"
-msgstr ""
+msgstr "Kinesisk (tradisjonell)"
 
 #: libretranslate/locales/.langs.py:10
 msgid "Czech"
@@ -181,7 +181,7 @@ msgstr "Esperanto"
 
 #: libretranslate/locales/.langs.py:14
 msgid "Estonian"
-msgstr ""
+msgstr "Estisk"
 
 #: libretranslate/locales/.langs.py:15
 msgid "Finnish"
@@ -233,19 +233,19 @@ msgstr "Koreansk"
 
 #: libretranslate/locales/.langs.py:27
 msgid "Latvian"
-msgstr ""
+msgstr "Latvisk"
 
 #: libretranslate/locales/.langs.py:28
 msgid "Lithuanian"
-msgstr ""
+msgstr "Litauisk"
 
 #: libretranslate/locales/.langs.py:29
 msgid "Malay"
-msgstr ""
+msgstr "Malay"
 
 #: libretranslate/locales/.langs.py:30
 msgid "Norwegian"
-msgstr ""
+msgstr "Norsk"
 
 #: libretranslate/locales/.langs.py:31
 msgid "Persian"
@@ -261,7 +261,7 @@ msgstr "Portugisisk"
 
 #: libretranslate/locales/.langs.py:34
 msgid "Romanian"
-msgstr ""
+msgstr "Rumensk"
 
 #: libretranslate/locales/.langs.py:35
 msgid "Russian"
@@ -273,7 +273,7 @@ msgstr "Slovakisk"
 
 #: libretranslate/locales/.langs.py:37
 msgid "Slovenian"
-msgstr ""
+msgstr "Slovensk"
 
 #: libretranslate/locales/.langs.py:38
 msgid "Spanish"
@@ -285,11 +285,11 @@ msgstr "Svensk"
 
 #: libretranslate/locales/.langs.py:40
 msgid "Tagalog"
-msgstr ""
+msgstr "Tagalog"
 
 #: libretranslate/locales/.langs.py:41
 msgid "Thai"
-msgstr ""
+msgstr "Thailandsk"
 
 #: libretranslate/locales/.langs.py:42
 msgid "Turkish"
@@ -301,7 +301,7 @@ msgstr "Ukrainsk"
 
 #: libretranslate/locales/.langs.py:44
 msgid "Urdu"
-msgstr ""
+msgstr "Urdu"
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -377,7 +377,7 @@ msgstr ""
 
 #: libretranslate/locales/.swag.py:17
 msgid "Preferred number of alternative translations"
-msgstr ""
+msgstr "Foretrukket antall alternative oversettelser"
 
 #: libretranslate/locales/.swag.py:18
 msgid "API key"
@@ -627,7 +627,7 @@ msgstr "Rediger"
 
 #: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
-msgstr ""
+msgstr "Slå av/på mørk/lysmodus"
 
 #: libretranslate/templates/index.html:159
 msgid "Dismiss"
diff --git a/libretranslate/locales/nl/LC_MESSAGES/messages.po b/libretranslate/locales/nl/LC_MESSAGES/messages.po
index 50eed064d..cbaa32bf5 100644
--- a/libretranslate/locales/nl/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/nl/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-12-09 21:07+0000\n"
 "Last-Translator: ArnoldCordewiner <arnoldc@protonmail.com>\n"
-"Language-Team: Dutch <https://hosted.weblate.org/projects/libretranslate/app/nl/>\n"
 "Language: nl\n"
+"Language-Team: Dutch "
+"<https://hosted.weblate.org/projects/libretranslate/app/nl/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -75,8 +76,7 @@ msgstr "Ongeldig verzoek: %(name)s parameter moet zijn %(value)s"
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"Ongeldig verzoek: verzoek (%(size)s) overschrijdt tekstlimiet (%(limit)s)"
+msgstr "Ongeldig verzoek: verzoek (%(size)s) overschrijdt tekstlimiet (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -92,8 +92,8 @@ msgstr "%(format)s formaat wordt niet ondersteund"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) Is niet beschikbaar als een doeltaal van %(sname)s "
 "(%(scode)s)"
@@ -539,10 +539,9 @@ msgstr "Copi"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
-msgstr ""
-"Bedankt voor je correctie. Let op dat de suggestie niet meteen zal werken."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
+msgstr "Bedankt voor je correctie. Let op dat de suggestie niet meteen zal werken."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
@@ -552,7 +551,8 @@ msgstr "Geen talen beschikbaar. Heb je de modellen correct geïnstalleerd?"
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
-"Voer je API sleutel in. Als je een API sleutel nodig hebt, %(instructions)s"
+"Voer je API sleutel in. Als je een API sleutel nodig hebt, "
+"%(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -562,8 +562,7 @@ msgstr "druk op de \"Get API Key\" link."
 msgid "contact the server operator."
 msgstr "neem contact op met de server."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Vrij en open Source Machine Vertaling"
@@ -571,11 +570,12 @@ msgstr "Vrij en open Source Machine Vertaling"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Vrij en open Source Machine Vertaling API. Self-hosted, offline capabel en "
-"makkelijk te koppelen. Laat je eigen API server binnen een paar minuten."
+"Vrij en open Source Machine Vertaling API. Self-hosted, offline capabel "
+"en makkelijk te koppelen. Laat je eigen API server binnen een paar "
+"minuten."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -709,8 +709,7 @@ msgstr "Licentie:"
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
-msgstr ""
-"Gemaakt met %(heart)s door %(contributors)s enmet de kracht van %(engine)s"
+msgstr "Gemaakt met %(heart)s door %(contributors)s enmet de kracht van %(engine)s"
 
 #: libretranslate/templates/index.html:345
 #, python-format
@@ -724,12 +723,16 @@ msgstr "%(libretranslate)s Bijdragers"
 #~ msgstr "Vietnamees"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Deze publieke API moet worden gebruikt voor testen, persoonlijk of "
-#~ "infrequent gebruik. Als je een applicatie in productie laat lopen, dan aub "
+#~ "Deze publieke API moet worden gebruikt"
+#~ " voor testen, persoonlijk of infrequent "
+#~ "gebruik. Als je een applicatie in "
+#~ "productie laat lopen, dan aub "
 #~ "%(host_server)s of... %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -737,3 +740,4 @@ msgstr "%(libretranslate)s Bijdragers"
 
 #~ msgid "get an API key"
 #~ msgstr "verkrijg een API sleutel"
+
diff --git a/libretranslate/locales/nn/LC_MESSAGES/messages.po b/libretranslate/locales/nn/LC_MESSAGES/messages.po
index ef369fbfa..956155e91 100644
--- a/libretranslate/locales/nn/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/nn/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Norwegian Nynorsk translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,107 +8,116 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-03-25 12:01+0000\n"
 "Last-Translator: Kaleido Scope <senpai@firemail.cc>\n"
-"Language-Team: Norwegian Nynorsk <https://hosted.weblate.org/projects/"
-"libretranslate/app/nn/>\n"
 "Language: nn\n"
+"Language-Team: Norwegian Nynorsk "
+"<https://hosted.weblate.org/projects/libretranslate/app/nn/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.5-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Ugyldig JSON-format"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Oppdag automatisk"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Ikkje godkjent"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "For mange førespurnadar"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Ugyldig API-nykel"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Ta kontakt med sørvaradministrator for å få API-nykel"
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Besøk %(url)s for å få ein API-nykel"
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Nedbremsing:"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Ugyldig førespurnad: manglande %(name)s-parameter"
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -117,120 +126,176 @@ msgid "English"
 msgstr "Engelsk"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Arabisk"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azeri"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Mandarin"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Tjekkisk"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Dansk"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Nederlandsk"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finsk"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Fransk"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Tysk"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Gresk"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Hebraisk"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Hindi"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Ungarsk"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonesisk"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irsk"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italiensk"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Japansk"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Koreansk"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Farsi"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Polsk"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Portugisisk"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Russisk"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Slovakisk"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Spansk"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Svensk"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Tyrkisk"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ukrainsk"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Vietnamesisk"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -248,7 +313,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr "Omset tekst frå eit språk til eit anna"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Omsette tekst"
 
@@ -300,194 +365,198 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
@@ -506,149 +575,151 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr ""
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vietnamesisk"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/nn/meta.json b/libretranslate/locales/nn/meta.json
new file mode 100644
index 000000000..cf3777d66
--- /dev/null
+++ b/libretranslate/locales/nn/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "nn",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/oc/LC_MESSAGES/messages.po b/libretranslate/locales/oc/LC_MESSAGES/messages.po
index cfa41d913..9e67bd988 100644
--- a/libretranslate/locales/oc/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/oc/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Occitan translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,81 +8,90 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-01-19 10:35+0000\n"
 "Last-Translator: Quentin PAGÈS <quentinantonin@free.fr>\n"
-"Language-Team: Occitan <https://hosted.weblate.org/projects/libretranslate/"
-"app/oc/>\n"
 "Language: oc\n"
+"Language-Team: Occitan "
+"<https://hosted.weblate.org/projects/libretranslate/app/oc/>\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.15.1\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Format JSON invalid"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Deteccion automatica"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Pas permés"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Tròp de despassament de limit de requèstas"
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Clau API invalida"
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Mercés de contactar l’operator del servidor per obténer una clau API"
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Consultatz %(url)s per obténer una clau API"
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Alentissètz :"
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Requèsta invalida : paramètre %(name)s mancant"
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Demanda non valida : requèsta (%(size)s) despassa lo limit de tèxte "
 "(%(limit)s)"
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s es pas pres en carga"
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "Format %(format)s pas pres en carga"
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
@@ -91,28 +100,28 @@ msgstr ""
 "%(tname)s (%(tcode)s) es pas disponible coma lenga cibla de %(sname)s "
 "(%(scode)s)"
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Impossible de traduire lo tèxte : %(text)s"
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "La traduccion de fichièrs es desactivada sus aqueste servidor."
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Requèsta invalida : fichièr void"
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Requèsta invalida : format de fichièr pas pres en carga"
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Nom de fichièr invalida"
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Las suggestions son desactivadas sus aqueste servidor."
 
@@ -121,120 +130,176 @@ msgid "English"
 msgstr "Anglés"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Arabi"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azèri"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Chinés"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Chèc"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Danés"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Neerlandés"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finés"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Francés"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Alemand"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Grèc"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Ebrèu"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Indi"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Ongrés"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonesian"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irlandés"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italian"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Japonés"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Corean"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Persan"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Polonés"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Portugués"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Rus"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Eslovac"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Espanhòl"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Suedés"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Turc"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ucraïnian"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Vietnamian"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -252,7 +317,7 @@ msgstr "traduire"
 msgid "Translate text from a language to another"
 msgstr "Traduire un tèxte d’una lenga a l’autra"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Tèxte traduch"
 
@@ -307,170 +372,174 @@ msgstr ""
 " * `html` - Balisatge HTM\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "clau d’API"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Traduire un fichièr d’una lenga a l’autra"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Fichièr traduch"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Fichièr de traduire"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Detectar la lenga d’un sol tèxte"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Deteccions"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Error de deteccion"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Tèxte de detectar"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Recuperar los paramètres especifics de l’interfàcia"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "paramètres de l’interfàcia"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "interfàcia"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Sometre una suggestion per melhorar una traduccion"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Succès"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Pas permés"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Tèxte original"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Traduccion suggerida"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Lenga del tèxte original"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Lenga de la traduccion suggerida"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "comentaris"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Còdi lenga"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Nom de la lenga lisible per un uman (en anglés)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Còdis de lengas cibla presas en carga"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Tèxte(s) traduch(es)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Messatge d’error"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Rason de l’alentiment"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL del fichièr traduch"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Valor de fisança"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr "Limit d’entrada de caractèrs per aquesta lenga (-1 indica cap de limit)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Expiracion de la traduccion de l’interfàcia"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Indica se la basa de donadas de claus API es activada."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Indica se una clau API es requerida."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Indica se lo mandadís de suggestions es activat."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Fichièrs preses en carga"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Indica se lo mandadís a capitat"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Copiar lo tèxte"
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Cargament impossible de %(url)s"
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Error desconeguda"
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Copiat"
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
@@ -478,36 +547,37 @@ msgstr ""
 "Mercés de vòstra correccion. Notatz que la suggestion serà pas presa en "
 "compte immediatament."
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Cap de lenga pas disponibla. Avètz installats los modèls corrèctament ?"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Picatz vòstra clau API. Se vos cal una clau API, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "quichatz lo ligam « Obténer una clau API »."
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "contactatz l’operator del servidor."
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API de traduccion automatica gratuita e liura"
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API de traduccion automatica liura e dobèrta. Auto-albergada, fòra linha, de "
-"bon installar. Lançatz vòstre pròpri servidor API en qualques minutas."
+"API de traduccion automatica liura e dobèrta. Auto-albergada, fòra linha,"
+" de bon installar. Lançatz vòstre pròpri servidor API en qualques "
+"minutas."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -517,142 +587,127 @@ msgstr "traduccion"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "Documents API"
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Obténer clau API"
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Definir clau API"
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Cambiar la lenga"
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Modificar"
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Ignorar"
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API de traduccion"
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Traduire tèxte"
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Traduire fichièrs"
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Traduire a partir de"
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Intervertir la lenga font e cibla"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Traduire en"
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Tèxte de traduire"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Suprimir lo tèxte"
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Suggerir traduccion"
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Anullar"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Enviar"
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Formats de fichièrs preses en carga :"
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Fichièr"
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Suprimir fichièr"
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Traduire"
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Telecargar"
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Requèsta"
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Responsa"
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API de traduccion automatica liura"
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Auto albergat. Pòt foncionar fòra connexion. De bon configurar."
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Licéncia :"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-"Aquesta API publica deuriá èsser utilizada per d’ensages, l’utilizacion "
-"personala o ocasionala. Se sètz per executar una aplicacion en produccion, "
-"se vos plai %(host_server)s o %(get_api_key)s."
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr "albergatz vòstre pròpri servidor"
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr "obténer una clau API"
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -662,3 +717,27 @@ msgstr "Concebut amb %(heart)s pels %(contributors)s e propulsat per %(engine)s"
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "Contributors %(libretranslate)s"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vietnamian"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "Aquesta API publica deuriá èsser "
+#~ "utilizada per d’ensages, l’utilizacion "
+#~ "personala o ocasionala. Se sètz per "
+#~ "executar una aplicacion en produccion, "
+#~ "se vos plai %(host_server)s o "
+#~ "%(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "albergatz vòstre pròpri servidor"
+
+#~ msgid "get an API key"
+#~ msgstr "obténer una clau API"
+
diff --git a/libretranslate/locales/oc/meta.json b/libretranslate/locales/oc/meta.json
new file mode 100644
index 000000000..b5ed1de0d
--- /dev/null
+++ b/libretranslate/locales/oc/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "oc",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/pa/LC_MESSAGES/messages.po b/libretranslate/locales/pa/LC_MESSAGES/messages.po
index c5b52fd59..0b5aca4f7 100644
--- a/libretranslate/locales/pa/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/pa/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Punjabi translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,104 +8,115 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
 "Language: pa\n"
+"Language-Team: none\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr ""
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr ""
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr ""
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr ""
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr ""
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr ""
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -114,127 +125,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:31
-msgid "Catalan"
+msgid "Persian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:32
-msgid "Kabyle"
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -253,7 +312,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -305,199 +364,203 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
@@ -511,139 +574,127 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr ""
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -653,3 +704,24 @@ msgstr ""
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid "Kabyle"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/pa/meta.json b/libretranslate/locales/pa/meta.json
new file mode 100644
index 000000000..ce7938244
--- /dev/null
+++ b/libretranslate/locales/pa/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "pa",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/pl/LC_MESSAGES/messages.po b/libretranslate/locales/pl/LC_MESSAGES/messages.po
index 18abfb339..07392a800 100644
--- a/libretranslate/locales/pl/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/pl/LC_MESSAGES/messages.po
@@ -8,18 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-03 16:09+0000\n"
 "Last-Translator: Michał Stankiewicz <kontakt@stankiewiczm.eu>\n"
-"Language-Team: Polish <https://hosted.weblate.org/projects/libretranslate/"
-"app/pl/>\n"
 "Language: pl\n"
+"Language-Team: Polish "
+"<https://hosted.weblate.org/projects/libretranslate/app/pl/>\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && "
+"(n%100<10 || n%100>=20) ? 1 : 2);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -96,8 +95,8 @@ msgstr "format %(format)s nie jest wspierany"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) nie jest dostępny jako język docelowy z języka "
 "%(sname)s (%(scode)s)"
@@ -543,8 +542,8 @@ msgstr "Skopiowano"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "Dzięki korekcji. Zasugerowanie nie będzie realizowane."
 
 #: libretranslate/templates/app.js.template:461
@@ -554,8 +553,7 @@ msgstr "Żadne języki nie są dostępne. Czy można poprawnie stosować modele?
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Wprowadź swój klucz API. Jeśli potrzebujesz klucza API, %(instructions)s"
+msgstr "Wprowadź swój klucz API. Jeśli potrzebujesz klucza API, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -565,8 +563,7 @@ msgstr "prasa \"Get API Key\" (ang.)."
 msgid "contact the server operator."
 msgstr "skontaktuje się z operatorem serwera."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Free and Open Source Machine Translation API (ang.)"
@@ -574,11 +571,12 @@ msgstr "Free and Open Source Machine Translation API (ang.)"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Free and Open Source Machine Translation API (ang.). Samodzielny, niezdolny "
-"i łatwy do położenia. Służysz własny serwer API w ciągu kilku minut."
+"Free and Open Source Machine Translation API (ang.). Samodzielny, "
+"niezdolny i łatwy do położenia. Służysz własny serwer API w ciągu kilku "
+"minut."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -726,12 +724,16 @@ msgstr "%(libretranslate)s Contributor"
 #~ msgstr "Wietnamski"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "To publiczne API powinno być wykorzystywane do testowania, osobistego lub "
-#~ "rzadkiego użytku. Jeśli zamierzasz uruchomić aplikację w produkcji, proszę "
+#~ "To publiczne API powinno być "
+#~ "wykorzystywane do testowania, osobistego lub"
+#~ " rzadkiego użytku. Jeśli zamierzasz "
+#~ "uruchomić aplikację w produkcji, proszę "
 #~ "%(host_server)s lub %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -739,3 +741,4 @@ msgstr "%(libretranslate)s Contributor"
 
 #~ msgid "get an API key"
 #~ msgstr "uzyskaj klucz API"
+
diff --git a/libretranslate/locales/pt/LC_MESSAGES/messages.po b/libretranslate/locales/pt/LC_MESSAGES/messages.po
index 5a50b7903..8b6cbcd5d 100644
--- a/libretranslate/locales/pt/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/pt/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-17 21:09+0000\n"
 "Last-Translator: Dinissantos <Dinissantos999@hotmail.com>\n"
-"Language-Team: Portuguese <https://hosted.weblate.org/projects/"
-"libretranslate/app/pt/>\n"
 "Language: pt\n"
+"Language-Team: Portuguese "
+"<https://hosted.weblate.org/projects/libretranslate/app/pt/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -741,3 +740,4 @@ msgstr "Contribuintes %(libretranslate)s"
 
 #~ msgid "get an API key"
 #~ msgstr "obter uma chave API"
+
diff --git a/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po b/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po
index 7c501dd5b..8e77bf08b 100644
--- a/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Portuguese (Brazil) translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,111 +8,121 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-07-25 02:09+0000\n"
-"Last-Translator: Jose Delvani <jsdelvani@users.noreply.hosted.weblate.org>\n"
-"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
-"libretranslate/app/pt_BR/>\n"
+"Last-Translator: Jose Delvani "
+"<jsdelvani@users.noreply.hosted.weblate.org>\n"
 "Language: pt_BR\n"
+"Language-Team: Portuguese (Brazil) "
+"<https://hosted.weblate.org/projects/libretranslate/app/pt_BR/>\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Formato JSON inválido"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Detecção automática"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Sem autorização"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Muitas violações de limite de solicitação"
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Chave de API inválida"
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Entre em contato com o operador do servidor para obter uma chave de API"
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Acesse %(url)s para obter uma chave de API"
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Devagar:"
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Solicitação inválida: parâmetro %(name)s ausente"
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Solicitação inválida: a solicitação (%(size)s) excede o limite de texto "
 "(%(limit)s)"
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s não é suportado"
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "O formato %(format)s não é suportado"
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (%(tcode)s) não está disponível como idioma da tradução em %(sname)"
-"s (%(scode)s)"
+"%(tname)s (%(tcode)s) não está disponível como idioma da tradução em "
+"%(sname)s (%(scode)s)"
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Não é possível traduzir o texto: %(text)s"
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "A tradução de arquivos está desativada neste servidor."
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Solicitação inválida: arquivo vazio"
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Solicitação inválida: formato de arquivo não suportado"
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Nome de arquivo inválido"
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "As sugestões estão desativadas neste servidor."
 
@@ -121,120 +131,176 @@ msgid "English"
 msgstr "Inglês"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Árabe"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azerbaijano"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Chinês"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Tcheco"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Dinamarquês"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Holandês"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finlandês"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Francês"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Alemão"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Grego"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Hebraico"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Hindi"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Húngaro"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonésio"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irlandês"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italiano"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Japonês"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Coreano"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Persa"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Polonês"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Português"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Russo"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Eslovaco"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Espanhol"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Sueco"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Turco"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ucraniano"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Vietnamita"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -252,7 +318,7 @@ msgstr "tradução"
 msgid "Translate text from a language to another"
 msgstr "Traduz texto de um idioma para outro"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Texto traduzido"
 
@@ -307,172 +373,176 @@ msgstr ""
 "* `html` - Marcação HTML\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "Chave de API"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Traduz arquivo de um idioma para outro"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Arquivo traduzido"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Arquivo a ser traduzido"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Detecta o idioma de um único texto"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Detecções"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Erro de detecção"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Texto a ser detectado"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Recuperar configurações específicas do front-end"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "configurações de front-end"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "front-end"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Envie uma sugestão para melhorar uma tradução"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Sucesso"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Não autorizado"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Texto original"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Tradução sugerida"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Idioma do texto original"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Idioma da tradução sugerida"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "feedback"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Código do idioma"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Nome do idioma legível por humanos (em Inglês)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Códigos de idioma da tradução suportados"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Texto(s) traduzido(s)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Mensagem de erro"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Razão para desacelerar"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL do arquivo traduzido"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Valor da confiança"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 "Limite de entrada de caracteres para este idioma (-1 indica que não há "
 "limite)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Tempo limite de tradução do front-end"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Se o banco de dados de chaves de API está ativado."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Se é necessária uma chave de API."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Se o envio de sugestões está ativado."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Formato de arquivos suportados"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Se o envio foi bem-sucedido"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Copiar texto"
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Não é possível carregar %(url)s"
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Erro desconhecido"
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Copiado"
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
@@ -480,39 +550,39 @@ msgstr ""
 "Obrigado pela sua correção. Observe que a sugestão não entrará em vigor "
 "imediatamente."
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Nenhum idioma disponível. Você instalou os modelos corretamente?"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 "Digite sua chave de API. Se você precisar de uma chave de API, "
 "%(instructions)s"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "clique no link \"Obter chave de API\"."
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "entre em contato com o operador do servidor."
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API de Tradução Automática Livre e de Código Aberto"
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API de Tradução Automática Livre e de Código Aberto. Auto-hospedado, também "
-"funciona offline e fácil de configurar. Execute seu próprio servidor de API "
-"em apenas alguns minutos."
+"API de Tradução Automática Livre e de Código Aberto. Auto-hospedado, "
+"também funciona offline e fácil de configurar. Execute seu próprio "
+"servidor de API em apenas alguns minutos."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -522,142 +592,127 @@ msgstr "tradução"
 msgid "api"
 msgstr "API"
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "Documentação da API"
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Obter chave de API"
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Definir chave de API"
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Alterar idioma"
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Editar"
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Descartar"
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API de Tradução"
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Traduzir Texto"
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Traduzir Arquivos"
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Traduzir de"
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Inverter idiomas do texto original e da tradução"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Traduzir para"
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Texto a ser traduzido"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Apagar texto"
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Sugerir tradução"
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Enviar"
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Formatos de arquivo suportados:"
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Arquivo"
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Remover arquivo"
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Traduzir"
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Download"
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Solicitação"
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Resposta"
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API de Tradução Automática de Código Aberto"
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Auto-hospedável. Funciona offline. Fácil de configurar."
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Licença:"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-"Esta API pública deve ser usada para testes, uso pessoal ou pouco frequente. "
-"Se for executar uma aplicação em produção, por favor, %(host_server)s ou "
-"%(get_api_key)s."
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr "hospede seu próprio servidor"
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr "obtenha uma chave de API"
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -667,3 +722,26 @@ msgstr "Feito com %(heart)s por %(contributors)s e desenvolvido por %(engine)s"
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "%(libretranslate)s Colaboradores"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vietnamita"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "Esta API pública deve ser usada "
+#~ "para testes, uso pessoal ou pouco "
+#~ "frequente. Se for executar uma aplicação"
+#~ " em produção, por favor, %(host_server)s"
+#~ " ou %(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "hospede seu próprio servidor"
+
+#~ msgid "get an API key"
+#~ msgstr "obtenha uma chave de API"
+
diff --git a/libretranslate/locales/pt_BR/meta.json b/libretranslate/locales/pt_BR/meta.json
new file mode 100644
index 000000000..a5c27199b
--- /dev/null
+++ b/libretranslate/locales/pt_BR/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "pt_BR",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/ro/LC_MESSAGES/messages.po b/libretranslate/locales/ro/LC_MESSAGES/messages.po
index 0be991ea7..bc8eb1e0d 100644
--- a/libretranslate/locales/ro/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ro/LC_MESSAGES/messages.po
@@ -8,15 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-02-27 19:38+0000\n"
 "Last-Translator: Simona Iacob <s@zp1.net>\n"
-"Language-Team: Romanian <https://hosted.weblate.org/projects/libretranslate/app/ro/>\n"
 "Language: ro\n"
+"Language-Team: Romanian "
+"<https://hosted.weblate.org/projects/libretranslate/app/ro/>\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 "
+"< 20)) ? 1 : 2;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -41,8 +43,7 @@ msgstr "Cheie API invalidă"
 
 #: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
-msgstr ""
-"Vă rugăm să contactați operatorul serverului pentru a obține o cheie API"
+msgstr "Vă rugăm să contactați operatorul serverului pentru a obține o cheie API"
 
 #: libretranslate/app.py:319
 #, python-format
@@ -76,8 +77,7 @@ msgstr "Cerere nevalidă: %(name)s parametrul trebuie să fie &gt; %(value)s"
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"Cerere invalidă: cererea (%(size)s) depășește limita de text (%(limit)s)"
+msgstr "Cerere invalidă: cererea (%(size)s) depășește limita de text (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -93,8 +93,8 @@ msgstr "%(format)s formatul nu este acceptat"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) nu este disponibilă ca limbă țintă din %(sname)s "
 "(%(scode)s)"
@@ -485,8 +485,8 @@ msgstr "Valoarea de încredere"
 #: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
-"Limita de introducere a caracterelor pentru această limbă (-1 indică faptul "
-"că nu există limită)"
+"Limita de introducere a caracterelor pentru această limbă (-1 indică "
+"faptul că nu există limită)"
 
 #: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
@@ -542,10 +542,11 @@ msgstr "Copiat"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Vă mulțumim pentru corecție. Rețineți că sugestia nu va avea efect imediat."
+"Vă mulțumim pentru corecție. Rețineți că sugestia nu va avea efect "
+"imediat."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
@@ -554,8 +555,7 @@ msgstr "Nu există limbi disponibile. Ați instalat corect modelele?"
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Introduceți cheia API. Dacă aveți nevoie de o cheie API, %(instructions)s"
+msgstr "Introduceți cheia API. Dacă aveți nevoie de o cheie API, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -565,8 +565,7 @@ msgstr "apăsați linkul \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "contactați operatorul serverului."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Gratuit și Open Source Machine Translation API"
@@ -574,12 +573,12 @@ msgstr "Gratuit și Open Source Machine Translation API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "API de traducere automată gratuită și cu sursă deschisă. Self-hosted, "
-"capabil de offline și ușor de configurat. Rulați propriul server API în doar"
-" câteva minute."
+"capabil de offline și ușor de configurat. Rulați propriul server API în "
+"doar câteva minute."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -724,16 +723,22 @@ msgstr "%(libretranslate)s Colaboratori"
 #~ msgstr "Vietnameză"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Această API publică ar trebui să fie utilizată pentru testare, pentru uz "
-#~ "personal sau pentru utilizări rare. Dacă aveți de gând să rulați o aplicație"
-#~ " în producție, vă rugăm să folosiți %(host_server)s sau %(get_api_key)s."
+#~ "Această API publică ar trebui să "
+#~ "fie utilizată pentru testare, pentru uz"
+#~ " personal sau pentru utilizări rare. "
+#~ "Dacă aveți de gând să rulați o "
+#~ "aplicație în producție, vă rugăm să "
+#~ "folosiți %(host_server)s sau %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "găzduiți propriul server"
 
 #~ msgid "get an API key"
 #~ msgstr "obțineți o cheie API"
+
diff --git a/libretranslate/locales/ru/LC_MESSAGES/messages.po b/libretranslate/locales/ru/LC_MESSAGES/messages.po
index 935c8531c..0c8e89ca4 100644
--- a/libretranslate/locales/ru/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ru/LC_MESSAGES/messages.po
@@ -8,18 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-09 21:16+0000\n"
 "Last-Translator: Blueberry <igory.ygr200@gmail.com>\n"
-"Language-Team: Russian <https://hosted.weblate.org/projects/libretranslate/"
-"app/ru/>\n"
 "Language: ru\n"
+"Language-Team: Russian "
+"<https://hosted.weblate.org/projects/libretranslate/app/ru/>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.7-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -747,3 +746,4 @@ msgstr "участникам, внёсшим вклад в разработку
 
 #~ msgid "get an API key"
 #~ msgstr "получите ключ API"
+
diff --git a/libretranslate/locales/si/LC_MESSAGES/messages.po b/libretranslate/locales/si/LC_MESSAGES/messages.po
index 231e4cbac..e2b84b583 100644
--- a/libretranslate/locales/si/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/si/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Sinhala translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,108 +8,117 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-07-27 07:54+0000\n"
-"Last-Translator: Overplant Poster <overplant_poster435@users.noreply.hosted."
-"weblate.org>\n"
-"Language-Team: Sinhala <https://hosted.weblate.org/projects/libretranslate/"
-"app/si/>\n"
+"Last-Translator: Overplant Poster "
+"<overplant_poster435@users.noreply.hosted.weblate.org>\n"
 "Language: si\n"
+"Language-Team: Sinhala "
+"<https://hosted.weblate.org/projects/libretranslate/app/si/>\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.0-dev\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr ""
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr ""
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr ""
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr ""
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr ""
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr ""
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -118,119 +127,175 @@ msgid "English"
 msgstr "ඉංග්‍රීසි"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "අරාබි"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "චීන"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "ප්‍රංශ"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "ජර්මානු"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "ග්‍රීක"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "හින්දි"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "ඉතාලි"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "ජපන්"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "කොරියානු"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "රුසියානු"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr ""
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -249,7 +314,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -301,199 +366,203 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
+msgid "Original text"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "යෝජිත පරිවර්තනය"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "යෝජිත පරිවර්තනයේ භාෂාව"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "භාෂා කේතය"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr ""
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr ""
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
@@ -507,139 +576,127 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "බලපත්‍රය:"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr ""
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -649,3 +706,21 @@ msgstr ""
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/si/meta.json b/libretranslate/locales/si/meta.json
new file mode 100644
index 000000000..72e0a9348
--- /dev/null
+++ b/libretranslate/locales/si/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "si",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/sk/LC_MESSAGES/messages.po b/libretranslate/locales/sk/LC_MESSAGES/messages.po
index af3d9e060..f28c3b070 100644
--- a/libretranslate/locales/sk/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/sk/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-08-10 21:59+0000\n"
 "Last-Translator: Milan Šalka <salka.milan@googlemail.com>\n"
-"Language-Team: Slovak <https://hosted.weblate.org/projects/libretranslate/app/sk/>\n"
 "Language: sk\n"
+"Language-Team: Slovak "
+"<https://hosted.weblate.org/projects/libretranslate/app/sk/>\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -75,8 +76,7 @@ msgstr "Neplatná požiadavka: %(name)s parameter musí byť &lt;= %(value)s"
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"Neplatná požiadavka: žiadosť (%(size)s) presahuje limit textu (%(limit)s)"
+msgstr "Neplatná požiadavka: žiadosť (%(size)s) presahuje limit textu (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -92,11 +92,11 @@ msgstr "%(format)s formát nie je podporovaný"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s ()%(tcode)s) nie je k dispozícii ako cieľový jazyk od %(sname)s "
-"()%(scode)s)"
+"%(tname)s ()%(tcode)s) nie je k dispozícii ako cieľový jazyk od %(sname)s"
+" ()%(scode)s)"
 
 #: libretranslate/app.py:701
 #, python-format
@@ -539,8 +539,8 @@ msgstr "Skopírované"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "Vďaka za vašu korekciu. Všimnite si, že návrh nebude mať vplyv hneď."
 
 #: libretranslate/templates/app.js.template:461
@@ -560,8 +560,7 @@ msgstr "stlačte odkaz „Get API Key“."
 msgid "contact the server operator."
 msgstr "kontaktujte operátora servera."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Zadarmo a Open Source strojový preklad API"
@@ -569,11 +568,11 @@ msgstr "Zadarmo a Open Source strojový preklad API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Zadarmo a Open Source strojového prekladu API. Seba-hosted, offline schopný "
-"a ľahko nastaviť. Spustite svoj vlastný server API za pár minút."
+"Zadarmo a Open Source strojového prekladu API. Seba-hosted, offline "
+"schopný a ľahko nastaviť. Spustite svoj vlastný server API za pár minút."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -721,16 +720,21 @@ msgstr "%(libretranslate)s Prispievatelia"
 #~ msgstr "Vietnamčina"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Toto verejné API by malo byť použité pre testovanie, osobné alebo zriedkavé "
-#~ "použitie. Ak sa chystáte spustiť aplikáciu vo výrobe, prosím %(host_server)s"
-#~ " alebo %(get_api_key)s."
+#~ "Toto verejné API by malo byť "
+#~ "použité pre testovanie, osobné alebo "
+#~ "zriedkavé použitie. Ak sa chystáte "
+#~ "spustiť aplikáciu vo výrobe, prosím "
+#~ "%(host_server)s alebo %(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "hostiť svoj vlastný server"
 
 #~ msgid "get an API key"
 #~ msgstr "získať API kľúč"
+
diff --git a/libretranslate/locales/sl/LC_MESSAGES/messages.po b/libretranslate/locales/sl/LC_MESSAGES/messages.po
index 6f51a40ac..450e2d85b 100644
--- a/libretranslate/locales/sl/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/sl/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: sl\n"
diff --git a/libretranslate/locales/sq/LC_MESSAGES/messages.po b/libretranslate/locales/sq/LC_MESSAGES/messages.po
index f14d35ba3..2de9c9aeb 100644
--- a/libretranslate/locales/sq/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/sq/LC_MESSAGES/messages.po
@@ -8,15 +8,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
 "Language: sq\n"
+"Language-Team: none\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -70,14 +70,12 @@ msgstr "Kërkesë e pavlefshme: %(name)s nuk a"
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
-msgstr ""
-"Kërkesë e pavlefshme: %(name)s Parametri duhet të jetë &lt;= %(value)s"
+msgstr "Kërkesë e pavlefshme: %(name)s Parametri duhet të jetë &lt;= %(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
-msgstr ""
-"Kërkesë e pavlefshme: (%(size)s) tejkaloi kufirin e tekstit (%(limit)s)"
+msgstr "Kërkesë e pavlefshme: (%(size)s) tejkaloi kufirin e tekstit (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
@@ -93,8 +91,8 @@ msgstr "%(format)s Format i pasuportuar"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr "%(tname)s (%(tcode)snuk është a %(sname)s (%(scode)s)"
 
 #: libretranslate/app.py:701
@@ -538,8 +536,8 @@ msgstr "Kopjuar"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
 "Faleminderit për korrigjimin. Vër re se sugjerimi nuk do të ndikojë "
 "menjëherë."
@@ -551,8 +549,7 @@ msgstr "Asnjë gjuhë në dispozicion. I instalove mirë modelet?"
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Lloji në çelësin tuaj API. Nëse ju duhet një çelës API, %(instructions)s"
+msgstr "Lloji në çelësin tuaj API. Nëse ju duhet një çelës API, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -562,8 +559,7 @@ msgstr "shtyp lidhjen \"Merr API.\"."
 msgid "contact the server operator."
 msgstr "kontaktoni operatorin e serverit."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Translation falas dhe i hapur i makinave"
@@ -571,11 +567,11 @@ msgstr "Translation falas dhe i hapur i makinave"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Translation i Makinave Free dhe Open. Vetë-pritur, jashtë linje i aftë dhe i"
-" lehtë për t'u krijuar. Zbatoni serverin tuaj API për pak minuta."
+"Translation i Makinave Free dhe Open. Vetë-pritur, jashtë linje i aftë "
+"dhe i lehtë për t'u krijuar. Zbatoni serverin tuaj API për pak minuta."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -720,9 +716,11 @@ msgstr "%(libretranslate)s Ndihmuan"
 #~ msgstr ""
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
 
 #~ msgid "host your own server"
@@ -730,3 +728,4 @@ msgstr "%(libretranslate)s Ndihmuan"
 
 #~ msgid "get an API key"
 #~ msgstr ""
+
diff --git a/libretranslate/locales/sr/LC_MESSAGES/messages.po b/libretranslate/locales/sr/LC_MESSAGES/messages.po
index 6705afc6e..009870eff 100644
--- a/libretranslate/locales/sr/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/sr/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Serbian translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,110 +8,121 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-06-22 19:41+0000\n"
 "Last-Translator: zerof <security@netmajstor.com>\n"
-"Language-Team: Serbian <https://hosted.weblate.org/projects/libretranslate/"
-"app/sr/>\n"
 "Language: sr\n"
+"Language-Team: Serbian "
+"<https://hosted.weblate.org/projects/libretranslate/app/sr/>\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.18.1\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Nevažeći JSON format"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Auto Detekcija"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Neovlašćeno"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Previše zahteva i kršenja ograničenja"
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Nevažeći API ključ"
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Kontaktirajte operatera servera da dobijete API ključ"
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Posetite %(url)s da bi ste dobili API lljuč"
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Uspori:"
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Nevažeći zahtev: nedostaje parametar %(name)s"
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"Nevažeći zahtev: zahtev (%(size)s) premašuje ograničenje teksta (%(limit)s)"
+"Nevažeći zahtev: zahtev (%(size)s) premašuje ograničenje teksta "
+"(%(limit)s)"
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s nije podržan"
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "%(format)s format nije podržan"
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (%(tcode)s) nije dostupan kao ciljni jezik is %(sname)s (%(scode)s)"
+"%(tname)s (%(tcode)s) nije dostupan kao ciljni jezik is %(sname)s "
+"(%(scode)s)"
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Nije moguće prevesti tekst:%(text)s"
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Prevođenje fajlova je onemogućeno na ovom serveru."
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Nevažeći zahtev: prazan fajl"
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Nevažeći zahtev: format fajla nije podržan"
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Nepostojeće ime fajla"
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Predlozi su onemogućeni na ovom serveru."
 
@@ -120,120 +131,176 @@ msgid "English"
 msgstr "Engleski"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Arapski"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azerbejdžanski"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Kineski"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Češki"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Danski"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Holandski"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Finski"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Francuski"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Nemački"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Grčki"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Hebrejski"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Indijski"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Mađarski"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonežanski"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "Irski"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Italijanski"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Japanski"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Korejski"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Persijski"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Poljski"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Portugalski"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Ruski"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Slovacki"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Španski"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Švedski"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Turski"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ukrajinski"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Vijetnamski"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -251,7 +318,7 @@ msgstr "prevodi"
 msgid "Translate text from a language to another"
 msgstr "Prevedite tekst sa jednog jezika na drugi"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Prevedeni tekst"
 
@@ -306,208 +373,210 @@ msgstr ""
 " * `html` - HTML markup\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "API ključ"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Prevedite fajl sa jednog jezika na drugi"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Prevedeni fajl"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Fajl za prevod"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Detektuj jezik u tekstu"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Detekcija"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Greška u detekciji"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Tekst za detekciju"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Preuzmi specifična podešavanja frontenda"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "podešavanja frontenda"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "frontend"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Pošaljite predlog za poboljšanje prevoda"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Uspešno"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Nije dozvoljeno"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Originalni tekst"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Predloženi prevod"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Jezik originalnog teksta"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Jezik predloženog prevoda"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "zaključak"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Jezik koda"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Ime jezika (na engleskom)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Podržani kodovi ciljnog jezika"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "Prevedeni tekst(ovi)"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Poruka o grešci"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Razlog za usporavanje"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "URL prevedenog fajla"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Nivo poverenja"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
-msgstr ""
-"Ograničenje unosa znakova za ovaj jezik (-1 označava da nema ograničenja)"
+msgstr "Ograničenje unosa znakova za ovaj jezik (-1 označava da nema ograničenja)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Vremensko ograničenje za prevod na frontendu"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Da li je omogućena baza podataka API ključeva."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Kada je potreban API ključ."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Kada je slanje predloga omogućeno."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Podržani format fajlova"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Da li je podnošenje bilo uspešno"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Kopiraj teks"
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Nije moguće učitati %(url)s"
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Nepoznata greška"
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Kopirano"
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
-msgstr ""
-"Hvala na ispravci. Imajte na umu da predlog neće odmah stupiti na snagu."
+msgstr "Hvala na ispravci. Imajte na umu da predlog neće odmah stupiti na snagu."
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr "Nema dostupnih jezika. Da li ste pravilno instalirali modele?"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Unesite svoj API ključ. Ako vam je potreban API ključ,%(instructions)s"
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "kliknite na „Preuzmi API ključ“."
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "kontaktirajte administratora servera."
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Besplatni API za mašinsko prevođenje otvorenog koda"
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "Besplatni API za mašinsko prevođenje otvorenog koda. Hostovan na vašem "
-"serveru, lokalna verzija i jednostavan za podešavanje. Pokrenite sopstveni "
-"API server za samo nekoliko minuta."
+"serveru, lokalna verzija i jednostavan za podešavanje. Pokrenite "
+"sopstveni API server za samo nekoliko minuta."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -517,142 +586,127 @@ msgstr "prevod"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "API dokumentacija"
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Nabavite API ključ"
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Kreiraj API ključ"
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Promeni jezik"
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Izmeni"
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Odbaci"
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API za prevođenje"
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Prevedi Tekst"
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Prevedi Fajl"
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Prevedi iz"
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Zamenite izvorni i ciljni jezik"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Prevesti u"
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Tekst za prevod"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Izbriši tekst"
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Predloži prevod"
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Otkaži"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Pošalji"
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Podržani formati fajlova:"
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Fajl"
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Izbriši fajl"
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Prevedi"
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Preuzmi"
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Zahtev"
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Odgovor"
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API za prevođenje otvorenog koda"
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Hostujte sami. Radi i bez nternet konekcije. Laka instalacija."
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "SlobodniPrevodilac"
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Licenca:"
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-"Ovaj javni API bi trebalo da se koristi za testiranje, ličnu ili retku "
-"upotrebu. Ako nameravate da pokrenete aplikaciju u produkciji, molim vas "
-"%(host_server)s ili %(get_api_key)s."
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr "hostujte svoj server"
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr "zatraži API ključ"
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -662,3 +716,26 @@ msgstr "Napravljen sa %(heart)s, sa %(contributors)s , i pokreće ga %(engine)s"
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "%(libretranslate)s Saradnici"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vijetnamski"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "Ovaj javni API bi trebalo da se"
+#~ " koristi za testiranje, ličnu ili "
+#~ "retku upotrebu. Ako nameravate da "
+#~ "pokrenete aplikaciju u produkciji, molim "
+#~ "vas %(host_server)s ili %(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "hostujte svoj server"
+
+#~ msgid "get an API key"
+#~ msgstr "zatraži API ključ"
+
diff --git a/libretranslate/locales/sr/meta.json b/libretranslate/locales/sr/meta.json
new file mode 100644
index 000000000..e8f8cc4d9
--- /dev/null
+++ b/libretranslate/locales/sr/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "sr",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/sv/LC_MESSAGES/messages.po b/libretranslate/locales/sv/LC_MESSAGES/messages.po
index 81e8c9964..a63841abb 100644
--- a/libretranslate/locales/sv/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/sv/LC_MESSAGES/messages.po
@@ -8,15 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-03-01 08:36+0000\n"
 "Last-Translator: tygyh <jonis9898@hotmail.com>\n"
-"Language-Team: Swedish <https://hosted.weblate.org/projects/libretranslate/app/sv/>\n"
 "Language: sv\n"
+"Language-Team: Swedish "
+"<https://hosted.weblate.org/projects/libretranslate/app/sv/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -66,27 +67,28 @@ msgstr "Ogiltig begäran: parametern %(name)s saknas"
 #, python-format
 msgid "Invalid request: %(name)s parameter is not a number"
 msgstr ""
-"Ogiltig begäran: <x>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0</x> parameter är inte ett tal %(name)s"
+"Ogiltig begäran: <x>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0</x> parameter är inte ett tal %(name)s"
 
 #: libretranslate/app.py:595
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
 msgstr ""
-"Ogiltig begäran: <x>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
-"0</x> parameter måste vara ≤ <x>1 1</x> %(name)s %(value)s"
+"Ogiltig begäran: <x>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
+"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+" 0 0 0 0 0 0 0 0 0 0</x> parameter måste vara ≤ <x>1 1</x> %(name)s "
+"%(value)s"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -107,8 +109,8 @@ msgstr "%(format)s-formatet stöds inte"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s) är inte tillgängligt som målspråk från %(sname)s "
 "(%(scode)s)"
@@ -554,11 +556,11 @@ msgstr "Kopierad"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Tack för din korrigering. Observera att förslaget inte kommer att träda i "
-"kraft direkt."
+"Tack för din korrigering. Observera att förslaget inte kommer att träda i"
+" kraft direkt."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
@@ -567,8 +569,7 @@ msgstr "Inga språk tillgängliga. Har du installerat modellerna korrekt?"
 #: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
-msgstr ""
-"Skriv in din API-nyckel. Om du behöver en API-nyckel, %(instructions)s"
+msgstr "Skriv in din API-nyckel. Om du behöver en API-nyckel, %(instructions)s"
 
 #: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
@@ -578,8 +579,7 @@ msgstr "tryck på länken \"Get API Key\"."
 msgid "contact the server operator."
 msgstr "kontakta serveroperatören."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Gratis och öppen källkod Maskinöversättning API"
@@ -587,11 +587,12 @@ msgstr "Gratis och öppen källkod Maskinöversättning API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"Gratis och öppen källkod Maskinöversättning API. Självvärd, offline kapabel "
-"och lätt att installera. Kör din egen API-server på bara några minuter."
+"Gratis och öppen källkod Maskinöversättning API. Självvärd, offline "
+"kapabel och lätt att installera. Kör din egen API-server på bara några "
+"minuter."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -739,12 +740,16 @@ msgstr "%(libretranslate)s Bidragsgivare"
 #~ msgstr "Vietnamesiska"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Detta offentliga API bör användas för testning, personlig eller sällsynt "
-#~ "användning. Om du ska köra en ansökan i produktionen, vänligen "
+#~ "Detta offentliga API bör användas för"
+#~ " testning, personlig eller sällsynt "
+#~ "användning. Om du ska köra en "
+#~ "ansökan i produktionen, vänligen "
 #~ "%(host_server)s eller %(get_api_key)s."
 
 #~ msgid "host your own server"
@@ -752,3 +757,4 @@ msgstr "%(libretranslate)s Bidragsgivare"
 
 #~ msgid "get an API key"
 #~ msgstr "få en API-nyckel"
+
diff --git a/libretranslate/locales/th/LC_MESSAGES/messages.po b/libretranslate/locales/th/LC_MESSAGES/messages.po
index 76d20395d..0adbb0947 100644
--- a/libretranslate/locales/th/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/th/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: th\n"
diff --git a/libretranslate/locales/tl/LC_MESSAGES/messages.po b/libretranslate/locales/tl/LC_MESSAGES/messages.po
index 9224b7aa9..b362174e8 100644
--- a/libretranslate/locales/tl/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/tl/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: fil_PH\n"
@@ -78,8 +78,8 @@ msgstr "Imbalidong kahilingan: %(name)s Ang parameter ay dapat &lt;= %(value)s"
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
-"Imbalidong pangalan ng programa: (%(size)s) lumampas sa itinakdang "
-"teksto (%(limit)s)"
+"Imbalidong pangalan ng programa: (%(size)s) lumampas sa itinakdang teksto"
+" (%(limit)s)"
 
 #: libretranslate/app.py:637 libretranslate/app.py:642
 #: libretranslate/app.py:811 libretranslate/app.py:816
diff --git a/libretranslate/locales/tr/LC_MESSAGES/messages.po b/libretranslate/locales/tr/LC_MESSAGES/messages.po
index 9e467dd35..b038505ee 100644
--- a/libretranslate/locales/tr/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/tr/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-09-03 16:09+0000\n"
 "Last-Translator: Murat Doğançay <murat.dogancay@gmail.com>\n"
-"Language-Team: Turkish <https://hosted.weblate.org/projects/libretranslate/"
-"app/tr/>\n"
 "Language: tr\n"
+"Language-Team: Turkish "
+"<https://hosted.weblate.org/projects/libretranslate/app/tr/>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.8-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -43,8 +42,7 @@ msgstr "Geçersiz API anahtarı"
 
 #: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
-msgstr ""
-"Bir API anahtarı almak için lütfen sunucu yöneticisiyle iletişime geçin"
+msgstr "Bir API anahtarı almak için lütfen sunucu yöneticisiyle iletişime geçin"
 
 #: libretranslate/app.py:319
 #, python-format
@@ -74,8 +72,8 @@ msgstr "Geçersiz istek: %(name)s parametresi bir sayı değil"
 #, python-format
 msgid "Invalid request: %(name)s parameter must be <= %(value)s"
 msgstr ""
-"Geçersiz istek: %(name)s parametresi %(value)s değerinden küçük veya eşit "
-"olmalı"
+"Geçersiz istek: %(name)s parametresi %(value)s değerinden küçük veya eşit"
+" olmalı"
 
 #: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
@@ -96,8 +94,8 @@ msgstr "%(format)s biçimi desteklenmiyor"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
 "%(tname)s (%(tcode)s), %(sname)s (%(scode)s) için hedef dil olarak "
 "kullanılamıyor"
@@ -543,10 +541,11 @@ msgstr "Kopyalandı"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr ""
-"Düzeltmeniz için teşekkürler. Önerinin hemen etkili olmayacağını unutmayın."
+"Düzeltmeniz için teşekkürler. Önerinin hemen etkili olmayacağını "
+"unutmayın."
 
 #: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
@@ -567,8 +566,7 @@ msgstr "\"API Anahtarı Al\" bağlantısına tıklayın."
 msgid "contact the server operator."
 msgstr "sunucu yöneticisiyle iletişime geçin."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "Özgür ve Açık Kaynaklı Makine Çevirisi API'si"
@@ -576,8 +574,8 @@ msgstr "Özgür ve Açık Kaynaklı Makine Çevirisi API'si"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
 "Özgür ve Açık Kaynaklı Makine Çevirisi API'si. Kendiniz "
 "barındırabileceğiniz, çevrim dışı çalışabilir ve kurulumu kolay. Sadece "
@@ -702,8 +700,7 @@ msgstr "Açık Kaynaklı Makine Çevirisi API'si"
 
 #: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
-msgstr ""
-"Kendiniz Barındırabileceğiniz. Çevrim Dışı Çalışabilen. Kurulumu Kolay."
+msgstr "Kendiniz Barındırabileceğiniz. Çevrim Dışı Çalışabilen. Kurulumu Kolay."
 
 #: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
@@ -717,8 +714,8 @@ msgstr "Lisans:"
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
-"%(contributors)s tarafından %(heart)s ile yapıldı ve %(engine)s tarafından "
-"desteklenmektedir"
+"%(contributors)s tarafından %(heart)s ile yapıldı ve %(engine)s "
+"tarafından desteklenmektedir"
 
 #: libretranslate/templates/index.html:345
 #, python-format
@@ -732,16 +729,21 @@ msgstr "%(libretranslate)s Katkıda Bulunanlar"
 #~ msgstr "Vietnamca"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "Bu herkese açık API test, kişisel veya ara sıra kullanım için "
-#~ "kullanılmalıdır. Üretimde bir uygulama çalıştıracaksanız, lütfen "
-#~ "%(host_server)s veya %(get_api_key)s."
+#~ "Bu herkese açık API test, kişisel "
+#~ "veya ara sıra kullanım için "
+#~ "kullanılmalıdır. Üretimde bir uygulama "
+#~ "çalıştıracaksanız, lütfen %(host_server)s veya "
+#~ "%(get_api_key)s."
 
 #~ msgid "host your own server"
 #~ msgstr "kendi sunucunuzu barındırın"
 
 #~ msgid "get an API key"
 #~ msgstr "bir API anahtarı alın"
+
diff --git a/libretranslate/locales/ug/LC_MESSAGES/messages.po b/libretranslate/locales/ug/LC_MESSAGES/messages.po
index e99738065..ef48acc3d 100644
--- a/libretranslate/locales/ug/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ug/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Uyghur translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,107 +8,116 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.12\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-02-20 07:02+0000\n"
 "Last-Translator: Liam Johnson <ibrahimjan@mail.ustc.edu.cn>\n"
-"Language-Team: Uyghur <https://hosted.weblate.org/projects/libretranslate/"
-"app/ug/>\n"
 "Language: ug\n"
+"Language-Team: Uyghur "
+"<https://hosted.weblate.org/projects/libretranslate/app/ug/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.5-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "ئىناۋەتسىز JSON فورماتى"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "ئاپتوماتىك تەكشۈرۈش"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "ھوقۇق بېرىلمىگەن"
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "ئىلتىماس سانى چەكتىن ئاشتى"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "API ئاچقۇچ ئىناۋەتسىز"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr ""
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -117,119 +126,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
+msgid "Persian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:32
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -248,7 +313,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -300,194 +365,198 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
 #: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
@@ -506,149 +575,151 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr ""
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr ""
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr ""
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/ug/meta.json b/libretranslate/locales/ug/meta.json
new file mode 100644
index 000000000..a886bc452
--- /dev/null
+++ b/libretranslate/locales/ug/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "ug",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/uk/LC_MESSAGES/messages.po b/libretranslate/locales/uk/LC_MESSAGES/messages.po
index 5b8b56c41..49c0c6158 100644
--- a/libretranslate/locales/uk/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/uk/LC_MESSAGES/messages.po
@@ -8,18 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 22:34+0000\n"
 "Last-Translator: Fqwe1 <Fqwe1@users.noreply.hosted.weblate.org>\n"
-"Language-Team: Ukrainian <https://hosted.weblate.org/projects/libretranslate/"
-"app/uk/>\n"
 "Language: uk\n"
+"Language-Team: Ukrainian "
+"<https://hosted.weblate.org/projects/libretranslate/app/uk/>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.7-dev\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -746,3 +745,4 @@ msgstr "Спільнотою %(libretranslate)s"
 
 #~ msgid "get an API key"
 #~ msgstr "отримайте API ключ"
+
diff --git a/libretranslate/locales/ur/LC_MESSAGES/messages.po b/libretranslate/locales/ur/LC_MESSAGES/messages.po
index cb485c773..370d06c6d 100644
--- a/libretranslate/locales/ur/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/ur/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.6.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-08 13:03-0400\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language: ur\n"
diff --git a/libretranslate/locales/vi/LC_MESSAGES/messages.po b/libretranslate/locales/vi/LC_MESSAGES/messages.po
index 350e7c43a..795a6781e 100644
--- a/libretranslate/locales/vi/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/vi/LC_MESSAGES/messages.po
@@ -8,110 +8,120 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-10-09 15:17-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-06-14 16:33+0000\n"
 "Last-Translator: Dương Nguyễn Võ Quốc <nguyenquocduong380@gmail.com>\n"
-"Language-Team: Vietnamese <https://hosted.weblate.org/projects/"
-"libretranslate/app/vi/>\n"
 "Language: vi\n"
+"Language-Team: Vietnamese "
+"<https://hosted.weblate.org/projects/libretranslate/app/vi/>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.6-dev\n"
-"Generated-By: Babel 2.12.1\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:79
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "Không đúng định dạng dữ liệu JSON"
 
-#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "Tự động phát hiện"
 
-#: libretranslate/app.py:232
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "Truy cập không hợp lệ."
 
-#: libretranslate/app.py:250
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr "Quá nhiều yêu cầu vượt giới hạn"
 
-#: libretranslate/app.py:257
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr "Mã API không hợp lệ"
 
-#: libretranslate/app.py:276
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr "Hãy liên hệ với người quản trị máy chủ để nhận mã API"
 
-#: libretranslate/app.py:278
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr "Vào %(url)s để lấy mã API"
 
-#: libretranslate/app.py:318
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr "Chậm lại:"
 
-#: libretranslate/app.py:525 libretranslate/app.py:527
-#: libretranslate/app.py:529 libretranslate/app.py:741
-#: libretranslate/app.py:743 libretranslate/app.py:745
-#: libretranslate/app.py:896 libretranslate/app.py:1053
-#: libretranslate/app.py:1055 libretranslate/app.py:1057
-#: libretranslate/app.py:1059
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr "Yêu cầu không hợp lệ: thiếu tham số %(name)s"
 
-#: libretranslate/app.py:544 libretranslate/app.py:553
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 "Yêu cầu không hợp lệ: kích thước yêu cầu %(size)s vượt quá giới hạn chữ "
 "(%(limit)s)"
 
-#: libretranslate/app.py:583 libretranslate/app.py:588
-#: libretranslate/app.py:758 libretranslate/app.py:763
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr "%(lang)s không được hỗ trợ"
 
-#: libretranslate/app.py:594
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr "định dạng %(format)s không được hỗ trợ"
 
-#: libretranslate/app.py:602 libretranslate/app.py:626
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr ""
-"%(tname)s (%(tcode)s) không có sẵn làm ngôn ngữ đích từ %(sname)s (%(scode)s)"
+"%(tname)s (%(tcode)s) không có sẵn làm ngôn ngữ đích từ %(sname)s "
+"(%(scode)s)"
 
-#: libretranslate/app.py:647
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr "Không thể dịch văn bản: %(text)s"
 
-#: libretranslate/app.py:734 libretranslate/app.py:788
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr "Dịch tệp tin bị tắt trên máy chủ này."
 
-#: libretranslate/app.py:748
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr "Yêu cầu không hợp lệ: tệp tin trống"
 
-#: libretranslate/app.py:751
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr "Yêu cầu không hợp lệ: định dạng tệp tin không được hỗ trợ"
 
-#: libretranslate/app.py:796
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr "Tên tệp tin không hợp lệ"
 
-#: libretranslate/app.py:1038
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr "Những gợi ý bị tắt trên máy chủ này."
 
@@ -120,120 +130,176 @@ msgid "English"
 msgstr "Tiếng Anh"
 
 #: libretranslate/locales/.langs.py:2
+msgid "Albanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:3
 msgid "Arabic"
 msgstr "Ả Rập"
 
-#: libretranslate/locales/.langs.py:3
+#: libretranslate/locales/.langs.py:4
 msgid "Azerbaijani"
 msgstr "Azerbaijan"
 
-#: libretranslate/locales/.langs.py:4
+#: libretranslate/locales/.langs.py:5
+msgid "Bengali"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:6
+msgid "Bulgarian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:7
+msgid "Catalan"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:8
 msgid "Chinese"
 msgstr "Trung Quốc"
 
-#: libretranslate/locales/.langs.py:5
+#: libretranslate/locales/.langs.py:9
+msgid "Chinese (traditional)"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:10
 msgid "Czech"
 msgstr "Séc"
 
-#: libretranslate/locales/.langs.py:6
+#: libretranslate/locales/.langs.py:11
 msgid "Danish"
 msgstr "Đan Mạch"
 
-#: libretranslate/locales/.langs.py:7
+#: libretranslate/locales/.langs.py:12
 msgid "Dutch"
 msgstr "Hà Lan"
 
-#: libretranslate/locales/.langs.py:8
+#: libretranslate/locales/.langs.py:13
 msgid "Esperanto"
 msgstr "Esperanto (Quốc tế ngữ)"
 
-#: libretranslate/locales/.langs.py:9
+#: libretranslate/locales/.langs.py:14
+msgid "Estonian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:15
 msgid "Finnish"
 msgstr "Phần Lan"
 
-#: libretranslate/locales/.langs.py:10
+#: libretranslate/locales/.langs.py:16
 msgid "French"
 msgstr "Pháp"
 
-#: libretranslate/locales/.langs.py:11
+#: libretranslate/locales/.langs.py:17
 msgid "German"
 msgstr "Đức"
 
-#: libretranslate/locales/.langs.py:12
+#: libretranslate/locales/.langs.py:18
 msgid "Greek"
 msgstr "Hy Lạp"
 
-#: libretranslate/locales/.langs.py:13
+#: libretranslate/locales/.langs.py:19
 msgid "Hebrew"
 msgstr "Do Thái"
 
-#: libretranslate/locales/.langs.py:14
+#: libretranslate/locales/.langs.py:20
 msgid "Hindi"
 msgstr "Hindi"
 
-#: libretranslate/locales/.langs.py:15
+#: libretranslate/locales/.langs.py:21
 msgid "Hungarian"
 msgstr "Hungary"
 
-#: libretranslate/locales/.langs.py:16
+#: libretranslate/locales/.langs.py:22
 msgid "Indonesian"
 msgstr "Indonesia"
 
-#: libretranslate/locales/.langs.py:17
+#: libretranslate/locales/.langs.py:23
 msgid "Irish"
 msgstr "irish"
 
-#: libretranslate/locales/.langs.py:18
+#: libretranslate/locales/.langs.py:24
 msgid "Italian"
 msgstr "Ý"
 
-#: libretranslate/locales/.langs.py:19
+#: libretranslate/locales/.langs.py:25
 msgid "Japanese"
 msgstr "Nhật"
 
-#: libretranslate/locales/.langs.py:20
+#: libretranslate/locales/.langs.py:26
 msgid "Korean"
 msgstr "Hàn"
 
-#: libretranslate/locales/.langs.py:21
+#: libretranslate/locales/.langs.py:27
+msgid "Latvian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:28
+msgid "Lithuanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:29
+msgid "Malay"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:30
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
 msgid "Persian"
 msgstr "Ba Tư"
 
-#: libretranslate/locales/.langs.py:22
+#: libretranslate/locales/.langs.py:32
 msgid "Polish"
 msgstr "Ba Lan"
 
-#: libretranslate/locales/.langs.py:23
+#: libretranslate/locales/.langs.py:33
 msgid "Portuguese"
 msgstr "Bồ Đào Nha"
 
-#: libretranslate/locales/.langs.py:24
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
 msgid "Russian"
 msgstr "Nga"
 
-#: libretranslate/locales/.langs.py:25
+#: libretranslate/locales/.langs.py:36
 msgid "Slovak"
 msgstr "Slovak"
 
-#: libretranslate/locales/.langs.py:26
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
 msgid "Spanish"
 msgstr "Tây Ban Nha"
 
-#: libretranslate/locales/.langs.py:27
+#: libretranslate/locales/.langs.py:39
 msgid "Swedish"
 msgstr "Thụy Điển"
 
-#: libretranslate/locales/.langs.py:28
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
 msgid "Turkish"
 msgstr "Thổ nhỉ kỳ"
 
-#: libretranslate/locales/.langs.py:29
+#: libretranslate/locales/.langs.py:43
 msgid "Ukranian"
 msgstr "Ukraina"
 
-#: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
-msgstr "Tiếng Việt"
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
+msgstr ""
 
 #: libretranslate/locales/.swag.py:1
 msgid "Retrieve list of supported languages"
@@ -251,7 +317,7 @@ msgstr "dịch"
 msgid "Translate text from a language to another"
 msgstr "Dịch từ sang một ngôn ngữ khác"
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr "Văn bản đã dịch"
 
@@ -306,207 +372,209 @@ msgstr ""
 " * `html` - HTML markup\n"
 
 #: libretranslate/locales/.swag.py:17
+msgid "Preferred number of alternative translations"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:18
 msgid "API key"
 msgstr "Mã API"
 
-#: libretranslate/locales/.swag.py:18
+#: libretranslate/locales/.swag.py:19
 msgid "Translate file from a language to another"
 msgstr "Dịch tệp tin sang ngôn ngữ khác"
 
-#: libretranslate/locales/.swag.py:19
+#: libretranslate/locales/.swag.py:20
 msgid "Translated file"
 msgstr "Tệp tin đã dịch"
 
-#: libretranslate/locales/.swag.py:20
+#: libretranslate/locales/.swag.py:21
 msgid "File to translate"
 msgstr "Tệp để dịch"
 
-#: libretranslate/locales/.swag.py:21
+#: libretranslate/locales/.swag.py:22
 msgid "Detect the language of a single text"
 msgstr "Phát hiện ngôn ngữ của một đoạn chữ"
 
-#: libretranslate/locales/.swag.py:22
+#: libretranslate/locales/.swag.py:23
 msgid "Detections"
 msgstr "Các phát hiện"
 
-#: libretranslate/locales/.swag.py:23
+#: libretranslate/locales/.swag.py:24
 msgid "Detection error"
 msgstr "Lỗi phát hiện"
 
-#: libretranslate/locales/.swag.py:24
+#: libretranslate/locales/.swag.py:25
 msgid "Text to detect"
 msgstr "Chữ để phát hiện"
 
-#: libretranslate/locales/.swag.py:25
+#: libretranslate/locales/.swag.py:26
 msgid "Retrieve frontend specific settings"
 msgstr "Lấy cài đặt về giao diện"
 
-#: libretranslate/locales/.swag.py:26
+#: libretranslate/locales/.swag.py:27
 msgid "frontend settings"
 msgstr "các cài đặt giao diện"
 
-#: libretranslate/locales/.swag.py:27
+#: libretranslate/locales/.swag.py:28
 msgid "frontend"
 msgstr "giao diện"
 
-#: libretranslate/locales/.swag.py:28
+#: libretranslate/locales/.swag.py:29
 msgid "Submit a suggestion to improve a translation"
 msgstr "Gửi gợi ý để cải thiện bản dịch"
 
-#: libretranslate/locales/.swag.py:29
+#: libretranslate/locales/.swag.py:30
 msgid "Success"
 msgstr "Thành công"
 
-#: libretranslate/locales/.swag.py:30
+#: libretranslate/locales/.swag.py:31
 msgid "Not authorized"
 msgstr "Không được phép"
 
-#: libretranslate/locales/.swag.py:31
+#: libretranslate/locales/.swag.py:32
 msgid "Original text"
 msgstr "Chữ gốc"
 
-#: libretranslate/locales/.swag.py:32
+#: libretranslate/locales/.swag.py:33
 msgid "Suggested translation"
 msgstr "Bản dịch đề xuất"
 
-#: libretranslate/locales/.swag.py:33
+#: libretranslate/locales/.swag.py:34
 msgid "Language of original text"
 msgstr "Ngôn ngữ của văn bản gốc"
 
-#: libretranslate/locales/.swag.py:34
+#: libretranslate/locales/.swag.py:35
 msgid "Language of suggested translation"
 msgstr "Ngôn ngữ của bản dịch đề xuất"
 
-#: libretranslate/locales/.swag.py:35
+#: libretranslate/locales/.swag.py:36
 msgid "feedback"
 msgstr "phản hồi"
 
-#: libretranslate/locales/.swag.py:36
+#: libretranslate/locales/.swag.py:37
 msgid "Language code"
 msgstr "Mã ngôn ngữ"
 
-#: libretranslate/locales/.swag.py:37
+#: libretranslate/locales/.swag.py:38
 msgid "Human-readable language name (in English)"
 msgstr "Tên ngôn ngữ con người có thể đọc được (bằng tiếng Anh)"
 
-#: libretranslate/locales/.swag.py:38
+#: libretranslate/locales/.swag.py:39
 msgid "Supported target language codes"
 msgstr "Các mã ngôn ngữ đích được hỗ trợ"
 
-#: libretranslate/locales/.swag.py:39
+#: libretranslate/locales/.swag.py:40
 msgid "Translated text(s)"
 msgstr "(Các) văn bản đã dịch"
 
-#: libretranslate/locales/.swag.py:40
+#: libretranslate/locales/.swag.py:41
 msgid "Error message"
 msgstr "Thông điệp lỗi"
 
-#: libretranslate/locales/.swag.py:41
+#: libretranslate/locales/.swag.py:42
 msgid "Reason for slow down"
 msgstr "Lý do phải chậm lại"
 
-#: libretranslate/locales/.swag.py:42
+#: libretranslate/locales/.swag.py:43
 msgid "Translated file url"
 msgstr "Dịch url tệp tin"
 
-#: libretranslate/locales/.swag.py:43
+#: libretranslate/locales/.swag.py:44
 msgid "Confidence value"
 msgstr "Giá trị tin cậy"
 
-#: libretranslate/locales/.swag.py:44
+#: libretranslate/locales/.swag.py:45
 msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr "Giới hạn ký tự đầu vào cho ngôn ngữ này (-1 nghĩa là không giới hạn)"
 
-#: libretranslate/locales/.swag.py:45
+#: libretranslate/locales/.swag.py:46
 msgid "Frontend translation timeout"
 msgstr "Quá hạn đợi bản dịch"
 
-#: libretranslate/locales/.swag.py:46
+#: libretranslate/locales/.swag.py:47
 msgid "Whether the API key database is enabled."
 msgstr "Cơ sở dữ liệu mã API có được bật không."
 
-#: libretranslate/locales/.swag.py:47
+#: libretranslate/locales/.swag.py:48
 msgid "Whether an API key is required."
 msgstr "Có bắt buộc mã API hay không."
 
-#: libretranslate/locales/.swag.py:48
+#: libretranslate/locales/.swag.py:49
 msgid "Whether submitting suggestions is enabled."
 msgstr "Có cho phép gửi đề xuất hay không."
 
-#: libretranslate/locales/.swag.py:49
+#: libretranslate/locales/.swag.py:50
 msgid "Supported files format"
 msgstr "Các định dạng tệp tin được hỗ trợ"
 
-#: libretranslate/locales/.swag.py:50
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr "Đã gửi thành công hay chưa"
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:286
-#: libretranslate/templates/app.js.template:290
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr "Sao chép chữ"
 
 #: libretranslate/templates/app.js.template:80
 #: libretranslate/templates/app.js.template:86
 #: libretranslate/templates/app.js.template:91
-#: libretranslate/templates/app.js.template:273
-#: libretranslate/templates/app.js.template:343
-#: libretranslate/templates/app.js.template:431
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr "Không thể tải %(url)s"
 
-#: libretranslate/templates/app.js.template:264
-#: libretranslate/templates/app.js.template:334
-#: libretranslate/templates/app.js.template:412
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr "Lỗi không rõ"
 
-#: libretranslate/templates/app.js.template:287
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr "Đã sao chép"
 
-#: libretranslate/templates/app.js.template:331
+#: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "Cảm ơn đã sửa. Lưu ý đề xuất sẽ không có tác dụng ngay lập tức."
 
-#: libretranslate/templates/app.js.template:455
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
-msgstr ""
-"Không có ngôn ngữ có sẵn. Bạn đã cài đặt các mô hình một cách chính xác?"
+msgstr "Không có ngôn ngữ có sẵn. Bạn đã cài đặt các mô hình một cách chính xác?"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr "Nhập mã API của bạn. Nếu bạn cần lấy mã API, %(instructions)s"
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr "nhấn liên kết \"Lấy mã API\"."
 
-#: libretranslate/templates/app.js.template:522
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr "liên hệ với người quản trị máy chủ."
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
-#: libretranslate/templates/index.html:336
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "API dịch thuật máy miễn phí và mã nguồn mở"
 
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr ""
-"API dịch thuật máy miễn phí và nguồn mở. Tự lưu trữ, có thể sử dụng ngoại "
-"tuyến và dễ cài đặt. Tự chạy máy chủ API của bạn chỉ trong vài phút."
+"API dịch thuật máy miễn phí và nguồn mở. Tự lưu trữ, có thể sử dụng ngoại"
+" tuyến và dễ cài đặt. Tự chạy máy chủ API của bạn chỉ trong vài phút."
 
 #: libretranslate/templates/index.html:11
 msgid "translation"
@@ -516,155 +584,160 @@ msgstr "dịch"
 msgid "api"
 msgstr "api"
 
-#: libretranslate/templates/index.html:65
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr "Tài liệu API"
 
-#: libretranslate/templates/index.html:67
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr "Lấy Mã API"
 
-#: libretranslate/templates/index.html:69
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr "GitHub"
 
-#: libretranslate/templates/index.html:71
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr "Đặt Mã API"
 
-#: libretranslate/templates/index.html:73
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr "Thay đổi ngôn ngữ"
 
-#: libretranslate/templates/index.html:79
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr "Sửa"
 
-#: libretranslate/templates/index.html:81
+#: libretranslate/templates/index.html:83
 msgid "Toggle dark/light mode"
 msgstr "Chuyển chế độ sáng/tối"
 
-#: libretranslate/templates/index.html:157
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr "Bỏ"
 
-#: libretranslate/templates/index.html:171
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr "API dịch"
 
-#: libretranslate/templates/index.html:175
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr "Dịch văn bản"
 
-#: libretranslate/templates/index.html:179
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr "Dịch tệp tin"
 
-#: libretranslate/templates/index.html:185
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr "Dịch từ"
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr "Hoán đổi ngôn ngữ nguồn và đích"
 
-#: libretranslate/templates/index.html:198
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr "Dịch sang"
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr "Chữ để dịch"
 
-#: libretranslate/templates/index.html:213
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr "Xóa chữ"
 
-#: libretranslate/templates/index.html:226
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr "Đề xuất dịch"
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr "Hủy"
 
-#: libretranslate/templates/index.html:233
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr "Gửi"
 
-#: libretranslate/templates/index.html:249
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr "Các định dạng tệp tin được hỗ trợ:"
 
-#: libretranslate/templates/index.html:253
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr "Tệp tin"
 
-#: libretranslate/templates/index.html:268
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr "Bỏ tệp tin"
 
-#: libretranslate/templates/index.html:275
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr "Dịch"
 
-#: libretranslate/templates/index.html:276
-#: libretranslate/templates/index.html:320
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr "Tải về"
 
-#: libretranslate/templates/index.html:295
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr "Yêu cầu"
 
-#: libretranslate/templates/index.html:300
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr "Trả lời"
 
-#: libretranslate/templates/index.html:315
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr "API Dịch Máy Mã Nguồn Mở"
 
-#: libretranslate/templates/index.html:316
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr "Tự lưu trữ. Có thể dùng ngoại tuyến. Dễ cài đặt."
 
-#: libretranslate/templates/index.html:335
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr "LibreTranslate"
 
-#: libretranslate/templates/index.html:337
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr "Giấy phép:"
 
-#: libretranslate/templates/index.html:340
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. If "
-"you're going to run an application in production, please %(host_server)s or "
-"%(get_api_key)s."
-msgstr ""
-"API công khai này chỉ nên dùng để thử nghiệm, sử dụng cá nhân hay không "
-"thường xuyên. Nếu bạn muốn chạy ứng dụng cho quá trình sản xuất, hãy "
-"%(host_server)s hoặc %(get_api_key)s."
-
-#: libretranslate/templates/index.html:340
-msgid "host your own server"
-msgstr "lưu trữ máy chủ của chính bạn"
-
-#: libretranslate/templates/index.html:340
-msgid "get an API key"
-msgstr "lấy mã API"
-
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
 msgstr "Tạo ra với %(heart)s bởi %(contributors)s và chạy bằng %(engine)s"
 
-#: libretranslate/templates/index.html:348
+#: libretranslate/templates/index.html:345
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr "Các cộng tác viên %(libretranslate)s"
 
 #~ msgid "multipart/form-data"
 #~ msgstr "đa phần dữ liệu"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Tiếng Việt"
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+#~ "API công khai này chỉ nên dùng "
+#~ "để thử nghiệm, sử dụng cá nhân "
+#~ "hay không thường xuyên. Nếu bạn "
+#~ "muốn chạy ứng dụng cho quá trình"
+#~ " sản xuất, hãy %(host_server)s hoặc "
+#~ "%(get_api_key)s."
+
+#~ msgid "host your own server"
+#~ msgstr "lưu trữ máy chủ của chính bạn"
+
+#~ msgid "get an API key"
+#~ msgstr "lấy mã API"
+
diff --git a/libretranslate/locales/zgh/LC_MESSAGES/messages.po b/libretranslate/locales/zgh/LC_MESSAGES/messages.po
index b7f448bc2..1e1887b65 100644
--- a/libretranslate/locales/zgh/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/zgh/LC_MESSAGES/messages.po
@@ -1,4 +1,4 @@
-# Translations template for LibreTranslate.
+# Standard Moroccan Tamazight translations for LibreTranslate.
 # Copyright (C) 2023 LibreTranslate Authors
 # This file is distributed under the same license as the LibreTranslate
 # project.
@@ -8,107 +8,116 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-01-06 17:52-0500\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2023-01-28 14:45+0000\n"
 "Last-Translator: ⵣⵓⵀⵉⵔ ⴰⵎⴰⵣⵉⵖ ZOUHIR DEHBI <zouhirdehbi56@gmail.com>\n"
-"Language-Team: Tamazight (Standard Moroccan) <https://hosted.weblate.org/"
-"projects/libretranslate/app/zgh/>\n"
 "Language: zgh\n"
+"Language-Team: Tamazight (Standard Moroccan) "
+"<https://hosted.weblate.org/projects/libretranslate/app/zgh/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.16-dev\n"
-"Generated-By: Babel 2.11.0\n"
+"Generated-By: Babel 2.15.0\n"
 
-#: libretranslate/app.py:60
+#: libretranslate/app.py:80
 msgid "Invalid JSON format"
 msgstr "ⵓⵔ ⵜⵎⵙⴰⵙⴰ ⵜⵍⵖⴰ ⵏ JSON"
 
-#: libretranslate/app.py:128 libretranslate/templates/app.js.template:427
+#: libretranslate/app.py:180 libretranslate/templates/app.js.template:465
 msgid "Auto Detect"
 msgstr "ⵉⵕⵉⵕⴹ ⴰⵡⵓⵔⵎⴰⵏ"
 
-#: libretranslate/app.py:193
+#: libretranslate/app.py:273
 msgid "Unauthorized"
 msgstr "ⵡⴰⵔ ⵜⵓⵔⴰⴳⵜ"
 
-#: libretranslate/app.py:211
+#: libretranslate/app.py:291
 msgid "Too many request limits violations"
 msgstr ""
 
-#: libretranslate/app.py:220
+#: libretranslate/app.py:298
 msgid "Invalid API key"
 msgstr ""
 
-#: libretranslate/app.py:227
+#: libretranslate/app.py:317
 msgid "Please contact the server operator to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:229
+#: libretranslate/app.py:319
 #, python-format
 msgid "Visit %(url)s to get an API key"
 msgstr ""
 
-#: libretranslate/app.py:269
+#: libretranslate/app.py:366
 msgid "Slowdown:"
 msgstr ""
 
-#: libretranslate/app.py:467 libretranslate/app.py:469
-#: libretranslate/app.py:471 libretranslate/app.py:683
-#: libretranslate/app.py:685 libretranslate/app.py:687
-#: libretranslate/app.py:838 libretranslate/app.py:987
-#: libretranslate/app.py:989 libretranslate/app.py:991
-#: libretranslate/app.py:993
+#: libretranslate/app.py:583 libretranslate/app.py:585
+#: libretranslate/app.py:587 libretranslate/app.py:796
+#: libretranslate/app.py:798 libretranslate/app.py:800
+#: libretranslate/app.py:957 libretranslate/app.py:1114
+#: libretranslate/app.py:1116 libretranslate/app.py:1118
+#: libretranslate/app.py:1120
 #, python-format
 msgid "Invalid request: missing %(name)s parameter"
 msgstr ""
 
-#: libretranslate/app.py:480 libretranslate/app.py:492
+#: libretranslate/app.py:592
+#, python-format
+msgid "Invalid request: %(name)s parameter is not a number"
+msgstr ""
+
+#: libretranslate/app.py:595
+#, python-format
+msgid "Invalid request: %(name)s parameter must be <= %(value)s"
+msgstr ""
+
+#: libretranslate/app.py:612 libretranslate/app.py:622
 #, python-format
 msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
 msgstr ""
 
-#: libretranslate/app.py:525 libretranslate/app.py:530
-#: libretranslate/app.py:700 libretranslate/app.py:705
+#: libretranslate/app.py:637 libretranslate/app.py:642
+#: libretranslate/app.py:811 libretranslate/app.py:816
 #, python-format
 msgid "%(lang)s is not supported"
 msgstr ""
 
-#: libretranslate/app.py:536
+#: libretranslate/app.py:648
 #, python-format
 msgid "%(format)s format is not supported"
 msgstr ""
 
-#: libretranslate/app.py:544 libretranslate/app.py:568
+#: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
 "%(tname)s (%(tcode)s) is not available as a target language from "
 "%(sname)s (%(scode)s)"
 msgstr ""
 
-#: libretranslate/app.py:589
+#: libretranslate/app.py:701
 #, python-format
 msgid "Cannot translate text: %(text)s"
 msgstr ""
 
-#: libretranslate/app.py:676 libretranslate/app.py:730
+#: libretranslate/app.py:788 libretranslate/app.py:849
 msgid "Files translation are disabled on this server."
 msgstr ""
 
-#: libretranslate/app.py:690
+#: libretranslate/app.py:803
 msgid "Invalid request: empty file"
 msgstr ""
 
-#: libretranslate/app.py:693
+#: libretranslate/app.py:806
 msgid "Invalid request: file format not supported"
 msgstr ""
 
-#: libretranslate/app.py:738
+#: libretranslate/app.py:857
 msgid "Invalid filename"
 msgstr ""
 
-#: libretranslate/app.py:979
+#: libretranslate/app.py:1099
 msgid "Suggestions are disabled on this server."
 msgstr ""
 
@@ -117,119 +126,175 @@ msgid "English"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:2
-msgid "Arabic"
+msgid "Albanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:3
-msgid "Azerbaijani"
+msgid "Arabic"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:4
-msgid "Chinese"
+msgid "Azerbaijani"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:5
-msgid "Czech"
+msgid "Bengali"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:6
-msgid "Danish"
+msgid "Bulgarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:7
-msgid "Dutch"
+msgid "Catalan"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:8
-msgid "Esperanto"
+msgid "Chinese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:9
-msgid "Finnish"
+msgid "Chinese (traditional)"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:10
-msgid "French"
+msgid "Czech"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:11
-msgid "German"
+msgid "Danish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:12
-msgid "Greek"
+msgid "Dutch"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:13
-msgid "Hebrew"
+msgid "Esperanto"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:14
-msgid "Hindi"
+msgid "Estonian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:15
-msgid "Hungarian"
+msgid "Finnish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:16
-msgid "Indonesian"
+msgid "French"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:17
-msgid "Irish"
+msgid "German"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:18
-msgid "Italian"
+msgid "Greek"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:19
-msgid "Japanese"
+msgid "Hebrew"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:20
-msgid "Korean"
+msgid "Hindi"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:21
-msgid "Persian"
+msgid "Hungarian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:22
-msgid "Polish"
+msgid "Indonesian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:23
-msgid "Portuguese"
+msgid "Irish"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:24
-msgid "Russian"
+msgid "Italian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:25
-msgid "Slovak"
+msgid "Japanese"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:26
-msgid "Spanish"
+msgid "Korean"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:27
-msgid "Swedish"
+msgid "Latvian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:28
-msgid "Turkish"
+msgid "Lithuanian"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:29
-msgid "Ukranian"
+msgid "Malay"
 msgstr ""
 
 #: libretranslate/locales/.langs.py:30
-msgid "Vietnamese"
+msgid "Norwegian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:31
+msgid "Persian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:32
+msgid "Polish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:33
+msgid "Portuguese"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:34
+msgid "Romanian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:35
+msgid "Russian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:36
+msgid "Slovak"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:37
+msgid "Slovenian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:38
+msgid "Spanish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:39
+msgid "Swedish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:40
+msgid "Tagalog"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:41
+msgid "Thai"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:42
+msgid "Turkish"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:43
+msgid "Ukranian"
+msgstr ""
+
+#: libretranslate/locales/.langs.py:44
+msgid "Urdu"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:1
@@ -248,7 +313,7 @@ msgstr ""
 msgid "Translate text from a language to another"
 msgstr ""
 
-#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:219
+#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
 msgid "Translated text"
 msgstr ""
 
@@ -300,199 +365,203 @@ msgid ""
 msgstr ""
 
 #: libretranslate/locales/.swag.py:17
-msgid "API key"
+msgid "Preferred number of alternative translations"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:18
-msgid "Translate file from a language to another"
+msgid "API key"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:19
-msgid "Translated file"
+msgid "Translate file from a language to another"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:20
-msgid "File to translate"
+msgid "Translated file"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:21
-msgid "Detect the language of a single text"
+msgid "File to translate"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:22
-msgid "Detections"
+msgid "Detect the language of a single text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:23
-msgid "Detection error"
+msgid "Detections"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:24
-msgid "Text to detect"
+msgid "Detection error"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:25
-msgid "Retrieve frontend specific settings"
+msgid "Text to detect"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:26
-msgid "frontend settings"
+msgid "Retrieve frontend specific settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:27
-msgid "frontend"
+msgid "frontend settings"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:28
-msgid "Submit a suggestion to improve a translation"
+msgid "frontend"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:29
-msgid "Success"
+msgid "Submit a suggestion to improve a translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:30
-msgid "Not authorized"
+msgid "Success"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:31
-msgid "Original text"
+msgid "Not authorized"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:32
-msgid "Suggested translation"
+msgid "Original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:33
-msgid "Language of original text"
+msgid "Suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:34
-msgid "Language of suggested translation"
+msgid "Language of original text"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:35
-msgid "feedback"
+msgid "Language of suggested translation"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:36
-msgid "Language code"
+msgid "feedback"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:37
-msgid "Human-readable language name (in English)"
+msgid "Language code"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:38
-msgid "Supported target language codes"
+msgid "Human-readable language name (in English)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:39
-msgid "Translated text(s)"
+msgid "Supported target language codes"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:40
-msgid "Error message"
+msgid "Translated text(s)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:41
-msgid "Reason for slow down"
+msgid "Error message"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:42
-msgid "Translated file url"
+msgid "Reason for slow down"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:43
-msgid "Confidence value"
+msgid "Translated file url"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:44
-msgid "Character input limit for this language (-1 indicates no limit)"
+msgid "Confidence value"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:45
-msgid "Frontend translation timeout"
+msgid "Character input limit for this language (-1 indicates no limit)"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:46
-msgid "Whether the API key database is enabled."
+msgid "Frontend translation timeout"
 msgstr ""
 
 #: libretranslate/locales/.swag.py:47
-msgid "Whether an API key is required."
+msgid "Whether the API key database is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:48
-msgid "Whether submitting suggestions is enabled."
+msgid "Whether an API key is required."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:49
-msgid "Supported files format"
+msgid "Whether submitting suggestions is enabled."
 msgstr ""
 
 #: libretranslate/locales/.swag.py:50
+msgid "Supported files format"
+msgstr ""
+
+#: libretranslate/locales/.swag.py:51
 msgid "Whether submission was successful"
 msgstr ""
 
 #: libretranslate/templates/app.js.template:31
-#: libretranslate/templates/app.js.template:275
-#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:292
+#: libretranslate/templates/app.js.template:296
 msgid "Copy text"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:72
-#: libretranslate/templates/app.js.template:78
-#: libretranslate/templates/app.js.template:83
-#: libretranslate/templates/app.js.template:262
-#: libretranslate/templates/app.js.template:332
-#: libretranslate/templates/app.js.template:402
-#: libretranslate/templates/app.js.template:447
+#: libretranslate/templates/app.js.template:80
+#: libretranslate/templates/app.js.template:86
+#: libretranslate/templates/app.js.template:91
+#: libretranslate/templates/app.js.template:279
+#: libretranslate/templates/app.js.template:349
+#: libretranslate/templates/app.js.template:437
+#: libretranslate/templates/app.js.template:485
 #, python-format
 msgid "Cannot load %(url)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:253
-#: libretranslate/templates/app.js.template:323
-#: libretranslate/templates/app.js.template:385
-#: libretranslate/templates/app.js.template:395
+#: libretranslate/templates/app.js.template:270
+#: libretranslate/templates/app.js.template:340
+#: libretranslate/templates/app.js.template:418
+#: libretranslate/templates/app.js.template:429
 msgid "Unknown error"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:276
+#: libretranslate/templates/app.js.template:293
 msgid "Copied"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:320
+#: libretranslate/templates/app.js.template:337
 msgid ""
 "Thanks for your correction. Note the suggestion will not take effect "
 "right away."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:423
+#: libretranslate/templates/app.js.template:461
 msgid "No languages available. Did you install the models correctly?"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 #, python-format
 msgid "Type in your API Key. If you need an API key, %(instructions)s"
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "press the \"Get API Key\" link."
 msgstr ""
 
-#: libretranslate/templates/app.js.template:479
+#: libretranslate/templates/app.js.template:528
 msgid "contact the server operator."
 msgstr ""
 
-#: libretranslate/templates/index.html:8 libretranslate/templates/index.html:25
-#: libretranslate/templates/index.html:333
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr ""
 
 #: libretranslate/templates/index.html:10
-#: libretranslate/templates/index.html:29
+#: libretranslate/templates/index.html:31
 msgid ""
 "Free and Open Source Machine Translation API. Self-hosted, offline "
 "capable and easy to setup. Run your own API server in just a few minutes."
@@ -506,139 +575,127 @@ msgstr ""
 msgid "api"
 msgstr ""
 
-#: libretranslate/templates/index.html:64
+#: libretranslate/templates/index.html:67
 msgid "API Docs"
 msgstr ""
 
-#: libretranslate/templates/index.html:66
+#: libretranslate/templates/index.html:69
 msgid "Get API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:68
+#: libretranslate/templates/index.html:71
 msgid "GitHub"
 msgstr ""
 
-#: libretranslate/templates/index.html:70
+#: libretranslate/templates/index.html:73
 msgid "Set API Key"
 msgstr ""
 
-#: libretranslate/templates/index.html:72
+#: libretranslate/templates/index.html:75
 msgid "Change language"
 msgstr ""
 
-#: libretranslate/templates/index.html:78
+#: libretranslate/templates/index.html:81
 msgid "Edit"
 msgstr ""
 
-#: libretranslate/templates/index.html:154
+#: libretranslate/templates/index.html:83
+msgid "Toggle dark/light mode"
+msgstr ""
+
+#: libretranslate/templates/index.html:159
 msgid "Dismiss"
 msgstr ""
 
-#: libretranslate/templates/index.html:168
+#: libretranslate/templates/index.html:173
 msgid "Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:172
+#: libretranslate/templates/index.html:177
 msgid "Translate Text"
 msgstr ""
 
-#: libretranslate/templates/index.html:176
+#: libretranslate/templates/index.html:181
 msgid "Translate Files"
 msgstr ""
 
-#: libretranslate/templates/index.html:182
+#: libretranslate/templates/index.html:187
 msgid "Translate from"
 msgstr ""
 
-#: libretranslate/templates/index.html:192
+#: libretranslate/templates/index.html:197
 msgid "Swap source and target languages"
 msgstr ""
 
-#: libretranslate/templates/index.html:195
+#: libretranslate/templates/index.html:200
 msgid "Translate into"
 msgstr ""
 
-#: libretranslate/templates/index.html:207
+#: libretranslate/templates/index.html:212
 msgid "Text to translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:210
+#: libretranslate/templates/index.html:215
 msgid "Delete text"
 msgstr ""
 
-#: libretranslate/templates/index.html:223
+#: libretranslate/templates/index.html:228
 msgid "Suggest translation"
 msgstr ""
 
-#: libretranslate/templates/index.html:227
+#: libretranslate/templates/index.html:232
 msgid "Cancel"
 msgstr ""
 
-#: libretranslate/templates/index.html:230
+#: libretranslate/templates/index.html:235
 msgid "Send"
 msgstr ""
 
-#: libretranslate/templates/index.html:246
+#: libretranslate/templates/index.html:251
 msgid "Supported file formats:"
 msgstr ""
 
-#: libretranslate/templates/index.html:250
+#: libretranslate/templates/index.html:255
 msgid "File"
 msgstr ""
 
-#: libretranslate/templates/index.html:265
+#: libretranslate/templates/index.html:270
 msgid "Remove file"
 msgstr ""
 
-#: libretranslate/templates/index.html:272
+#: libretranslate/templates/index.html:277
 msgid "Translate"
 msgstr ""
 
-#: libretranslate/templates/index.html:273
-#: libretranslate/templates/index.html:317
+#: libretranslate/templates/index.html:278
+#: libretranslate/templates/index.html:322
 msgid "Download"
 msgstr ""
 
-#: libretranslate/templates/index.html:292
+#: libretranslate/templates/index.html:297
 msgid "Request"
 msgstr ""
 
-#: libretranslate/templates/index.html:297
+#: libretranslate/templates/index.html:302
 msgid "Response"
 msgstr ""
 
-#: libretranslate/templates/index.html:312
+#: libretranslate/templates/index.html:317
 msgid "Open Source Machine Translation API"
 msgstr ""
 
-#: libretranslate/templates/index.html:313
+#: libretranslate/templates/index.html:318
 msgid "Self-Hosted. Offline Capable. Easy to Setup."
 msgstr ""
 
-#: libretranslate/templates/index.html:332
+#: libretranslate/templates/index.html:337
 msgid "LibreTranslate"
 msgstr ""
 
-#: libretranslate/templates/index.html:334
+#: libretranslate/templates/index.html:339
 msgid "License:"
 msgstr ""
 
-#: libretranslate/templates/index.html:337
-#, python-format
-msgid ""
-"This public API should be used for testing, personal or infrequent use. "
-"If you're going to run an application in production, please "
-"%(host_server)s or %(get_api_key)s."
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "host your own server"
-msgstr ""
-
-#: libretranslate/templates/index.html:337
-msgid "get an API key"
-msgstr ""
-
 #: libretranslate/templates/index.html:345
 #, python-format
 msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
@@ -648,3 +705,21 @@ msgstr ""
 #, python-format
 msgid "%(libretranslate)s Contributors"
 msgstr ""
+
+#~ msgid "Vietnamese"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
+#~ msgstr ""
+
+#~ msgid "host your own server"
+#~ msgstr ""
+
+#~ msgid "get an API key"
+#~ msgstr ""
+
diff --git a/libretranslate/locales/zgh/meta.json b/libretranslate/locales/zgh/meta.json
new file mode 100644
index 000000000..479eca9b6
--- /dev/null
+++ b/libretranslate/locales/zgh/meta.json
@@ -0,0 +1,4 @@
+{
+    "name": "zgh",
+    "reviewed": false
+}
\ No newline at end of file
diff --git a/libretranslate/locales/zh/LC_MESSAGES/messages.po b/libretranslate/locales/zh/LC_MESSAGES/messages.po
index 71c10bb56..1d61ce45f 100644
--- a/libretranslate/locales/zh/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/zh/LC_MESSAGES/messages.po
@@ -8,17 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-08-20 19:09+0000\n"
 "Last-Translator: NtskwK <natsukawa247@outlook.com>\n"
-"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
-"libretranslate/app/zh_Hans/>\n"
 "Language: zh\n"
+"Language-Team: Chinese (Simplified) "
+"<https://hosted.weblate.org/projects/libretranslate/app/zh_Hans/>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.7\n"
 "Generated-By: Babel 2.15.0\n"
 
 #: libretranslate/app.py:80
@@ -93,8 +92,8 @@ msgstr "%(format)s 格式不受支持"
 #: libretranslate/app.py:657 libretranslate/app.py:681
 #, python-format
 msgid ""
-"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s "
-"(%(scode)s)"
+"%(tname)s (%(tcode)s) is not available as a target language from "
+"%(sname)s (%(scode)s)"
 msgstr "%(tname)s（%(tcode)s）不能作为 %(sname)s （%(scode)s）的目标语言"
 
 #: libretranslate/app.py:701
@@ -538,8 +537,8 @@ msgstr "复制"
 
 #: libretranslate/templates/app.js.template:337
 msgid ""
-"Thanks for your correction. Note the suggestion will not take effect right "
-"away."
+"Thanks for your correction. Note the suggestion will not take effect "
+"right away."
 msgstr "感谢您的更正。注意此建议不会立即生效。"
 
 #: libretranslate/templates/app.js.template:461
@@ -559,8 +558,7 @@ msgstr "点击“获取API密钥”链接。"
 msgid "contact the server operator."
 msgstr "联系服务器管理员。"
 
-#: libretranslate/templates/index.html:9
-#: libretranslate/templates/index.html:27
+#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
 #: libretranslate/templates/index.html:338
 msgid "Free and Open Source Machine Translation API"
 msgstr "免费开源的机器翻译API"
@@ -568,8 +566,8 @@ msgstr "免费开源的机器翻译API"
 #: libretranslate/templates/index.html:10
 #: libretranslate/templates/index.html:31
 msgid ""
-"Free and Open Source Machine Translation API. Self-hosted, offline capable "
-"and easy to setup. Run your own API server in just a few minutes."
+"Free and Open Source Machine Translation API. Self-hosted, offline "
+"capable and easy to setup. Run your own API server in just a few minutes."
 msgstr "免费开源的机器翻译API。自我托管，支持离线且易于设置。只需几分钟就可以运行你自己的API服务器。"
 
 #: libretranslate/templates/index.html:11
@@ -718,14 +716,18 @@ msgstr "%(libretranslate)s 贡献者"
 #~ msgstr "越南语"
 
 #~ msgid ""
-#~ "This public API should be used for testing, personal or infrequent use. If "
-#~ "you're going to run an application in production, please %(host_server)s or "
-#~ "%(get_api_key)s."
+#~ "This public API should be used for"
+#~ " testing, personal or infrequent use. "
+#~ "If you're going to run an "
+#~ "application in production, please "
+#~ "%(host_server)s or %(get_api_key)s."
 #~ msgstr ""
-#~ "此公共API仅适用于测试，个人或不频繁的使用。如果您要在生产环境中运行应用程序，请 %(host_server)s 或 %(get_api_key)s。"
+#~ "此公共API仅适用于测试，个人或不频繁的使用。如果您要在生产环境中运行应用程序，请 %(host_server)s "
+#~ "或 %(get_api_key)s。"
 
 #~ msgid "host your own server"
 #~ msgstr "搭建自己的服务器"
 
 #~ msgid "get an API key"
 #~ msgstr "获取API密钥"
+
diff --git a/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po b/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po
index 3f39451e3..86998d834 100644
--- a/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po
+++ b/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LibreTranslate 1.3.9\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-08-08 13:24-0400\n"
+"POT-Creation-Date: 2024-09-21 11:57-0400\n"
 "PO-Revision-Date: 2024-04-23 20:07+0000\n"
 "Last-Translator: Peter Dave Hello <hsu@peterdavehello.org>\n"
 "Language: zh_Hant\n"
diff --git a/pyproject.toml b/pyproject.toml
index ef8a84c76..930e9524c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -53,6 +53,7 @@ dependencies = [
     "Werkzeug ==2.3.8",
     "requests ==2.31.0",
     "redis ==4.4.4",
+    "numpy <2",
     "prometheus-client ==0.15.0",
     "polib ==1.1.1",
     "packaging ==23.1",
@@ -129,36 +130,6 @@ addopts = [
     "--cov-report=term-missing",
 ]
 
-
-# https://beta.ruff.rs/docs/rules
-[tool.ruff]
-src = ["libretranslate", "scripts"]
-target-version = "py38"
-line-length = 136
-select = [
-    "I",     # isort
-    "N",     # pep8-naming
-    "S",     # bandit
-    "A",     # flake8-builtins
-    "YTT",   # flake8-2020
-    "B",     # flake8-bugbear
-    # "C",     # flake8-comprehensions
-    "ICN",   # flake8-import-conventions
-    # "SIM",   # flake8-simplify
-    "TID",   # flake8-tidy-imports
-    # "Q",     # flake8-quotes
-    # "FBT",   # flake8-boolean-trap
-    "F",     # pyflakes
-    "UP",    # pyupgrade
-    # "E",     # pycodestyle errors
-    # "W",     # pycodestyle warnings
-    # "PLC",   # pylint convention
-    "PLE",   # pylint error
-    # "PLR",   # pylint refactor
-    # "PLW",   # pylint warning
-    # "RUF",   # ruff specific
-]
-
 ignore = [
     "E501", # line too long
     "A003", # Class attribute is shadowing a python builtin
@@ -167,10 +138,3 @@ ignore = [
     "T201", "T203", # remove print and pprint
     "E402", # Module level import not at top of file
 ]
-
-[tool.ruff.per-file-ignores]
-"__init__.py" = ["I", "F401"] # module imported but unused
-
-
-[tool.ruff.mccabe]
-max-complexity = 12
diff --git a/scripts/update_locales.py b/scripts/update_locales.py
index 6949456bf..b8ed811fa 100755
--- a/scripts/update_locales.py
+++ b/scripts/update_locales.py
@@ -66,10 +66,11 @@ def add_swag_string(s):
         'zt': 'zh_Hant'
     }
     lang_codes = [lang_map.get(l.code, l.code) for l in languages if l.code != "en"]
+    all_folders = [d for d in os.listdir(locales_dir) if os.path.isdir(os.path.join(locales_dir, d))]
     review_map = {}
 
     # Init/update
-    for l in lang_codes:
+    for l in all_folders:
         cmd = "init"
         if os.path.isdir(os.path.join(locales_dir, l, "LC_MESSAGES")):
             cmd = "update"
@@ -82,7 +83,7 @@ def add_swag_string(s):
         if not os.path.isfile(meta_file):
             with open(meta_file, 'w') as f:
                 f.write(json.dumps({
-                    'name': next(lang.name for lang in languages if lang_map.get(lang.code, lang.code) == l),
+                    'name': l if l not in lang_codes else next(lang.name for lang in languages if lang_map.get(lang.code, lang.code) == l),
                     'reviewed': False
                 }, indent=4))
                 print("Wrote %s" % meta_file)
@@ -96,7 +97,6 @@ def add_swag_string(s):
     # when a language model is available and a string is empty
 
     locales = get_available_locale_codes(only_reviewed=False)
-    print(locales)
     for locale in locales:
         if locale == 'en':
             continue


Test patch:
diff --git a/libretranslate/tests/test_api/conftest.py b/libretranslate/tests/test_api/conftest.py
index a1db03415..3d7640f31 100644
--- a/libretranslate/tests/test_api/conftest.py
+++ b/libretranslate/tests/test_api/conftest.py
@@ -3,14 +3,12 @@
 import pytest
 
 from libretranslate.app import create_app
-from libretranslate.default_values import DEFAULT_ARGUMENTS
 from libretranslate.main import get_args
 
 
 @pytest.fixture()
 def app():
-    sys.argv = ['']
-    DEFAULT_ARGUMENTS['LOAD_ONLY'] = "en,es"
+    sys.argv = ['', '--load-only', 'en,es']
     app = create_app(get_args())
 
     yield app