Что делает «локаль по умолчанию»?

Снова вопрос уровня 101. В файле app.yml я установил fi как локаль по умолчанию. Но делает ли это что-то большее, чем просто задаёт значения по умолчанию для всех и всего?

И если да, то увидит ли пользователь всё на этом языке по умолчанию, то есть fi, пока не будет изменена настройка «Разрешить выбор локали пользователем»?

А как насчёт «Устанавливать локаль из заголовка Accept-Language»? Если у кого-то указано en_US, будет ли предложена английская версия? И означает ли это, что локаль по умолчанию — это лишь рекомендация, которая будет переопределена, если Accept-Language указывает на что-то другое?

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

Однако мой форум в остальном полностью на финском, и если Accept-Language не изменит локаль по умолчанию, это не сработает.

(И отчасти я надеюсь, что когда-нибудь заработает функция перевода :smirking_face:).

Я знаю, что это не настоящий вопрос поддержки, но я стараюсь избежать раздела «Общее»…

Это не то, о чём я знаю очень много, но поскольку других ответов пока нет…

Думаю, добавление локаля по умолчанию в ваш app.yml переопределяет всё, что установлено для «локаля по умолчанию» в настройках сайта (а также удаляет его со страницы настроек). Но это касается только локали по умолчанию; вы можете позволить пользователям выбирать (или позволить их браузерам выбрать) более подходящий для них вариант.

Надеюсь, это имеет отношение к делу. Если нет, то это просто полезное напоминание, чтобы попытаться получить более компетентный ответ. :slight_smile: :crossed_fingers:

В ApplicationController#with_resolved_locale выделяются два сценария работы с логикой: для авторизованных и неавторизованных пользователей.

Для неавторизованных пользователей: (1) язык определяется из запроса, затем (2) если язык не был обнаружен, используется настройка сайта «Язык по умолчанию».

Приоритет определяется следующим образом: параметр ?lang= в URL, затем cookie locale, затем заголовок Accept-Language (при условии, что соответствующие настройки сайта включены).

Логика для авторизованных пользователей проще: предпочтение пользователя, затем «Язык по умолчанию», если выбор пользователя запрещён.

Во всех случаях, если разрешённый язык был удалён с сервера Discourse, используется en. (Это в основном происходит во время модульных и интеграционных тестов, насколько мне известно.)

locale = SiteSettings::DefaultsProvider::DEFAULT_LOCALE if !I18n.locale_available?(locale)

Итак, вкратце, что это делает:

  • Это язык для анонимных запросов без заголовка Accept-Language.
    • В частности, это касается процесса регистрации аккаунта.
  • Это язык, который всегда будет использоваться, если вы не разрешили пользователям выбирать свой язык, или если пользователь не установил предпочтительный язык.