Synced
Under attack mode (bdb9b6a224) Update Locales (97804234f1) IT Translation (58a95aecef) Fix z-index (fd0119bf70) Improvement to under attack mode (411b50178e) Translations (22268c1923) (c72fb9c836)
This commit is contained in:
parent
2ba50bc116
commit
42fb6cf8d6
12 changed files with 552 additions and 444 deletions
|
|
@ -199,6 +199,7 @@ Arguments passed to the process or set via environment variables are split into
|
|||
| --api-keys | Enable API keys database for per-client rate limits when --req-limit is reached | `Don't use API keys` | LT_API_KEYS |
|
||||
| --require-api-key-origin | Require use of an API key for programmatic access to the API, unless the request origin matches this domain | `No restrictions on domain origin` | LT_REQUIRE_API_KEY_ORIGIN |
|
||||
| --require-api-key-secret | Require use of an API key for programmatic access to the API, unless the client also sends a secret match | `No secrets required` | LT_REQUIRE_API_KEY_SECRET |
|
||||
| --under-attack | Enable under attack mode. When enabled, requests must be made with an API key | `Disabled` | LT_UNDER_ATTACK |
|
||||
| --suggestions | Allow user suggestions | `Disabled` | LT_SUGGESTIONS |
|
||||
| --disable-files-translation | Disable files translation | `File translation allowed` | LT_DISABLE_FILES_TRANSLATION |
|
||||
| --disable-web-ui | Disable web ui | `Web Ui enabled` | LT_DISABLE_WEB_UI |
|
||||
|
|
|
|||
|
|
@ -102,6 +102,9 @@ def get_remote_address():
|
|||
|
||||
return ip
|
||||
|
||||
def get_fingerprint():
|
||||
return request.headers.get("User-Agent", "") + request.headers.get("Cookie", "")
|
||||
|
||||
|
||||
def get_req_limits(default_limit, api_keys_db, db_multiplier=1, multiplier=1):
|
||||
req_limit = default_limit
|
||||
|
|
@ -348,12 +351,25 @@ def create_app(args):
|
|||
and not secret.secret_match(req_secret)
|
||||
):
|
||||
need_key = True
|
||||
|
||||
if secret.secret_bogus_match(req_secret):
|
||||
abort(make_response(jsonify({
|
||||
'translatedText': secret.get_emoji(),
|
||||
'alternatives': [],
|
||||
'detectedLanguage': { 'confidence': 100, 'language': 'en' }
|
||||
}), 200))
|
||||
|
||||
if (args.require_api_key_fingerprint
|
||||
and key_missing):
|
||||
if flood.fingerprint_mismatch(ip, get_fingerprint()):
|
||||
need_key = True
|
||||
|
||||
if args.under_attack and key_missing:
|
||||
abort(make_response(jsonify({
|
||||
'translatedText': secret.get_emoji(),
|
||||
'alternatives': [],
|
||||
'detectedLanguage': { 'confidence': 100, 'language': 'en' }
|
||||
}), 200))
|
||||
|
||||
if need_key:
|
||||
description = _("Please contact the server operator to get an API key")
|
||||
|
|
@ -432,7 +448,8 @@ def create_app(args):
|
|||
swagger_url=swagger_url,
|
||||
available_locales=sorted([{'code': l['code'], 'name': _lazy(l['name'])} for l in get_available_locales(not args.debug)], key=lambda s: s['name']),
|
||||
current_locale=get_locale(),
|
||||
alternate_locales=get_alternate_locale_links()
|
||||
alternate_locales=get_alternate_locale_links(),
|
||||
under_attack=args.under_attack,
|
||||
))
|
||||
|
||||
if args.require_api_key_secret:
|
||||
|
|
@ -460,7 +477,8 @@ def create_app(args):
|
|||
url_prefix=args.url_prefix,
|
||||
get_api_key_link=args.get_api_key_link,
|
||||
api_secret=api_secret,
|
||||
bogus_api_secret=bogus_api_secret), content_type='application/javascript; charset=utf-8')
|
||||
bogus_api_secret=bogus_api_secret,
|
||||
under_attack=args.under_attack), content_type='application/javascript; charset=utf-8')
|
||||
|
||||
if args.require_api_key_secret:
|
||||
response.headers['Last-Modified'] = http_date(datetime.now())
|
||||
|
|
|
|||
|
|
@ -151,6 +151,16 @@ _default_options_objects = [
|
|||
'default_value': False,
|
||||
'value_type': 'bool'
|
||||
},
|
||||
{
|
||||
'name': 'UNDER_ATTACK',
|
||||
'default_value': False,
|
||||
'value_type': 'bool'
|
||||
},
|
||||
{
|
||||
'name': 'REQUIRE_API_KEY_FINGERPRINT',
|
||||
'default_value': False,
|
||||
'value_type': 'bool'
|
||||
},
|
||||
{
|
||||
'name': 'SHARED_STORAGE',
|
||||
'default_value': 'memory://',
|
||||
|
|
@ -219,4 +229,4 @@ _default_options_objects = [
|
|||
]
|
||||
|
||||
|
||||
DEFAULT_ARGUMENTS = {obj['name']: _get_value(**obj) for obj in _default_options_objects}
|
||||
DEFAULT_ARGUMENTS = {obj['name']: _get_value(**obj) for obj in _default_options_objects}
|
||||
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"Project-Id-Version: LibreTranslate 1.3.9\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-16 23:47+0200\n"
|
||||
"PO-Revision-Date: 2024-11-12 22:23+0000\n"
|
||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||
"PO-Revision-Date: 2025-04-18 15:45+0000\n"
|
||||
"Last-Translator: Cengizhan Peker <cengizhan.peker@extenship.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/libretranslate/"
|
||||
"app/es/>\n"
|
||||
"Language: es\n"
|
||||
|
|
@ -18,12 +18,12 @@ msgstr ""
|
|||
"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.9-dev\n"
|
||||
"X-Generator: Weblate 5.11.1-dev\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#: libretranslate/app.py:80
|
||||
msgid "Invalid JSON format"
|
||||
msgstr "Formato JSON inválido"
|
||||
msgstr "JSON inválido"
|
||||
|
||||
#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467
|
||||
msgid "Auto Detect"
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: LibreTranslate 1.3.9\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-16 23:47+0200\n"
|
||||
"PO-Revision-Date: 2024-10-23 17:15+0000\n"
|
||||
"POT-Creation-Date: 2025-04-18 14:43-0400\n"
|
||||
"PO-Revision-Date: 2025-04-19 06:10+0000\n"
|
||||
"Last-Translator: Ghost of Sparta <makesocialfoss32@keemail.me>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/libretranslate/"
|
||||
"app/hu/>\n"
|
||||
|
|
@ -18,113 +18,116 @@ msgstr ""
|
|||
"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.2-dev\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"X-Generator: Weblate 5.11.1-dev\n"
|
||||
"Generated-By: Babel 2.12.1\n"
|
||||
|
||||
#: libretranslate/app.py:80
|
||||
#: libretranslate/app.py:93
|
||||
msgid "Invalid JSON format"
|
||||
msgstr "Érvénytelen JSON formátum"
|
||||
|
||||
#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467
|
||||
#: libretranslate/app.py:209 libretranslate/templates/app.js.template:473
|
||||
msgid "Auto Detect"
|
||||
msgstr "Automatikus felismerés"
|
||||
|
||||
#: libretranslate/app.py:273
|
||||
#: libretranslate/app.py:311
|
||||
msgid "Unauthorized"
|
||||
msgstr "Nincs jogosultsága"
|
||||
|
||||
#: libretranslate/app.py:291
|
||||
#: libretranslate/app.py:329
|
||||
msgid "Too many request limits violations"
|
||||
msgstr "Túl sok kérelem korlátozza a jogsértéseket"
|
||||
msgstr "Túl sok kérelem határértéke elérve"
|
||||
|
||||
#: libretranslate/app.py:298
|
||||
#: libretranslate/app.py:336
|
||||
msgid "Invalid API key"
|
||||
msgstr "Érvénytelen API kulcs"
|
||||
msgstr "Érvénytelen API-kulcs"
|
||||
|
||||
#: libretranslate/app.py:324
|
||||
#: libretranslate/app.py:371
|
||||
msgid "Please contact the server operator to get an API key"
|
||||
msgstr ""
|
||||
"Vegye fel a kapcsolatot a kiszolgáló-üzemeltetővel, hogy megkapja az API "
|
||||
"kulcsot"
|
||||
|
||||
#: libretranslate/app.py:326
|
||||
#, python-format
|
||||
msgid "Visit %(url)s to get an API key"
|
||||
msgstr "Látogasson el a(z) %(url)s címre, API kulcshoz"
|
||||
"Vegye fel a kapcsolatot a kiszolgáló üzemeltetőjével, hogy megkapja az "
|
||||
"API-kulcsot"
|
||||
|
||||
#: libretranslate/app.py:373
|
||||
#, python-format
|
||||
msgid "Visit %(url)s to get an API key"
|
||||
msgstr "Látogasson el a(z) %(url)s címre, API-kulcshoz"
|
||||
|
||||
#: libretranslate/app.py:420
|
||||
msgid "Slowdown:"
|
||||
msgstr "Lassulás:"
|
||||
|
||||
#: libretranslate/app.py:606 libretranslate/app.py:608
|
||||
#: libretranslate/app.py:610 libretranslate/app.py:819
|
||||
#: libretranslate/app.py:821 libretranslate/app.py:823
|
||||
#: libretranslate/app.py:980 libretranslate/app.py:1137
|
||||
#: libretranslate/app.py:1139 libretranslate/app.py:1141
|
||||
#: libretranslate/app.py:1143
|
||||
#: libretranslate/app.py:657 libretranslate/app.py:659
|
||||
#: libretranslate/app.py:661 libretranslate/app.py:882
|
||||
#: libretranslate/app.py:884 libretranslate/app.py:886
|
||||
#: libretranslate/app.py:1051 libretranslate/app.py:1208
|
||||
#: libretranslate/app.py:1210 libretranslate/app.py:1212
|
||||
#: libretranslate/app.py:1214
|
||||
#, python-format
|
||||
msgid "Invalid request: missing %(name)s parameter"
|
||||
msgstr "Érvénytelen kérés: hiányzik a(z) %(name)s paraméter"
|
||||
|
||||
#: libretranslate/app.py:615
|
||||
#: libretranslate/app.py:666
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter is not a number"
|
||||
msgstr "Érvénytelen kérés: <x>0 0</x> paraméter nem szám %(name)s"
|
||||
msgstr "Érvénytelen kérés: a(z) %(name)s paraméter nem egy szám"
|
||||
|
||||
#: libretranslate/app.py:618
|
||||
#: libretranslate/app.py:669
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter must be <= %(value)s"
|
||||
msgstr "Érvénytelen kérés: <x>0 0</x> paraméternek <= %(value)s %(name)s"
|
||||
msgstr ""
|
||||
"Érvénytelen kérés: a(z) %(name)s paraméternek a következőnek kell lennie:"
|
||||
" %(value)s"
|
||||
|
||||
#: libretranslate/app.py:635 libretranslate/app.py:645
|
||||
#: libretranslate/app.py:686 libretranslate/app.py:696
|
||||
#, python-format
|
||||
msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
|
||||
msgstr ""
|
||||
"Érvénytelen kérés: a kérés mérete (%(size)s) meghaladja a szövegkorlátot "
|
||||
"(%(limit)s)"
|
||||
"Érvénytelen kérés: a kérés mérete (%(size)s) meghaladja a(z) (%(limit)s) "
|
||||
"szövegkorlátot"
|
||||
|
||||
#: libretranslate/app.py:660 libretranslate/app.py:665
|
||||
#: libretranslate/app.py:834 libretranslate/app.py:839
|
||||
#: libretranslate/app.py:715 libretranslate/app.py:720
|
||||
#: libretranslate/app.py:897 libretranslate/app.py:902
|
||||
#: libretranslate/app.py:924
|
||||
#, python-format
|
||||
msgid "%(lang)s is not supported"
|
||||
msgstr "%(lang)s nyelv nem támogatott"
|
||||
msgstr "a(z) %(lang)s nyelv nem támogatott"
|
||||
|
||||
#: libretranslate/app.py:671
|
||||
#: libretranslate/app.py:726
|
||||
#, python-format
|
||||
msgid "%(format)s format is not supported"
|
||||
msgstr "%(format)s formátum nem támogatott"
|
||||
msgstr "a(z) %(format)s formátum nem támogatott"
|
||||
|
||||
#: libretranslate/app.py:680 libretranslate/app.py:704
|
||||
#: libretranslate/app.py:735 libretranslate/app.py:763
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%(tname)s (%(tcode)s) is not available as a target language from "
|
||||
"%(sname)s (%(scode)s)"
|
||||
msgstr ""
|
||||
"%(tname)s (%(tcode)s) nem áll rendelkezésre célnyelvként %(sname)s "
|
||||
"(%(scode)s)"
|
||||
"%(tname)s (%(tcode)s) nem áll rendelkezésre célnyelvként a következőből: "
|
||||
"%(sname)s (%(scode)s)"
|
||||
|
||||
#: libretranslate/app.py:724
|
||||
#: libretranslate/app.py:787
|
||||
#, python-format
|
||||
msgid "Cannot translate text: %(text)s"
|
||||
msgstr "Nem fordítható szöveg: %(text)s"
|
||||
msgstr "A következő szöveg nem fordítható: %(text)s"
|
||||
|
||||
#: libretranslate/app.py:811 libretranslate/app.py:872
|
||||
#: libretranslate/app.py:874 libretranslate/app.py:943
|
||||
msgid "Files translation are disabled on this server."
|
||||
msgstr "A fájlfordítások ki vannak kapcsolva ezen a kiszolgálón."
|
||||
|
||||
#: libretranslate/app.py:826
|
||||
#: libretranslate/app.py:889
|
||||
msgid "Invalid request: empty file"
|
||||
msgstr "Érvénytelen kérés: üres fájl"
|
||||
msgstr "Érvénytelen kérés: a fájl üres"
|
||||
|
||||
#: libretranslate/app.py:829
|
||||
#: libretranslate/app.py:892
|
||||
msgid "Invalid request: file format not supported"
|
||||
msgstr "Érvénytelen kérés: fájlformátum nem támogatott"
|
||||
msgstr "Érvénytelen kérés: a fájlformátum nem támogatott"
|
||||
|
||||
#: libretranslate/app.py:880
|
||||
#: libretranslate/app.py:951
|
||||
msgid "Invalid filename"
|
||||
msgstr "Érvénytelen fájlnév"
|
||||
|
||||
#: libretranslate/app.py:1122
|
||||
#: libretranslate/app.py:1193
|
||||
msgid "Suggestions are disabled on this server."
|
||||
msgstr "A javaslatok ki vannak kapcsolva ezen a kiszolgálón."
|
||||
|
||||
|
|
@ -145,188 +148,184 @@ msgid "Azerbaijani"
|
|||
msgstr "Azerbajdzsáni"
|
||||
|
||||
#: libretranslate/locales/.langs.py:5
|
||||
msgid "Basque"
|
||||
msgstr "Baszk"
|
||||
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bengali"
|
||||
msgstr "Bengáli"
|
||||
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bulgarian"
|
||||
msgstr "Bolgár"
|
||||
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
msgid "Catalan"
|
||||
msgstr "Katalán"
|
||||
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
msgid "Chinese"
|
||||
msgstr "Kínai"
|
||||
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
msgid "Chinese (traditional)"
|
||||
msgstr "Kínai (hagyományos)"
|
||||
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
msgid "Czech"
|
||||
msgstr "Cseh"
|
||||
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
msgid "Danish"
|
||||
msgstr "Dán"
|
||||
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
msgid "Dutch"
|
||||
msgstr "Holland"
|
||||
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
msgid "Esperanto"
|
||||
msgstr "Eszperantó"
|
||||
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
msgid "Estonian"
|
||||
msgstr "Észt"
|
||||
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
msgid "Finnish"
|
||||
msgstr "Finn"
|
||||
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
msgid "French"
|
||||
msgstr "Francia"
|
||||
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Galician"
|
||||
msgstr "Galíciai"
|
||||
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
msgid "German"
|
||||
msgstr "Német"
|
||||
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Greek"
|
||||
msgstr "Görög"
|
||||
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
msgid "Hebrew"
|
||||
msgstr "Héber"
|
||||
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
msgid "Hindi"
|
||||
msgstr "Hindi"
|
||||
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
msgid "Hungarian"
|
||||
msgstr "Magyar"
|
||||
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
msgid "Indonesian"
|
||||
msgstr "Indonéz"
|
||||
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
msgid "Irish"
|
||||
msgstr "Ír"
|
||||
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
msgid "Italian"
|
||||
msgstr "Olasz"
|
||||
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
msgid "Japanese"
|
||||
msgstr "Japán"
|
||||
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
msgid "Korean"
|
||||
msgstr "Koreai"
|
||||
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
msgid "Latvian"
|
||||
msgstr "Lett"
|
||||
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
msgid "Lithuanian"
|
||||
msgstr "Litván"
|
||||
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
msgid "Malay"
|
||||
msgstr "Maláj"
|
||||
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
msgid "Norwegian"
|
||||
msgstr "Norvég"
|
||||
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
msgid "Persian"
|
||||
msgstr "Perzsa"
|
||||
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
msgid "Polish"
|
||||
msgstr "Lengyel"
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
msgid "Portuguese"
|
||||
msgstr "Portugál"
|
||||
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "Portugál (brazil)"
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
msgid "Romanian"
|
||||
msgstr "Román"
|
||||
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
msgid "Russian"
|
||||
msgstr "Orosz"
|
||||
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
msgid "Slovak"
|
||||
msgstr "Szlovák"
|
||||
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
msgid "Slovenian"
|
||||
msgstr "Szlovén"
|
||||
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
msgid "Spanish"
|
||||
msgstr "Spanyol"
|
||||
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
msgid "Swedish"
|
||||
msgstr "Svéd"
|
||||
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
msgid "Tagalog"
|
||||
msgstr "Tagalog"
|
||||
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
msgid "Thai"
|
||||
msgstr "Thai"
|
||||
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
msgid "Turkish"
|
||||
msgstr "Török"
|
||||
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
msgid "Ukranian"
|
||||
msgstr "Ukrán"
|
||||
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
msgid "Urdu"
|
||||
msgstr "Urdu"
|
||||
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
msgid "Serbian"
|
||||
msgstr "Szerb"
|
||||
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ukrán"
|
||||
|
||||
#: libretranslate/locales/.langs.py:49
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
msgid "Vietnamese"
|
||||
msgstr "Vietnámi"
|
||||
|
||||
#: libretranslate/locales/.swag.py:1
|
||||
msgid "Retrieve list of supported languages"
|
||||
msgstr "Támogatott nyelvek listájának lekérése"
|
||||
msgstr "A támogatott nyelvek listájának lekérése"
|
||||
|
||||
#: libretranslate/locales/.swag.py:2
|
||||
msgid "List of languages"
|
||||
|
|
@ -338,11 +337,11 @@ msgstr "fordítás"
|
|||
|
||||
#: libretranslate/locales/.swag.py:4
|
||||
msgid "Translate text from a language to another"
|
||||
msgstr "Szöveg fordítása egy nyelvről egy másikra"
|
||||
msgstr "Szöveg fordítása az egyik nyelvről a másikra"
|
||||
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:233
|
||||
msgid "Translated text"
|
||||
msgstr "Fordított szöveg"
|
||||
msgstr "Lefordított szöveg"
|
||||
|
||||
#: libretranslate/locales/.swag.py:6
|
||||
msgid "Invalid request"
|
||||
|
|
@ -370,11 +369,11 @@ msgstr "Lefordítandó szöveg(ek)"
|
|||
|
||||
#: libretranslate/locales/.swag.py:12
|
||||
msgid "Source language code"
|
||||
msgstr "Forrás nyelv kódja"
|
||||
msgstr "Forrásnyelv kódja"
|
||||
|
||||
#: libretranslate/locales/.swag.py:13
|
||||
msgid "Target language code"
|
||||
msgstr "Cél nyelv kódja"
|
||||
msgstr "Célnyelv kódja"
|
||||
|
||||
#: libretranslate/locales/.swag.py:14
|
||||
msgid "text"
|
||||
|
|
@ -390,41 +389,41 @@ msgid ""
|
|||
" * `text` - Plain text\n"
|
||||
" * `html` - HTML markup\n"
|
||||
msgstr ""
|
||||
"Formátum forrás szöveg:\n"
|
||||
"Forrásszöveg formátuma:\n"
|
||||
"* `text' - egyszerű szöveg\n"
|
||||
"* `html' - HTML markup\n"
|
||||
|
||||
#: libretranslate/locales/.swag.py:17
|
||||
msgid "Preferred number of alternative translations"
|
||||
msgstr "Előnyös számú alternatív fordítás"
|
||||
msgstr "Az alternatív fordítások előnyben részesített száma"
|
||||
|
||||
#: libretranslate/locales/.swag.py:18
|
||||
msgid "API key"
|
||||
msgstr "API kulcs"
|
||||
msgstr "API-kulcs"
|
||||
|
||||
#: libretranslate/locales/.swag.py:19
|
||||
msgid "Translate file from a language to another"
|
||||
msgstr "Fájl fordítása egy nyelvről egy másikra"
|
||||
msgstr "Fájl fordítása az egyik nyelvről a másikra"
|
||||
|
||||
#: libretranslate/locales/.swag.py:20
|
||||
msgid "Translated file"
|
||||
msgstr "Fordított fájl"
|
||||
msgstr "Lefordított fájl"
|
||||
|
||||
#: libretranslate/locales/.swag.py:21
|
||||
msgid "File to translate"
|
||||
msgstr "Fájl fordítása"
|
||||
msgstr "Fájl lefordítása"
|
||||
|
||||
#: libretranslate/locales/.swag.py:22
|
||||
msgid "Detect the language of a single text"
|
||||
msgstr "A szöveg nyelvének észlelése"
|
||||
msgstr "Egyetlen szöveg nyelvének felismerése"
|
||||
|
||||
#: libretranslate/locales/.swag.py:23
|
||||
msgid "Detections"
|
||||
msgstr "Észlelések"
|
||||
msgstr "Felismerések"
|
||||
|
||||
#: libretranslate/locales/.swag.py:24
|
||||
msgid "Detection error"
|
||||
msgstr "Észlelési hiba"
|
||||
msgstr "Felismerési hiba"
|
||||
|
||||
#: libretranslate/locales/.swag.py:25
|
||||
msgid "Text to detect"
|
||||
|
|
@ -432,19 +431,19 @@ msgstr "Felismerendő szöveg"
|
|||
|
||||
#: libretranslate/locales/.swag.py:26
|
||||
msgid "Retrieve frontend specific settings"
|
||||
msgstr "Frontend-specifikus beállítások lekérése"
|
||||
msgstr "Előtétprogram-specifikus beállítások lekérése"
|
||||
|
||||
#: libretranslate/locales/.swag.py:27
|
||||
msgid "frontend settings"
|
||||
msgstr "frontend beállítások"
|
||||
msgstr "előtétprogram-beállítások"
|
||||
|
||||
#: libretranslate/locales/.swag.py:28
|
||||
msgid "frontend"
|
||||
msgstr "frontend"
|
||||
msgstr "előtétprogram"
|
||||
|
||||
#: libretranslate/locales/.swag.py:29
|
||||
msgid "Submit a suggestion to improve a translation"
|
||||
msgstr "Küldjön javaslatot a fordítás javításához"
|
||||
msgstr "Küldjön javaslatot egy fordítás javításához"
|
||||
|
||||
#: libretranslate/locales/.swag.py:30
|
||||
msgid "Success"
|
||||
|
|
@ -464,7 +463,7 @@ msgstr "Javasolt fordítás"
|
|||
|
||||
#: libretranslate/locales/.swag.py:34
|
||||
msgid "Language of original text"
|
||||
msgstr "Eredeti szöveg nyelve"
|
||||
msgstr "Az eredeti szöveg nyelve"
|
||||
|
||||
#: libretranslate/locales/.swag.py:35
|
||||
msgid "Language of suggested translation"
|
||||
|
|
@ -488,7 +487,7 @@ msgstr "Támogatott célnyelvi kódok"
|
|||
|
||||
#: libretranslate/locales/.swag.py:40
|
||||
msgid "Translated text(s)"
|
||||
msgstr "Fordított szöveg(ek)"
|
||||
msgstr "Lefordított szöveg(ek)"
|
||||
|
||||
#: libretranslate/locales/.swag.py:41
|
||||
msgid "Error message"
|
||||
|
|
@ -500,31 +499,31 @@ msgstr "A lelassulás oka"
|
|||
|
||||
#: libretranslate/locales/.swag.py:43
|
||||
msgid "Translated file url"
|
||||
msgstr "Fordított fájl url"
|
||||
msgstr "Lefordított fájl webcíme"
|
||||
|
||||
#: libretranslate/locales/.swag.py:44
|
||||
msgid "Confidence value"
|
||||
msgstr "Bizalmi érték"
|
||||
msgstr "Megbízhatósági érték"
|
||||
|
||||
#: libretranslate/locales/.swag.py:45
|
||||
msgid "Character input limit for this language (-1 indicates no limit)"
|
||||
msgstr "Jellemző bemeneti határértéke ennek a nyelvnek (-1 nem jelzi a határt)"
|
||||
msgstr "Karakterbeviteli korlát ezen a nyelven (-1 azt jelenti, hogy nincs korlát)"
|
||||
|
||||
#: libretranslate/locales/.swag.py:46
|
||||
msgid "Frontend translation timeout"
|
||||
msgstr "Frontend fordítás időtúllépés"
|
||||
msgstr "Előtétprogram-fordítási időtúllépés"
|
||||
|
||||
#: libretranslate/locales/.swag.py:47
|
||||
msgid "Whether the API key database is enabled."
|
||||
msgstr "Függetlenül attól, hogy az API kulcs adatbázisa engedélyezett-e."
|
||||
msgstr "Független attól, hogy az API-kulcs adatbázisa engedélyezve van-e."
|
||||
|
||||
#: libretranslate/locales/.swag.py:48
|
||||
msgid "Whether an API key is required."
|
||||
msgstr "Szükséges-e API kulcs."
|
||||
msgstr "Független attól, hogy az API-kulcs szükséges-e."
|
||||
|
||||
#: libretranslate/locales/.swag.py:49
|
||||
msgid "Whether submitting suggestions is enabled."
|
||||
msgstr "Engedélyezve van-e a javaslatok beküldése."
|
||||
msgstr "Független attól, hogy engedélyezve van-e a javaslatok beküldése."
|
||||
|
||||
#: libretranslate/locales/.swag.py:50
|
||||
msgid "Supported files format"
|
||||
|
|
@ -532,7 +531,7 @@ msgstr "Támogatott fájlformátum"
|
|||
|
||||
#: libretranslate/locales/.swag.py:51
|
||||
msgid "Whether submission was successful"
|
||||
msgstr "Amennyiben a beküldés sikeres volt"
|
||||
msgstr "Független attól, hogy a beküldés sikeres volt-e"
|
||||
|
||||
#: libretranslate/templates/app.js.template:31
|
||||
#: libretranslate/templates/app.js.template:294
|
||||
|
|
@ -546,10 +545,10 @@ msgstr "Szöveg másolása"
|
|||
#: libretranslate/templates/app.js.template:281
|
||||
#: libretranslate/templates/app.js.template:351
|
||||
#: libretranslate/templates/app.js.template:439
|
||||
#: libretranslate/templates/app.js.template:487
|
||||
#: libretranslate/templates/app.js.template:493
|
||||
#, python-format
|
||||
msgid "Cannot load %(url)s"
|
||||
msgstr "Nem tölthető be a(z) %(url)s"
|
||||
msgstr "Nem tölthető be a(z) %(url)s webcím"
|
||||
|
||||
#: libretranslate/templates/app.js.template:272
|
||||
#: libretranslate/templates/app.js.template:342
|
||||
|
|
@ -574,21 +573,23 @@ msgstr ""
|
|||
msgid "No languages available. Did you install the models correctly?"
|
||||
msgstr "Nincsenek elérhető nyelvek. Helyesen telepítette a modelleket?"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
#, python-format
|
||||
msgid "Type in your API Key. If you need an API key, %(instructions)s"
|
||||
msgstr "Írja be az API kulcsot. Ha szüksége van egy API kulcsra, %(instructions)s"
|
||||
msgstr ""
|
||||
"Írja be az API-kulcsot. Ha szüksége van egy API-kulcsra, tekintse meg a "
|
||||
"következőt: %(instructions)s"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "press the \"Get API Key\" link."
|
||||
msgstr "nyomja meg a \"Get API Key\" hivatkozást."
|
||||
msgstr "kattintson az „API-kulcs beszerzése” hivatkozásra."
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "contact the server operator."
|
||||
msgstr "lépjen kapcsolatba a kiszolgáló-üzemeltetővel."
|
||||
msgstr "lépjen kapcsolatba a kiszolgáló üzemeltetőjével."
|
||||
|
||||
#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
|
||||
#: libretranslate/templates/index.html:338
|
||||
#: libretranslate/templates/index.html:347
|
||||
msgid "Free and Open Source Machine Translation API"
|
||||
msgstr "Ingyenes és nyílt forráskódú gépi fordító API"
|
||||
|
||||
|
|
@ -599,8 +600,8 @@ msgid ""
|
|||
"capable and easy to setup. Run your own API server in just a few minutes."
|
||||
msgstr ""
|
||||
"Ingyenes és nyílt forráskódú gépi fordító API. Ingyenesen letölthető, "
|
||||
"offline működő és könnyen telepíthető. Futtassa saját API kiszolgálóját "
|
||||
"néhány perc alatt."
|
||||
"offline működő és könnyen telepíthető. Futtassa a saját API-kiszolgálóját"
|
||||
" néhány perc alatt."
|
||||
|
||||
#: libretranslate/templates/index.html:11
|
||||
msgid "translation"
|
||||
|
|
@ -612,11 +613,11 @@ msgstr "api"
|
|||
|
||||
#: libretranslate/templates/index.html:67
|
||||
msgid "API Docs"
|
||||
msgstr "API Dokumentáció"
|
||||
msgstr "API-dokumentáció"
|
||||
|
||||
#: libretranslate/templates/index.html:69
|
||||
msgid "Get API Key"
|
||||
msgstr "Szerezzen API kucsot"
|
||||
msgstr "API-kulcs beszerzése"
|
||||
|
||||
#: libretranslate/templates/index.html:71
|
||||
msgid "GitHub"
|
||||
|
|
@ -624,7 +625,7 @@ msgstr "GitHub"
|
|||
|
||||
#: libretranslate/templates/index.html:73
|
||||
msgid "Set API Key"
|
||||
msgstr "Állítsa be az API kulcsot"
|
||||
msgstr "API-kulcs beállítása"
|
||||
|
||||
#: libretranslate/templates/index.html:75
|
||||
msgid "Change language"
|
||||
|
|
@ -640,108 +641,115 @@ msgstr "Váltás sötét/világos módra"
|
|||
|
||||
#: libretranslate/templates/index.html:159
|
||||
msgid "Dismiss"
|
||||
msgstr "elvetés"
|
||||
msgstr "Elvetés"
|
||||
|
||||
#: libretranslate/templates/index.html:173
|
||||
#: libretranslate/templates/index.html:177
|
||||
msgid ""
|
||||
"Due to bot abuse, translation requests are temporarily limited to users "
|
||||
"with a valid API key. Sorry for the inconvenience!"
|
||||
msgstr ""
|
||||
"A botok visszaélései miatt a fordítási kérelmek ideiglenesen csak érvényes "
|
||||
"API-kulccsal rendelkező felhasználókra korlátozódnak. Elnézést a "
|
||||
"kellemetlenségért!"
|
||||
|
||||
#: libretranslate/templates/index.html:182
|
||||
msgid "Translation API"
|
||||
msgstr "Fordító API"
|
||||
|
||||
#: libretranslate/templates/index.html:177
|
||||
#: libretranslate/templates/index.html:186
|
||||
msgid "Translate Text"
|
||||
msgstr "Szöveg fordítása"
|
||||
|
||||
#: libretranslate/templates/index.html:181
|
||||
#: libretranslate/templates/index.html:190
|
||||
msgid "Translate Files"
|
||||
msgstr "Fájlok fordítása"
|
||||
|
||||
#: libretranslate/templates/index.html:187
|
||||
#: libretranslate/templates/index.html:196
|
||||
msgid "Translate from"
|
||||
msgstr "Fordítási ürlap"
|
||||
msgstr "Fordítás erről:"
|
||||
|
||||
#: libretranslate/templates/index.html:197
|
||||
#: libretranslate/templates/index.html:206
|
||||
msgid "Swap source and target languages"
|
||||
msgstr "Forrás és célnyelv felcserélése"
|
||||
|
||||
#: libretranslate/templates/index.html:200
|
||||
#: libretranslate/templates/index.html:209
|
||||
msgid "Translate into"
|
||||
msgstr "Fordítsd le ebbe"
|
||||
msgstr "Fordítás erre:"
|
||||
|
||||
#: libretranslate/templates/index.html:212
|
||||
#: libretranslate/templates/index.html:221
|
||||
msgid "Text to translate"
|
||||
msgstr "Fordítandó szöveg"
|
||||
|
||||
#: libretranslate/templates/index.html:215
|
||||
#: libretranslate/templates/index.html:224
|
||||
msgid "Delete text"
|
||||
msgstr "Szöveg törlése"
|
||||
|
||||
#: libretranslate/templates/index.html:228
|
||||
#: libretranslate/templates/index.html:237
|
||||
msgid "Suggest translation"
|
||||
msgstr "Javasoljon fordítást"
|
||||
msgstr "Fordítás javaslása"
|
||||
|
||||
#: libretranslate/templates/index.html:232
|
||||
#: libretranslate/templates/index.html:241
|
||||
msgid "Cancel"
|
||||
msgstr "Mégse"
|
||||
|
||||
#: libretranslate/templates/index.html:235
|
||||
#: libretranslate/templates/index.html:244
|
||||
msgid "Send"
|
||||
msgstr "Küldés"
|
||||
|
||||
#: libretranslate/templates/index.html:251
|
||||
#: libretranslate/templates/index.html:260
|
||||
msgid "Supported file formats:"
|
||||
msgstr "Támogatott fájlformátumok:"
|
||||
|
||||
#: libretranslate/templates/index.html:255
|
||||
#: libretranslate/templates/index.html:264
|
||||
msgid "File"
|
||||
msgstr "Fájl"
|
||||
|
||||
#: libretranslate/templates/index.html:270
|
||||
#: libretranslate/templates/index.html:279
|
||||
msgid "Remove file"
|
||||
msgstr "Fájl eltávolítása"
|
||||
|
||||
#: libretranslate/templates/index.html:277
|
||||
#: libretranslate/templates/index.html:286
|
||||
msgid "Translate"
|
||||
msgstr "Fordítás"
|
||||
|
||||
#: libretranslate/templates/index.html:278
|
||||
#: libretranslate/templates/index.html:322
|
||||
#: libretranslate/templates/index.html:287
|
||||
#: libretranslate/templates/index.html:331
|
||||
msgid "Download"
|
||||
msgstr "Letöltés"
|
||||
|
||||
#: libretranslate/templates/index.html:297
|
||||
#: libretranslate/templates/index.html:306
|
||||
msgid "Request"
|
||||
msgstr "Kérés"
|
||||
|
||||
#: libretranslate/templates/index.html:302
|
||||
#: libretranslate/templates/index.html:311
|
||||
msgid "Response"
|
||||
msgstr "Válasz"
|
||||
|
||||
#: libretranslate/templates/index.html:317
|
||||
#: libretranslate/templates/index.html:326
|
||||
msgid "Open Source Machine Translation API"
|
||||
msgstr "Nyílt Forráskódú Gépi Fordító API"
|
||||
msgstr "Nyílt forráskódú gépi fordító API"
|
||||
|
||||
#: libretranslate/templates/index.html:318
|
||||
#: libretranslate/templates/index.html:327
|
||||
msgid "Free to download. Offline Capable. Easy to Setup."
|
||||
msgstr "Ingyenesen letölthető, offline működő. Könnyen beállítható."
|
||||
|
||||
#: libretranslate/templates/index.html:337
|
||||
#: libretranslate/templates/index.html:346
|
||||
msgid "LibreTranslate"
|
||||
msgstr "LibreTranslate"
|
||||
|
||||
#: libretranslate/templates/index.html:339
|
||||
#: libretranslate/templates/index.html:348
|
||||
msgid "License:"
|
||||
msgstr "Licenc:"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
|
||||
msgstr ""
|
||||
"%(heart)s-el készítve. Közreműködtek %(contributors)s működtetve ezzel: "
|
||||
"%(engine)s"
|
||||
msgstr "%(heart)s-vel készítik a %(contributors)s és az %(engine)s támogatja"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "%(libretranslate)s Contributors"
|
||||
msgstr "%(libretranslate)s Közreműködők"
|
||||
msgstr "%(libretranslate)s közreműködői"
|
||||
|
||||
#~ msgid "multipart/form-data"
|
||||
#~ msgstr "multipart/form-data"
|
||||
|
|
@ -767,3 +775,9 @@ msgstr "%(libretranslate)s Közreműködők"
|
|||
|
||||
#~ msgid "get an API key"
|
||||
#~ msgstr "API kulcs szerzése"
|
||||
|
||||
#~ msgid "Basque"
|
||||
#~ msgstr "Baszk"
|
||||
|
||||
#~ msgid "Galician"
|
||||
#~ msgstr "Galíciai"
|
||||
|
|
@ -8,91 +8,91 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: LibreTranslate 1.3.9\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-16 23:47+0200\n"
|
||||
"POT-Creation-Date: 2025-04-18 14:43-0400\n"
|
||||
"PO-Revision-Date: 2025-03-01 18:02+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.10.3-dev\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.12.1\n"
|
||||
|
||||
#: libretranslate/app.py:80
|
||||
#: libretranslate/app.py:93
|
||||
msgid "Invalid JSON format"
|
||||
msgstr "Formato JSON non valido"
|
||||
|
||||
#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467
|
||||
#: libretranslate/app.py:209 libretranslate/templates/app.js.template:473
|
||||
msgid "Auto Detect"
|
||||
msgstr "Rileva Automaticamente"
|
||||
|
||||
#: libretranslate/app.py:273
|
||||
#: libretranslate/app.py:311
|
||||
msgid "Unauthorized"
|
||||
msgstr "Non autorizzato"
|
||||
|
||||
#: libretranslate/app.py:291
|
||||
#: libretranslate/app.py:329
|
||||
msgid "Too many request limits violations"
|
||||
msgstr "Violazione da troppe richieste"
|
||||
|
||||
#: libretranslate/app.py:298
|
||||
#: libretranslate/app.py:336
|
||||
msgid "Invalid API key"
|
||||
msgstr "Chiave API non valida"
|
||||
|
||||
#: libretranslate/app.py:324
|
||||
#: libretranslate/app.py:371
|
||||
msgid "Please contact the server operator to get an API key"
|
||||
msgstr "Si prega di contattare l'operatore del server per ottenere una chiave API"
|
||||
|
||||
#: libretranslate/app.py:326
|
||||
#: libretranslate/app.py:373
|
||||
#, python-format
|
||||
msgid "Visit %(url)s to get an API key"
|
||||
msgstr "Visita %(url)s per ottenere una chiave API"
|
||||
|
||||
#: libretranslate/app.py:373
|
||||
#: libretranslate/app.py:420
|
||||
msgid "Slowdown:"
|
||||
msgstr "Rallenta:"
|
||||
|
||||
#: libretranslate/app.py:606 libretranslate/app.py:608
|
||||
#: libretranslate/app.py:610 libretranslate/app.py:819
|
||||
#: libretranslate/app.py:821 libretranslate/app.py:823
|
||||
#: libretranslate/app.py:980 libretranslate/app.py:1137
|
||||
#: libretranslate/app.py:1139 libretranslate/app.py:1141
|
||||
#: libretranslate/app.py:1143
|
||||
#: libretranslate/app.py:657 libretranslate/app.py:659
|
||||
#: libretranslate/app.py:661 libretranslate/app.py:882
|
||||
#: libretranslate/app.py:884 libretranslate/app.py:886
|
||||
#: libretranslate/app.py:1051 libretranslate/app.py:1208
|
||||
#: libretranslate/app.py:1210 libretranslate/app.py:1212
|
||||
#: libretranslate/app.py:1214
|
||||
#, python-format
|
||||
msgid "Invalid request: missing %(name)s parameter"
|
||||
msgstr "Richiesta non valida: parametro %(name)s mancante"
|
||||
|
||||
#: libretranslate/app.py:615
|
||||
#: libretranslate/app.py:666
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter is not a number"
|
||||
msgstr "Richiesta invalida: parametro %(name)s non è un numero"
|
||||
|
||||
#: libretranslate/app.py:618
|
||||
#: libretranslate/app.py:669
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter must be <= %(value)s"
|
||||
msgstr "Richiesta invalida: parametro %(name)s deve essere <= %(value)s"
|
||||
|
||||
#: libretranslate/app.py:635 libretranslate/app.py:645
|
||||
#: libretranslate/app.py:686 libretranslate/app.py:696
|
||||
#, python-format
|
||||
msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
|
||||
msgstr ""
|
||||
"Richiesta non valida: richiesta (%(size)s) supera i limiti di testo "
|
||||
"(%(limit)s)"
|
||||
|
||||
#: libretranslate/app.py:660 libretranslate/app.py:665
|
||||
#: libretranslate/app.py:834 libretranslate/app.py:839
|
||||
#: libretranslate/app.py:715 libretranslate/app.py:720
|
||||
#: libretranslate/app.py:897 libretranslate/app.py:902
|
||||
#: libretranslate/app.py:924
|
||||
#, python-format
|
||||
msgid "%(lang)s is not supported"
|
||||
msgstr "%(lang)s non è supportato"
|
||||
|
||||
#: libretranslate/app.py:671
|
||||
#: libretranslate/app.py:726
|
||||
#, python-format
|
||||
msgid "%(format)s format is not supported"
|
||||
msgstr "il formato %(format)s non è supportato"
|
||||
|
||||
#: libretranslate/app.py:680 libretranslate/app.py:704
|
||||
#: libretranslate/app.py:735 libretranslate/app.py:763
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%(tname)s (%(tcode)s) is not available as a target language from "
|
||||
|
|
@ -101,28 +101,28 @@ msgstr ""
|
|||
"%(tname)s (%(tcode)s) non è disponibile come lingua di destinazione da "
|
||||
"%(sname)s (%(scode)s)"
|
||||
|
||||
#: libretranslate/app.py:724
|
||||
#: libretranslate/app.py:787
|
||||
#, python-format
|
||||
msgid "Cannot translate text: %(text)s"
|
||||
msgstr "Non è possible tradurre il testo: %(text)s"
|
||||
|
||||
#: libretranslate/app.py:811 libretranslate/app.py:872
|
||||
#: libretranslate/app.py:874 libretranslate/app.py:943
|
||||
msgid "Files translation are disabled on this server."
|
||||
msgstr "La traduzione dei files è disabilitata su questo server."
|
||||
|
||||
#: libretranslate/app.py:826
|
||||
#: libretranslate/app.py:889
|
||||
msgid "Invalid request: empty file"
|
||||
msgstr "Richiesta non valida: file vuoto"
|
||||
|
||||
#: libretranslate/app.py:829
|
||||
#: libretranslate/app.py:892
|
||||
msgid "Invalid request: file format not supported"
|
||||
msgstr "Richiesta non valida: formato del file non supportato"
|
||||
|
||||
#: libretranslate/app.py:880
|
||||
#: libretranslate/app.py:951
|
||||
msgid "Invalid filename"
|
||||
msgstr "Nome del file non valido"
|
||||
|
||||
#: libretranslate/app.py:1122
|
||||
#: libretranslate/app.py:1193
|
||||
msgid "Suggestions are disabled on this server."
|
||||
msgstr "I suggerimenti sono disabilitati su questo server."
|
||||
|
||||
|
|
@ -143,182 +143,178 @@ msgid "Azerbaijani"
|
|||
msgstr "Azero"
|
||||
|
||||
#: libretranslate/locales/.langs.py:5
|
||||
msgid "Basque"
|
||||
msgstr "Basco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bengali"
|
||||
msgstr "Bengali"
|
||||
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bulgarian"
|
||||
msgstr "Bulgaro"
|
||||
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
msgid "Catalan"
|
||||
msgstr "Catalano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
msgid "Chinese"
|
||||
msgstr "Cinese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
msgid "Chinese (traditional)"
|
||||
msgstr "Cinese (tradizionale)"
|
||||
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
msgid "Czech"
|
||||
msgstr "Ceco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
msgid "Danish"
|
||||
msgstr "Danese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
msgid "Dutch"
|
||||
msgstr "Olandese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
msgid "Esperanto"
|
||||
msgstr "Esperanto"
|
||||
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
msgid "Estonian"
|
||||
msgstr "Estone"
|
||||
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
msgid "Finnish"
|
||||
msgstr "Finlandese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
msgid "French"
|
||||
msgstr "Francese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Galician"
|
||||
msgstr "Galiziano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
msgid "German"
|
||||
msgstr "Tedesco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Greek"
|
||||
msgstr "Greco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
msgid "Hebrew"
|
||||
msgstr "Ebraico"
|
||||
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
msgid "Hindi"
|
||||
msgstr "Hindi"
|
||||
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
msgid "Hungarian"
|
||||
msgstr "Ungherese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
msgid "Indonesian"
|
||||
msgstr "Indonesiano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
msgid "Irish"
|
||||
msgstr "Irlandese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
msgid "Italian"
|
||||
msgstr "Italiano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
msgid "Japanese"
|
||||
msgstr "Giapponese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
msgid "Korean"
|
||||
msgstr "Coreano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
msgid "Latvian"
|
||||
msgstr "Lettone"
|
||||
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
msgid "Lithuanian"
|
||||
msgstr "Lituano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
msgid "Malay"
|
||||
msgstr "Malese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
msgid "Norwegian"
|
||||
msgstr "Norvegese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
msgid "Persian"
|
||||
msgstr "Persiano"
|
||||
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
msgid "Polish"
|
||||
msgstr "Polacco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
msgid "Portuguese"
|
||||
msgstr "Portoghese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr ""
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
msgid "Romanian"
|
||||
msgstr "Rumeno"
|
||||
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
msgid "Russian"
|
||||
msgstr "Russo"
|
||||
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
msgid "Slovak"
|
||||
msgstr "Slovacco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
msgid "Slovenian"
|
||||
msgstr "Sloveno"
|
||||
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
msgid "Spanish"
|
||||
msgstr "Spagnolo"
|
||||
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
msgid "Swedish"
|
||||
msgstr "Svedese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
msgid "Tagalog"
|
||||
msgstr "Tagalog"
|
||||
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
msgid "Thai"
|
||||
msgstr "Tailandese"
|
||||
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
msgid "Turkish"
|
||||
msgstr "Turco"
|
||||
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
msgid "Ukranian"
|
||||
msgstr "Ucraino"
|
||||
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
msgid "Urdu"
|
||||
msgstr "Urdu"
|
||||
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
msgid "Serbian"
|
||||
msgstr "Serbo"
|
||||
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ucraino"
|
||||
|
||||
#: libretranslate/locales/.langs.py:49
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
msgid "Vietnamese"
|
||||
msgstr "Vietnamita"
|
||||
|
||||
|
|
@ -338,7 +334,7 @@ msgstr "traduzione"
|
|||
msgid "Translate text from a language to another"
|
||||
msgstr "Traduce testo da una lingua a un'altra"
|
||||
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:233
|
||||
msgid "Translated text"
|
||||
msgstr "Testo tradotto"
|
||||
|
||||
|
|
@ -544,7 +540,7 @@ msgstr "Copia testo"
|
|||
#: libretranslate/templates/app.js.template:281
|
||||
#: libretranslate/templates/app.js.template:351
|
||||
#: libretranslate/templates/app.js.template:439
|
||||
#: libretranslate/templates/app.js.template:487
|
||||
#: libretranslate/templates/app.js.template:493
|
||||
#, python-format
|
||||
msgid "Cannot load %(url)s"
|
||||
msgstr "Non riesco a caricare %(url)s"
|
||||
|
|
@ -572,23 +568,23 @@ msgstr ""
|
|||
msgid "No languages available. Did you install the models correctly?"
|
||||
msgstr "Nessuna lingua disponibile. Hai installato correttamente i modelli?"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
#, python-format
|
||||
msgid "Type in your API Key. If you need an API key, %(instructions)s"
|
||||
msgstr ""
|
||||
"Digita la tua chiave API. Se hai bisogno di una chiave API, "
|
||||
"%(instructions)s"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "press the \"Get API Key\" link."
|
||||
msgstr "premi il link \"Ottieni Chiave API\"."
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "contact the server operator."
|
||||
msgstr "contatta l'operatore del server."
|
||||
|
||||
#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
|
||||
#: libretranslate/templates/index.html:338
|
||||
#: libretranslate/templates/index.html:347
|
||||
msgid "Free and Open Source Machine Translation API"
|
||||
msgstr "API di traduzione automatica libera e open source"
|
||||
|
||||
|
|
@ -598,9 +594,9 @@ msgid ""
|
|||
"Free and Open Source Machine Translation API. Free to download, offline "
|
||||
"capable and easy to setup. Run your own API server in just a few minutes."
|
||||
msgstr ""
|
||||
"API di traduzione automatica libera e open source. Gratis da scaricare, funziona "
|
||||
"anche offline e facile da configurare. Fai girare il tuo server API in "
|
||||
"pochi minuti."
|
||||
"API di traduzione automatica libera e open source. Gratis da scaricare, "
|
||||
"funziona anche offline e facile da configurare. Fai girare il tuo server "
|
||||
"API in pochi minuti."
|
||||
|
||||
#: libretranslate/templates/index.html:11
|
||||
msgid "translation"
|
||||
|
|
@ -642,101 +638,107 @@ msgstr "Cambia modalità scura/chiara"
|
|||
msgid "Dismiss"
|
||||
msgstr "Chiudi"
|
||||
|
||||
#: libretranslate/templates/index.html:173
|
||||
#: libretranslate/templates/index.html:177
|
||||
msgid ""
|
||||
"Due to bot abuse, translation requests are temporarily limited to users "
|
||||
"with a valid API key. Sorry for the inconvenience!"
|
||||
msgstr "A causa di abusi di bots, le richieste di traduzione sono temporaneamente limitate agli utenti in possesso di una chiave API valida. Ci scusiamo per l'inconveniente!"
|
||||
|
||||
#: libretranslate/templates/index.html:182
|
||||
msgid "Translation API"
|
||||
msgstr "API di Traduzione"
|
||||
|
||||
#: libretranslate/templates/index.html:177
|
||||
#: libretranslate/templates/index.html:186
|
||||
msgid "Translate Text"
|
||||
msgstr "Traduci Testo"
|
||||
|
||||
#: libretranslate/templates/index.html:181
|
||||
#: libretranslate/templates/index.html:190
|
||||
msgid "Translate Files"
|
||||
msgstr "Traduci Files"
|
||||
|
||||
#: libretranslate/templates/index.html:187
|
||||
#: libretranslate/templates/index.html:196
|
||||
msgid "Translate from"
|
||||
msgstr "Traduci da"
|
||||
|
||||
#: libretranslate/templates/index.html:197
|
||||
#: libretranslate/templates/index.html:206
|
||||
msgid "Swap source and target languages"
|
||||
msgstr "Scambia lingua sorgente e di destinazione"
|
||||
|
||||
#: libretranslate/templates/index.html:200
|
||||
#: libretranslate/templates/index.html:209
|
||||
msgid "Translate into"
|
||||
msgstr "Traduci in"
|
||||
|
||||
#: libretranslate/templates/index.html:212
|
||||
#: libretranslate/templates/index.html:221
|
||||
msgid "Text to translate"
|
||||
msgstr "Testo da tradurre"
|
||||
|
||||
#: libretranslate/templates/index.html:215
|
||||
#: libretranslate/templates/index.html:224
|
||||
msgid "Delete text"
|
||||
msgstr "Elimina testo"
|
||||
|
||||
#: libretranslate/templates/index.html:228
|
||||
#: libretranslate/templates/index.html:237
|
||||
msgid "Suggest translation"
|
||||
msgstr "Suggerisci una traduzione"
|
||||
|
||||
#: libretranslate/templates/index.html:232
|
||||
#: libretranslate/templates/index.html:241
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: libretranslate/templates/index.html:235
|
||||
#: libretranslate/templates/index.html:244
|
||||
msgid "Send"
|
||||
msgstr "Invia"
|
||||
|
||||
#: libretranslate/templates/index.html:251
|
||||
#: libretranslate/templates/index.html:260
|
||||
msgid "Supported file formats:"
|
||||
msgstr "Formati files supportati:"
|
||||
|
||||
#: libretranslate/templates/index.html:255
|
||||
#: libretranslate/templates/index.html:264
|
||||
msgid "File"
|
||||
msgstr "File"
|
||||
|
||||
#: libretranslate/templates/index.html:270
|
||||
#: libretranslate/templates/index.html:279
|
||||
msgid "Remove file"
|
||||
msgstr "Rimuovi file"
|
||||
|
||||
#: libretranslate/templates/index.html:277
|
||||
#: libretranslate/templates/index.html:286
|
||||
msgid "Translate"
|
||||
msgstr "Traduci"
|
||||
|
||||
#: libretranslate/templates/index.html:278
|
||||
#: libretranslate/templates/index.html:322
|
||||
#: libretranslate/templates/index.html:287
|
||||
#: libretranslate/templates/index.html:331
|
||||
msgid "Download"
|
||||
msgstr "Scarica"
|
||||
|
||||
#: libretranslate/templates/index.html:297
|
||||
#: libretranslate/templates/index.html:306
|
||||
msgid "Request"
|
||||
msgstr "Richiesta"
|
||||
|
||||
#: libretranslate/templates/index.html:302
|
||||
#: libretranslate/templates/index.html:311
|
||||
msgid "Response"
|
||||
msgstr "Risposta"
|
||||
|
||||
#: libretranslate/templates/index.html:317
|
||||
#: libretranslate/templates/index.html:326
|
||||
msgid "Open Source Machine Translation API"
|
||||
msgstr "API di Traduzione Automatica Open Source"
|
||||
|
||||
#: libretranslate/templates/index.html:318
|
||||
#: libretranslate/templates/index.html:327
|
||||
msgid "Free to download. Offline Capable. Easy to Setup."
|
||||
msgstr "Gratis da scaricare. Funziona offline. Facile da Configurare."
|
||||
|
||||
#: libretranslate/templates/index.html:337
|
||||
#: libretranslate/templates/index.html:346
|
||||
msgid "LibreTranslate"
|
||||
msgstr "LibreTranslate"
|
||||
|
||||
#: libretranslate/templates/index.html:339
|
||||
#: libretranslate/templates/index.html:348
|
||||
msgid "License:"
|
||||
msgstr "Licenza:"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
|
||||
msgstr "Realizzato con %(heart)s da %(contributors)s e grazie a %(engine)s"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "%(libretranslate)s Contributors"
|
||||
msgstr "Contributori di %(libretranslate)s"
|
||||
|
|
@ -765,3 +767,9 @@ msgstr "Contributori di %(libretranslate)s"
|
|||
|
||||
#~ msgid "get an API key"
|
||||
#~ msgstr "ottieni una chiave API"
|
||||
|
||||
#~ msgid "Basque"
|
||||
#~ msgstr "Basco"
|
||||
|
||||
#~ msgid "Galician"
|
||||
#~ msgstr "Galiziano"
|
||||
|
|
@ -8,9 +8,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: LibreTranslate 1.3.9\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-16 23:47+0200\n"
|
||||
"PO-Revision-Date: 2025-01-22 05:16+0000\n"
|
||||
"Last-Translator: Poesty Li <poesty7450@gmail.com>\n"
|
||||
"POT-Creation-Date: 2025-04-18 14:43-0400\n"
|
||||
"PO-Revision-Date: 2025-04-19 06:10+0000\n"
|
||||
"Last-Translator: LTSlw <LTSlw@outlook.com>\n"
|
||||
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
|
||||
"projects/libretranslate/app/zh_Hans/>\n"
|
||||
"Language: zh\n"
|
||||
|
|
@ -18,107 +18,110 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.10-dev\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"X-Generator: Weblate 5.11.1-dev\n"
|
||||
"Generated-By: Babel 2.12.1\n"
|
||||
|
||||
#: libretranslate/app.py:80
|
||||
#: libretranslate/app.py:93
|
||||
msgid "Invalid JSON format"
|
||||
msgstr "无效的 JSON 格式"
|
||||
msgstr "JSON 格式无效"
|
||||
|
||||
#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467
|
||||
#: libretranslate/app.py:209 libretranslate/templates/app.js.template:473
|
||||
msgid "Auto Detect"
|
||||
msgstr "自动检测"
|
||||
|
||||
#: libretranslate/app.py:273
|
||||
#: libretranslate/app.py:311
|
||||
msgid "Unauthorized"
|
||||
msgstr "未经授权"
|
||||
msgstr "未授权"
|
||||
|
||||
#: libretranslate/app.py:291
|
||||
#: libretranslate/app.py:329
|
||||
#, fuzzy
|
||||
msgid "Too many request limits violations"
|
||||
msgstr "请求次数过多超过限制"
|
||||
|
||||
#: libretranslate/app.py:298
|
||||
#: libretranslate/app.py:336
|
||||
msgid "Invalid API key"
|
||||
msgstr "无效的 API 密钥"
|
||||
msgstr "API 密钥无效"
|
||||
|
||||
#: libretranslate/app.py:324
|
||||
#: libretranslate/app.py:371
|
||||
msgid "Please contact the server operator to get an API key"
|
||||
msgstr "请联系管理员以获取 API 密钥"
|
||||
msgstr "请联系管理员获取 API 密钥"
|
||||
|
||||
#: libretranslate/app.py:326
|
||||
#: libretranslate/app.py:373
|
||||
#, python-format
|
||||
msgid "Visit %(url)s to get an API key"
|
||||
msgstr "访问 %(url)s 以获取 API 密钥"
|
||||
|
||||
#: libretranslate/app.py:373
|
||||
#: libretranslate/app.py:420
|
||||
#, fuzzy
|
||||
msgid "Slowdown:"
|
||||
msgstr "慢一点:"
|
||||
|
||||
#: libretranslate/app.py:606 libretranslate/app.py:608
|
||||
#: libretranslate/app.py:610 libretranslate/app.py:819
|
||||
#: libretranslate/app.py:821 libretranslate/app.py:823
|
||||
#: libretranslate/app.py:980 libretranslate/app.py:1137
|
||||
#: libretranslate/app.py:1139 libretranslate/app.py:1141
|
||||
#: libretranslate/app.py:1143
|
||||
#: libretranslate/app.py:657 libretranslate/app.py:659
|
||||
#: libretranslate/app.py:661 libretranslate/app.py:882
|
||||
#: libretranslate/app.py:884 libretranslate/app.py:886
|
||||
#: libretranslate/app.py:1051 libretranslate/app.py:1208
|
||||
#: libretranslate/app.py:1210 libretranslate/app.py:1212
|
||||
#: libretranslate/app.py:1214
|
||||
#, python-format
|
||||
msgid "Invalid request: missing %(name)s parameter"
|
||||
msgstr "无效的请求:丢失 %(name)s 参数"
|
||||
|
||||
#: libretranslate/app.py:615
|
||||
#: libretranslate/app.py:666
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter is not a number"
|
||||
msgstr "无效的请求 : 参数%(name)s不是数字"
|
||||
|
||||
#: libretranslate/app.py:618
|
||||
#: libretranslate/app.py:669
|
||||
#, python-format
|
||||
msgid "Invalid request: %(name)s parameter must be <= %(value)s"
|
||||
msgstr "无效的请求 : %(name)s 参数必须 <= %(value)s"
|
||||
|
||||
#: libretranslate/app.py:635 libretranslate/app.py:645
|
||||
#: libretranslate/app.py:686 libretranslate/app.py:696
|
||||
#, python-format
|
||||
msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
|
||||
msgstr "无效的请求:请求(%(size)s)超过文本限制(%(limit)s)"
|
||||
|
||||
#: libretranslate/app.py:660 libretranslate/app.py:665
|
||||
#: libretranslate/app.py:834 libretranslate/app.py:839
|
||||
#: libretranslate/app.py:715 libretranslate/app.py:720
|
||||
#: libretranslate/app.py:897 libretranslate/app.py:902
|
||||
#: libretranslate/app.py:924
|
||||
#, python-format
|
||||
msgid "%(lang)s is not supported"
|
||||
msgstr "%(lang)s 不受支持"
|
||||
|
||||
#: libretranslate/app.py:671
|
||||
#: libretranslate/app.py:726
|
||||
#, python-format
|
||||
msgid "%(format)s format is not supported"
|
||||
msgstr "%(format)s 格式不受支持"
|
||||
|
||||
#: libretranslate/app.py:680 libretranslate/app.py:704
|
||||
#: libretranslate/app.py:735 libretranslate/app.py:763
|
||||
#, 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)的目标语言"
|
||||
|
||||
#: libretranslate/app.py:724
|
||||
#: libretranslate/app.py:787
|
||||
#, python-format
|
||||
msgid "Cannot translate text: %(text)s"
|
||||
msgstr "无法翻译文本:%(text)s"
|
||||
|
||||
#: libretranslate/app.py:811 libretranslate/app.py:872
|
||||
#: libretranslate/app.py:874 libretranslate/app.py:943
|
||||
msgid "Files translation are disabled on this server."
|
||||
msgstr "文件翻译在此服务器上被禁用。"
|
||||
|
||||
#: libretranslate/app.py:826
|
||||
#: libretranslate/app.py:889
|
||||
msgid "Invalid request: empty file"
|
||||
msgstr "无效的请求:空文件"
|
||||
|
||||
#: libretranslate/app.py:829
|
||||
#: libretranslate/app.py:892
|
||||
msgid "Invalid request: file format not supported"
|
||||
msgstr "无效的请求:文件格式不受支持"
|
||||
|
||||
#: libretranslate/app.py:880
|
||||
#: libretranslate/app.py:951
|
||||
msgid "Invalid filename"
|
||||
msgstr "无效的文件名"
|
||||
|
||||
#: libretranslate/app.py:1122
|
||||
#: libretranslate/app.py:1193
|
||||
msgid "Suggestions are disabled on this server."
|
||||
msgstr "该服务器已禁用建议功能。"
|
||||
|
||||
|
|
@ -139,182 +142,178 @@ msgid "Azerbaijani"
|
|||
msgstr "阿塞拜疆语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:5
|
||||
msgid "Basque"
|
||||
msgstr "巴斯克语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bengali"
|
||||
msgstr "孟加拉语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
#: libretranslate/locales/.langs.py:6
|
||||
msgid "Bulgarian"
|
||||
msgstr "保加利亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
#: libretranslate/locales/.langs.py:7
|
||||
msgid "Catalan"
|
||||
msgstr "加泰罗尼亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
#: libretranslate/locales/.langs.py:8
|
||||
msgid "Chinese"
|
||||
msgstr "简体中文"
|
||||
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
#: libretranslate/locales/.langs.py:9
|
||||
msgid "Chinese (traditional)"
|
||||
msgstr "繁体中文"
|
||||
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
#: libretranslate/locales/.langs.py:10
|
||||
msgid "Czech"
|
||||
msgstr "捷克语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
#: libretranslate/locales/.langs.py:11
|
||||
msgid "Danish"
|
||||
msgstr "丹麦语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
#: libretranslate/locales/.langs.py:12
|
||||
msgid "Dutch"
|
||||
msgstr "荷兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
#: libretranslate/locales/.langs.py:13
|
||||
msgid "Esperanto"
|
||||
msgstr "世界语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
#: libretranslate/locales/.langs.py:14
|
||||
msgid "Estonian"
|
||||
msgstr "爱沙尼亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
#: libretranslate/locales/.langs.py:15
|
||||
msgid "Finnish"
|
||||
msgstr "芬兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
#: libretranslate/locales/.langs.py:16
|
||||
msgid "French"
|
||||
msgstr "法语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Galician"
|
||||
msgstr "加利西亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
#: libretranslate/locales/.langs.py:17
|
||||
msgid "German"
|
||||
msgstr "德语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
#: libretranslate/locales/.langs.py:18
|
||||
msgid "Greek"
|
||||
msgstr "希腊语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
#: libretranslate/locales/.langs.py:19
|
||||
msgid "Hebrew"
|
||||
msgstr "希伯来语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
#: libretranslate/locales/.langs.py:20
|
||||
msgid "Hindi"
|
||||
msgstr "印地语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
#: libretranslate/locales/.langs.py:21
|
||||
msgid "Hungarian"
|
||||
msgstr "匈牙利语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
#: libretranslate/locales/.langs.py:22
|
||||
msgid "Indonesian"
|
||||
msgstr "印度尼西亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
#: libretranslate/locales/.langs.py:23
|
||||
msgid "Irish"
|
||||
msgstr "爱尔兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
#: libretranslate/locales/.langs.py:24
|
||||
msgid "Italian"
|
||||
msgstr "意大利语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
#: libretranslate/locales/.langs.py:25
|
||||
msgid "Japanese"
|
||||
msgstr "日语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
#: libretranslate/locales/.langs.py:26
|
||||
msgid "Korean"
|
||||
msgstr "韩语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
#: libretranslate/locales/.langs.py:27
|
||||
msgid "Latvian"
|
||||
msgstr "拉脱维亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
#: libretranslate/locales/.langs.py:28
|
||||
msgid "Lithuanian"
|
||||
msgstr "立陶宛语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
#: libretranslate/locales/.langs.py:29
|
||||
msgid "Malay"
|
||||
msgstr "马来语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
#: libretranslate/locales/.langs.py:30
|
||||
msgid "Norwegian"
|
||||
msgstr "挪威语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
#: libretranslate/locales/.langs.py:31
|
||||
msgid "Persian"
|
||||
msgstr "波斯语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
#: libretranslate/locales/.langs.py:32
|
||||
msgid "Polish"
|
||||
msgstr "波兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
#: libretranslate/locales/.langs.py:33
|
||||
msgid "Portuguese"
|
||||
msgstr "葡萄牙语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
#: libretranslate/locales/.langs.py:34
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "葡萄牙语(巴西)"
|
||||
|
||||
#: libretranslate/locales/.langs.py:35
|
||||
msgid "Romanian"
|
||||
msgstr "罗马尼亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
#: libretranslate/locales/.langs.py:36
|
||||
msgid "Russian"
|
||||
msgstr "俄语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
#: libretranslate/locales/.langs.py:37
|
||||
msgid "Slovak"
|
||||
msgstr "斯洛伐克语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
#: libretranslate/locales/.langs.py:38
|
||||
msgid "Slovenian"
|
||||
msgstr "斯洛文尼亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
#: libretranslate/locales/.langs.py:39
|
||||
msgid "Spanish"
|
||||
msgstr "西班牙语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
#: libretranslate/locales/.langs.py:40
|
||||
msgid "Swedish"
|
||||
msgstr "瑞典语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
#: libretranslate/locales/.langs.py:41
|
||||
msgid "Tagalog"
|
||||
msgstr "标记"
|
||||
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
#: libretranslate/locales/.langs.py:42
|
||||
msgid "Thai"
|
||||
msgstr "泰国语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
#: libretranslate/locales/.langs.py:43
|
||||
msgid "Turkish"
|
||||
msgstr "土耳其语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
#: libretranslate/locales/.langs.py:44
|
||||
msgid "Ukranian"
|
||||
msgstr "乌克兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
#: libretranslate/locales/.langs.py:45
|
||||
msgid "Urdu"
|
||||
msgstr "乌尔都语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
#: libretranslate/locales/.langs.py:46
|
||||
msgid "Serbian"
|
||||
msgstr "塞尔维亚语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
#: libretranslate/locales/.langs.py:47
|
||||
msgid "Ukrainian"
|
||||
msgstr "乌克兰语"
|
||||
|
||||
#: libretranslate/locales/.langs.py:49
|
||||
#: libretranslate/locales/.langs.py:48
|
||||
msgid "Vietnamese"
|
||||
msgstr "越南语"
|
||||
|
||||
|
|
@ -334,7 +333,7 @@ msgstr "翻译"
|
|||
msgid "Translate text from a language to another"
|
||||
msgstr "将文本从一种语言翻译成另一种语言"
|
||||
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224
|
||||
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:233
|
||||
msgid "Translated text"
|
||||
msgstr "已翻译文本"
|
||||
|
||||
|
|
@ -540,7 +539,7 @@ msgstr "复制文本"
|
|||
#: libretranslate/templates/app.js.template:281
|
||||
#: libretranslate/templates/app.js.template:351
|
||||
#: libretranslate/templates/app.js.template:439
|
||||
#: libretranslate/templates/app.js.template:487
|
||||
#: libretranslate/templates/app.js.template:493
|
||||
#, python-format
|
||||
msgid "Cannot load %(url)s"
|
||||
msgstr "无法加载 %(url)s"
|
||||
|
|
@ -566,21 +565,21 @@ msgstr "感谢您的更正。注意此建议不会立即生效。"
|
|||
msgid "No languages available. Did you install the models correctly?"
|
||||
msgstr "无可用的语言。您是否正确安装了模型?"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
#, 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:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "press the \"Get API Key\" link."
|
||||
msgstr "点击“获取API密钥”链接。"
|
||||
|
||||
#: libretranslate/templates/app.js.template:530
|
||||
#: libretranslate/templates/app.js.template:536
|
||||
msgid "contact the server operator."
|
||||
msgstr "联系服务器管理员。"
|
||||
|
||||
#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27
|
||||
#: libretranslate/templates/index.html:338
|
||||
#: libretranslate/templates/index.html:347
|
||||
msgid "Free and Open Source Machine Translation API"
|
||||
msgstr "免费开源的机器翻译API"
|
||||
|
||||
|
|
@ -631,101 +630,107 @@ msgstr "切换暗黑/明亮模式"
|
|||
msgid "Dismiss"
|
||||
msgstr "忽略"
|
||||
|
||||
#: libretranslate/templates/index.html:173
|
||||
#: libretranslate/templates/index.html:177
|
||||
msgid ""
|
||||
"Due to bot abuse, translation requests are temporarily limited to users "
|
||||
"with a valid API key. Sorry for the inconvenience!"
|
||||
msgstr ""
|
||||
|
||||
#: libretranslate/templates/index.html:182
|
||||
msgid "Translation API"
|
||||
msgstr "翻译API"
|
||||
|
||||
#: libretranslate/templates/index.html:177
|
||||
#: libretranslate/templates/index.html:186
|
||||
msgid "Translate Text"
|
||||
msgstr "翻译文本"
|
||||
|
||||
#: libretranslate/templates/index.html:181
|
||||
#: libretranslate/templates/index.html:190
|
||||
msgid "Translate Files"
|
||||
msgstr "翻译文件"
|
||||
|
||||
#: libretranslate/templates/index.html:187
|
||||
#: libretranslate/templates/index.html:196
|
||||
msgid "Translate from"
|
||||
msgstr "翻译自"
|
||||
|
||||
#: libretranslate/templates/index.html:197
|
||||
#: libretranslate/templates/index.html:206
|
||||
msgid "Swap source and target languages"
|
||||
msgstr "交换来源语言与目标语言"
|
||||
|
||||
#: libretranslate/templates/index.html:200
|
||||
#: libretranslate/templates/index.html:209
|
||||
msgid "Translate into"
|
||||
msgstr "翻译为"
|
||||
|
||||
#: libretranslate/templates/index.html:212
|
||||
#: libretranslate/templates/index.html:221
|
||||
msgid "Text to translate"
|
||||
msgstr "需要翻译的文本"
|
||||
|
||||
#: libretranslate/templates/index.html:215
|
||||
#: libretranslate/templates/index.html:224
|
||||
msgid "Delete text"
|
||||
msgstr "删除文本"
|
||||
|
||||
#: libretranslate/templates/index.html:228
|
||||
#: libretranslate/templates/index.html:237
|
||||
msgid "Suggest translation"
|
||||
msgstr "建议译文"
|
||||
|
||||
#: libretranslate/templates/index.html:232
|
||||
#: libretranslate/templates/index.html:241
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: libretranslate/templates/index.html:235
|
||||
#: libretranslate/templates/index.html:244
|
||||
msgid "Send"
|
||||
msgstr "发送"
|
||||
|
||||
#: libretranslate/templates/index.html:251
|
||||
#: libretranslate/templates/index.html:260
|
||||
msgid "Supported file formats:"
|
||||
msgstr "支持的文件格式:"
|
||||
|
||||
#: libretranslate/templates/index.html:255
|
||||
#: libretranslate/templates/index.html:264
|
||||
msgid "File"
|
||||
msgstr "文件"
|
||||
|
||||
#: libretranslate/templates/index.html:270
|
||||
#: libretranslate/templates/index.html:279
|
||||
msgid "Remove file"
|
||||
msgstr "删除文件"
|
||||
|
||||
#: libretranslate/templates/index.html:277
|
||||
#: libretranslate/templates/index.html:286
|
||||
msgid "Translate"
|
||||
msgstr "命令, 例如\"翻译\""
|
||||
|
||||
#: libretranslate/templates/index.html:278
|
||||
#: libretranslate/templates/index.html:322
|
||||
#: libretranslate/templates/index.html:287
|
||||
#: libretranslate/templates/index.html:331
|
||||
msgid "Download"
|
||||
msgstr "下载"
|
||||
|
||||
#: libretranslate/templates/index.html:297
|
||||
#: libretranslate/templates/index.html:306
|
||||
msgid "Request"
|
||||
msgstr "请求"
|
||||
|
||||
#: libretranslate/templates/index.html:302
|
||||
#: libretranslate/templates/index.html:311
|
||||
msgid "Response"
|
||||
msgstr "响应"
|
||||
|
||||
#: libretranslate/templates/index.html:317
|
||||
#: libretranslate/templates/index.html:326
|
||||
msgid "Open Source Machine Translation API"
|
||||
msgstr "开源的机器翻译API"
|
||||
|
||||
#: libretranslate/templates/index.html:318
|
||||
#: libretranslate/templates/index.html:327
|
||||
msgid "Free to download. Offline Capable. Easy to Setup."
|
||||
msgstr "自我托管。支持离线。易于设置。"
|
||||
|
||||
#: libretranslate/templates/index.html:337
|
||||
#: libretranslate/templates/index.html:346
|
||||
msgid "LibreTranslate"
|
||||
msgstr "LibreTranslate"
|
||||
|
||||
#: libretranslate/templates/index.html:339
|
||||
#: libretranslate/templates/index.html:348
|
||||
msgid "License:"
|
||||
msgstr "许可:"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s"
|
||||
msgstr "由 %(contributors)s 用 %(heart)s 制作并且由 %(engine)s 驱动"
|
||||
|
||||
#: libretranslate/templates/index.html:345
|
||||
#: libretranslate/templates/index.html:354
|
||||
#, python-format
|
||||
msgid "%(libretranslate)s Contributors"
|
||||
msgstr "%(libretranslate)s 贡献者"
|
||||
|
|
@ -751,3 +756,9 @@ msgstr "%(libretranslate)s 贡献者"
|
|||
|
||||
#~ msgid "get an API key"
|
||||
#~ msgstr "获取API密钥"
|
||||
|
||||
#~ msgid "Basque"
|
||||
#~ msgstr "巴斯克语"
|
||||
|
||||
#~ msgid "Galician"
|
||||
#~ msgstr "加利西亚语"
|
||||
|
|
@ -147,6 +147,18 @@ def get_args():
|
|||
action="store_true",
|
||||
help="Require use of an API key for programmatic access to the API, unless the client also sends a secret match",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--require-api-key-fingerprint",
|
||||
default=DEFARGS['REQUIRE_API_KEY_FINGERPRINT'],
|
||||
action="store_true",
|
||||
help="Require use of an API key for programmatic access to the API, unless the client also matches a fingerprint",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--under-attack",
|
||||
default=DEFARGS['UNDER_ATTACK'],
|
||||
action="store_true",
|
||||
help="Enable under attack mode. When enabled, requests must be made with an API key",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--shared-storage",
|
||||
type=str,
|
||||
|
|
@ -250,4 +262,4 @@ def main():
|
|||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
main()
|
||||
|
|
@ -457,6 +457,10 @@ code[class*="language-"], pre[class*="language-"] {
|
|||
background-color: var(--sec-bg-color)
|
||||
}
|
||||
|
||||
textarea:disabled{
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
@media (min-width: 280px) {
|
||||
.btn-text {
|
||||
display: inline;
|
||||
|
|
@ -481,4 +485,4 @@ code[class*="language-"], pre[class*="language-"] {
|
|||
nav button.sidenav-trigger {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
import redis
|
||||
import time
|
||||
|
||||
storage = None
|
||||
def get_storage():
|
||||
|
|
@ -18,7 +19,7 @@ class Storage:
|
|||
def get_int(self, key):
|
||||
raise Exception("not implemented")
|
||||
|
||||
def set_str(self, key, value):
|
||||
def set_str(self, key, value, ex=None):
|
||||
raise Exception("not implemented")
|
||||
def get_str(self, key):
|
||||
raise Exception("not implemented")
|
||||
|
|
@ -56,11 +57,22 @@ class MemoryStorage(Storage):
|
|||
def get_int(self, key):
|
||||
return int(self.store.get(key, 0))
|
||||
|
||||
def set_str(self, key, value):
|
||||
self.store[key] = value
|
||||
def set_str(self, key, value, ex=None):
|
||||
self.store[key] = {
|
||||
'value': value,
|
||||
'ex': None if ex is None else time.time() + ex
|
||||
}
|
||||
|
||||
def get_str(self, key):
|
||||
return str(self.store.get(key, ""))
|
||||
d = self.store.get(key, {'value': '', 'ex': None})
|
||||
if d['ex'] is None:
|
||||
return d['value']
|
||||
else:
|
||||
if d['ex'] <= time.time():
|
||||
del self.store[key]
|
||||
return ''
|
||||
else:
|
||||
return d['value']
|
||||
|
||||
def set_hash_int(self, ns, key, value):
|
||||
if ns not in self.store:
|
||||
|
|
@ -123,8 +135,8 @@ class RedisStorage(Storage):
|
|||
else:
|
||||
return v
|
||||
|
||||
def set_str(self, key, value):
|
||||
self.conn.set(key, value)
|
||||
def set_str(self, key, value, ex=None):
|
||||
self.conn.set(key, value, ex=ex)
|
||||
|
||||
def get_str(self, key):
|
||||
v = self.conn.get(key)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
settings: {},
|
||||
sourceLang: "",
|
||||
targetLang: "",
|
||||
apiKey: localStorage.getItem("api_key") || "",
|
||||
|
||||
loadingTranslation: false,
|
||||
inputText: "",
|
||||
|
|
@ -45,6 +46,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
},
|
||||
mounted: function() {
|
||||
const self = this;
|
||||
window._vueApp = self;
|
||||
self.$el.classList.add("loaded");
|
||||
|
||||
const settingsRequest = new XMLHttpRequest();
|
||||
|
|
@ -137,7 +139,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
' target: ' + this.$options.filters.escape(this.targetLang) + ',',
|
||||
' format: "' + (this.isHtml ? "html" : "text") + '",',
|
||||
' alternatives: 3,',
|
||||
' api_key: "' + (localStorage.getItem("api_key") || "") + '"',
|
||||
' api_key: "' + this.apiKey + '"',
|
||||
' }),',
|
||||
' headers: { "Content-Type": "application/json" }',
|
||||
'});',
|
||||
|
|
@ -164,6 +166,9 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
});
|
||||
return tgtLangs;
|
||||
}
|
||||
},
|
||||
disableInput: function(){
|
||||
return {% if under_attack %}true{% else %}false{% endif %} && this.apiKey === "";
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
|
|
@ -211,6 +216,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
history.pushState(null, '', newRelativePathQuery);
|
||||
},
|
||||
handleInput: function(e){
|
||||
if (this.disableInput) return;
|
||||
this.closeSuggestTranslation(e)
|
||||
|
||||
this.updateQueryParam('source', this.sourceLang)
|
||||
|
|
@ -245,7 +251,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
data.append("target", self.targetLang);
|
||||
data.append("format", self.isHtml ? "html" : "text");
|
||||
data.append("alternatives", 3);
|
||||
data.append("api_key", localStorage.getItem("api_key") || "");
|
||||
data.append("api_key", self.apiKey);
|
||||
if (self.apiSecret) data.append("secret", atob(self.apiSecret));
|
||||
|
||||
request.open('POST', BaseUrl + '/translate', true);
|
||||
|
|
@ -329,7 +335,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
data.append("s", self.translatedText);
|
||||
data.append("source", self.sourceLang);
|
||||
data.append("target", self.targetLang);
|
||||
data.append("api_key", localStorage.getItem("api_key") || "");
|
||||
data.append("api_key", self.apiKey);
|
||||
|
||||
request.open('POST', BaseUrl + '/suggest', true);
|
||||
request.onload = function() {
|
||||
|
|
@ -382,6 +388,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
},
|
||||
translateFile: function(e) {
|
||||
e.preventDefault();
|
||||
if (this.disableInput) return;
|
||||
|
||||
let self = this;
|
||||
let translateFileRequest = new XMLHttpRequest();
|
||||
|
|
@ -392,7 +399,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
data.append("file", this.inputFile);
|
||||
data.append("source", this.sourceLang);
|
||||
data.append("target", this.targetLang);
|
||||
data.append("api_key", localStorage.getItem("api_key") || "");
|
||||
data.append("api_key", this.apiKey);
|
||||
if (self.apiSecret) data.append("secret", self.apiSecret);
|
||||
|
||||
this.loadingFileTranslation = true
|
||||
|
|
@ -537,6 +544,9 @@ function setApiKey(){
|
|||
if (newKey === null) newKey = "";
|
||||
|
||||
localStorage.setItem("api_key", newKey);
|
||||
if (window._vueApp){
|
||||
window._vueApp.apiKey = newKey;
|
||||
}
|
||||
}
|
||||
|
||||
// Color scheme handling
|
||||
|
|
@ -618,4 +628,4 @@ function applyPreferredColorScheme(scheme) {
|
|||
|
||||
applyPreferredColorScheme(getPreferredColorScheme());
|
||||
|
||||
// @license-end
|
||||
// @license-end
|
||||
|
|
@ -151,17 +151,16 @@
|
|||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m12">
|
||||
<div class="card horizontal">
|
||||
<div class="card-stacked">
|
||||
<div class="card-content">
|
||||
<i class="material-icons">warning</i><p> [[ error ]]</p>
|
||||
<div class="card horizontal">
|
||||
<div class="card-stacked">
|
||||
<div class="card-content">
|
||||
<i class="material-icons">warning</i><p> [[ error ]]</p>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<a href="#" @click="dismissError">{{ _h("Dismiss") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<a href="#" @click="dismissError">{{ _h("Dismiss") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -171,13 +170,22 @@
|
|||
<div class="section no-pad-bot">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{% if under_attack %}
|
||||
<div class="card horizontal style="z-index: -1;">
|
||||
<div class="card-stacked">
|
||||
<div class="card-content center">
|
||||
<i class="material-icons" style="position: relative; top: 4px;">warning</i> {{ _h("Due to bot abuse, translation requests are temporarily limited to users with a valid API key. Sorry for the inconvenience!") }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<h3 class="header center">{{ _h("Translation API") }}</h3>
|
||||
<div id="translation-type-btns" class="s12 center" v-if="filesTranslation === true">
|
||||
<button type="button" class="btn btn-switch-type" @click="switchType('text')" :class="{'active': translationType === 'text'}">
|
||||
<button type="button" class="btn btn-switch-type" @click="switchType('text')" :class="{'active': translationType === 'text'}" :disabled="disableInput">
|
||||
<i aria-hidden="true" class="material-icons">title</i>
|
||||
<span class="btn-text">{{ _h("Translate Text") }}</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-switch-type" @click="switchType('files')" :class="{'active': translationType === 'files'}">
|
||||
<button type="button" class="btn btn-switch-type" @click="switchType('files')" :class="{'active': translationType === 'files'}" :disabled="disableInput">
|
||||
<i aria-hidden="true" class="material-icons">description</i>
|
||||
<span class="btn-text">{{ _h("Translate Files") }}</span>
|
||||
</button>
|
||||
|
|
@ -212,7 +220,7 @@
|
|||
<label for="textarea1" class="sr-only">
|
||||
{{ _h("Text to translate") }}
|
||||
</label>
|
||||
<textarea id="textarea1" :maxLength="charactersLimit" v-model="inputText" @input="handleInput" ref="inputTextarea" dir="auto"></textarea>
|
||||
<textarea id="textarea1" :maxLength="charactersLimit" v-model="inputText" @input="handleInput" ref="inputTextarea" dir="auto" :disabled="disableInput"></textarea>
|
||||
<button class="btn-delete-text" title="{{ _h('Delete text') }}" aria-label="{{ _h('Delete text') }}" @click="deleteText">
|
||||
<i class="material-icons">close</i>
|
||||
</button>
|
||||
|
|
@ -224,7 +232,7 @@
|
|||
<label for="textarea2" class="sr-only">
|
||||
{{ _h("Translated text") }}
|
||||
</label>
|
||||
<textarea id="textarea2" v-model="translatedText" ref="translatedTextarea" dir="auto" v-bind:readonly="suggestions && !isSuggesting"></textarea>
|
||||
<textarea id="textarea2" v-model="translatedText" ref="translatedTextarea" dir="auto" v-bind:readonly="suggestions && !isSuggesting" :disabled="disableInput"></textarea>
|
||||
<div class="actions">
|
||||
<button v-if="suggestions && !loadingTranslation && inputText.length && !isSuggesting" class="btn-action" @click="suggestTranslation" aria-label="{{ _h('Suggest translation') }}">
|
||||
<i class="material-icons">edit</i>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue