# Variable default interface language for new users

**URL:** https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741
**Category:** Feature
**Created:** [2015年九月25日 11:38 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741 "2015-09-25T11:38:40Z")
**Posts on this page:** 9
**Page:** 3

<div class="post-metadata">

### Author: ![schungx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/schungx/32/70989_2.png) [@schungx](https://meta.discourse.org/u/schungx)
#### Post date: [2017年九月26日 04:46 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/41 "2017-09-26T04:46:11Z")

</div>

> [@simon](#):
>
> It’s set from the locale, which is set from the header.

This is also incorrect. `I18n.locale` is set from the header _only if_ there is no logged in user. See here:

> <https://github.com/discourse/discourse/blob/383d7712651b6eb18e3c978f03025083ba3b820b/app/controllers/application_controller.rb#L212-L223>

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.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2017年九月26日 04:55 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/42 "2017-09-26T04:55:45Z")

</div>

> [@schungx](#):
>
> 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,

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

---

<div class="post-metadata">

### Author: ![schungx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/schungx/32/70989_2.png) [@schungx](https://meta.discourse.org/u/schungx)
#### Post date: [2017年九月26日 05:34 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/43 "2017-09-26T05:34:07Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![schungx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/schungx/32/70989_2.png) [@schungx](https://meta.discourse.org/u/schungx)
#### Post date: [2017年九月26日 06:15 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/44 "2017-09-26T06:15:42Z")

</div>

Judging from this here:

> <https://github.com/discourse/discourse/blob/cf9607a0cb5753bdae1c756752021aeb2df3f264/app/controllers/invites_controller.rb#L32-L60>

Would this work:

```ruby
      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. 😅

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [2020年七月23日 00:30 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/45 "2020-07-23T00:30:34Z")

</div>

自从 @david 的这次提交起，现在应该可以顺利运行了 🎉

> <https://github.com/discourse/discourse/pull/10289>
>
> This only applies when allow\_user\_locale is enabled

---

<div class="post-metadata">

### Author: ![Elmer\_Wu](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/elmer_wu/32/191567_2.png) [@Elmer\_Wu](https://meta.discourse.org/u/Elmer_Wu)
#### Post date: [2020年八月24日 22:12 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/46 "2020-08-24T22:12:35Z")

</div>

非常感谢大家。  
但是……我还有另一个问题。😔  
我不知道该怎么用这个。😣

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2020年八月26日 23:19 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/47 "2020-08-26T23:19:57Z")

</div>

若要允许根据浏览器的语言设置为匿名（未登录）用户设置区域设置，您需要同时启用“允许用户区域设置”和“从 Accept-Language 头设置区域设置”这两个站点设置。这两个设置均位于站点“基本设置”页面的顶部附近。

启用这些设置后，未登录站点的用户将自动将其 Discourse 用户界面设置为他们在浏览器中设定的首选语言。如果未登录用户决定在站点上创建账户，其区域设置将自动设置为浏览器所设定的区域设置。请注意，这仅在用户的区域设置对应于 Discourse 已翻译的语言时才有效。

“从 Accept-Language 头设置区域设置”设置对已在站点上创建账户的用户没有影响。一旦账户创建完成，Discourse 用户界面将显示为用户在偏好设置页面中设定的区域设置。只要启用了“允许用户区域设置”选项，现有用户即可在此处更新其区域设置：

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/1/21eac21ef3eb94ebc4415f7a7250b36b3847c46b.png)

关于“从 Accept-Language 头设置区域设置”这一设置，需要撰写一篇相关的 #howto 主题文章。我已将此事项设为提醒，并将尽快完成该文章的撰写。

---

<div class="post-metadata">

### Author: ![loginerror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/loginerror/32/156605_2.png) [@loginerror](https://meta.discourse.org/u/loginerror)
#### Post date: [2023年十一月21日 12:04 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/48 "2023-11-21T12:04:18Z")

</div>

> [@simon](#):
>
> 要允许根据匿名（未登录）用户的浏览器语言设置来设置其区域设置，您需要启用“允许用户区域设置”和“从 accept language header 设置区域设置”这两个站点设置。这两个设置都位于站点“基本设置”页面的顶部附近。
> 
> 启用这些设置后，未登录用户的 Discourse 用户界面将自动设置为他们在浏览器中设置的首选语言。如果未登录用户决定在站点上创建帐户，其区域设置将自动设置为由其浏览器设置的区域设置。请注意，这仅在用户的区域设置是 Discourse 已翻译成该语言时才有效。

关于此设置与翻译插件的快速提问。如果插件翻译限制设置为“所有人”，翻译插件在这种情况下是否可用？  
 ![image](https://global.discourse-cdn.com/meta/original/4X/9/7/9/9791d2c1234a516a8c3cab60ece2bb1ff18132ff.png)  
（鉴于不同的区域设置是触发翻译按钮首先显示的因素）

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [2023年十一月21日 12:44 UTC](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741/49 "2023-11-21T12:44:37Z")

</div>

只是通知您一下，我认为“所有人”组在此翻译设置下无法正常工作。它也不对匿名用户可用，因此建议将其设置为 TL0 组。

[上一頁](https://meta.discourse.org/t/variable-default-interface-language-for-new-users/33741.md?page=2)
