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 ?