From cdce25374ff1464296aa3e91d69740d51a9ba99e Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem <svbergerem@omgsrsly.net> Date: Sat, 12 Nov 2016 22:49:07 +0100 Subject: [PATCH] Reduce i18n.load side effects closes #7184 --- Changelog.md | 1 + app/assets/javascripts/helpers/i18n.js | 2 +- spec/javascripts/helpers/i18n_spec.js | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index e35adc2cc4..d5df0dfd4b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,7 @@ ## Refactor * Use string-direction gem for rtl detection [#7181](https://github.com/diaspora/diaspora/pull/7181) +* Reduce i18n.load side effects [#7184](https://github.com/diaspora/diaspora/pull/7184) ## Bug fixes * Fix fetching comments after fetching likes [#7167](https://github.com/diaspora/diaspora/pull/7167) diff --git a/app/assets/javascripts/helpers/i18n.js b/app/assets/javascripts/helpers/i18n.js index 42bd7a8864..e6db0f2e18 100644 --- a/app/assets/javascripts/helpers/i18n.js +++ b/app/assets/javascripts/helpers/i18n.js @@ -18,7 +18,7 @@ Diaspora.I18n = { }, updateLocale: function(locale, data) { - locale.data = $.extend(locale.data, data); + locale.data = $.extend({}, locale.data, data); var rule = locale.data.pluralization_rule; if (typeof rule !== "undefined") { diff --git a/spec/javascripts/helpers/i18n_spec.js b/spec/javascripts/helpers/i18n_spec.js index 79dfabe27f..0190a454f3 100644 --- a/spec/javascripts/helpers/i18n_spec.js +++ b/spec/javascripts/helpers/i18n_spec.js @@ -45,6 +45,28 @@ describe("Diaspora.I18n", function() { expect(Diaspora.I18n.locale.data).toEqual(extended); }); + + it("overrides existing translations", function() { + var oldLocale = {name: "Bob"}; + var newLocale = {name: "Alice"}; + Diaspora.I18n.load(oldLocale, "en"); + expect(Diaspora.I18n.locale.data.name).toBe("Bob"); + Diaspora.I18n.load(newLocale, "en"); + expect(Diaspora.I18n.locale.data.name).toBe("Alice"); + + Diaspora.I18n.reset(oldLocale); + expect(Diaspora.I18n.locale.data.name).toBe("Bob"); + Diaspora.I18n.load(newLocale, "en"); + expect(Diaspora.I18n.locale.data.name).toBe("Alice"); + }); + + it("doesn't change locale objects given in ealier calls", function() { + var oldLocale = {name: "Bob"}; + var newLocale = {name: "Alice"}; + Diaspora.I18n.reset(oldLocale); + Diaspora.I18n.load(newLocale, "en"); + expect(oldLocale.name).toBe("Bob"); + }); }); describe("::t", function() { -- GitLab