“默认区域设置”有什么作用?

又是一个非常基础的问题。在 app.yml 中,我将 fi 设置为默认区域设置。但这是否比仅仅为所有人设置默认值有更多作用?

如果有,用户是否会一直看到默认语言(现在是 fi)的内容,直到更改了“允许用户区域设置”?

那么“从 accept language header 设置区域设置”呢?如果有人设置为 en_US,那么就会提供英文版本吗?这是否意味着默认区域设置只是一个建议,如果 Accept-Language 是其他值,它就会被覆盖?

我之所以问这个问题,是因为我的新网站主要面向美国市场,并且需要一个论坛。但我认为它不会引起足够的关注,以至于值得投入启动论坛所需的所有工作。因此,我曾考虑过一个解决方案,即引导那些美国/全球访客进入一个专门的类别。

但我的论坛其他部分都是芬兰语,如果 Accept-Language 不改变默认区域设置,那将行不通。

(部分原因是我希望那个翻译器功能有一天能正常工作 :smirking_face:)。

我知道,这不算是一个真正的支持问题,但我正在尝试避免将其归入“通用”类别……

1 个赞

虽然我对这方面了解不多,但鉴于目前还没有其他回复……

我认为在 app.yml 中添加默认区域设置会覆盖你在站点设置中为“默认区域设置”所做的任何设置(并且还会将其从设置页面中移除)。但这只会是默认设置,你可以让用户选择(或让他们的浏览器选择)一个更适合他们的替代方案。

希望这有帮助,如果没有,这也可以作为一个有用的顶帖,看看我们是否能找到更有知识的回复。 :slight_smile: :crossed_fingers:

ApplicationController#with_resolved_locale 中有两种逻辑:已登录用户和未登录用户。

未登录用户 (1) 从请求设置语言环境,然后 (2) 如果未检测到语言环境,则使用“默认语言环境”站点设置。

优先级是 URL 中的 ?lang=,然后是 locale cookie,然后是 Accept-Language(如果启用了各自的站点设置)。

已登录用户的逻辑更简单:用户偏好设置,然后如果用户偏好设置被禁止,则使用“默认语言环境”。

在所有情况下,如果已解析的语言环境已从 Discourse 服务器卸载,则使用 en。(据我所知,这主要在单元和集成测试中触发。)

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

所以,总而言之,它的作用是:

  • 这是没有 Accept-Language 标头的匿名请求的语言。
    • 特别是包括账户注册过程。
  • 如果您不允许用户选择自己的语言,或者用户尚未设置首选语言环境,则始终会使用该语言。
3 个赞