diff --git a/Changelog.md b/Changelog.md index e35adc2cc4396e35fbe8d19de609fa17234f5dd5..d5df0dfd4bd7abfe3cea7aaf1e72629ee1e2fe52 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 42bd7a8864a747700a1409da679786f0b815b746..e6db0f2e1826e53629bf29248fd68107b79b8c39 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 79dfabe27f1546b6c537fbc494403cb71ed52ab6..0190a454f3ac5cf720dbc0941540f3bc1f6062e6 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() {