Вы потратили время и разместили свое приложение в магазинах приложений, и теперь пришло время подумать о том, чтобы оно было доступно в других странах и на других языках. Ваше приложение в значительной степени основано на пользовательском контенте. Теперь у вас есть два варианта.

  • Разрешить пользователям просматривать только сообщения, опубликованные на их языке.
  • Разрешить пользователям просматривать сообщения на их языке независимо от того, на каком языке они размещены.

В этом посте основное внимание будет уделено второму варианту с использованием AWS Translate. Все примеры, размещенные ниже, будут показаны с помощью JavaScript. Для тех, кто хочет пропустить контент и перейти сразу к коду, вы можете найти его на Github.

Вам понадобится только одна зависимость, aws-sdk.

npm install aws-sdk

or

yarn add aws-sdk

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

В массиве languages ​​необходимо указать двухсимвольный код языка. Поддерживаемые языки можно найти здесь.

Следующим шагом будет создание функции, которая форматирует текстовое содержимое с кодом языка.

Эта функция перебирает все языки, представленные в массиве languages, и вызывает другую функцию с именем translateCall (см. ниже). Когда перевод возвращается, он сохраняется в базе данных. Поскольку это всего лишь пример, я предоставил объект userPost, который будет включать данные, которые нам нужно отправить этой функции. В продакшене вы будете вызывать эту функцию для каждого нового поста.

Следующая функция, показанная ниже, принимает наши параметры, указанные в функции выше, и вызывает AWS SDK для перевода строки. Вы можете сохранить все это в одной функции, но я предпочитаю отделить ее на тот случай, если нам понадобится использовать ее в других местах нашего приложения.

Чтобы AWS правильно перевел строку, нам нужно отправить три параметра.

  • SourceLanguageCode
  • Код Целевого Языка
  • Текст

Для кода SourceLanguage установлено значение auto, поскольку он автоматически определяет язык по тексту. TargetLanguageCode — это код языка, на который мы хотим перевести текст. И, наконец, текст, который необходимо перевести. В приведенном выше примере я сделал простую команду try/catch и вывел все ошибки на консоль. Вы можете добавить дополнительную логику, такую ​​как повторные попытки, оповещения и т. д.

После этого данные возвращаются в виде объекта, а переведенный текст находится в ключе TranslatedText и сохраняется в базе данных.

В приложении вы отправляете код языка на серверную часть и возвращаете соответствующий язык клиенту.

Некоторые примеры выходных данных:

German - {"lang":"de","title":"Mein Beitrag!","content":"Ich bin heute angeln gegangen und lass mich dir sagen, dass diese Fische nichts zu spielen waren!"}
Greek - {"lang":"el","title":"Η Ποστ μου!","content":"Πήγα για ψάρεμα σήμερα και επιτρέψτε μου να σας πω, αυτά τα ψάρια δεν ήταν τίποτα για να παίξει με!"}
Ukrainian - {"lang":"uk","title":"Мій пост!","content":"Я пішов на риболовлю сьогодні і дозвольте мені сказати вам, ці риби були нічим грати!"}

Сохранение в файл

Еще один вариант использования, который я часто использую, — это перевод статического контента в приложении, такого как заголовки экранов, метки кнопок и т. д. Вместо сохранения в базе данных я хочу выводить их в файлы json для обслуживания через CloudFront. Вы можете использовать те же шаги, что и выше. Вам нужно будет удалить строку обновления базы данных и заменить ее на:

const output = JSON.stringify(data);
fs.writeFileSync("./output/" + languages[i] + ".json", output);

Это создаст файл json для каждого языка в выходной папке. В приложении React Native я могу вызвать свой CDN и загрузить файл на основе кода языка пользователя.

const options = {
  requestOptions: {
    cache: "no-store",
  },
  loadPath: "https://cdn.domain.com/strings/{{lng}}.json",
};
i18n
  .use(Fetch)
  .use(languageDetector)
  .use(initReactI18next)
  .init({
    fallbackLng: "en",
    backend: options,
    debug: false,
    react: {
      useSuspense: false,
    },
    load: "languageOnly",
  });

Теперь приложение загружается на языке пользователя по умолчанию. Используя эти методы, теперь вы можете иметь локализованное приложение для пользователей, чей язык не английский.

Переводы магазина приложений

Дополнительным бонусом является то, что вы можете локализовать нужный вам контент для соответствующих магазинов приложений. Для iOS я запускаю все свои описания, слоганы, ключевые слова и т. д. через этот процесс, чтобы сгенерировать переведенные строки для отображения в региональных магазинах приложений.

Наряду с этим контентом вы также можете локализовать описания обновлений приложений.

Эти методы эффективны и недороги для разработчиков, которые запускают приложение или команду с небольшим бюджетом. Для бесплатной пробной версии AWS предоставляет вам 2 миллиона символов в месяц в течение 12 месяцев, а после этого — 15 долларов за миллион символов.