Question

Un de mes amis est en train de créer une application Web avec J2EE et Struts, et elle sera prête à afficher des pages dans plusieurs langues.

On m'a dit que la meilleure façon de prendre en charge un site multilingue est d'utiliser un fichier de propriétés dans lequel vous stockez toutes les chaînes de vos pages, quelque chose comme :

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

Cette solution est correcte, mais que se passe-t-il si votre site affiche des actualités ou quelque chose comme ça (un blog) ?Je veux dire, un contenu qui n'est pas statique, qui est souvent mis à jour...Les personnes qui gèrent le site doivent rédiger chaque nouvelle entrée dans chaque langue prise en charge et stocker chaque version de l'entrée dans la base de données.L'application charge uniquement les entrées dans la langue choisie par l'utilisateur.

Comment concevez-vous la base de données pour prendre en charge ce type de mise en œuvre ?

Merci.

Était-ce utile?

La solution

La façon dont j'ai conçu la base de données auparavant est d'avoir une table News contenant des informations de base telles que NewsID (int), NewsPubDate (datetime), NewsAuthor (varchar/int), puis d'avoir une table liée NewsText qui contient ces colonnes :NewsID(int), NewsText(text), NewsLanguageID(int).Et enfin, vous avez une table de langue qui contient LanguageID(int) et LanguageName(varchar).

Ensuite, lorsque vous souhaitez montrer à vos utilisateurs la page d'actualités, vous :

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

Ce bit de session est une variable locale dans laquelle vous stockez la langue des utilisateurs lorsqu'ils se connectent ou accèdent au site pour la première fois.

Autres conseils

Avertissement:Je ne suis pas un hacker Java, donc YMMV mais...

Le problème avec l’utilisation d’une liste de « propriétés » est qu’il faut beaucoup de discipline.Chaque fois que vous ajoutez une chaîne qui doit être envoyée à l'utilisateur, vous devrez ouvrir votre fichier de propriétés, vérifier si cette chaîne (ou quelque chose à peu près équivalent) est déjà dans le fichier, puis ajouter la nouvelle propriété. si ce n'est pas le cas.En plus de cela, vous devrez espérer que le fichier de propriétés soit assez lisible/modifiable par l'homme si vous souhaitez le confier à une équipe de traduction externe.

L'approche basée sur une base de données est utile pour tout votre contenu basé sur une base de données.Idéalement, vous souhaitez faciliter la liaison des éléments de contenu avec leurs traductions.Cela ne tombe vraiment en panne que pour tous les endroits où vous souhaiterez peut-être produire quelque chose qui n'est-ce pas hors d'une base de données (messages d'erreur, etc.).

Une technologie assez ancienne qui, selon nous, fonctionne toujours très bien, consiste à utiliser gettext.Gettext ou une variante semble être disponible pour la plupart des langues et des plateformes.Le principe de base est que vous encapsulez votre sortie dans un appel de fonction spécial comme ceci :

echo _("Please do not press this button again");

Ensuite, l'exécution des outils gettext sur votre code source extraira toutes les instances enveloppées ainsi dans un fichier "po".Celui-ci contiendra des entrées telles que :

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

Et vous pouvez ajouter votre traduction à l'endroit approprié :

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

Les exécutions ultérieures des outils gettext mettent simplement à jour vos fichiers po.Vous n'avez même pas besoin d'extraire le fichier po de votre source.Si tu te connais peut Si vous souhaitez traduire votre site sur toute la ligne, vous pouvez simplement utiliser le format indiqué ci-dessus (la fonction soulignée) avec toutes vos sorties.Si vous ne fournissez pas de fichier po, il renverra simplement ce que vous avez mis entre guillemets.gettext est conçu pour fonctionner avec les paramètres régionaux afin que les paramètres régionaux de l'utilisateur soient utilisés pour récupérer le fichier po approprié.Cela rend très facile l’ajout de nouvelles traductions.

Avantages de Gettext

  • Ne vous gêne pas lors du codage
  • Très facile d'ajouter des traductions
  • Les fichiers PO peuvent être compilés pour plus de rapidité
  • Il existe des bibliothèques disponibles pour la plupart des langues/plateformes
  • Il existe de bons outils multiplateformes pour gérer les traductions.Il est en fait possible de mettre en place votre équipe de traduction avec un outil tel que po pour leur faciliter la gestion des projets de traduction

Inconvénients de Gettext

  • Résout les besoins en « mobilier » de votre site, mais vous souhaiterez généralement toujours une approche basée sur une base de données pour votre contenu piloté par une base de données.

Pour plus d'informations sur gettext, voir cette page wikipédia

Les applications Web Java prennent en charge l'internationalisation à l'aide de la bibliothèque de balises standard Java.

Vous avez vraiment 2 problèmes.Contenu statique et contenu dynamique.

pour le contenu statique, vous pouvez utiliser jstl.Il utilise Java Faisceau de ressourcess pour accomplir cela.J'ai réussi à obtenir un Offre groupée sauvegardée dans une base de données travailler avec l'aide de ce site.

Le deuxième problème est le contenu dynamique.Pour résoudre ce problème, vous devrez stocker les données afin de pouvoir récupérer différentes traductions en fonction des paramètres régionaux de l'utilisateur.(Les paramètres régionaux incluent le pays et la langue).

Ce n’est pas anodin, mais c’est quelque chose que vous pouvez faire avec un peu de planification à l’avance.

@Auron

c'est à cela que nous l'appliquons.Nos applications sont toutes PHP, mais gettext a un long héritage.

On dirait qu'il y a un bonne implémentation Java

Les bibliothèques de balises conviennent si vous utilisez JSP, mais vous pouvez également obtenir I18N en utilisant une technologie basée sur des modèles telle que Marqueur gratuit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top