Locales — Versola Docs
VersolaVersola/docs
До 1.00.7.1versola.kzGitHub

Locales

Экран Locales в консоли администратора — какие языки может показывать auth, какой из них язык по умолчанию, что нужно для активации языка и как запрос выбирает язык.

Locale — это язык, на котором могут выводиться экраны входа, сообщения с одноразовым кодом и экран согласия. Экран Locales хранит список языков, помечает один из них языком по умолчанию и включает или отключает остальные. Активировать язык можно, только когда есть все нужные ему тексты.

Прежде чем начать

Locales находится в боковом меню в группе GLOBAL и действует для всех тенантов. Чтобы увидеть экран, нужно разрешение locales:read, чтобы менять — locales:manage. Прежде чем активировать новый язык, добавьте его тексты в записи из раздела Активация языка.

Список

Locales — English по умолчанию, Russian активен
Страница Locales: en English с пометками Default и Active и ru Russian с пометкой Active
ПолеЗначение
Код языкаКод из фиксированного списка, например en или ru. Показан в первой колонке.
НазваниеНазвание языка, подставляется по коду.
DefaultЯзык, который применяется, когда ничего другого не подошло. Ровно один. Он должен быть активным.
Active / InactiveПредлагает ли auth этот язык. Используются только активные языки.

В новой установке есть en (по умолчанию) и ru, оба активны.

Правка списка

Нажмите Edit. Страница превратится в форму, которую вы сохраняете целиком.

Edit Locales — добавить язык, назначить язык по умолчанию, активировать
Форма Edit Locales со строками en и ru, кнопками Set default, Active и удаления, выпадающим списком Language и кнопками Add, Cancel и Save
  1. Чтобы добавить язык, выберите его в списке Language и нажмите Add. Он добавляется как Inactive.
  2. Нажмите Inactive в строке, чтобы активировать язык, или Active, чтобы отключить.
  3. Нажмите Set default в активной строке, которая ещё не является языком по умолчанию, чтобы сделать его таким.
  4. Нажмите крестик в строке, чтобы удалить язык.
  5. Нажмите Save. Если сохранить не удалось, причина появится рядом с кнопкой.

Удаление языка стирает его тексты во всех формах и в шаблонах сообщений OTP и пароля. Описания scope и названия клиентов на этом языке не удаляются. Если добавить язык снова, переводы форм не вернутся.

Активация языка

Активация ещё не активного языка завершится ошибкой, пока во всех этих записях нет непустого текста на нём:

ЗаписьЧто проверяется
КлиентыНазвание каждого клиента.
ScopeОписание каждого scope и описание каждого claim в нём. См. Scope.
ФормыКаждая строка активной версии каждой формы. См. Forms.
ШаблоныКаждый шаблон OTP и временного пароля.

Тогда консоль покажет Locale ru is incomplete. Missing: и список недостающего, например scope 'payments_read' description или form 'otp' v1. Заполните тексты и сохраните снова. Проверка выполняется только при активации. Уже активный язык при сохранении других изменений заново не проверяется.

Как выбирается язык

ui_locales — параметр запроса OIDC: список кодов языков через пробел, самый предпочтительный первым. Это подсказка. Клиент может передать её в /authorize, и непригодное значение запрос не отклоняет.

В /authorize auth оставляет из ui_locales те коды, которые активны на этом экране, в том порядке, в каком их прислал клиент. Сравнение идёт по точному коду: en-US не совпадает с en. Если ничего не осталось, auth берёт язык по умолчанию. Затем каждый текст выбирается по одному правилу:

  • Форма берёт первый язык из списка, который есть в переводах этой формы. Строки, которых нет на этом языке, берутся из языка по умолчанию. В собственном меню языков форма показывает свои языки, которые активны.
  • Сообщения с одноразовым кодом и временным паролем берут первый язык из списка, для которого есть текст шаблона, затем язык по умолчанию.
  • На экране согласия описания scope и claim берут первый язык из списка, для которого есть текст, затем язык по умолчанию. Если у scope нет описания, экран показывает сам ID scope.

Заголовок Accept-Language в /authorize язык не выбирает. auth читает его только на странице аккаунта (форма auth-settings) и только когда в запросе нет параметра ui_locales. Там теги берутся в порядке заголовка, а их веса q игнорируются.

Что дальше

  • Forms — переводы по формам и как работают версии
  • Scope — описания scope и claim по языкам
  • Клиент — название клиента, которое нужно для каждого активного языка