• XSS.stack #1 – первый литературный журнал от юзеров форума

UI/UX Перевод языковых файлов сайта на js/nodejs

TROUBLE

OLD SCHOOL
Пользователь
Регистрация
05.07.2023
Сообщения
548
Решения
1
Реакции
353
Гарант сделки
16
Была как то задача перевести один проект на nodejs на различные языки.
По моему субъективному мнению яндекс переводит по лучше гугла, по крайней мере в смысловом значении.
Соответственно мне нужен был способ перевода содержания js файлов без большого геморроя.
Накидал рабочий скрипт, протестирован в живую, работает отлично, делюсь с вами.
Python:
import json
import requests

IAM_TOKEN = 'ТОКЕН'
folder_id = 'ПАПКА(ЯНДЕКСОВСКАЯ ФИШКА)'
target_language = 'en'

def translate_text(text):
    body = {
        "targetLanguageCode": target_language,
        "texts": [text],
        "folderId": folder_id,
    }

    headers = {
        "Content-Type": "application/json",
        "Authorization": "Bearer {0}".format(IAM_TOKEN)
    }

    response = requests.post('https://translate.api.cloud.yandex.net/translate/v2/translate',
        json=body,
        headers=headers
    )

    if response.status_code == 200:
        response_json = json.loads(response.text)
        return response_json['translations'][0]['text']
    else:
        print(f"Failed to translate text: {text}")
        return text

def translate_json_file(input_file_path, output_file_path):
    with open(input_file_path, 'r') as input_file:
        input_data = json.load(input_file)

    output_data = {}
    for key, value in input_data.items():
        if isinstance(value, dict):
            output_data[key] = translate_dict(value)
        elif isinstance(value, list):
            output_data[key] = translate_list(value)
        elif isinstance(value, str):
            output_data[key] = translate_text(value)
        else:
            output_data[key] = value

    with open(output_file_path, 'w') as output_file:
        json.dump(output_data, output_file, ensure_ascii=False, indent=4)

def translate_list(input_list):
    output_list = []
    for value in input_list:
        if isinstance(value, dict):
            output_list.append(translate_dict(value))
        elif isinstance(value, list):
            output_list.append(translate_list(value))
        elif isinstance(value, str):
            output_list.append(translate_text(value))
        else:
            output_list.append(value)
    return output_list

def translate_dict(input_dict):
    output_dict = {}
    for key, value in input_dict.items():
        if isinstance(value, dict):
            output_dict[key] = translate_dict(value)
        elif isinstance(value, list):
            output_dict[key] = translate_list(value)
        elif isinstance(value, str):
            output_dict[key] = translate_text(value)
        else:
            output_dict[key] = value
    return output_dict

if __name__ == '__main__':
    input_file_path = 'ru.json'
    output_file_path = 'en.json'
    translate_json_file(input_file_path, output_file_path)

Документацию о том как получить ключ и указать папку (яндексовская фишка) спокойно найдёте по соответствующему поисковому запросу, там же и как получить список доступных вам языков.
 
Вместо хранения перевода в json лучше использовать Gettext .po
https://www.gnu . org/software/gettext/manual/html_node/PO-Files.html

Рано или поздно, проекту потребуется исправить неправильные переводы, добавить новые (испанский, китайский). Для этого можно отправить ваши .po файлы переводчикам, для которых po файлы более привычны и понятны, в отличие от кастомных json

.po популярны и есть готовые библиотеки.
Например django поддерживает их "из коробки"
Для NodeJS есть либа: https://www.npmjs . com/package/pofile

О переводе:
Есть готовые библитотеки на питоне (как в посте)
yandex translate - https://pypi . org/project/PoTrans/
google translate - https://pypi . org/project/translate-po/
 
Вместо хранения перевода в json лучше использовать Gettext .po
https://www.gnu . org/software/gettext/manual/html_node/PO-Files.html

Рано или поздно, проекту потребуется исправить неправильные переводы, добавить новые (испанский, китайский). Для этого можно отправить ваши .po файлы переводчикам, для которых po файлы более привычны и понятны, в отличие от кастомных json

.po популярны и есть готовые библиотеки.
Например django поддерживает их "из коробки"
Для NodeJS есть либа: https://www.npmjs . com/package/pofile

О переводе:
Есть готовые библитотеки на питоне (как в посте)
yandex translate - https://pypi . org/project/PoTrans/
google translate - https://pypi . org/project/translate-po/
На долгосрок согласен. В моем случае была необходимость работать с тем что уже есть и было сделано до меня.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх