2014-08-29 4 views
15

Ich benutze angular-translate in meiner App. Wie kann ich eine Fallback-Sprache registrieren, wenn der determinePreferredLanguage() einen Sprachschlüssel zurückgibt, den mein Code nicht kennt?angular-translate - Ausweichsprache für determinePreferredLanguage()

Ich möchte auf Englisch zurückgreifen, wenn jemand aus z. Schweden besucht meine Website (Sprachschlüssel: sv). Aber da ich sv in meiner registerAvailableLanguageKeys Funktion nicht aufgeführt habe, schlägt es fehl und die Sprachschlüssel werden dem Benutzer anstelle der Übersetzung angezeigt.

$translateProvider 
    .registerAvailableLanguageKeys(['da-dk','en-us'], { 
     'en_US': 'en-us', 
     'en_UK': 'en-us', 
     'da': 'da-dk', 
    }) 
    .determinePreferredLanguage(); 
+0

'$ translateProvider.fallbackLanguage ([ 'en-us' ]) '? http://angular-translate.github.io/docs/#/api/pascalprecht.translate.$translateProvider – Philipp

+0

@Philipp fallbackLanguage() löst ein anderes Problem. Wenn eine Übersetzungstabelle keinen bestimmten Schlüssel hat, wird die Übersetzung aus der Fallback-Sprache verwendet. Mein Problem ist, dass ich ein Fallback haben möchte, wenn ein Benutzer mit einem unbekannten Gebietsschema meine Website besucht, sollte die englische Sprache als die bevorzugte Sprache ausgewählt werden. – swenedo

+0

Hi @swenedo, würdest du meine Antwort akzeptieren? nach 2 Jahren glaube ich, dass es die richtige war. –

Antwort

17

Platzhalter verwenden, um die beste Lösung, können Sie einstellen, nur en_ * wie folgt:

$translateProvider.useStaticFilesLoader({ 
     prefix: 'locales/locale-', 
     suffix: '.json' 
    }) 

    .registerAvailableLanguageKeys(['en','fr','pt'], { 
     'en_*': 'en', 
     'fr_*': 'fr', 
     'pt_*': 'pt', 
     '*': 'en' 
    }) 

    .determinePreferredLanguage() 

    .fallbackLanguage('en'); 

für Dateien:

locales/locale-en.json 
locales/locale-fr.json 
locales/locale-pt.json 
+0

Super! Ich habe auch eine '*' Wildcard, um zu 'en' zurückzukehren – Rbjz

1

Sie $translateProvider.fallbackLanguage(['en-us']) können Ihre Ausweichsprache und $translateProvider.preferredLanguage(langKey) setzen Sie Ihre bevorzugte Sprache zu bestimmen.

Beachten Sie auch, dass FallbackLanguage() ein Array von Sprachen als Parameter haben kann, was bedeutet, dass Sie mehrere geordnete Fallback-Sprachen haben können.

5

Hey, ich hatte ein ähnliches Problem bei Ihnen, so wie ich es gelöst war:

Ich habe das meinem app.config

$translateProvider.useStaticFilesLoader({ 
     prefix: 'the/directory/locale-', 
     suffix: '.json' 
    }) 

    .registerAvailableLanguageKeys(['en']) 

    .determinePreferredLanguage() 

    .fallbackLanguage('en'); 

und diese zu meinen app.run:

$rootScope.changeLanguage = function() { 
    if(/[a-z]{2}_[A-Z]{2}/.test($translate.use())) { 
    $translate.fallbackLanguage($translate.use().split('_')[0]); 
    } 
} 

Wenn der Browser eine Sprache wie fr_BE erkennt, wird er versuchen, auf fr und dann wieder auf en zurückzugreifen, in Ihrem Fall möchten Sie sv. Auch mit dem RegisterAvailableLanguageKeys scheint die determinePreferredLanguage() zu stoppen, die einen Fehler mit dem nicht existierenden Dateiproblem verursacht. Ich hoffe, das hilft jemandem.

+3

Die Reihenfolge von .determinePreferredLanguage() und .fallbackLanguage ('en') ist von wesentlicher Bedeutung. Ich hatte sie anders herum und es hat nicht funktioniert. – JNissi