2011-10-02 6 views
3

J'ai un site Web ASP.NET MVC qui repose sur des fichiers de ressources pour l'internationalisation de l'interface utilisateur. Certaines données dans la base de données seront générées par des utilisateurs (dans leur langue), mais certaines données sont générées par moi et les utilisateurs ne devraient pas les modifier. Pour ces données de système, je devrais stocker juste un "jeton" dans la base de données et le traduire au moment de l'afficher à l'utilisateur dans sa langue.Comment internationaliser les données provenant de la base de données?

Je n'aime vraiment pas l'idée d'avoir la traduction dans la base de données, et de rejoindre chaque colonne de texte avec les tables de traduction.

Quelles sont mes alternatives pour y parvenir? Peut-être un hybride de DB et de ressources?

EDIT: Le nombre de langues est indéterminé, pour l'instant nous travaillons avec 3 langues, mais j'espère que nous pourrions avoir besoin de beaucoup d'autres langues.

EDIT 2: Ceci est principalement pour les données du catalogue ... certains catalogues ont des données système et utilisateur dans le même tableau. Les données système doivent être traduites, car elles ne sont pas modifiables par l'utilisateur.

Répondre

1

Vous pouvez stocker uniquement les identifiants dans la base de données et les résoudre au niveau du contenu linguistique à partir des fichiers de ressources (regular * .resx) lors de l'exécution.
Bien que dans un tel cas cela n'a aucun sens de stocker cela dans la base de données (il suffit d'utiliser des fichiers de ressources). Et bien sûr, maintenir cela serait un cauchemar (vous devrez synchroniser le contenu de la base de données avec les fichiers de ressources). Sinon, vous pouvez créer votre propre gestionnaire de ressources pour lire le contenu de la base de données et mettre des traductions avec des identifiants. Dans ce cas, votre clé primaire devra être définie à la fois sur l'identificateur de ressource et sur la langue (Je pense qu'il est appelé clé composée, non):

--------------------------------------------------------- 
| Id | Locale | Translation        | 
--------------------------------------------------------- 
| 1 | en-US | Something happened on the way to heaven | 
| 1 | pl  | Coś się stało na drodze do nieba  | 
--------------------------------------------------------- 

Mais il faudrait modifier le schéma de base de données ...

+0

Je n'aime pas vraiment modifier mes requêtes pour joindre des tables de langues. Que penses-tu d'une méthode hybride: les données de db et de code font-elles la traduction à partir des ressources? – Romias

+0

@Romias: Je pense que c'est ce que j'ai mentionné ci-dessus. Vous extrayez les données de la base de données et, en fonction de celles-ci, extrayez les traductions appropriées des fichiers de ressources. C'est le scénario le plus typicall, et en fait c'est une solution recommandée (par IEEE) pour DB Localizability. –

0

Je ne comprends pas la lecture de votre message si vous maintenez user- généré du contenu avec votre propre contenu localisable dans la même table DB. Si c'est le cas, il semble que vous devriez envisager de les séparer. Si votre propre contenu est stable (ie vous n'ajoutez pas de nouveau contenu ou ne le changez pas entre les déploiements de mises à jour de votre application), alors il devrait vivre dans vos ressources localisables plutôt que dans la base de données et vous devriez le traiter Tout comme votre interface utilisateur localisée.

Si d'un autre côté, il s'agit d'un contenu dynamique, il ne semble pas y avoir d'autre solution que de le stocker dans le DB. Vous devez stocker un ID de contenu ainsi qu'un ID de langue pour chacun d'entre eux (la clé composée de Paweł Dyda) dans une table de localisation séparée qui fournit les versions traduites de chaque contenu. Ou peut-être pourriez-vous compter sur un CMS multilingue pour gérer ce contenu multilingue (voir par exemple le plug-in WPML pour WordPress)

+0

Il est principalement pour les données du catalogue. Certains d'entre eux ont des éléments avec un drapeau "Système" pour ne pas permettre aux utilisateurs de le changer ...mais les utilisateurs peuvent ajouter plus d'éléments à ce catalogue. Dans ce cas, les données du système doivent être traduites. – Romias

Questions connexes