2011-05-22 11 views
4

私は、3つの言語(英語とその他2言語)でローカリゼーションが必要なWebアプリケーション上のクライアントで働いています。 ASP.NETアプリケーションでリソースを使用して、静的データのローカライズ版を表示する方法を理解しています。しかし、私は、ローカライズされたユーザー入力データの問題にどのようにアプローチするのかよく分かりません。例えば、管理者は、新しいメタデータをアプリケーション(例えば、新しい製品カテゴリ)に追加したい場合がある。これは最終的に3つの言語すべてに翻訳する必要がありますが、最初は管理者が知っている言語で入力します。この種のデータは静的ではないため、データベースに格納します。同じデータの異なるローカライズ版を区別するために、主キーにカルチャーコードを追加する必要がありますか?この種の問題を認識していない「ベストプラクティス」やパターンはありますか?ローカライズされたバージョンのユーザー入力データをデータベースに保存する方法

答えて

2

MainItemIDとLanguageCode(EN、DE、FRなど)の複合PKを使用して、あなたのエンティティを子テーブルにしてください。この子テーブルには、言語固有のテキストが格納されます。

英語が常にある場合、またはフォールバックの場合は、DE、FRなどの子テーブルと英語のメインテーブルを持つことができます。 LEFT JOINとISNULLがこれを処理します。

あなたの正確なニーズに応じてどちらの方法もOKですが、最初のものと思われます。もちろん、新しい商品カテゴリなどのデータ入力に子行が1つ以上あることを確認する必要があります。

+0

ありがとうございました! –

0

私のソリューションは、サポートされているすべての言語のエンコードされたデータを保持する文字列を作成することでした。データの挿入および抽出には特別なアプリケーションロジックが必要です。 多言語データをサポートする特殊化されたテキストエディタも多大な助けとなりました。

+0

これは、コードに対してクライアントが1つしかないと仮定し、データベースレベルでは検索できません。 – gbn

+0

実際には、適切な場所を検索して表示するために、DefaultTitleという列をもう1つ使用しました。 – Marko

1

Languageを追跡するテーブルを作成し、言語コードの代わりに他のテーブルの外部キーとしてlanguageIDを使用することをお勧めします。

Language(LanguageID, Name) 

そして、他のテーブルでは、LanguageIDを外部キーとして使用します。

ローカライズされたテキストをテーブルに保存しています

LocalizedTextTable(ID,text,LanguageID) 
+0

言語コードが既に一意である場合、この追加結合を 'Language'テーブルに追加する理由はありますか? – dnc253