/*jshint multistr:true */ // todo probably some kind of mixin would be better //usage: (zamienic na extension) // my.View - Backbone.View.extend({}); //_.extend(my.View, Backbone.I18nView); Backbone.I18nView = Backbone.View.extend({ locale: 'en', initializeI18n: function(locale) { this.locale = locale; // TODO implement cache //memoizeFormatConstructor(Intl.NumberFormat).getNumberFormat(); }, formatMessage(key, values) { this.cachedMsg.format(key, values); }, // TODO how to use it from outside? an singleton instance of I18n? use case: pass translated strings into view initializer t: function(key, values = {}, defaultMessage = null) { // get the message from current locale var msg = recline.View.translations[this.locale][key]; // fallback to key or default message if no translation is defined if (msg == null) { console.warn("Missing locale for " + this.locale + "." + key); // TODO when dfault set and it's default locale then be quiet msg = defaultMessage; } if (msg == null) { msg = key; } // TODO i18n documentation try { var mf = new IntlMessageFormat(msg, 'pl'); var formatted = mf.format(values); return formatted; } catch (e) { console.error("Got error while formatting \"" + msg + "\": " + e.message); // todo {{ wywala Message format, trzeba by wyescapować i pwrzywrócic po podmianie return msg; } // TODO document below error (most probable variables ref hasn't ben changed in template) /* 19:10:40.954 SyntaxError: