2009-12-02 3 views
0

J'ai les données suivantes dans mon db:Tri et i18n dans la base de données

ID Name Region 
100 Sam  North 
101 Dam  South 
102 Wesson East 
... 
... 
... 

Maintenant, la région sera différente dans différentes langues. Je veux que le tri se passe bien, basé sur la valeur d'affichage plutôt que sur la valeur interne.

Des idées? (Et oui, le tri en mémoire en utilisant Java n'est pas une option!)

+0

Je suppose que vous faites la conversion vers d'autres langues dans l'application plutôt que dans la base de données? Et pourquoi le tri en Java n'est-il pas une option? – lins314159

+0

trier en Java n'est pas une option, car cette table peut contenir des millions d'enregistrements ... – Mak

Répondre

0

Que voulez-vous dire "Valeur d'affichage"? Je suppose que vous êtes en quelque sorte la conversion dans une langue différente en Java lui-même, et ne stockez pas cette valeur (la localisée, je suppose) dans la DB? Si c'est le cas, vous êtes un peu foutu. Vous devez obtenir ces données dans la base de données pour pouvoir les trier avec elles.

+0

Eh bien, je suis à la phase de conception en ce moment. donc je peux décider de stocker les valeurs localisées dans la base de données. Cependant, je voudrais savoir comment les gens ont résolu ce problème (commun), c'est-à-dire la structure des tables de données. – Mak

+0

Stockez la version localisée dans la base de données. –

1

Malheureusement, si vous voulez faire cela dans la base de données, vous devrez aussi stocker les versions internationalisées dans la base de données (ou au moins leur commande). Sinon, comment le moteur de base de données pourrait-il savoir comment trier?

Vous devrez créer une table avec trois colonnes: la version anglaise, le code de langue et la version traduite (avec la version anglaise et le code de langue ensemble étant la clé primaire). Puis joignez-vous à cette table dans votre requête en utilisant le mot anglais et un code de langue, puis trier sur la version internationalisée.

+0

merci! ce qui semble raisonnable ... – Mak

0

La meilleure approche pour utiliser l'internationalisation est de supprimer l'internationalisation de votre application et de la conserver dans des bases de données i18n séparées. Dans votre application, vous conservez une clé qui peut être utilisée pour accéder à ces bases de données séparées, normalement xml ou yml.

En règle générale, je suggère:

  • garder toute base de données dans un format, un endroit
  • chaînes d'internationalisation de l'extrait de votre application
  • permet à votre application à tirer les ficelles i18n de votre i18n de votre base de données d'internationalisation.

Vous pouvez vérifier l'approche RAILS de i18n. C'est simplement, propre et facile à utiliser.

Questions connexes