display_settings: Fix real-time sync of default language.

We apparently weren't sending to the frontend the data needed to
update the display of the current language.
This commit is contained in:
Tim Abbott
2018-03-04 18:46:07 -08:00
parent c9724fe284
commit 9acf30b3d3
5 changed files with 22 additions and 5 deletions

View File

@@ -396,6 +396,7 @@ var event_fixtures = {
type: 'update_display_settings', type: 'update_display_settings',
setting_name: 'default_language', setting_name: 'default_language',
setting: 'fr', setting: 'fr',
language_name: 'French',
}, },
update_display_settings__left_side_userlist: { update_display_settings__left_side_userlist: {

View File

@@ -293,6 +293,10 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) {
if (_.contains(user_display_settings, event.setting_name)) { if (_.contains(user_display_settings, event.setting_name)) {
page_params[event.setting_name] = event.setting; page_params[event.setting_name] = event.setting;
} }
if (event.setting_name === 'default_language') {
// We additionally need to set the language name.
page_params.default_language_name = event.language_name;
}
if (event.setting_name === 'twenty_four_hour_time') { if (event.setting_name === 'twenty_four_hour_time') {
// Rerender the whole message list UI // Rerender the whole message list UI
home_msg_list.rerender(); home_msg_list.rerender();

View File

@@ -149,10 +149,7 @@ exports.report_emojiset_change = function () {
function _update_page() { function _update_page() {
$("#twenty_four_hour_time").prop('checked', page_params.twenty_four_hour_time); $("#twenty_four_hour_time").prop('checked', page_params.twenty_four_hour_time);
$("#left_side_userlist").prop('checked', page_params.left_side_userlist); $("#left_side_userlist").prop('checked', page_params.left_side_userlist);
// TODO: We destroy the pencil when doing this, and also there's a // TODO: We destroy the pencil when doing this
// problematic mismatch in field name between the event and the
// page_params default structure; page_params.default_language
// vs. page_params.default_language_name.
$("#default_language_name").text(page_params.default_language_name); $("#default_language_name").text(page_params.default_language_name);
$("#translate_emoticons").prop('checked', page_params.translate_emoticons); $("#translate_emoticons").prop('checked', page_params.translate_emoticons);
$("#night_mode").prop('checked', page_params.night_mode); $("#night_mode").prop('checked', page_params.night_mode);

View File

@@ -107,6 +107,7 @@ from zerver.lib.cache import cache_with_key, cache_set, \
from zerver.decorator import statsd_increment from zerver.decorator import statsd_increment
from zerver.lib.utils import log_statsd_event, statsd from zerver.lib.utils import log_statsd_event, statsd
from zerver.lib.html_diff import highlight_html_differences from zerver.lib.html_diff import highlight_html_differences
from zerver.lib.i18n import get_language_name
from zerver.lib.alert_words import user_alert_words, add_user_alert_words, \ from zerver.lib.alert_words import user_alert_words, add_user_alert_words, \
remove_user_alert_words, set_user_alert_words remove_user_alert_words, set_user_alert_words
from zerver.lib.notifications import clear_scheduled_emails, \ from zerver.lib.notifications import clear_scheduled_emails, \
@@ -2977,6 +2978,10 @@ def do_set_user_display_setting(user_profile: UserProfile,
'user': user_profile.email, 'user': user_profile.email,
'setting_name': setting_name, 'setting_name': setting_name,
'setting': setting_value} 'setting': setting_value}
if setting_name == "default_language":
assert isinstance(setting_value, str)
event['language_name'] = get_language_name(setting_value)
send_event(event, [user_profile.id]) send_event(event, [user_profile.id])
# Updates to the timezone display setting are sent to all users # Updates to the timezone display setting are sent to all users

View File

@@ -1435,6 +1435,16 @@ class EventsRegisterTest(ZulipTestCase):
('user', check_string), ('user', check_string),
('setting', validator), ('setting', validator),
]) ])
language_schema_checker = self.check_events_dict([
('type', equals('update_display_settings')),
('language_name', check_string),
('setting_name', equals(setting_name)),
('user', check_string),
('setting', validator),
])
if setting_name == "default_language":
error = language_schema_checker('events[0]', events[0])
else:
error = schema_checker('events[0]', events[0]) error = schema_checker('events[0]', events[0])
self.assert_on_error(error) self.assert_on_error(error)