diff --git a/docs/views.markdown b/docs/views.markdown index c1ade73a..d29220e5 100644 --- a/docs/views.markdown +++ b/docs/views.markdown @@ -135,15 +135,12 @@ When using section-tags in existing templates be sure to remove a bracket from v ``` -Then to setup Backbone and Mustache to use translation you have to extend some objects: +Then setup Mustache to use translation by injecting tranlation tags in `render` function: ```javascript // ============== BEFORE =================== my.MultiView = Backbone.View.extend({ - initialize: function(options) { - ...: - }, render: function() { var tmplData = this.model.toTemplateJSON(); var output = Mustache.render(this.template, tmplData); @@ -151,32 +148,37 @@ my.MultiView = Backbone.View.extend({ } }); -var multiView = new recline.View.MultiView({ - model: dataset -}); - // ============== AFTER ==================== -my.MultiView = Backbone.I18nView.extend({ // extend I18n view - initialize: function(options) { - this.initializeI18n(options.locale); - ...: - }, +my.MultiView = Backbone.View.extend({ render: function() { var tmplData = this.model.toTemplateJSON(); - tmplData = _.extend(tmplData, this.MustacheFormatter()); // inject Moustache formatter + tmplData = I18nMessages('recline', recline.View.translations).injectMustache(tmplData); // inject Moustache formatter var output = Mustache.render(this.template, tmplData); ... } }); - -var multiView = new recline.View.MultiView({ - model: dataset, - locale: 'pl' // set Locale used -}); - ``` - + +### Language resolution + +By default the language is detected from the root `lang` attributes - ` and ``. + +If you want to override this functionality then override `I18nMessages.languageResolver` with your implementation. + +```html + + +``` + +Libraries can also ask for specific language: `I18nMessages('recline', recline.View.translations, 'pl')`. Language resolver is not used in that case. + +If you're creating templates using default language other than English (why?) set appropriately appHardcodedLocale: `I18nMessages('recline', recline.View.translations, undefined, 'pl')`. Then missing strings won't be reported in console and underscores in simple translations will be converted to spaces. ### Adding new language diff --git a/test/view.i18n.test.js b/test/view.i18n.test.js index 9150466f..3d16c1fc 100644 --- a/test/view.i18n.test.js +++ b/test/view.i18n.test.js @@ -102,13 +102,24 @@ test('I18nMessages default locale', function () { equal(fmt.getLocale(), 'en'); }); -test('I18nMessages default locale custom resolver', function () { +test('I18nMessages custom language resolver', function () { var localeResolver = function() { return 'fr'; }; var fmt = I18nMessages('somelib', {}, localeResolver); equal(fmt.getLocale(), 'fr'); }); +test('I18nMessages override language resolver', function () { + var oldResolver = I18nMessages.languageResolver; + I18nMessages.languageResolver = function() { + return 'fr'; + }; + var fmt = I18nMessages('somelib', {}); + + equal(fmt.getLocale(), 'fr'); + I18nMessages.languageResolver = oldResolver; +}); + test('I18nMessages singletons', function () { var lib1_pl = I18nMessages('lib1', {}, 'pl'); var lib2_pl = I18nMessages('lib2', {}, 'pl'); diff --git a/vendor/common-intl-wmustache.js b/vendor/common-intl-wmustache.js index 5add2899..3c661a39 100644 --- a/vendor/common-intl-wmustache.js +++ b/vendor/common-intl-wmustache.js @@ -9,13 +9,8 @@ var I18nMessages = function(libraryID, translations, languageResolverOrLocale, a return new I18nMessages(libraryID, translations, languageResolverOrLocale, appHardcodedLocale); } - var defaultResolver = function() { - var h = $('html'); - return h.attr('lang') || h.attr('xml:lang'); - }; - // which locale should we use? - languageResolverOrLocale = (typeof languageResolverOrLocale !== 'undefined') ? languageResolverOrLocale : defaultResolver; + languageResolverOrLocale = (typeof languageResolverOrLocale !== 'undefined') ? languageResolverOrLocale : I18nMessages.languageResolver; appHardcodedLocale = appHardcodedLocale || 'en'; if (typeof(languageResolverOrLocale) === 'function') { @@ -117,4 +112,9 @@ var I18nMessages = function(libraryID, translations, languageResolverOrLocale, a this.injectMustache = function(tmplData) { return _.extend(tmplData, self.mustacheI18Tags()); } +}; + +I18nMessages.languageResolver = function() { + var h = $('html'); + return h.attr('lang') || h.attr('xml:lang'); }; \ No newline at end of file