0

Meine Winkel App benötigt Währungen in verschiedenen Formaten zum Beispiel anzuzeigen: $, , 2.105,10€ - Euro-Zeichen nach + verschiedenen Separatoren - die durch die Einbeziehung der i18n erreicht werden können angular-locale_de-de.js Variante.Mehrere AngularJS Währungsformate, mit i18n (Euro, DE)

Das Problem ist, ich muss das Format basierend auf dem Gebietsschema JSON-Wert anzuzeigen, die passiert, sobald die App initialisiert hat, so dass die Währung die Standardeinstellung bleibt, unabhängig davon, was der JSON sagt und es scheint kein Weg um die Währung anzuzeigen als - $12,000 + die i18n docs sagen, dass Sie nur ein Gebietsschema verwenden können.

Eine gängige Praxis ist die Verwendung angular-locale- + $localevar +.js in der Indexdatei, wieder meine App nicht über das Gebietsschema bis zur Ajax-Antwort und verwendet grunt, um die App zu bauen. Wie gehe ich dieses Problem an?

Alle alternativen Bibliotheken, die ich verwenden könnte? wirklich frustriert mit wie schwierig eckig macht es mit mehreren Formaten zu behandeln.

Hier ist eine Geige http://jsfiddle.net/awsd2s5r/

Antwort

1

Wenn Sie nur ein paar Gegenden behandeln und nicht den Aufwand etwas dagegen, nur jede locale-Datei enthalten benötigt und verwenden Sie das Plugin angular-dynamic-locale die Sprache neu zu laden, sobald Sie die Ajax-Antwort erhalten, indem Sie so etwas wie:

tmhDynamicLocale.set(ajax_reply.locale) 

Wenn Sie wirklich über die Leistung kümmern, könnten Sie zusätzlich benötigte locales on the fly laden ein Filter wie diese verwenden:

(function() { 
    'use strict'; 

    angular.module('app.filter').filter('loadScript', [ '$q', function($q) { 
     var loaded = []; 
     return function get(link) { 
      if (loaded.indexOf(link) !== -1) 
       return {}; 
      loaded.push(link); 

      var deferred = $q.defer(); 

      var s = document.createElement('script'); 
      s.type = 'text/javascript'; 
      s.src = link; 
      s.async = true; 
      s.onreadystatechange = s.onload = function() { 
       var state = s.readyState; 
       if (!state) 
        deferred.resolve(); 
       else 
        deferred.reject(); 
      }; 

      document.body.appendChild(s); 

      return deferred.promise; 
     }; 
    }]); 

})(); 
+0

Absolute Legende, vielen Dank für das Plugin! : D – SinSync

+0

Das einzige Problem mit allen Locales in einer Datei ist, dass nur das letzte Gebietsschema geladen wird und nicht dynamisch von dieser Datei geändert werden kann. Das Laden einer neuen Datei funktioniert. Wie auch immer, um sie in eine Datei zu laden? – SinSync

+0

Platziere nicht alle Locales in einer Datei, lade einfach jedes Locale, das du brauchst: siehe das Beispiel im Repo: http://lgalfaso.github.io/angular-dynamic-locale/app.js –