В этой статье вы узнаете о новой функции Lokalise под названием Custom processor. Приложение Custom processor позволяет перехватывать ключи перевода, загружаемые и скачиваемые на Lokalise, а затем анализировать или преобразовывать их по мере необходимости.
Сегодня я покажу вам, как создать пользовательский процессор с помощью фреймворка Ruby on Rails, настроить его на Lokalise и протестировать.
Если вы хотите узнать, как создать пользовательский процессор с помощью Node и Fastify, ознакомьтесь с соответствующим руководством. Еще больше примеров кода вы найдете в нашем DevHub.
Что такое пользовательский процессор?
Приложение Custom processor позволяет вам использовать собственный сервер или сторонний сервис для получения ключей перевода, импортированных в Lokalise и экспортированных из него, их анализа, форматирования, преобразования или даже удаления по мере необходимости.
Чтобы лучше понять идею, давайте посмотрим, как происходит обычная загрузка на Lokalise:
- Вы выбираете один или несколько файлов перевода для загрузки.
- Lokalise автоматически определяет языки файлов перевода, но вы можете настроить их по своему усмотрению.
- Вы настраиваете любые дополнительные параметры выгрузки и нажимаете кнопку Upload.
- Lokalise анализирует загруженные данные, извлекает ключи и значения перевода.
- Извлеченные данные отображаются в редакторе переводов Lokalise TMS.
Однако если у вас настроен пользовательский процессор, после выполнения шага 4 Lokalise автоматически отправит разобранные данные в ваш процессор. Там вы можете выполнить любые дополнительные действия, например, проанализировать загруженные данные, преобразовать перевод, добавить специальное форматирование, удалить ненужные специальные символы или некоторые запрещенные слова, перестроить ключи перевода и так далее. Единственное требование — данные, возвращаемые вашим процессором, должны сохранять исходную структуру.
Теперь кратко опишем процесс загрузки:
- Вы выбираете форматы файлов для загрузки.
- Вы настраиваете любые дополнительные параметры по мере необходимости и нажимаете кнопку Build and download.
- Lokalise собирает выбранные ключи и переводы.
- Lokalise генерирует файлы переводов на основе опций загрузки и запечатывает их в архив.
Таким образом, пользовательский процессор перехватывает данные, собранные на шаге 3, и снова может выполнить любые дополнительные модификации, прежде чем эти данные будут запечатаны в архив.
Как видите, идея довольно проста, однако с помощью этой функции вы можете автоматизировать повторяющуюся ручную работу.
Варианты использования пользовательских процессоров
Существуют различные варианты использования:
- Перевести загруженный контент с помощью собственного или стороннего сервиса.
- Выполнить замену заполнителей.
- Очистить импортированные переводы, удалив ненужные специальные символы.
- Реорганизация или переименование экспортированных ключей перевода.
- Выполните анализ текста для нужд рабочего процесса локализации.
- Применить специальное форматирование к импортированным или экспортированным переводам.
- Удалять или заменять запрещенные или нежелательные слова.
Теперь давайте посмотрим, как создать пользовательский процессор.
Создание пользовательского процессора
В этом разделе вы узнаете, как создать сценарий, выполняющий предварительную и последующую обработку данных перевода.
- Предварительная обработка происходит при загрузке файлов перевода. Мы будем использовать сторонний API под названием funtranslations.com для перевода обычных английских текстов в пиратскую речь.
- Постобработка выполняется при загрузке файлов перевода обратно. Мы создадим скрипт для удаления запрещенной фразы из всех наших переводов.
Подготовка приложения
Чтобы начать работу, давайте создадим новое Rails-приложение, как обычно:
rails new CustomProcessors
Я буду использовать Rails 7, но все примеры кода должны быть актуальны и для Rails 5 и 6.
Создайте новый контроллер в файле app/controllers/processors_controller.rb
:
require 'uri'
require 'net/http'
require 'openssl'
require 'json'
class ProcessorsController < ApplicationController
skip_before_action :verify_authenticity_token, only: %i[preprocess postprocess]
end
Сначала мы импортируем все необходимые модули, которые будут использоваться для выполнения API запроса.
Далее, мы также должны пропустить проверку токена подлинности для препроцессинга и постпроцессинга, поскольку эти действия будут вызываться с другого ресурса.
Давайте также добавим два маршрута в файл config/routes.rb
:
post '/preprocess', to: 'processors#preprocess'
post '/postprocess', to: 'processors#postprocess'
Вот и все!
Выполнение предварительной обработки
Теперь давайте узнаем, как выполнить предварительную обработку данных. Я хочу найти все английские переводы и превратить их в смешную пиратскую речь с помощью сайта funtranslations.com. Для начала давайте переберем ключи перевода:
def preprocess
payload = params
payload[:collection][:keys].each do |key|
end
end
Далее мы должны изменить переводы для каждого ключа, но только если идентификатор языка равен 640 (это английский), и ответить JSON, содержащим загруженные данные:
def preprocess
payload = params
payload[:collection][:keys].each do |key|
key[:translations].map! do |trans|
if trans[:languageId] == 640
trans[:translation] = translate(trans[:translation])
end
trans
end
end
render json: payload
end
Добавим также приватный метод translate
:
private
def translate(initial_text)
url = URI("https://api.funtranslations.com/translate/pirate.json")
url.query = URI.encode_www_form({text: initial_text})
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
response = http.request(request)
JSON.parse(response.read_body)['contents']['translated']
end
На самом деле ничего сложного: мы генерируем правильный URL, добавляем наш начальный текст в запрос, отправляем запрос, а затем получаем переведенный контент. Отличная работа!
Выполнение постобработки
Постобработка выполняется очень похожим образом. Давайте создадим новое действие, которое будет удалять запрещенную фразу из всех переводов. В частности, пираты боятся Летучего Голландца, поэтому давайте избавимся от него:
def postprocess
payload = params
payload[:collection][:keys].each do |key|
key[:translations].map! do |trans|
trans[:translation].gsub!(/flyingsdutchman/i, '')
trans
end
end
render json: payload
end
Итак, мы просто используем gsub!
для удаления всех вхождений заданной фразы. И снова убедитесь, что в ответ будет получен JSON, содержащий все данные о переводе.
Настройка пользовательского процессора
После того как вы создали пользовательский процессор, пришло время включить его! Для этого выполните следующие действия:
- Перейдите на сайт lokalise.com, войдите в систему и откройте свой проект перевода.
- Перейдите в раздел Apps, найдите в списке Custom processor и нажмите на него.
- Затем нажмите кнопку Установить и настройте приложение, введя URL-адрес предварительной и последующей обработки.
- При необходимости выберите формат файла, для которого будет работать этот процессор.
- Когда вы будете готовы, нажмите Сохранить изменения.
Вот и все, отличная работа!
Тестирование
Теперь, когда все готово, вы можете протестировать ваш новый процессор. Для этого перейдите на страницу Upload, выберите файл английского перевода и нажмите Upload.
Вернитесь в редактор проекта и понаблюдайте за результатами:
Чтобы проверить функцию постобработки, просто добавьте фразу «Летучий голландец» в любой перевод, перейдите на страницу Download, нажмите Build and download. Вы не должны увидеть запрещенную фразу в полученных переводах.
en:
password: "Say th' secret phrase and enter. It's over there",
welcome: "Welcome, me bucko!"
Поздравляем!
Заключение
На этом мы завершаем наш учебник. Как вы видите, пользовательский процессор — это очень мощная функция, которую можно использовать для создания пользовательских рабочих процессов, поэтому обязательно ознакомьтесь с ней. Вы можете найти еще больше примеров кода в нашем DevHub. Однако если у вас возникнут дополнительные вопросы, пожалуйста, напишите нам.
Спасибо, что остались со мной сегодня, и удачного кодинга!