Merge pull request #4076 from scossar/locale-from-header-setting

FEATURE: add site setting for setting locale from header
This commit is contained in:
Sam 2016-03-17 07:53:20 +11:00
commit 84d234a98a
5 changed files with 27 additions and 3 deletions

View File

@ -169,7 +169,7 @@ class ApplicationController < ActionController::Base
def set_locale def set_locale
if !current_user if !current_user
if SiteSetting.allow_user_locale if SiteSetting.set_locale_from_accept_language_header
I18n.locale = locale_from_header I18n.locale = locale_from_header
else else
I18n.locale = SiteSetting.default_locale I18n.locale = SiteSetting.default_locale

View File

@ -790,6 +790,7 @@ en:
delete_old_hidden_posts: "Auto-delete any hidden posts that stay hidden for more than 30 days." delete_old_hidden_posts: "Auto-delete any hidden posts that stay hidden for more than 30 days."
default_locale: "The default language of this Discourse instance (ISO 639-1 Code)" default_locale: "The default language of this Discourse instance (ISO 639-1 Code)"
allow_user_locale: "Allow users to choose their own language interface preference" allow_user_locale: "Allow users to choose their own language interface preference"
set_locale_from_accept_language_header: "set interface language for anonymous users from their web browser's language headers."
min_post_length: "Minimum allowed post length in characters" min_post_length: "Minimum allowed post length in characters"
min_first_post_length: "Minimum allowed first post (topic body) length in characters" min_first_post_length: "Minimum allowed first post (topic body) length in characters"
min_private_message_post_length: "Minimum allowed post length in characters for messages" min_private_message_post_length: "Minimum allowed post length in characters for messages"
@ -1310,6 +1311,7 @@ en:
pop3_polling_authentication_failed: "POP3 authentication failed. Please verify your pop3 credentials." pop3_polling_authentication_failed: "POP3 authentication failed. Please verify your pop3 credentials."
reply_by_email_address_is_empty: "You must set a 'reply by email address' before enabling reply by email." reply_by_email_address_is_empty: "You must set a 'reply by email address' before enabling reply by email."
pop3_polling_disabled: "You must first enabled POP3 polling before enabling reply by email." pop3_polling_disabled: "You must first enabled POP3 polling before enabling reply by email."
user_locale_not_enabled: "You must first enable 'allow user locale' before enabling this setting."
notification_types: notification_types:
group_mentioned: "%{group_name} was mentioned in %{link}" group_mentioned: "%{group_name} was mentioned in %{link}"

View File

@ -64,6 +64,9 @@ basic:
allow_user_locale: allow_user_locale:
client: true client: true
default: false default: false
set_locale_from_accept_language_header:
default: false
validator: "AllowUserLocaleEnabledValidator"
suggested_topics: suggested_topics:
client: true client: true
default: 5 default: 5

View File

@ -0,0 +1,18 @@
class AllowUserLocaleEnabledValidator
def initialize(opts={})
@opts = opts
end
def valid_value?(val)
# only validate when enabling setting locale from headers
return true if val == "f"
# ensure that allow_user_locale is enabled
SiteSetting.allow_user_locale
end
def error_message
I18n.t("site_settings.errors.user_locale_not_enabled");
end
end

View File

@ -148,10 +148,11 @@ describe TopicsController do
end end
end end
context "allow_user_locale enabled" do context "set_locale_from_accept_language_header enabled" do
context "accept-language header differs from default locale" do context "accept-language header differs from default locale" do
before do before do
SiteSetting.stubs(:allow_user_locale).returns(true) SiteSetting.stubs(:allow_user_locale).returns(true)
SiteSetting.stubs(:set_locale_from_accept_language_header).returns(true)
SiteSetting.stubs(:default_locale).returns("en") SiteSetting.stubs(:default_locale).returns("en")
set_accept_language("fr") set_accept_language("fr")
end end
@ -178,7 +179,7 @@ describe TopicsController do
context "the preferred locale includes a region" do context "the preferred locale includes a region" do
it "returns the locale and region separated by an underscore" do it "returns the locale and region separated by an underscore" do
SiteSetting.stubs(:allow_user_locale).returns(true) SiteSetting.stubs(:set_locale_from_accept_language_header).returns(true)
SiteSetting.stubs(:default_locale).returns("en") SiteSetting.stubs(:default_locale).returns("en")
set_accept_language("zh-CN") set_accept_language("zh-CN")