2008-09-16 3 views
3

Comment dois-je stocker (et présenter) le texte sur un site Web destiné à une utilisation mondiale, avec plusieurs langues? Le contenu est principalement sous la forme d'articles de plus de 500 mots, bien que je doive aussi traduire de minuscules extraits de texte sur chaque page (comme "imprimer cet article" ou "revenir au menu").Stocker du contenu dans plusieurs langues? Par exemple. Anglais, Français, Allemand

Je sais qu'il existe plusieurs progiciels CMS qui gèrent plusieurs langages, mais je dois également les intégrer à nos systèmes ASP existants, donc j'ignore ces solutions. Une préoccupation que j'ai est que Google devrait être en mesure de trouver les pages, même pour les utilisateurs étrangers. Je suis moins préoccupé par les problèmes avec les dates de traitement et les devises.

Je m'inquiète que, laissé à moi-même, je vais inventer une façon de faire cela qui fonctionne, mais qui finira par mener au désastre! Je veux savoir quelles solutions professionnelles vous avez réellement utilisées sur de vrais projets, pas des idées non éprouvées! Merci beaucoup.


J'ai regardé resx, mais ils estimaient avoir ne convenaient pas à tous, mais les solutions de traduction les plus triviales (je développerai si quelqu'un veut savoir).

Google m'aidera à traduire le texte, mais pas à le stocker/le présenter. Est-ce que quelqu'un a travaillé sur un projet multi-langue qui s'appuyait sur son propre code pour la présentation?


Avez-vous pensé à proposer du contenu de la manière suivante?

(ce ne sont pas réelles URL, je viens de montrer des exemples)

Répondre

5

Tout d'abord, mettez tout le code pour toutes les langues sous un domaine - cela aidera votre classement google.

Nous avons un système entièrement multilingue, avec des localisations stockées dans une base de données mais mises en cache avec l'application web.

Partout où nous voulons une localisation apparaisse que nous utilisons:

<%$ Resources: LanguageProvider, Path/To/Localisation %> 

Puis dans notre web.config:

<globalization resourceProviderFactoryType="FactoryClassName, AssemblyName"/> 

FactoryClassName implémente alors ResourceProviderFactory pour fournir la fonctionnalité dynamique réelle. Les localisations sont stockées dans la BD avec une clé de chaîne "Chemin/Vers/Localisation"

Il est important de mettre en cache les valeurs localisées - vous ne voulez pas avoir beaucoup de recherches DB sur chaque page, et nous mettons en cache des milliers de chaînes localisées sans problèmes de performances.

Utilisez la localisation actuelle du navigateur de l'utilisateur pour choisir la langue à utiliser.

+0

voir http://msdn.microsoft.com/en-us/library/ms227427.aspx pour plus d'informations –

+0

Cela me semble une solution bien pensée. J'ai mon vote. – OregonGhost

1

Si vous utilisez .Net, je recommanderais d'aller avec un ou plusieurs fichiers de ressources (.resx). Il y a beaucoup de documentation à ce sujet sur MSDN.

2

Vous voudrez peut-être vérifier GNU Gettext projet - au moins quelque chose pour commencer.

Edité pour ajouter les informations sur les projets:

Je travaille sur plusieurs projets multilingues en utilisant la technologie Gettext dans différentes technologies, y compris C++/MFC et J2EE/JSP, et cela a fonctionné tout va bien. Cependant, vous devez écrire/trouver votre propre code pour afficher les données localisées bien sûr.

0

Si vous êtes seulement préoccupé par le contenu de l'article en cours de traduction, et n'avez pas besoin d'une option entièrement intégrée, j'ai déjà utilisé google translation dans le passé et cela fonctionne très bien à plus petite échelle.

+1

Avez-vous déjà lu un texte traduit par google dans votre langue maternelle? Pas vraiment une option professionnelle. – OregonGhost

+0

J'ai utilisé les traductions de Google comme solution temporaire et j'ai eu des commentaires positifs de la part des 'étrangers'! Admirablement, j'ai été surpris par ceux-ci! –

1

Comme pour la plupart des questions de programmation générale, cela dépend de vos besoins.

Pour le texte statique, j'utiliserais des fichiers RESX. Pour moi, en tant que programmeur .Net, ils sont faciles à utiliser et le .Net Framework a un bon support pour eux.

Pour tout texte dynamique, j'ai tendance à stocker de telles informations dans la base de données, en particulier si le responsable du site va être un non-développeur. Dans le passé, j'ai utilisé deux approches, en ajoutant une colonne de langue et en créant des entrées différentes pour les différentes langues ou en créant une table séparée pour stocker le texte spécifique à la langue.

Le tableau pour la première approche pourrait ressembler à ceci:

article Id | ID de langue | Texte de l'article spécifique à la langue | Créé par | Cela fonctionne pour les situations où vous pouvez créer des entrées différentes pour un article donné et vous n'avez pas besoin de conserver les données associées à ces différentes entrées en synchronisation (comme un horodatage mis à jour).

L'autre approche est d'avoir deux tables séparées, l'une pour le texte non spécifique de langue (id, date de création, créé par l'utilisateur, la date mise à jour, etc.) et une autre table contenant le texte de langue spécifique. Les tableaux peuvent donc ressembler à ceci:

Première table: ID article | Créé par | Date de création | Mis à jour par | Date de mise à jour

Deuxième table: ID article | ID de langue | Texte de l'article spécifique au langage

Pour moi, la question se résume à la mise à jour des données non dépendantes de la langue. Si vous mettez à jour ces données alors je pencherais vers la deuxième approche, sinon j'irais avec la première approche que je considère comme plus simple (ne peut pas oublier le principe KISS).

0

Question merveilleuse. J'ai résolu ce problème pour le site que j'ai fait (lien dans mon profil) avec un script Python 3 fait maison qui traduit le modèle général à la volée et insère une page de contenu spécifique d'une langue demandée (ou devinée par Apache d'Accepter -La langue).

Il était amusant depuis que je suis arrivé à apprendre Python et écrire mon propre mini-bibliothèque pour créer des pages de contenu. Un inconvénient est que notre hébergement n'a pas Python 3, mais je fait mon script générer HTML statique (l'original examinait User-agent), puis le télécharger vers le serveur.Cela fonctionne jusqu'à présent et faire une nouvelle version linguistique du site est maintenant un jeu d'enfant :)

Le plus gros inconvénient de cette méthode est qu'il est fastidieux d'écrire des choses à partir de zéro. Donc, si vous voulez, envoyez-moi la ligne et je vais vous aider à utiliser mon script :)

0

En ce qui concerne le format d'URL, j'utilise site.com/content/example.fr car cela permet d'Apache d'effectuer la négociation de langue dans le cas où quelqu'un demande /content/example et dispose d'un navigateur dire qu'il aime la langue française. Lorsque vous faites cela, Apache ajoute également .html ou quoi que ce soit en bonus.

Donc, lorsqu'une demande est pour example et moi avons des fichiers

example.fr 
example.en 
example.vi 

Apache passe automatiquement avec example.vi pour une personne avec le navigateur vietnamien configuré ou example.en pour une personne avec le navigateur allemand configuré. Assez utile.

Questions connexes