Localiser les URL avec ui-router et angular-translate
Je suis à l'aide de l'interface utilisateur du routeur pour le routage et angular-translate pour la traduction. Ce que je voudrais atteindre est d'avoir la langue sélectionnée se lier à l'url comme ceci:
www.mydomain.com/en/
www.mydomain.com/ru/
www.mydomain.com/en/about
www.mydomain.com/ru/about
et il réagira en conséquence.
Essayé de trouver des exemples, mais n'a pas trouvé quoi que ce soit.
Si quelqu'un mise en œuvre de solution similaire, j'aimerais savoir comment vous avez fait.
Grâce
Vous devez vous connecter pour publier un commentaire.
- Je utiliser quelque chose le long de ces lignes:
CoffeeScript
JavaScript
Avec cela, vous pouvez injecter
$stateParams
dans votre contrôleur, et d'accéder aux paramètres régionaux n':CoffeeScript
JavaScript
Ou, si vous voulez affecter l'ensemble de la page automatiquement, utilisez la
$stateChangeStart
événement dans un contrôleur d'application ou similaires:CoffeeScript
JavaScript
Notez que si vous utilisez angulaires-traduction v1.x, vous devez utiliser
$translate.uses
au lieu de$translate.use
.domain.com
->domain.com/en/
Pour ce faire j'ai besoin de détecter la langue de l'utilisateur, puis ajouter{locale}
paramètres de l'url. Est-il une bonne solution pour elle?La solution n'est valable que si vous voulez avoir des URLs ci-dessous format:
domain.com/{locale}/about
donc:
domain.com/en/about
domain.com/mt/about
Récemment, nous avons été nécessaires pour mettre en œuvre des traductions pour la totalité de l'URL, donc:
domain.com/{locale}/{about}
où
{about}
est traduit dans la langue respective:domain.com/en/about
domain.com/mt/fuqna
Je ne sais pas si l'approche est la meilleure, mais elle fonctionne.
Pour commencer, la première différence est que nous avons mis en place ui-router les états à être généré dynamiquement à l'aide d'un service qui récupère les routes à partir d'un fichier JSON. C'est fait de la même manière à @ChrisT réponse à: Angulaire de l'INTERFACE utilisateur du Routeur - ajouter par les états
Nous consommons ci-dessus
routingService
dans lerun
bloc de l'application:Et enfin la
stateService
simplement analyse le fichier JSON et crée la hiérarchie de routage à l'aide du ChrisT runtimeStates.addState.Je vais essayer d'inclure un travail de démonstration dans un avenir proche.
Crédits vont également à @karl-agius.
$stateChangeStart
événements et de mettre à jour les états de là. Code: Plunker Démo Url: http://run.plnkr.co/Fxo80MbXmuLfdG5c/#/en http://run.plnkr.co/Fxo80MbXmuLfdG5c/#/sv{locale}
J'ai écrit un billet de blog sur le sujet:
http://fadeit.dk/post/angular-translate-ui-router-seo
Pour les personnes qui souhaiteraient inclure l'URL à l'aide de ngRoute (je suis venu ici à googler pour exactement), j'ai mis en œuvre comme suit.
(1) Dans mon
.htaccess
j'ai pris toutes les Url sans langue de sous-domaine et redirigé vers la valeur par défaut (fr dans mon cas). Le seul véritable inconvénient est que je dois spécifier toutes les langues manuellement.(2) Dans mon Angulaire du projet
config
bloc j'ai alors simplement analysé l'URL pour obtenir le langage courant.(3) afin d'obtenir la langue dans mes fichiers HTML j'ai également ajouté à la
$rootScope
.