Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Nov 25, 2024
2 parents 820e3f9 + 80929ca commit dba0533
Show file tree
Hide file tree
Showing 4 changed files with 346 additions and 112 deletions.
103 changes: 77 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
# API IS NOT WORKING AT THIS MOMENT. I'M IN THE PROCESS OF FIXING IT

# DeepLX Vercel
DeepLX Vercel
=============

[English](README.md) | [Русский](README_RU.md)

A free, serverless solution for DeepL translation API, allowing seamless integration with your applications. Deploy your own instance or run it locally as per your needs.

## Features
Features
--------

- **Serverless Architecture**: Built to leverage the scalability and simplicity of serverless platforms.
- **Easy Deployment**: One-click deployment to Vercel with minimal configuration.
- **Local Development**: Supports local development for testing and modifications. (Either via vercel CLI, or via the method described below)
* **Serverless Architecture**: Built to leverage the scalability and simplicity of serverless platforms.
* **Easy Deployment**: One-click deployment to Vercel with minimal configuration.
* **Local Development**: Supports local development for testing and modifications. (Either via Vercel CLI, or via the method described below)
* **Updated API Logic**: Compatible with the latest DeepLX API changes for reliable translations.

## Deploying on Vercel
Deploying on Vercel
-------------------

Deploy your own DeepLX translation API by clicking the button below.

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgit.luolix.top%2Fbropines%2FDeeplx-vercel)

After clicking the button, simply follow the prompts to set up the API on Vercel.

## Running Locally
Running Locally
---------------

