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

Языки

Если вы поддерживаете два или три языка, это не имеет большого значения. Но если вы хотите поддерживать дюжину вариантов, вы должны как-то решить, какие из них. Для начала неплохо погуглить самые популярные языки, но этот вариант совсем не точен. Лучше посмотрите статистику или аналитические отчеты, которые дадут вам представление о том, на каких языках говорят ваши пользователи. В Росплате я такие данные не собираю, поэтому нужна была другая точка отсчета. Мне пришлось проявить инициативу и просто спросить потенциальных пользователей: «Привет, ребята, какие языки вы ожидаете увидеть на странице настроек?». Честно говоря, ответ был неожиданным. Арабский, иврит, хинди и бенгалбский!

Обнаружение

Когда новый пользователь попадает в приложение, он может не говорить по-английски, который является языком по умолчанию. Значит, должен быть какой-то способ угадать. И есть один: используйте заголовок Accept-Language на стороне сервера. Этот заголовок не только говорит вам, какую локаль использовать, но и дает вам подсказку, например, этот пользователь говорит на языке А и языках Б (я уверен на 90%) и С (я уверен на 50%). С этой информацией вы можете быть намного увереннее: если вы не поддерживаете основной язык пользователя, вы, вероятно, можете использовать дополнительные.

Выбор

Когда пользователь входит в систему и меняет локаль, вы должны запомнить этот выбор. Например, я устанавливаю файл cookie только для http, указывающий предпочтения пользователя. В следующий раз, когда он запросит index.html с сервера, он получит его на основе этого значения файла cookie.

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

  1. Проверить куки.

  2. Если в куки нет предпочтительного языка, проверьте, что есть в БД.

  3. Если БД не знает, какой язык выбрал пользователь, проверьте заголовок Accept-Language.

  4. В любом другом случае используйте локаль по умолчанию.

Сервисы против сообщества. Статические файлы против загрузки

Существует множество сервисов i18n, таких как https://weblate.org/ или Contentech. Их использование — хороший способ получить качественные переводы. И это, пожалуй, лучшее решение. Но в моем случае у меня нет возможности оплачивать такие услуги. И я решил обратиться за помощью к сообществу. Это казалось отличным способом вовлечь потенциальных пользователей в процесс создания приложения, которое они используют!

Еще одна вещь, о которой следует подумать, — готовы ли вы загружать свежие переводы с какого-либо сервиса каждый раз, когда кто-то запрашивает HTML-страницу, или «запекать» предварительно переведенные файлы и обслуживать их как статические? Для меня ответ был довольно очевиден:

Если вы можете сэкономить 10 мс времени обработки запроса, вы должны это сделать.

Заключение

Я надеюсь, что эта статья помогла вам спланировать свои следующие шаги на этом сложном (но важном) пути.

Кстати, призываю вас помочь моему проекту с открытым исходным кодом Росплата, добавив новую локаль или просмотрев существующие (потому что могут быть неточности).

И подписывайтесь на мой телеграм-канал, чтобы быть в курсе всех анонсов и интересных вещей!

Люблю вас всех!

Комментарии (2)


  1. ss-nopol
    19.04.2023 08:56

    Когда пользователь входит в систему и меняет локаль, вы должны запомнить этот выбор. Например, я устанавливаю файл cookie только для http, указывающий предпочтения пользователя. В следующий раз, когда он запросит index.html с сервера, он получит его на основе этого значения файла cookie.

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

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

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


    1. john_samilin Автор
      19.04.2023 08:56

      Разумеется, всегда стоит добавлять такую опцию