#459 languageResolver, docs updated

This commit is contained in:
krzysztofmadejski 2016-11-14 14:56:43 +00:00
parent 8f9607e053
commit 8b362bf81c
3 changed files with 41 additions and 28 deletions

View File

@ -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 - <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

View File

@ -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');

View File

@ -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');
};