2016-10-06 2 views
14

Je suis à la recherche d'un moyen deAngular2 changer de langue d'i18n

  • définir dynamiquement la langue courante à afficher: J'ai suivi le dernier livre de cuisine angulaire here sur l'internationalisation mais il dit "la langue de l'utilisateur est hardcoded en tant que variable globale document.locale dans le index.html "

Comment cela peut-il être réglé dynamiquement en angular2 + tapuscrit?

Voici ma tentative de la Angular2 officielle plunkr: https://plnkr.co/edit/lWV4VhzpWYnCXeDBpzsn?p=preview où je l'ai commenté le

document.locale='en'; 

et a essayé de récupérer le window.document dans un service dactylographiée, et modifier les paramètres régionaux là, mais malgré l'appel et les paramètres régionaux définis correctement (vu dans la console), l'interface n'est pas affichée dans la langue choisie au démarrage. Alors, bien sûr, les boutons déroulants ne fonctionnent pas non plus parce que la même erreur est utilisée et que l'affichage n'est pas rafraîchi, mais c'est l'étape suivante.

+0

En attendant, je l'ai fait une version qui se lit document.URL et jeux le document.locale dans le fichier i18n-providers.ts. Ce n'est certainement pas la bonne façon de procéder, mais en attendant, je peux continuer les choses de traduction https://plnkr.co/edit/TE7raLGC9pvYfaRu6Syg?p=preview (Cet exemple ne fonctionne pas en raison de plunkr, mais fonctionne localement –

Répondre

10

Je sauve la clé de la langue sélectionnée par l'utilisateur dans le stockage local:

//<select name="selectLocate" (change)="onChange($event.target.value)"> 
public onChange(localeId: string): void { 
    localStorage.setItem('localeId', localeId); 
    location.reload(true); 
    } 

forcer ensuite rechargeant, et i18n.provider.ts

let locale = localStorage.getItem('localeId'); 
+1

simple et génial. J'ai changé l'exemple de plunkr et ça marche bien! https://plnkr.co/edit/JyE4l4TjEruuPsrbanmK –

+1

Je n'utilise pas systemsjs. Est-il possible de le configurer en utilisant webpack? –

+0

@sardarCoder Je ne sais pas si vous êtes toujours aux prises avec cela, mais si c'est le cas. Oui vous pouvez: Utilisez simplement le chargeur brut pour charger les fichiers xlf: '{test: /\.xlf/, loader: 'raw-loader'},' – GOB