Uygulamamda aşağıdaki kodu içeren bir i18n hizmetim var:
var i18nService = function() {
this.ensureLocaleIsLoaded = function() {
if( !this.existingPromise ) {
this.existingPromise = $q.defer();
var deferred = this.existingPromise;
var userLanguage = $( "body" ).data( "language" );
this.userLanguage = userLanguage;
console.log( "Loading locale '" + userLanguage + "' from server..." );
$http( { method:"get", url:"/i18n/" + userLanguage, cache:true } ).success( function( translations ) {
$rootScope.i18n = translations;
deferred.resolve( $rootScope.i18n );
} );
}
if( $rootScope.i18n ) {
this.existingPromise.resolve( $rootScope.i18n );
}
return this.existingPromise.promise;
};
Buradaki fikir, kullanıcının arayıp ensureLocaleIsLoaded
sözün çözülmesini beklemesidir. Ancak, işlevin amacının yalnızca yerel ayarın yüklenmesini sağlamak olduğu düşünüldüğünde, kullanıcının onu birkaç kez çağırması mükemmel olacaktır.
Şu anda sadece tek bir söz depoluyorum ve yerel ayar sunucudan başarıyla alındıktan sonra kullanıcı işlevi tekrar çağırırsa çözüyorum.
Anladığım kadarıyla, bu amaçlandığı gibi çalışıyor, ancak bunun uygun bir yaklaşım olup olmadığını merak ediyorum.