Приложение и сайт на английском, украинском и русском

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

В приложении

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

Важно, где хранится выбор. Он пишется в то же место, куда пишет системная настройка языка для отдельной программы («Системные настройки», «Основные», «Язык и регион», «Программы»). Поэтому два переключателя не могут разойтись, а выбор переживает перезапуск без лишнего кода. «Как в системе» — это просто отсутствие сохранённого выбора.

Мгновенное переключение оказалось более трудной половиной. Обычный способ загрузки строк в маковском приложении читает язык при запуске и больше не меняет. Мы загружаем строки через собственный объект, который умеет менять язык на ходу. Если строки нет, берётся английская, а если и её нет — сам ключ, чтобы пробел бросался в глаза, а не прятался пустым местом.

Первой ловушкой стало меню. Окна перерисовываются сами, а меню хранит готовый текст. Приложение живёт в строке меню, и, забыв про это, мы получили бы язык, который сменился везде, кроме самого частого места. Вторая ловушка нашлась позже: в нескольких местах хранилась готовая фраза, а не то, что нужно переводить. Результат проверки разрешения, статус на панели диктовки, надпись «загрузка» в закреплённом окне перевода. Каждому пришлось запоминать причину сообщения, чтобы смена языка до него дошла. В старых записях истории были зашиты русские слова «надиктовка» и «секретарь», поэтому они оставались русскими после смены языка. Теперь они приводятся к нейтральным по языку меткам.

Две вещи мы оставили намеренно. Слова, которыми можно вслух назвать знаки препинания, — это данные распознавания, а не интерфейс, поэтому вместе с интерфейсом мы их не переводили. А язык интерфейса и язык речи — разные вещи: на английском Маке можно диктовать по-украински. Одно на другое не влияет.

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

На сайте

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

Сначала язык на корневом адресе выбирался по браузеру. Но посетитель из Украины с русским или английским браузером остался бы на английской странице, а мы хотели, чтобы для посетителей из Украины первой открывалась украинская версия. Поэтому теперь сайт смотрит ещё и на страну посетителя. Когда вы один раз нажали переключатель языка, ваш выбор побеждает при всех следующих заходах.

Ещё из блога