Variable default interface language for new users

This is also incorrect. I18n.locale is set from the header only if there is no logged in user. See here:

Now, I suspect that when the user first signs up, current_user is not set, thus kick-starting the whole get-the-language-from-header process, and then the I18n.locale got persisted into the user’s account.

However, this is certain NOT how it is done when a user redeems an invite.

1 лайк

Yes, if you look at users_controller you can see how it’s done differently.

3 лайка

Yup. I see it.

UsersController inherits from ApplicationController, which runs set_locale as a before_action.

That kick-starts the whole thing.

But users redeeming an invitation does not go through this.

2 лайка

Judging from this here:

Would this work:

      user = invite.redeem(username: params[:username], name: params[:name], password: params[:password], user_custom_fields: params[:user_custom_fields])
      if user.present?
        user.locale = I18n.locale
        user.save!

        log_on_user(user)
        post_process_invite(user)
      end

Sorry for my Ruby – I don’t really know it. :sweat_smile:

1 лайк

С этого коммита от @david всё должно работать корректно :tada:

1 лайк

Спасибо вам большое, ребята.
Но… у меня возникла ещё одна проблема.:pensive_face:
Я не знаю, как этим пользоваться.:persevering_face:

Чтобы разрешить установку локали для анонимных (неавторизованных) пользователей на основе настроек языка их браузера, необходимо включить обе настройки сайта: allow user locale и set locale from accept language header. Обе эти настройки находятся в верхней части страницы настроек «Basic Setup» вашего сайта.

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

Настройка set locale from accept language header не влияет на пользователей, которые уже создали учетные записи на сайте. После создания учетной записи интерфейс Discourse будет отображаться в соответствии с локалью, указанной на странице настроек пользователя. Пока включена настройка allow user locale, существующие пользователи могут обновить свою локаль здесь:

Для настройки set locale from accept language header необходимо написать тему с инструкцией (howto). Я поставил себе напоминание об этом и скоро напишу эту тему.

2 лайка

Короткий вопрос по этому поводу в связи с плагином переводчика. Будет ли плагин переводчика работать в данном сценарии, если ограничение на переводы в плагине установлено для «Всех»?
image
(учитывая, что именно смена локали является триггером для появления кнопки перевода)

Просто к сведению: я не думаю, что группа «Все» корректно работает с этим настройкой переводчика. Кроме того, она недоступна для анонимов, поэтому рекомендуется использовать группу TL0.

1 лайк