This commit is contained in:
vdbhb59 2025-05-08 20:06:26 +05:30
commit 149ba9a6a6
5 changed files with 197 additions and 50 deletions

View file

@ -134,3 +134,7 @@ This prevents pip packages from being installed system-wide. This way, there are
References: References:
* [Python venv documentation](https://docs.python.org/library/venv.html) * [Python venv documentation](https://docs.python.org/library/venv.html)
## Other Languages
- [Español (CONTRIBUTING)](docs/CONTRIBUTING.es.md)

138
docs/CONTRIBUTING.es.md Normal file
View file

@ -0,0 +1,138 @@
# Contribuyendo
Si desea modificar el código, puede compilar desde el código fuente y ejecutar la API.
## Dependencias de compilación
* cmake
### Debian / Ubuntu
```sh
sudo apt-get install cmake
```
### Fedora / RHEL
```sh
sudo dnf install cmake
```
## Primeros pasos
Instale [`hatch`](https://hatch.pypa.io) para administrar las dependencias del proyecto y ejecutar scripts de desarrollo:
```bash
pipx install hatch
```
Clonar el repositorio:
```bash
git clone https://github.com/LibreTranslate/LibreTranslate.git
cd LibreTranslate
```
Hatch instalará automáticamente las dependencias necesarias en un entorno virtual y habilitará [`pre-commit`](https://pre-commit.com/), que se ejecutará antes de cada confirmación para ejecutar el formateo. Si es necesario, puedes ignorar las comprobaciones de `pre-commit` al confirmar: `git commit --no-verify -m "Fix"`
Ejecutar en desarrollo:
```bash
hatch run dev --debug
```
Luego, abre un navegador web en <http://localhost:5000>
También puedes iniciar una nueva shell en un entorno virtual con libretranslate instalado:
```bash
hatch shell
libretranslate [args]
# O
python main.py [args]
```
> Puedes usar `pip install -e ".[test]"` directamente si no quieres usar Hatch.
## Ejecutar las pruebas
Ejecutar el conjunto de pruebas y las comprobaciones de linting:
```bash
hatch run test
```
Para mostrar todos los `print()` durante la depuración:
```bash
hatch run test -s
```
También puedes ejecutar las pruebas en varias versiones de Python:
```bash
hatch run all:test
```
Puedes limpiar el entorno virtual con:
```bash
hatch env prune
```
## Ejecutar con Docker
Linux/MacOS: `./run.sh [args]`
Windows: `run.bat [args]`
Luego, abre un navegador web en <http://localhost:5000>
## Construir con Docker
```bash
docker build -f docker/Dockerfile [--build-arg with_models=true] -t libretranslate .
```
Si quieres ejecutar la imagen de Docker en un entorno completamente sin conexión, debes agregar el parámetro `--build-arg with_models=true`. Los modelos de lenguaje se descargan durante el proceso de construcción de la imagen. De lo contrario, estos modelos se descargan durante la primera ejecución de la imagen/contenedor.
Ejecute la imagen compilada:
```bash
docker run -it -p 5000:5000 libretranslate [args]
```
O compila y ejecuta con Docker Compose:
```bash
docker compose up -d --build
```
> Puedes modificar el archivo [`docker-compose.yml`](https://github.com/LibreTranslate/LibreTranslate/blob/main/docker-compose.yml) para adaptarlo a tus necesidades de implementación o usar un archivo `docker-compose.prod.yml` adicional para la configuración de tu implementación.
>
> Los modelos se almacenan dentro del contenedor en `/home/libretranslate/.local/share` y `/home/libretranslate/.local/cache`. Puedes usar volúmenes si no quieres volver a descargar los modelos cuando se destruya el contenedor. Para actualizar los modelos, usa el argumento `--update-models`.
## Preguntas frecuentes
### Entorno administrado externamente
Algunos usuarios pueden encontrar el siguiente error al instalar paquetes:
```
error: externally-managed-environment
× Este entorno está administrado externamente
╰─> Para instalar paquetes de Python en todo el sistema, pruebe apt install python3-xyz, donde xyz es el paquete que intenta instalar.
```
Esto ocurre cuando su sistema operativo depende de Python y lo administra para su funcionalidad principal. En este caso, debe instalar y configurar venv (entornos virtuales) para administrar las dependencias del proyecto.
Esto evita que los paquetes pip se instalen en todo el sistema. De esta manera, se evita el riesgo de que los paquetes pip entren en conflicto entre varios proyectos o el sistema operativo.
Referencias:
* [Documentación de venv sobre Python](https://docs.python.org/library/venv.html)
## Otros idiomas
- [English (CONTRIBUTING)](/CONTRIBUTING.md)

View file

@ -10,10 +10,6 @@ API de traducción automática gratuita y de código abierto, completamente aloj
[Pruébalo en línea!](https://libretranslate.com) | [Documentación de la API](https://libretranslate.com/docs) [Pruébalo en línea!](https://libretranslate.com) | [Documentación de la API](https://libretranslate.com/docs)
## Otros idiomas
- [English (README)](/README.md)
## Ejemplos de la API ## Ejemplos de la API
### Básico ### Básico
@ -742,3 +738,7 @@ Este trabajo es posible en gran medida gracias a [Argos Translate](https://githu
## Marca registrada ## Marca registrada
Consulte las [Directrices de marca registrada](https://github.com/LibreTranslate/LibreTranslate/blob/main/docs/TRADEMARK.es.md) Consulte las [Directrices de marca registrada](https://github.com/LibreTranslate/LibreTranslate/blob/main/docs/TRADEMARK.es.md)
## Otros idiomas
- [English (README)](/README.md)

View file

@ -9,16 +9,18 @@ msgstr ""
"Project-Id-Version: LibreTranslate 1.3.9\n" "Project-Id-Version: LibreTranslate 1.3.9\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-04-18 14:43-0400\n" "POT-Creation-Date: 2025-04-18 14:43-0400\n"
"PO-Revision-Date: 2025-02-04 19:02+0000\n" "PO-Revision-Date: 2025-05-08 05:34+0000\n"
"Last-Translator: Blueberry <igory.ygr200@gmail.com>\n" "Last-Translator: 439JBYL80IGQTF25UXNR0X1BG "
"<439JBYL80IGQTF25UXNR0X1BG@users.noreply.hosted.weblate.org>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/libretranslate/"
"app/ru/>\n"
"Language: 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" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\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.12-dev\n"
"Generated-By: Babel 2.12.1\n" "Generated-By: Babel 2.12.1\n"
#: libretranslate/app.py:93 #: libretranslate/app.py:93
@ -261,7 +263,7 @@ msgstr "португальский"
#: libretranslate/locales/.langs.py:34 #: libretranslate/locales/.langs.py:34
msgid "Portuguese (Brazil)" msgid "Portuguese (Brazil)"
msgstr "" msgstr "португальский (бразильский)"
#: libretranslate/locales/.langs.py:35 #: libretranslate/locales/.langs.py:35
msgid "Romanian" msgid "Romanian"
@ -643,6 +645,8 @@ msgid ""
"Due to bot abuse, translation requests are temporarily limited to users " "Due to bot abuse, translation requests are temporarily limited to users "
"with a valid API key. Sorry for the inconvenience!" "with a valid API key. Sorry for the inconvenience!"
msgstr "" msgstr ""
"Из-за злоупотреблений ботов, запросы переводов временно ограничены для "
"пользователей с действительным API ключом. Извините за неудобства!"
#: libretranslate/templates/index.html:182 #: libretranslate/templates/index.html:182
msgid "Translation API" msgid "Translation API"
@ -775,4 +779,3 @@ msgstr "участникам, внёсшим вклад в разработку
#~ msgid "Galician" #~ msgid "Galician"
#~ msgstr "галисийский" #~ msgstr "галисийский"

View file

@ -9,8 +9,9 @@ msgstr ""
"Project-Id-Version: LibreTranslate 1.3.9\n" "Project-Id-Version: LibreTranslate 1.3.9\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-04-18 14:43-0400\n" "POT-Creation-Date: 2025-04-18 14:43-0400\n"
"PO-Revision-Date: 2025-04-26 21:09+0000\n" "PO-Revision-Date: 2025-05-07 15:01+0000\n"
"Last-Translator: Bezruchenko Simon <worcposj44@gmail.com>\n" "Last-Translator: Do you know my name? "
"<anonymous2676@users.noreply.hosted.weblate.org>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/libretranslate/" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/libretranslate/"
"app/uk/>\n" "app/uk/>\n"
"Language: uk\n" "Language: uk\n"
@ -24,7 +25,7 @@ msgstr ""
#: libretranslate/app.py:93 #: libretranslate/app.py:93
msgid "Invalid JSON format" msgid "Invalid JSON format"
msgstr "Неправильний формат JSON" msgstr "Недійсний формат JSON"
#: libretranslate/app.py:209 libretranslate/templates/app.js.template:473 #: libretranslate/app.py:209 libretranslate/templates/app.js.template:473
msgid "Auto Detect" msgid "Auto Detect"
@ -36,20 +37,20 @@ msgstr "Неавторизовано"
#: libretranslate/app.py:329 #: libretranslate/app.py:329
msgid "Too many request limits violations" msgid "Too many request limits violations"
msgstr "Перевищено ліміт запитів" msgstr "Перевищено обмеження запитів"
#: libretranslate/app.py:336 #: libretranslate/app.py:336
msgid "Invalid API key" msgid "Invalid API key"
msgstr "Неправильний API ключ" msgstr "Недійсний ключ API"
#: libretranslate/app.py:371 #: libretranslate/app.py:371
msgid "Please contact the server operator to get an API key" msgid "Please contact the server operator to get an API key"
msgstr "Зв'яжіться із оператором сервера, щоб отримати API ключ" msgstr "Зв'яжіться з оператором сервера, щоб отримати ключ API"
#: libretranslate/app.py:373 #: libretranslate/app.py:373
#, python-format #, python-format
msgid "Visit %(url)s to get an API key" msgid "Visit %(url)s to get an API key"
msgstr "Відвідайте %(url)s, щоб отримати API ключ" msgstr "Відвідайте %(url)s, щоб отримати ключ API"
#: libretranslate/app.py:420 #: libretranslate/app.py:420
msgid "Slowdown:" msgid "Slowdown:"
@ -63,22 +64,23 @@ msgstr "Сповільнення:"
#: libretranslate/app.py:1214 #: libretranslate/app.py:1214
#, python-format #, python-format
msgid "Invalid request: missing %(name)s parameter" msgid "Invalid request: missing %(name)s parameter"
msgstr "Неправильний запит: відсутній параметр %(name)s" msgstr "Недійсний запит: бракує параметра %(name)s"
#: libretranslate/app.py:666 #: libretranslate/app.py:666
#, python-format #, python-format
msgid "Invalid request: %(name)s parameter is not a number" msgid "Invalid request: %(name)s parameter is not a number"
msgstr "Неправильний запит: параметр %(name)s не є числом" msgstr "Недійсний запит: параметр %(name)s не є числом"
#: libretranslate/app.py:669 #: libretranslate/app.py:669
#, python-format #, python-format
msgid "Invalid request: %(name)s parameter must be <= %(value)s" msgid "Invalid request: %(name)s parameter must be <= %(value)s"
msgstr "Неправильний запит: параметр %(name)s має бути <= %(value)s" msgstr "Недійсний запит: параметр %(name)s має бути <= %(value)s"
#: libretranslate/app.py:686 libretranslate/app.py:696 #: libretranslate/app.py:686 libretranslate/app.py:696
#, python-format #, python-format
msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)"
msgstr "Неправильний запит: запит (%(size)s) перевищує ліміт тексту (%(limit)s)" msgstr ""
"Недійсний запит: запит (%(size)s) перевищує обмеження тексту (%(limit)s)"
#: libretranslate/app.py:715 libretranslate/app.py:720 #: libretranslate/app.py:715 libretranslate/app.py:720
#: libretranslate/app.py:897 libretranslate/app.py:902 #: libretranslate/app.py:897 libretranslate/app.py:902
@ -112,15 +114,15 @@ msgstr "Переклад файлів на цьому сервері вимкн
#: libretranslate/app.py:889 #: libretranslate/app.py:889
msgid "Invalid request: empty file" msgid "Invalid request: empty file"
msgstr "Неправильний запит: порожній файл" msgstr "Недійсний запит: порожній файл"
#: libretranslate/app.py:892 #: libretranslate/app.py:892
msgid "Invalid request: file format not supported" msgid "Invalid request: file format not supported"
msgstr "Неправильний запит: формат файлу не підтримується" msgstr "Недійсний запит: формат файлу не підтримується"
#: libretranslate/app.py:951 #: libretranslate/app.py:951
msgid "Invalid filename" msgid "Invalid filename"
msgstr "Неправильна назва файлу" msgstr "Недійсна назва файлу"
#: libretranslate/app.py:1193 #: libretranslate/app.py:1193
msgid "Suggestions are disabled on this server." msgid "Suggestions are disabled on this server."
@ -332,7 +334,7 @@ msgstr "переклад"
#: libretranslate/locales/.swag.py:4 #: libretranslate/locales/.swag.py:4
msgid "Translate text from a language to another" msgid "Translate text from a language to another"
msgstr "Перекласти текст з однієї мови на іншу" msgstr "Перекласти текст із однієї мови на іншу"
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:233 #: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:233
msgid "Translated text" msgid "Translated text"
@ -340,7 +342,7 @@ msgstr "Перекладений текст"
#: libretranslate/locales/.swag.py:6 #: libretranslate/locales/.swag.py:6
msgid "Invalid request" msgid "Invalid request"
msgstr "Неправильний запит" msgstr "Недійсний запит"
#: libretranslate/locales/.swag.py:7 #: libretranslate/locales/.swag.py:7
msgid "Translation error" msgid "Translation error"
@ -360,7 +362,7 @@ msgstr "Привіт, світе!"
#: libretranslate/locales/.swag.py:11 #: libretranslate/locales/.swag.py:11
msgid "Text(s) to translate" msgid "Text(s) to translate"
msgstr "Текст(и) для перекладу" msgstr "Текст для перекладу"
#: libretranslate/locales/.swag.py:12 #: libretranslate/locales/.swag.py:12
msgid "Source language code" msgid "Source language code"
@ -384,7 +386,7 @@ msgid ""
" * `text` - Plain text\n" " * `text` - Plain text\n"
" * `html` - HTML markup\n" " * `html` - HTML markup\n"
msgstr "" msgstr ""
"Формат вихідного тексту:\n" "Формат оригінального тексту:\n"
" * `text` - Звичайний текст\n" " * `text` - Звичайний текст\n"
" * `html` - HTML розмітка\n" " * `html` - HTML розмітка\n"
@ -394,11 +396,11 @@ msgstr "Бажана кількість альтернативних перек
#: libretranslate/locales/.swag.py:18 #: libretranslate/locales/.swag.py:18
msgid "API key" msgid "API key"
msgstr "API ключ" msgstr "Ключ API"
#: libretranslate/locales/.swag.py:19 #: libretranslate/locales/.swag.py:19
msgid "Translate file from a language to another" msgid "Translate file from a language to another"
msgstr "Перекласти файл з однієї мови на іншу" msgstr "Перекласти файл із однієї мови на іншу"
#: libretranslate/locales/.swag.py:20 #: libretranslate/locales/.swag.py:20
msgid "Translated file" msgid "Translated file"
@ -482,7 +484,7 @@ msgstr "Підтримувані коди мов перекладу"
#: libretranslate/locales/.swag.py:40 #: libretranslate/locales/.swag.py:40
msgid "Translated text(s)" msgid "Translated text(s)"
msgstr "Перекладений(і) текст(и)" msgstr "Перекладений текст"
#: libretranslate/locales/.swag.py:41 #: libretranslate/locales/.swag.py:41
msgid "Error message" msgid "Error message"
@ -512,15 +514,15 @@ msgstr "Перевищено час очікування перекладу ін
#: libretranslate/locales/.swag.py:47 #: libretranslate/locales/.swag.py:47
msgid "Whether the API key database is enabled." msgid "Whether the API key database is enabled."
msgstr "Чи увімкнено базу даних API ключів." msgstr "Чи ввімкнено базу даних ключів API."
#: libretranslate/locales/.swag.py:48 #: libretranslate/locales/.swag.py:48
msgid "Whether an API key is required." msgid "Whether an API key is required."
msgstr "Чи потрібен API ключ." msgstr "Чи потрібен ключ API."
#: libretranslate/locales/.swag.py:49 #: libretranslate/locales/.swag.py:49
msgid "Whether submitting suggestions is enabled." msgid "Whether submitting suggestions is enabled."
msgstr "Чи увімкнено подання пропозицій." msgstr "Чи ввімкнено подання пропозицій."
#: libretranslate/locales/.swag.py:50 #: libretranslate/locales/.swag.py:50
msgid "Supported files format" msgid "Supported files format"
@ -573,11 +575,11 @@ msgstr "Немає доступних мов. Чи правильно ви вс
#: libretranslate/templates/app.js.template:536 #: libretranslate/templates/app.js.template:536
#, python-format #, python-format
msgid "Type in your API Key. If you need an API key, %(instructions)s" msgid "Type in your API Key. If you need an API key, %(instructions)s"
msgstr "Введіть свій API ключ. Якщо вам потрібен API ключ, %(instructions)s" msgstr "Уведіть свій ключ API. Якщо вам потрібен ключ API, %(instructions)s"
#: libretranslate/templates/app.js.template:536 #: libretranslate/templates/app.js.template:536
msgid "press the \"Get API Key\" link." msgid "press the \"Get API Key\" link."
msgstr "натисніть на посилання \"Отримати API ключ\"." msgstr "натисніть на покликання «Отримати ключ API»."
#: libretranslate/templates/app.js.template:536 #: libretranslate/templates/app.js.template:536
msgid "contact the server operator." msgid "contact the server operator."
@ -586,7 +588,7 @@ 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:347 #: libretranslate/templates/index.html:347
msgid "Free and Open Source Machine Translation API" msgid "Free and Open Source Machine Translation API"
msgstr "Безплатний API машинного перекладу з відкритим сирцевим кодом" msgstr "Вільний API машинного перекладу з відкритим сирцевим кодом"
#: libretranslate/templates/index.html:10 #: libretranslate/templates/index.html:10
#: libretranslate/templates/index.html:31 #: libretranslate/templates/index.html:31
@ -594,9 +596,9 @@ msgid ""
"Free and Open Source Machine Translation API. Free to download, offline " "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." "capable and easy to setup. Run your own API server in just a few minutes."
msgstr "" msgstr ""
"Безплатний API машинного перекладу з відкритим сирцевим кодом. Безплатне " "Вільний API машинного перекладу з відкритим сирцевим кодом. Безплатний для "
"завантаження, можливість роботи в офлайн режимі та простота налаштування." "завантаження, з можливістю роботи офлайн та простотий у налаштуванні. "
" Запустіть власний API сервер всього за кілька хвилин." "Запустіть власний API-сервер усього за кілька хвилин."
#: libretranslate/templates/index.html:11 #: libretranslate/templates/index.html:11
msgid "translation" msgid "translation"
@ -612,7 +614,7 @@ msgstr "Документація до API"
#: libretranslate/templates/index.html:69 #: libretranslate/templates/index.html:69
msgid "Get API Key" msgid "Get API Key"
msgstr "Отримати API ключ" msgstr "Отримати ключ API"
#: libretranslate/templates/index.html:71 #: libretranslate/templates/index.html:71
msgid "GitHub" msgid "GitHub"
@ -620,7 +622,7 @@ msgstr "GitHub"
#: libretranslate/templates/index.html:73 #: libretranslate/templates/index.html:73
msgid "Set API Key" msgid "Set API Key"
msgstr "Встановити API ключ" msgstr "Установити ключ API"
#: libretranslate/templates/index.html:75 #: libretranslate/templates/index.html:75
msgid "Change language" msgid "Change language"
@ -643,8 +645,8 @@ msgid ""
"Due to bot abuse, translation requests are temporarily limited to users " "Due to bot abuse, translation requests are temporarily limited to users "
"with a valid API key. Sorry for the inconvenience!" "with a valid API key. Sorry for the inconvenience!"
msgstr "" msgstr ""
"Через зловживання ботом запити на переклад тимчасово обмежені для " "Через зловживання ботами, запити на переклад тимчасово обмежено для "
"користувачів із чинним API-ключем. Вибачте за незручності!" "користувачів із дійсним ключем API. Вибачте за незручності!"
#: libretranslate/templates/index.html:182 #: libretranslate/templates/index.html:182
msgid "Translation API" msgid "Translation API"
@ -700,7 +702,7 @@ msgstr "Файл"
#: libretranslate/templates/index.html:279 #: libretranslate/templates/index.html:279
msgid "Remove file" msgid "Remove file"
msgstr "Видалити файл" msgstr "Вилучити файл"
#: libretranslate/templates/index.html:286 #: libretranslate/templates/index.html:286
msgid "Translate" msgid "Translate"
@ -726,8 +728,8 @@ msgstr "API машинного перекладу з відкритим сирц
#: libretranslate/templates/index.html:327 #: libretranslate/templates/index.html:327
msgid "Free to download. Offline Capable. Easy to Setup." msgid "Free to download. Offline Capable. Easy to Setup."
msgstr "" msgstr ""
"Безплвтне завантаження. Можливість роботи в офлайн режимі. Простота " "Безплатний для завантаження. З можливість роботи офлайн. Простотий у "
"налаштування." "налаштуванні."
#: libretranslate/templates/index.html:346 #: libretranslate/templates/index.html:346
msgid "LibreTranslate" msgid "LibreTranslate"