mirror of
https://github.com/discourse/discourse.git
synced 2025-03-06 11:19:51 +00:00
Allow users to toggle interface language in their preferences
This commit is contained in:
parent
1a8ebb710e
commit
c513725f26
@ -30,6 +30,12 @@ Discourse.PreferencesController = Discourse.ObjectController.extend({
|
|||||||
return Discourse.SiteSettings.enable_names;
|
return Discourse.SiteSettings.enable_names;
|
||||||
}.property(),
|
}.property(),
|
||||||
|
|
||||||
|
availableLocales: function() {
|
||||||
|
return Discourse.SiteSettings.available_locales.split('|').map( function(s) {
|
||||||
|
return {name: s, value: s};
|
||||||
|
});
|
||||||
|
}.property(),
|
||||||
|
|
||||||
digestFrequencies: [{ name: I18n.t('user.email_digests.daily'), value: 1 },
|
digestFrequencies: [{ name: I18n.t('user.email_digests.daily'), value: 1 },
|
||||||
{ name: I18n.t('user.email_digests.weekly'), value: 7 },
|
{ name: I18n.t('user.email_digests.weekly'), value: 7 },
|
||||||
{ name: I18n.t('user.email_digests.bi_weekly'), value: 14 }],
|
{ name: I18n.t('user.email_digests.bi_weekly'), value: 14 }],
|
||||||
|
@ -170,6 +170,7 @@ Discourse.User = Discourse.Model.extend({
|
|||||||
'bio_raw',
|
'bio_raw',
|
||||||
'website',
|
'website',
|
||||||
'name',
|
'name',
|
||||||
|
'locale',
|
||||||
'email_digests',
|
'email_digests',
|
||||||
'email_direct',
|
'email_direct',
|
||||||
'email_always',
|
'email_always',
|
||||||
|
@ -66,6 +66,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">{{i18n user.locale.title}}</label>
|
||||||
|
<div class="controls">
|
||||||
|
{{combobox valueAttribute="value" content=availableLocales value=locale none="user.locale.default"}}
|
||||||
|
</div>
|
||||||
|
<div class='instructions'>
|
||||||
|
{{i18n user.locale.instructions}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label">{{i18n user.bio}}</label>
|
<label class="control-label">{{i18n user.bio}}</label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
@ -109,7 +109,11 @@ class ApplicationController < ActionController::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_locale
|
def set_locale
|
||||||
I18n.locale = SiteSetting.default_locale
|
I18n.locale = if current_user && current_user.locale.present?
|
||||||
|
current_user.locale
|
||||||
|
else
|
||||||
|
SiteSetting.default_locale
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def store_preloaded(key, json)
|
def store_preloaded(key, json)
|
||||||
|
@ -23,6 +23,11 @@ class SiteSetting < ActiveRecord::Base
|
|||||||
load_settings(file)
|
load_settings(file)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
SiteSettingExtension.class_variable_get(:@@client_settings) << :available_locales
|
||||||
|
|
||||||
|
def self.available_locales
|
||||||
|
LocaleSiteSetting.values.map{ |e| e[:value] }.join('|')
|
||||||
|
end
|
||||||
|
|
||||||
def self.call_discourse_hub?
|
def self.call_discourse_hub?
|
||||||
self.enforce_global_nicknames? && self.discourse_org_access_key.present?
|
self.enforce_global_nicknames? && self.discourse_org_access_key.present?
|
||||||
|
@ -47,6 +47,7 @@ class UserSerializer < BasicUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
private_attributes :email,
|
private_attributes :email,
|
||||||
|
:locale,
|
||||||
:email_digests,
|
:email_digests,
|
||||||
:email_private_messages,
|
:email_private_messages,
|
||||||
:email_direct,
|
:email_direct,
|
||||||
|
@ -27,6 +27,7 @@ class UserUpdater
|
|||||||
|
|
||||||
user.bio_raw = attributes.fetch(:bio_raw) { user.bio_raw }
|
user.bio_raw = attributes.fetch(:bio_raw) { user.bio_raw }
|
||||||
user.name = attributes.fetch(:name) { user.name }
|
user.name = attributes.fetch(:name) { user.name }
|
||||||
|
user.locale = attributes.fetch(:locale) { user.locale }
|
||||||
user.digest_after_days = attributes.fetch(:digest_after_days) { user.digest_after_days }
|
user.digest_after_days = attributes.fetch(:digest_after_days) { user.digest_after_days }
|
||||||
|
|
||||||
if attributes[:auto_track_topics_after_msecs]
|
if attributes[:auto_track_topics_after_msecs]
|
||||||
|
@ -325,6 +325,11 @@ en:
|
|||||||
enter_email: 'Username found. Enter matching email.'
|
enter_email: 'Username found. Enter matching email.'
|
||||||
prefilled: "Email matches this registered username."
|
prefilled: "Email matches this registered username."
|
||||||
|
|
||||||
|
locale:
|
||||||
|
title: "Interface language"
|
||||||
|
instructions: "The language used by the forum interface. It will change when you refresh the page."
|
||||||
|
default: "(default)"
|
||||||
|
|
||||||
password_confirmation:
|
password_confirmation:
|
||||||
title: "Password Again"
|
title: "Password Again"
|
||||||
|
|
||||||
|
@ -299,6 +299,11 @@ fr:
|
|||||||
enter_email: 'Pseudo trouvé. Entrez l''adresse email correspondante.'
|
enter_email: 'Pseudo trouvé. Entrez l''adresse email correspondante.'
|
||||||
prefilled: "L'adresse email correspond à ce pseudo enregistré."
|
prefilled: "L'adresse email correspond à ce pseudo enregistré."
|
||||||
|
|
||||||
|
locale:
|
||||||
|
title: "Langue de l'interface"
|
||||||
|
instructions: "La langue utilisée dans l'interface du forum. Le changement se fait lorsque vous rechargez la page."
|
||||||
|
default: "(par défaut)"
|
||||||
|
|
||||||
password_confirmation:
|
password_confirmation:
|
||||||
title: "Confirmation"
|
title: "Confirmation"
|
||||||
|
|
||||||
|
5
db/migrate/20140206044818_add_locale_to_user.rb
Normal file
5
db/migrate/20140206044818_add_locale_to_user.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class AddLocaleToUser < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :users, :locale, :string, limit: 10
|
||||||
|
end
|
||||||
|
end
|
@ -44,6 +44,19 @@ describe TopicsController do
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'set_locale' do
|
||||||
|
it 'sets the one the user prefers' do
|
||||||
|
SiteSetting.stubs(:allow_user_locale).returns(true)
|
||||||
|
|
||||||
|
user = Fabricate(:user, locale: :fr)
|
||||||
|
log_in_user(user)
|
||||||
|
|
||||||
|
get :show, {topic_id: topic.id}
|
||||||
|
|
||||||
|
I18n.locale.should == :fr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'api' do
|
describe 'api' do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user