Comment fournir une prise en charge multilingue via JSP / servlet? Comment inclure des données statiques de différentes langues au moment de l'exécution sur la base de la langue sélectionnée? P>
3 Réponses :
Il y a plusieurs aspects importants à ce problème. La première partie est la détermination des paramètres régionaux de chaque requête. Vous pouvez utiliser quelque chose comme ceci:
HttpServletRequest req ...; String browserLocale = req.getHeader("Accept-Language"); // typically something like 'en'
servletrequest.getlocale () code> existe pour une raison!
dans une application JSP / servlet "de vanille simple", la meilleure solution est le JSTL FMT TagLib . (Il suffit de tomber Si vous utilisez un cadre MVC tel que Oracle JSF ou Apache Struts, vous devez consulter sa spécificité. Documentation utilisant des mots-clés "Internationalisation" (I18N) ou "Localisation" (L10N). Dans la plupart des cas, ils fournissent également des étiquettes spécifiques pour cela, tels que Ces balises I18N vérifient déjà la langue par défaut / Locale par jstl-1.2.jar code >
dans / web-inf / lib code>) Comment l'utiliser est couvert dans Oracle Java EE 5 Tutoriel Partie II Chapitre 7 et dans cette réponse: Comment internationaliser une application Web Java? .
ServluRequest # GetLocale () code>
(vous n'avez pas besoin de le faire "de faible niveau" en cochant l'en-tête comme suggéré avant --Quchique impliquerait plus de travail pour analyser l'en-tête selon le Spec HTTP ). Vous pouvez laisser l'utilisateur choisir la langue elle-même (liste déroulante?) Et le stocker dans la portée de la session et demander à ces taglibs de l'utiliser. Voici un exemple avec JSTL FMT TagLib: P> <fmt:setLocale value="${someSessionBean.locale}" />
Nous pouvons créer des messages.Properties, des messages _ ?? ??. Propriétés et pour placer ce répertoire SCR / Java. (Où ?? em> ?? - EN_US, RU_RUT et d'autres) Exemple de lignes dans des messages.Properties: Locale locale = Locale.getDefault();
String lng = locale.getCountry();
session.setAttribute( "language", lng);
if (lng.equals( "UA"))
locale = new Locale( "uk", "UA");
else if (lng.equals( "RU"))
locale = new Locale( "ru", "RU");
else
locale = Locale.US;
ResourceBundle boundle = ResourceBundle.getBundle( "messages", locale);
for (Enumeration e = boundle.getKeys(); e.hasMoreElements(); ) {
String key = (String) e.nextElement();
String s = boundle.getString(key);
session.setAttribute( key, s);
}
Ceci est pas b> la façon dont vous utilisez le de ressources code> et
local code> classes! Cela montre un manque fondamental de compréhension du sujet.