Here is the local deployment method described in the [deeplx-serverless](https://github.com/LegendLeo/deeplx-serverless/) repository from [LegendLeo](https://github.com/LegendLeo)

Expand All @@ -33,51 +36,99 @@ npm run start

This will start a local server with the API running on `http://localhost:9000`.

## Usage
Usage
-----

Once deployed or running locally, you can start making requests to translate text. Make a `POST` request to `/api/translate` with the following JSON structure:

```json
{
"text": "Your text to translate",
"source_lang": "Source language code (e.g., 'en')",
"target_lang": "Target language code (e.g., 'de')"
"source_lang": "Source language code (e.g., 'EN')",
"target_lang": "Target language code (e.g., 'DE')",
"tag_handling": "Optional tag handling ('html', 'xml', or leave blank)"
}
```

The API will respond with the translated text. Here's an example using `curl`:
**Parameters:**

* `text` **(required)**: The text you want to translate.
* `source_lang` _(optional)_: The language code of the source text (e.g., `'EN'`). Use `'auto'` for automatic detection. Default is `'auto'`.
* `target_lang` **(required)**: The language code to translate the text into (e.g., `'DE'`).
* `tag_handling` _(optional)_: Specify `'html'` or `'xml'` if your text contains such tags and you want them to be handled properly.

**Example using `curl`:**

```bash
curl --location --request POST 'https://your-deployment-url/api/translate' \
--header 'Content-Type: application/json' \
--data-raw '{
"text": "Hello, World!",
"source_lang": "en",
"target_lang": "de"
"source_lang": "EN",
"target_lang": "DE",
"tag_handling": ""
}'
```

Replace `https://your-deployment-url` with the actual URL of your Vercel deployment or `http://localhost:9000` if you're running locally.

## For [Ballon Translator](https://github.com/dmMaze/BallonsTranslator) users
After receiving the link in the format `https://your-deployment-url/api/translate` just paste it into `api_url`
<b>
**Response:**

The API will respond with a JSON object containing the translation and additional information:

```json
{
"code": 200,
"id": 1234567890,
"data": "Hallo, Welt!",
"alternatives": ["Hallo, Welt!"],
"source_lang": "EN",
"target_lang": "DE",
"method": "Free"
}
```

* `code`: HTTP status code.
* `id`: A unique identifier for the translation request.
* `data`: The translated text.
* `alternatives`: An array of alternative translations.
* `source_lang`: The detected or specified source language.
* `target_lang`: The target language for translation.
* `method`: Indicates whether the translation used the `'Free'` or `'Pro'` method.

Important Notes
---------------

* **Rate Limiting**: Excessive requests may result in temporary blocking by DeepL. Please avoid sending too many requests in a short period.
* **Usage Limitations**: This API is intended for personal or development use. For commercial use, consider subscribing to DeepL's official API.
* **No Guarantee**: As this API relies on DeepL's public endpoints, functionality may break if DeepL changes their API. Please report issues or contribute fixes if this occurs.

For [Ballon Translator](https://github.com/dmMaze/BallonsTranslator) users
---------------------------

After receiving the link in the format `https://your-deployment-url/api/translate`, just paste it into `api_url`.

![image](https://github.com/bropines/Deeplx-vercel/assets/57861007/335afdf4-2c3c-4970-b266-2cabdb5c7931)

### For auto-update (just in case I think of something clever) I borrowed sync.yml from https://github.com/drmartinmar/Deeplx-vercel. Thank you.
- To make it work, you kind of have to manually go into *actions* and run workflow,
### For Auto-Update

Just in case I think of something clever, I borrowed `sync.yml` from [drmartinmar/Deeplx-vercel](https://github.com/drmartinmar/Deeplx-vercel). Thank you.

## Thanks
[LegendLeo](https://github.com/LegendLeo) for the basic serverless implementation.
* To make it work, you have to manually go into **Actions** and run the workflow.

ChatGPT (Who wrote this readme for me)
Thanks
------

[OwO-Network](https://github.com/OwO-Network) for the project [DeepLX](https://github.com/OwO-Network/DeepLX)
* [LegendLeo](https://github.com/LegendLeo) for the basic serverless implementation.
* [OwO-Network](https://github.com/OwO-Network) for the project [DeepLX](https://github.com/OwO-Network/DeepLX).
* ChatGPT (who helped write this README)

## Contributing
Contributing
------------

Contributions are welcome! If you have a suggestion or fix, please fork the repository and submit a pull request.

## License
License
-------

This project is open-sourced under the MIT license. See the [LICENSE](LICENSE) file for more details.
107 changes: 80 additions & 27 deletions README_RU.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@

# DeepLX Vercel
DeepLX Vercel
=============

[English](README.md) | [Русский](README_RU.md)

Бесплатное решение на основе serverless для API перевода DeepL, позволяющее легко интегрироваться с вашими приложениями. Разверните свой собственный экземпляр или запустите локально по своим потребностям.
Бесплатное бессерверное решение для API перевода DeepL, позволяющее легко интегрироваться с вашими приложениями. Разверните свой собственный экземпляр или запустите его локально в соответствии с вашими потребностями.

## Особенности
Особенности
----------------------

- **Архитектура Serverless**: Построено с использованием масштабируемости и простоты serverless платформ.
- **Легкое развертывание**: Однокликовое развертывание на Vercel с минимальной конфигурацией.
- **Локальная разработка**: Поддерживает локальную разработку для тестирования и изменений. (Либо через Vercel CLI, либо через описанный ниже метод)
* **Архитектура Serverless**: Построено с использованием масштабируемости и простоты бессерверных платформ.
* **Лёгкое развертывание**: Однокликовое развертывание на Vercel с минимальной конфигурацией.
* **Локальная разработка**: Поддерживает локальную разработку для тестирования и модификаций (либо через Vercel CLI, либо с помощью описанного ниже метода).
* **Обновлённая логика API**: Совместимо с последними изменениями API DeepLX для надёжного перевода.

## Развертывание на Vercel
Развертывание на Vercel
--------------------------------------

Разверните свой собственный API перевода DeepLX, нажав на кнопку ниже.

[![Развернуть с помощью Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgit.luolix.top%2Fbropines%2FDeeplx-vercel)

После нажатия на кнопку просто следуйте инструкциям для настройки API на Vercel.

## Локальный запуск
Локальный запуск
-------------------------------

Вот метод локального развертывания, взятый из репозитория [deeplx-serverless](https://github.com/LegendLeo/deeplx-serverless/) от [LegendLeo](https://github.com/LegendLeo)
Вот метод локального развертывания, описанный в репозитории [deeplx-serverless](https://github.com/LegendLeo/deeplx-serverless/) от [LegendLeo](https://github.com/LegendLeo):

```bash
git clone https://github.com/LegendLeo/deeplx-serverless
Expand All @@ -32,51 +37,99 @@ npm run start

Это запустит локальный сервер с API, работающим на `http://localhost:9000`.

## Использование
Использование
--------------------------

После развертывания или локального запуска вы можете начать отправлять запросы на перевод текста. Отправьте `POST` запрос на `/api/translate` со следующей структурой JSON:

```json
{
"text": "Ваш текст для перевода",
"source_lang": "Код исходного языка (например, 'en')",
"target_lang": "Код целевого языка (например, 'de')"
"source_lang": "Код исходного языка (например, 'EN')",
"target_lang": "Код целевого языка (например, 'DE')",
"tag_handling": "Опционально: обработка тегов ('html', 'xml' или оставьте пустым)"
}
```

API ответит переведенным текстом. Вот пример использования `curl`:
**Параметры:**

* `text` **(обязательный)**: Текст, который вы хотите перевести.
* `source_lang` _(опционально)_: Код языка исходного текста (например, `'EN'`). Используйте `'auto'` для автоматического определения. По умолчанию `'auto'`.
* `target_lang` **(обязательный)**: Код языка, на который нужно перевести текст (например, `'DE'`).
* `tag_handling` _(опционально)_: Укажите `'html'` или `'xml'`, если ваш текст содержит такие теги и вы хотите, чтобы они корректно обрабатывались.

**Пример использования `curl`:**

```bash
curl --location --request POST 'https://your-deployment-url/api/translate' \
--header 'Content-Type: application/json' \
--data-raw '{
"text": "Hello, World!",
"source_lang": "en",
"target_lang": "de"
"source_lang": "EN",
"target_lang": "DE",
"tag_handling": ""
}'
```

Замените `https://your-deployment-url` на фактический URL вашего развертывания на Vercel или `http://localhost:9000`, если вы работаете локально.

## Для пользователей [Ballon Translator](https://github.com/dmMaze/BallonsTranslator)
После получения ссылки в формате `https://your-deployment-url/api/translate` просто вставьте ее в `api_url`
<b>
**Ответ:**

API вернёт JSON-объект с переводом и дополнительной информацией:

```json
{
"code": 200,
"id": 1234567890,
"data": "Hallo, Welt!",
"alternatives": ["Hallo, Welt!"],
"source_lang": "EN",
"target_lang": "DE",
"method": "Free"
}
```

* `code`: HTTP статус-код.
* `id`: Уникальный идентификатор запроса на перевод.
* `data`: Переведённый текст.
* `alternatives`: Массив альтернативных переводов.
* `source_lang`: Определённый или указанный исходный язык.
* `target_lang`: Целевой язык перевода.
* `method`: Указывает, использовался ли метод `'Free'` или `'Pro'`.

Важные замечания
-------------------------------

* **Ограничение частоты запросов**: Избыточное количество запросов может привести к временному блокированию со стороны DeepL. Пожалуйста, избегайте отправки слишком большого количества запросов за короткий промежуток времени.
* **Ограничения использования**: Этот API предназначен для личного или разработческого использования. Для коммерческого использования рассмотрите возможность подписки на официальный API DeepL.
* **Нет гарантий**: Поскольку этот API зависит от публичных конечных точек DeepL, функциональность может быть нарушена, если DeepL изменит свой API. Пожалуйста, сообщайте о проблемах или вносите исправления, если это произойдёт.

Для пользователей [Ballon Translator](https://github.com/dmMaze/BallonsTranslator)
---------------------------------------------------

После получения ссылки в формате `https://your-deployment-url/api/translate` просто вставьте её в поле `api_url`.

![изображение](https://github.com/bropines/Deeplx-vercel/assets/57861007/335afdf4-2c3c-4970-b266-2cabdb5c7931)

### Для автоматического обновления

## Благодарности
[LegendLeo](https://github.com/LegendLeo) за оригинальную бессерверную реализацию.
На случай, если я придумаю что-то новое, я заимствовал `sync.yml` из репозитория [drmartinmar/Deeplx-vercel](https://github.com/drmartinmar/Deeplx-vercel). Спасибо.

ChatGPT (Кто написал для меня этот файл readme)
* Чтобы это работало, вам нужно вручную перейти в раздел **Actions** и запустить workflow.

[OwO-Network](https://github.com/OwO-Network) и их проект [DeepLX](https://github.com/OwO-Network/DeepLX)
Благодарности
--------------------------

## Участие
* [LegendLeo](https://github.com/LegendLeo) за оригинальную бессерверную реализацию.
* [OwO-Network](https://github.com/OwO-Network) за проект [DeepLX](https://github.com/OwO-Network/DeepLX).
* ChatGPT (который помог написать этот README и помог разобраться с новым API)

Предложения приветствуются! Если у вас есть предложение или исправление, пожалуйста, создайте форк репозитория и отправьте pull request.
Участие
--------------

## Лицензия
Предложения и вклад приветствуются! Если у вас есть предложение или исправление, пожалуйста, создайте форк репозитория и отправьте pull request.

Этот проект распространяется под лицензией
Лицензия
----------------

MIT. См. файл [LICENSE](LICENSE) для получения дополнительной информации.
Этот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для получения дополнительной информации.
24 changes: 12 additions & 12 deletions api/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,38 @@ module.exports = async (req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Max-Age', '86400'); // Cache preflight (1 day)
res.setHeader('Access-Control-Max-Age', '86400'); // Кэширование preflight-запросов на 1 день
return res.status(204).end();
}

if (req.method !== 'POST' || !req.body || !req.body.text) {
const duration = Date.now() - startTime;
console.log(`[LOG] ${new Date().toISOString()} | 404 | ${duration}ms | POST "/translate"`);
return res.status(404).json({
"code": 404,
"message": "Path not found"
code: 404,
message: 'Путь не найден',
});
}

const { text, source_lang = 'AUTO', target_lang = 'RU' } = req.body;
const { text, source_lang = 'auto', target_lang = 'RU', tag_handling = '' } = req.body;

try {
const result = await translate(text, source_lang, target_lang);
const result = await translate(text, source_lang, target_lang, tag_handling);
const duration = Date.now() - startTime;
console.log(`[LOG] ${new Date().toISOString()} | 200 | ${duration}ms | POST "/translate"`);

res.json({
alternatives: result.alternatives,
code: 200,
data: result.text,
id: Math.floor(Math.random() * 10000000000),
method: 'Free',
source_lang,
target_lang,
data: result.data,
id: result.id,
method: result.method,
source_lang: result.source_lang,
target_lang: result.target_lang,
});
} catch (error) {
const duration = Date.now() - startTime;
console.error(`[ERROR] ${new Date().toISOString()} | 500 | ${duration}ms | POST "/translate" | ${error.message}`);
res.status(500).json({ code: 500, message: 'Translation failed', error: error.message });
res.status(500).json({ code: 500, message: 'Ошибка перевода', error: error.message });
}
};
Loading

0 comments on commit dba0533

Please sign in to comment.