Hello,
I recently started using Ember and, I thought I started getting a graps on the damn thing and now I am so confused…
Context: I am currently trying to implement multi language on my site, I am implementing intl.
I created a menu to select my locale:
{{view "select"
classNames="ui-language-selector"
content=locales
optionValuePath="content.id"
optionLabelPath="content.text"
value=currentLocale
}}
And my application controller:
export default Ember.Controller.extend({
intl: Ember.inject.service('intl'),
init() {
this.set('currentLocale', this.get('intl.locale')[0]);
},
currentLocale: null,
currentLocaleHasChanged: Ember.observer('currentLocale', function() {
console.log('change');
this.get('intl').setLocale(this.get('currentLocale'));
}),
locales: Ember.computed('intl.locales', function() {
let locales = [];
for(let loc of this.get('intl.locales')) {
locales.push({
id: loc,
text: this.get('intl').t('language.' +loc)
});
}
return locales;
})
});
This works well, when I choose a new locale in my dropdown, the content is translated.
Now I want to do several other things when the locale (intl.locale) changes, hence, I wanted to add observer in that property:
Update my document’s title (with ember-cli-document-title)
title: Ember.observer('intl.locale', function() {
let path = this.controller.get('currentPath');
return this.get('intl').t(path+'.title') +' - '+ this.get('intl').t('site.title');
})
Does not work.
Another component doing stuff whilst changing locale:
export default Ember.Component.extend({
intl: Ember.inject.service('intl'),
localeHasChanged: Ember.oberver('intl.locale', function() {
//Do something
})
});
Does not work.
Am I missing something about observers? Services?
Thanks