2 votes

Spring MVC RequestMapping avec des parties de chemin i18n

Quelles sont les approches pour cartographier les chemins d'url traduits en i18n ?

Par exemple, disons que nous parlons de l'url suivante (pour la locale en) :

www.foo.tld/car/manufacturer

En allemand (de), cette adresse serait la suivante

www.foo.tld/auto/hersteller

Ce que je sais sur le RequestMapping du contrôleur, c'est que je pourrais utiliser plusieurs valeurs pour mapper ces url pour une méthode, comme par exemple

@GetMapping(value={"/car/manufacturer/", "/auto/hersteller/"})

Pour optimiser le référencement, il faudrait probablement quelque chose qui contienne la locale actuelle dans le chemin d'accès, par exemple

@GetMapping(value={"/en/car/manufacturer/", "/de/auto/hersteller/"})

...mais je ne veux pas commencer une discussion sur ce qui serait la meilleure uri du point de vue du référencement.

Ce n'est pas si grave si l'on n'utilise que quelques langues/locales, mais j'aimerais que cela soit dynamique. Actuellement, j'utilise messages_xx.properties pour mapper des parties de chemin d'url pour générer des urls dans mon application, comme par exemple :

messages.properties

uri.car=car
uri.manufacturer=manufacturer

messages_de.properties

uri.car=auto
uri.manufacturer=hersteller

Je les utilise déjà pour créer des liens en respectant la langue de l'utilisateur, ce qui fonctionne très bien.

Ce que je cherche maintenant, c'est une façon élégante et moins coûteuse en erreurs de mapper ces urls dans mon contrôleur. Si je change par exemple une valeur pour la clé uri.car et que j'ai un RequestMapping statique dans mon contrôleur comme dans l'exemple ci-dessus, je dois aussi le changer à cet endroit (si je n'oublie pas !). De même, si je souhaite ajouter la prise en charge d'une autre langue, je dois rechercher dans tous les contrôleurs et vérifier si j'ai besoin d'ajouter un autre mappage de valeur.

Existe-t-il une manière plus intelligente de mapper les parties de chemin i18n dans les contrôleurs Spring, idéalement en respectant la locale de la requête et en résolvant la chaîne de chemin à l'aide de messages_xx.properties ? Ou bien un filtre serait-il la meilleure solution pour extraire les parties du chemin en fonction de la locale demandée et n'utiliser en interne qu'une seule langue pour le mappage des urls ?

0voto

Antonio314 Points 33

Supposons que vous ayez un EN message.properties et un DE message.properties avec la propriété suivante :

url.car=/car/manufacturer/ dans le FR

url.car=/auto/hersteller/ dans le DE

Dans votre @Controller, vous pouvez facilement obtenir ces propriétés en configurant votre messageSource et en l'utilisant pour obtenir les propriétés :

Injectez votre MessageSource configuré pour permettre à Spring de résoudre les messages :

 @Autowired
 private MessageSource messageSource;

Vous pouvez ensuite obtenir toutes les propriétés de votre message.properties fichier :

String url= messageSource.getMessage("url.car", put_here_your_locale);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X