Rota değiştiğinde sayfanın çevirisini dinamik olarak yüklerim. Her rota için onEnter kullanarak yaptım.React-Router ve React-Intl: Çevirinin rotasını dinamik olarak yüklemek için daha iyi bir yol var mı?
Bunu uygulamak için daha iyi bir yolu var mı? Her rota için geri arama fonksiyonunu kullanmaktan kaçınabilir miyim?
var Root = React.createClass({
baseTranslations : {},
getInitialState: function(){
return {
lang: 'it',
translations: null,
};
},
componentWillMount: function() {
// load the common translation for all routes
this.setState({
lang: this.getLocale().lang
});
this.loadTranslation("base");
},
onChangeRoute: function(nextState, replace){
// load the specific route's translation
this.loadTranslation(nextState.location.pathname);
},
getLocale: function(what){
// return lang and user region (ex: it-IT)
},
loadTranslation: function(route){
var lcl = route;
var mapping = {
'/' : 'home',
'auth' : 'dashboard'
};
if(route in mapping){
lcl = mapping[route];
}
$.ajax({
url: './locales/' + this.state.lang +'/' + lcl + '.json',
dataType: "text",
}).done(function(res) {
if(lcl === "base"){
this.baseTranslations = JSON.parse(res);
}
this.setState({
translations: $.extend(true, this.baseTranslations, JSON.parse(res))
});
}.bind(this));
},
render: function() {
var children;
if (this.state.translations) {
children = (
<IntlProvider locale={this.state.lang} messages={this.state.translations}>
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Home}/>
<Route path="signup" onEnter={this.onChangeRoute} getComponents={(location, cb) => {
require.ensure([], (require) => {
cb(null, require('./components/Signup.jsx'))
}, "Signup")
}} />
<Route path="*" component={NoMatch}/>
</Route>
</Router>
</IntlProvider>
);
}
return <div>{children}</div>;
}
});
ReactDOM.render(
<Root/>,
document.getElementById('rct-cont')
);
Uygulamanızın durumunu nasıl yönetirsiniz? Bir seçenek, devlet yönetim çözümünüze zorlamak ve talep üzerine i18n'yi sorgulamak olabilir. –
@bebraw Flux ile yönetmeye çalışıyorum – Webman
Çevirilerinizi nasıl yapılandırdınız? Kodlara göre rota başına olduğu görülüyor. Çevirmek için fazla bir şey yoksa, belki de tüm i18n verilerini bir sorguya yükleyebilirsiniz. Mevcut çözümünüzü temizlemek istiyorsanız, i18n durumunu bir Flux deposuna aktarmayı düşünebilirsiniz. –