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