Как добавить в приложение поддержку нескольких языков
Разбираемся, как переводить приложения и какие с этим могут возникнуть трудности.
vlada_maestro / shutterstock
Локализация приложения — достаточно сложная задача. Чтобы перевести приложение, нужно:
- перевести текст;
- убедиться, что текст хорошо смотрится;
- перевести все документы;
- подготовить специфические документы для других стран;
- добавить поддержку языков, которые записываются справа налево.
К счастью, разработчикам приходится решать только часть этих задач.
В этой статье мы разберёмся, как добавить в приложение поддержку нескольких языков и снизить стоимость перевода приложения.
Весь код в статье будет на C# и XAML, но принцип для любых приложений один.
Верстаем WPF-приложение
Сразу же сверстаем небольшое приложение для Windows:
Выглядит оно так:
В коде нет кнопок на нижней панели — они появятся после загрузки данных из файла.
Приложение по умолчанию на английском, но вы можете сохранять выбранный пользователем язык в файл, чтобы загружать его при запуске.
Добавляем языки
Языки для приложения хранятся в файле locales.json. Его можно легко редактировать, поэтому в любой момент можно добавить новый язык:
Здесь есть русские и английские надписи для разных элементов. Они хранятся в массивах values в следующем виде:
- name — название элемента;
- value — переведённый текст.
В коде каждый язык будет представлять объект класса Locale:
Теперь можно приступать к написанию логики приложения.
Функция перевода языка
При запуске приложение загружает файл locales.json, получает из него данные и создаёт объекты класса Locale. Далее будут создаваться кнопки, при нажатии на которые меняется язык.
Получается достаточно небольшой код, который позволяет быстро перевести приложение.
Какие могут возникнуть трудности
Трудностей при переводе может возникнуть очень много, и все они связаны с особенностями языков. Проще всего создавать приложения на английском, потому что он достаточно лаконичный.
Если же говорить о русском, то при переводе могут возникнуть сложности, которые не решатся обычной заменой текстов. Например, в английском языке нет изменений по родам, поэтому фраза «%username% uploaded new post» подойдёт пользователям обоих полов. В русском же «Татьяна опубликовал новый пост» будет выглядеть странно.
Правильное, но более дорогое решение — добавить отдельный вариант для женского рода: «Татьяна опубликовала новый пост». Если же нет возможности прописать дополнительный код, то есть и другие варианты:
- Указывать окончание в скобках, хотя это и не очень хорошо выглядит: «Игорь прокомментировал (а) ваш пост».
- Подбирать обезличенные варианты: «Новый комментарий от пользователя Игорь под вашим постом». Получается длинно и коряво.
Какую из этих зол выбрать, решать вам.
Другой момент связан с порядком слов в предложениях. Например, у нас в коде есть команда:
Она покажет диалоговое окно, в котором строгий порядок слов.
Здесь лучше использовать паттерны. То есть строки, в которых определено положение всех используемых значений:
Далее можно с помощью регулярных выражений подставить имя туда, где это логичнее для языка.
Также вы можете подумать и о различных валютах и системах измерения, чтобы русским пользователям не пришлось разбираться, сколько же метров в футе, а американским — наоборот.
Для каждого языка стоит создать отдельный файл, чтобы его можно было легко установить или удалить.
Заключение
Несмотря на то что локализация считается нетривиальной задачей, она помогает расширить аудиторию приложения. Однако прежде чем пытаться её решить, хорошо подумайте, сколько усилий на это понадобится. Возможно, для некоторых языков целесообразно создать отдельный интерфейс, заточенный под совершенно другой пользовательский опыт — другое направление элементов, изменённое расположение разделов и так далее.