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
if !current_user
if SiteSetting.allow_user_locale
if SiteSetting.set_locale_from_accept_language_header
I18n.locale = locale_from_header
else
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."
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"
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_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"
@ -1310,6 +1311,7 @@ en:
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."
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:
group_mentioned: "%{group_name} was mentioned in %{link}"

View File

@ -64,6 +64,9 @@ basic:
allow_user_locale:
client: true
default: false
set_locale_from_accept_language_header:
default: false
validator: "AllowUserLocaleEnabledValidator"
suggested_topics:
client: true
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
context "allow_user_locale enabled" do
context "set_locale_from_accept_language_header enabled" do
context "accept-language header differs from default locale" do
before do
SiteSetting.stubs(:allow_user_locale).returns(true)
SiteSetting.stubs(:set_locale_from_accept_language_header).returns(true)
SiteSetting.stubs(:default_locale).returns("en")
set_accept_language("fr")
end
@ -178,7 +179,7 @@ describe TopicsController do
context "the preferred locale includes a region" 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")
set_accept_language("zh-CN")