Comment fournir un support multi-langue par le biais de JSP/Servlet? Comment inclure les données statiques de langues différentes au moment de l'exécution sur la base de la langue sélectionnée?
Si vous utilisez un framework MVC, comme Oracle, JSF ou Apache Struts, alors vous devez consulter sa documentation spécifique à l'aide de mots-clés de l'internationalisation (i18n) ou de la "localisation" (l10n). Dans la plupart des cas, ils offre également des balises pour que, comme <f:loadBundle> dans le cas du JSF, qui à son tour est couverte dans Oracle Java EE 5 tutoriel, partie II, chapitre 15.
Ceux i18n balises déjà de vérifier la langue par défaut/locale par ServletRequest#getLocale() (vous n'avez pas besoin de faire de "bas-niveau", par la vérification de l'en-tête comme on a suggéré avant --qui impliquerait plus de travail analyse l'en-tête par le HTTP spec). Vous pouvez permettre à l'utilisateur de choisir la langue elle-même (liste déroulante?) et de le stocker dans la session de la portée et instruire ceux taglibs de l'utiliser. Voici un exemple avec JSTL équipe de la bibliothèque de tags:
<fmt:setLocalevalue="${someSessionBean.locale}"/>
..où ${someSessionBean.locale} pouvez retourner en, en_US, en_UK, etc. Ceux-ci sont à leur tour utilisés par les java.util.ResourceBundle API pour charger le texte localisé (vous n'avez pas besoin de créer/charger la ResourceBundle lui-même, les taglibs déjà le faire, il suffit de lire liés javadoc pour en apprendre un peu plus sur la façon dont il fonctionne).
Si vous voulez que la langue en tant que premier pathinfo partie de l'URL (comme http://example.com/en/, ce qui est mieux pour le RÉFÉRENCEMENT), alors vous pouvez utiliser un Filter pour ce qui est à l'écoute sur /*, vérifie le pathinfo, divise la langue de la partie, magasins/compare/avec la valeur de session et transmet la demande sans langue de la partie dans pathinfo plus à l'avant souhaité contrôleur.
Il y a plusieurs aspects importants de ce problème. La première partie est la détermination de chaque demande locale. Vous pouvez utiliser quelque chose comme ceci:
HttpServletRequest req ...;String browserLocale = req.getHeader("Accept-Language");//typically something like 'en'
Ensuite, vous devez décider de la façon de gérer le site du contenu localisé. La plupart des Java-like (pas nécessairement la meilleure approche est d'externaliser tous les messages à l'aide d'un ResourceBundle. Vous pouvez en apprendre davantage sur le noyau de Java installations pour l'I18N, G13N dans leur Isoler les paramètres Régionaux des Données Spécifiques tutoriel.
En utilisant seulement cette approche est assez pauvre, à mon avis. Les différentes langues de la taille du contenu différemment, correspondent mieux avec différentes mises en page, etc. De sorte que vous pouvez éliminer complètement de regroupements de ressources (si vous n'avez pas beaucoup de multi-paramètres régionaux des données) ou compléter la démarche en utilisant XSLT ou d'autres gabarits des paramètres régionaux spécifiques.
Un très performante, mais de haute-développement frais généraux de l'approche est d'utiliser un filtre de servlet pour rediriger le trafic vers la langue (ou régionaux) des sous-sites spécifiques. Dans ce cas, quelqu'un frapper http://my.domain.fake/xyz serait redirigé vers http://my.domain.fake/en/xyz
Enfin, il est intéressant de noter que la plupart des graves frameworks web ont leur propre support I18N. Leurs approches diffèrent en fonction du cadre de la philosophie.
ServletRequest.getLocale() existe pour une raison!
Nous pouvons créer des messages.propriétés, messages_????.propriétés et de placer ces fichiers dans /scr/java répertoire. (où????? - fr_fr, ru_RU et autres)
Dans un "plain vanilla" JSP/Servlet application, la meilleure solution est le JSTL fmt taglib. (il suffit de déposer
jstl-1.2.jar
dans/WEB-INF/lib
) Comment l'utiliser, il est couvert en Oracle Java EE 5 tutoriel, partie II, chapitre 7 et dans cette réponse: Comment internationaliser une application web Java?.Si vous utilisez un framework MVC, comme Oracle, JSF ou Apache Struts, alors vous devez consulter sa documentation spécifique à l'aide de mots-clés de l'internationalisation (i18n) ou de la "localisation" (l10n). Dans la plupart des cas, ils offre également des balises pour que, comme
<f:loadBundle>
dans le cas du JSF, qui à son tour est couverte dans Oracle Java EE 5 tutoriel, partie II, chapitre 15.Ceux i18n balises déjà de vérifier la langue par défaut/locale par
ServletRequest#getLocale()
(vous n'avez pas besoin de faire de "bas-niveau", par la vérification de l'en-tête comme on a suggéré avant --qui impliquerait plus de travail analyse l'en-tête par le HTTP spec). Vous pouvez permettre à l'utilisateur de choisir la langue elle-même (liste déroulante?) et de le stocker dans la session de la portée et instruire ceux taglibs de l'utiliser. Voici un exemple avec JSTL équipe de la bibliothèque de tags:..où
${someSessionBean.locale}
pouvez retourneren
,en_US
,en_UK
, etc. Ceux-ci sont à leur tour utilisés par lesjava.util.ResourceBundle
API pour charger le texte localisé (vous n'avez pas besoin de créer/charger laResourceBundle
lui-même, les taglibs déjà le faire, il suffit de lire liés javadoc pour en apprendre un peu plus sur la façon dont il fonctionne).Si vous voulez que la langue en tant que premier pathinfo partie de l'URL (comme
http://example.com/en/
, ce qui est mieux pour le RÉFÉRENCEMENT), alors vous pouvez utiliser unFilter
pour ce qui est à l'écoute sur/*
, vérifie le pathinfo, divise la langue de la partie, magasins/compare/avec la valeur de session et transmet la demande sans langue de la partie dans pathinfo plus à l'avant souhaité contrôleur.OriginalL'auteur BalusC
Il y a plusieurs aspects importants de ce problème. La première partie est la détermination de chaque demande locale. Vous pouvez utiliser quelque chose comme ceci:
Ensuite, vous devez décider de la façon de gérer le site du contenu localisé. La plupart des Java-like (pas nécessairement la meilleure approche est d'externaliser tous les messages à l'aide d'un ResourceBundle. Vous pouvez en apprendre davantage sur le noyau de Java installations pour l'I18N, G13N dans leur Isoler les paramètres Régionaux des Données Spécifiques tutoriel.
En utilisant seulement cette approche est assez pauvre, à mon avis. Les différentes langues de la taille du contenu différemment, correspondent mieux avec différentes mises en page, etc. De sorte que vous pouvez éliminer complètement de regroupements de ressources (si vous n'avez pas beaucoup de multi-paramètres régionaux des données) ou compléter la démarche en utilisant XSLT ou d'autres gabarits des paramètres régionaux spécifiques.
Un très performante, mais de haute-développement frais généraux de l'approche est d'utiliser un filtre de servlet pour rediriger le trafic vers la langue (ou régionaux) des sous-sites spécifiques. Dans ce cas, quelqu'un frapper
http://my.domain.fake/xyz
serait redirigé vershttp://my.domain.fake/en/xyz
Enfin, il est intéressant de noter que la plupart des graves frameworks web ont leur propre support I18N. Leurs approches diffèrent en fonction du cadre de la philosophie.
ServletRequest.getLocale()
existe pour une raison!OriginalL'auteur Dilum Ranatunga
Nous pouvons créer des messages.propriétés, messages_????.propriétés et de placer ces fichiers dans /scr/java répertoire. (où????? - fr_fr, ru_RU et autres)
Lignes par exemple dans les messages.propriétés:
Puis à coller dans le fichier jsp par exemple les lignes:
Maintenant, vous pouvez coller ${nom} dans le prochain code jsp (${Sujet}, ${Acheter}, ...).
ResourceBundle
etLocale
classes! Il montre un manque fondamental de la compréhension du sujet.OriginalL'auteur ShelS