#459 languageResolver, docs updated
This commit is contained in:
@@ -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
|
```javascript
|
||||||
// ============== BEFORE ===================
|
// ============== BEFORE ===================
|
||||||
|
|
||||||
my.MultiView = Backbone.View.extend({
|
my.MultiView = Backbone.View.extend({
|
||||||
initialize: function(options) {
|
|
||||||
...:
|
|
||||||
},
|
|
||||||
render: function() {
|
render: function() {
|
||||||
var tmplData = this.model.toTemplateJSON();
|
var tmplData = this.model.toTemplateJSON();
|
||||||
var output = Mustache.render(this.template, tmplData);
|
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 ====================
|
// ============== AFTER ====================
|
||||||
|
|
||||||
my.MultiView = Backbone.I18nView.extend({ // extend I18n view
|
my.MultiView = Backbone.View.extend({
|
||||||
initialize: function(options) {
|
|
||||||
this.initializeI18n(options.locale);
|
|
||||||
...:
|
|
||||||
},
|
|
||||||
render: function() {
|
render: function() {
|
||||||
var tmplData = this.model.toTemplateJSON();
|
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 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 - <html lang="xx">` and `<html xml:lang="xx">`.
|
||||||
|
|
||||||
|
If you want to override this functionality then override `I18nMessages.languageResolver` with your implementation.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="text/javascript" src="common-intl-wmustache.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
I18nMessages.languageResolver = function() {
|
||||||
|
// implement here your language resolution
|
||||||
|
return 'fr';
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
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
|
### Adding new language
|
||||||
|
|
||||||
|
|||||||
@@ -102,13 +102,24 @@ test('I18nMessages default locale', function () {
|
|||||||
equal(fmt.getLocale(), 'en');
|
equal(fmt.getLocale(), 'en');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('I18nMessages default locale custom resolver', function () {
|
test('I18nMessages custom language resolver', function () {
|
||||||
var localeResolver = function() { return 'fr'; };
|
var localeResolver = function() { return 'fr'; };
|
||||||
var fmt = I18nMessages('somelib', {}, localeResolver);
|
var fmt = I18nMessages('somelib', {}, localeResolver);
|
||||||
|
|
||||||
equal(fmt.getLocale(), 'fr');
|
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 () {
|
test('I18nMessages singletons', function () {
|
||||||
var lib1_pl = I18nMessages('lib1', {}, 'pl');
|
var lib1_pl = I18nMessages('lib1', {}, 'pl');
|
||||||
var lib2_pl = I18nMessages('lib2', {}, 'pl');
|
var lib2_pl = I18nMessages('lib2', {}, 'pl');
|
||||||
|
|||||||
12
vendor/common-intl-wmustache.js
vendored
12
vendor/common-intl-wmustache.js
vendored
@@ -9,13 +9,8 @@ var I18nMessages = function(libraryID, translations, languageResolverOrLocale, a
|
|||||||
return new I18nMessages(libraryID, translations, languageResolverOrLocale, appHardcodedLocale);
|
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?
|
// which locale should we use?
|
||||||
languageResolverOrLocale = (typeof languageResolverOrLocale !== 'undefined') ? languageResolverOrLocale : defaultResolver;
|
languageResolverOrLocale = (typeof languageResolverOrLocale !== 'undefined') ? languageResolverOrLocale : I18nMessages.languageResolver;
|
||||||
appHardcodedLocale = appHardcodedLocale || 'en';
|
appHardcodedLocale = appHardcodedLocale || 'en';
|
||||||
|
|
||||||
if (typeof(languageResolverOrLocale) === 'function') {
|
if (typeof(languageResolverOrLocale) === 'function') {
|
||||||
@@ -118,3 +113,8 @@ var I18nMessages = function(libraryID, translations, languageResolverOrLocale, a
|
|||||||
return _.extend(tmplData, self.mustacheI18Tags());
|
return _.extend(tmplData, self.mustacheI18Tags());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
I18nMessages.languageResolver = function() {
|
||||||
|
var h = $('html');
|
||||||
|
return h.attr('lang') || h.attr('xml:lang');
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user