2014-08-29 14 views
15

Io uso angular-translate nella mia app. Come posso registrare una lingua di fallback se lo determinePreferredLanguage() restituisce una chiave lingua che il mio codice non conosce?angular-translate - Lingua di fallback per definePreferredLanguage()

Voglio tornare in inglese se qualcuno da ad es. La Svezia visita il mio sito (codice lingua: sv). Ma dal momento che non ho elencato sv nella mia funzione registerAvailableLanguageKeys, fallisce, e le chiavi di lingua sono mostrate all'utente invece della traduzione.

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

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

+0

@Philipp fallbackLanguage() risolve un altro problema. Se una tabella di traduzione non ha una chiave specifica, verrà utilizzata la traduzione dalla lingua di fallback. Il mio problema è che voglio avere un fallback se un utente con una localizzazione sconosciuta visita il mio sito, la lingua inglese dovrebbe essere selezionata come lingua preferita. – swenedo

+0

Ciao @swenedo, accetteresti la mia risposta? dopo 2 anni, credo che fosse quello giusto. –

risposta

17

Utilizzando i caratteri jolly è la soluzione migliore, si può solo impostare it_ * come segue:

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

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

    .determinePreferredLanguage() 

    .fallbackLanguage('en'); 

per i file:

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

Fantastico! Ho anche un carattere jolly '*' per tornare a 'en' – Rbjz

1

È possibile utilizzare $translateProvider.fallbackLanguage(['en-us']) per determinare la lingua di ripiego, e $translateProvider.preferredLanguage(langKey) per impostare la lingua preferita.

Si noti inoltre che fallbackLanguage() può avere un array di lingue come parametro, il che significa che è possibile avere più lingue di fallback ordinate.

5

Hey Ho avuto un problema simile al tuo, il modo in cui ho risolto è stato:

ho aggiunto questo al mio app.config

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

    .registerAvailableLanguageKeys(['en']) 

    .determinePreferredLanguage() 

    .fallbackLanguage('en'); 

e questo al mio app.run:

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

in questo modo se il browser rileva una lingua come fr_BE proverà a tornare a fr e quindi ancora una volta en, nel tuo caso vorrai sv. Anche avere registerAvailableLanguageKeys sembra fermare il definePreferredLanguage() causando un errore con il problema del file inesistente. Spero che questo aiuti qualcuno.

+3

L'ordine di .determinePreferredLanguage() e .fallbackLanguage ('en') è essenziale. Li ho fatti al contrario e non ha funzionato. – JNissi