2009-11-16 6 views
4

Est-ce que quelqu'un pourrait me signaler certains schémas traitant de l'internationalisation des tâches au niveau de la base de données? Le moyen le plus simple serait d'ajouter une colonne de texte pour chaque langue pour chaque colonne de texte, mais c'est en quelque sorte malodorant - vraiment je veux avoir la possibilité d'ajouter dynamiquement des langues prises en charge.Internationalisation au niveau de la base de données

La solution à laquelle je parviens est une langue principale enregistrée dans le modèle et une entité de dictionnaire qui est interrogée pour les traductions et les traductions sauvegardées.

Tout ce que je veux, c'est entendre d'autres personnes qui ont fait cela.

+1

Qu'entendez-vous exactement par niveau de base de données? Est-ce que garder une base de données/table de dictionnaire et effectuer des traductions par programme (en dehors de la base de données) ce que vous cherchez, ou parlez-vous de la base de données? –

+0

J'ai quelques champs dans la base de données qui ont besoin d'être traduits. par exemple - j'ai des classificateurs, qui ont des noms et j'utilise ces noms dans d'autres endroits du système. J'ai besoin d'afficher les noms des classificateurs dans les paramètres régionaux actuels. – miceuz

Répondre

1

Vous pouvez créer une table comportant trois colonnes: target language code, chaîne d'origine, chaîne traduite. L'index sur la table serait sur les deux premières colonnes, mais je ne lierais pas cette table à d'autres tables avec des clés étrangères. Vous devez ajouter une jointure (éventuellement une jointure à gauche pour tenir compte des traductions manquantes) pour chacun des termes que vous devez traduire dans chaque requête que vous exécutez. Cependant, cela rendra toutes vos requêtes très poilues et peut-être tuer les performances.

Une autre chose dont vous devez tenir compte est de traduire les termes et de maintenir une table de traduction à jour. Ceci est très incommode à faire directement contre la base de données et est souvent fait par des personnes non techniques.

Habituellement, lors de la localisation d'une application, vous utiliseriez quelque chose comme gettext. L'idée derrière cette suite d'outils est d'analyser comment analyser le code source pour extraire les chaînes à traduire, puis créer des fichiers de traduction à partir d'eux. Comme cette suite existe depuis longtemps, de nombreux utilitaires basés sur celle-ci aident à la tâche de traduction, dont l'un est Poedit, un éditeur graphique agréable pour traduire des chaînes dans différentes langues. Il pourrait être plus simple de générer la liste unique des termes tels qu'ils apparaissent dans la base de données dans un format que gettext pourrait analyser, et de faire la traduction dans le code de l'application. De cette façon, vous serez en mesure de faire la traduction des chaînes codées en dur dans l'application et les valeurs de la base de données en utilisant la même technique.

Questions connexes