Comment voulez-vous construire un langage multi-site web?
Un de mes amis est en train de construire une application web avec J2EE et jambes de force, et elle va être prêt à afficher les pages en plusieurs langues.
M'a dit que la meilleure façon de soutenir un site multilingue est d'utiliser un fichier de propriétés où vous stockez toutes les cordes de vos pages, quelque chose comme:
welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...
Cette solution est ok, mais qu'advient-il si votre site affiche les nouvelles ou quelque chose comme ça (un blog)? Je veux dire, le contenu n'est pas statique, qui est souvent mis à jour... Les gens qui l'ont à écrire chaque nouvelle entrée dans chaque langue prise en charge, et de stocker chaque version de l'entrée dans la base de données. L'application charge uniquement les entrées dans la langue choisie.
Comment faire de la conception de la base de données à l'appui de ce genre de mise en oeuvre?
Grâce.
Vous devez vous connecter pour publier un commentaire.
La façon que j'ai conçu la base de données avant est d'avoir une News-table contenant des informations de base comme NewsID (int), NewsPubDate (datetime), NewsAuthor (varchar/int) et ensuite une table liée NewsText qui a ces colonnes: NewsID(int), NewsText(texte), NewsLanguageID(int). Et enfin, vous avez une Langue de table qui a LanguageID(int) et Nomdulangage(varchar).
Alors, si vous souhaitez montrer à vos utilisateurs l'actualité-page:
Cette Session-bit est une variable locale où vous stockez les utilisateurs de la langue lorsqu'ils se connectent ou pénètre dans le site pour la première fois.
Avertissement: je ne suis pas un java hacker, donc YMMV mais...
Le problème avec l'aide d'une liste de "propriétés", c'est que vous avez besoin de beaucoup de discipline. Chaque fois que vous ajoutez une chaîne de caractères qui doit être sortie de l'utilisateur, vous devrez ouvrir votre fichier de propriétés, regardez pour voir si la chaîne de caractères (ou quelque chose d'à peu près équivalent) est déjà dans le fichier, puis ajouter la nouvelle propriété, si elle n'est pas. En plus de cela, vous auriez à espérer le fichier de propriétés a été assez lisible par l'homme /modifiable si vous voulais le donner à une traduction externe de l'équipe à gérer.
La base de données est une approche utile pour l'ensemble de votre base de données de contenu. Idéalement, vous voulez le rendre facile pour attacher des morceaux de contenu avec leurs traductions. Il n'est vraiment tombe pour tous les endroits que vous souhaitez mai à la sortie de quelque chose qui n'est pas d'une base de données (messages d'erreur, etc.).
Une assez vieille technologie qui nous trouvons fonctionne encore très bien, est d'utiliser gettext. Gettext ou une variante semble être disponible pour la plupart des langues et des plates-formes. Le principe de base est que vous enveloppez de votre sortie dans un appel de fonction comme ceci:
Puis en exécutant le gettext d'outils au cours de votre code source va extraire toutes les instances enveloppé comme dans un "po" fichier. Il contient des entrées telles que:
Et vous pouvez ajouter votre traduction à l'endroit approprié:
Les passages suivants de la gettext simplement des outils de mise à jour de vos fichiers po. Vous n'avez même pas besoin d'extraire le fichier po à partir de votre source. Si vous savez que vous peut souhaitez traduire votre site en bas de la ligne, alors vous pouvez simplement utiliser le format indiqué ci-dessus (l'a souligné fonction) avec toutes vos sorties. Si vous ne fournissez pas un fichier po il va juste retour de ce que vous mettez dans les citations. gettext est conçu pour fonctionner avec les paramètres régionaux afin que l'utilisateur locale est utilisée pour récupérer l'appropriées fichier po. Cela le rend vraiment facile d'ajouter de nouvelles traductions.
Gettext Pros
Gettext Inconvénients
Pour plus d'info sur gettext voir cette page de wikipedia
Applications web Java de soutien à l'internationalisation à l'aide de la java standard tag library.
Vous avez vraiment eu 2 problèmes. Le contenu statique et dynamique de contenu.
pour le contenu statique, vous pouvez utiliser jstl. Il utilise java ResourceBundles pour atteindre cet. J'ai réussi à obtenir un Base de données soutenu bundle de travail avec l'aide de ce site.
Le deuxième problème est le contenu dynamique.
Pour résoudre ce problème, vous aurez besoin de stocker les données de sorte que vous pouvez récupérer les différentes traductions basées sur les paramètres Régionaux de l'utilisateur. (Locale comprend des Pays et de la Langue).
Il n'est pas trivial, mais c'est quelque chose que vous pouvez faire avec un peu de planification avant.
@Auron
c'est ce que nous appliquer à. Nos apps sont tous PHP, mais gettext a une longue tradition.
Ressemble à il ya un bonne implémentation Java
Bibliothèques de balises sont très bien si vous êtes en utilisant JSP, mais vous pouvez également obtenir de l'I18N à l'aide d'un modèle basé sur la technologie comme FreeMarker.