2008-08-26 13 views
3

データベースに電子商取引ソリューションの製品を格納する必要があります。各製品には、名前、説明などの説明的な情報が含まれている必要があります。グローバリゼーションアーキテクチャ

x言語にローカライズする製品が必要です。私はこれまで何をやったか

、任意のローカライズされなければならないの列とnvarchar(MAX)を行い、その後、私はこのようなXML文字列を格納することです:

<cultures> 
    <culture code="en-us">Super fast laptop</culture> 
    <culture code="da-dk">Super hurtig bærbar</culture> 
</cultures> 

そして、私はに、データベースからそれをロードします私のビジネスロジックオブジェクトは、私はXMLの文字列をDictionary<string, string>に解析します。ここで、キーは文化/言語コードです。私は、製品の名前を表示したいとき

だから、私はこれを行う:

lblName.Text = product.Name["en-us"]; 

誰もがよりよい解決策を持っていますか?

答えて

2

あなたは(例えば、singletonで)どこかに現在の言語を保存してproduct.Nameプロパティに正しい文字列を取得するために言語設定を使用する必要があります。この方法では、フィールドが使用されているすべての言語について考えるのではなく、フィールドごとに言語固有のコードを1回書く必要があります。 GetLocalStringは以下のようになります

public class Product 
{ 
    private idType id; 
    public string Name 
    { 
    get 
    { 
     return Localizer.Instance.GetLocalString(id, "Name"); 
    } 
    } 
} 

は::

public string GetLocalString(idType objectId, string fieldName) 
    { 
    switch (_currentLanguage) 
    { 
     case Language.English: 
     // db access code to retrieve your string, may need to include the table 
     // the object is in (e.g. "Products" "Orders" etc.) 
     db.GetValue(objectId, fieldName, "en-us"); 
     break; 
    } 
    } 
1

Rob ConeryのMVC Storefrontウェブキャストシリーズはa video on this issueです(データベースには5:30頃)。彼はカルチャのリストを保存し、ローカライズされていないデータのProductテーブルとローカライズされたテキストのProductCultureDetailテーブルを持っています。

+0

テーブルの内容を他のものではなくローカライズされたデータとして区別するために、テーブル名に "Culture"を残すことをお勧めします。 – y0mbo

1

リソースファイル

+0

ベストソリューション、最悪の答え:) – Ropstah

0

これは基本的に

は、例えば、あなたのシングルトンと仮定すると、現在の言語に対応する列挙型を格納したLocalizerクラスで定義されています私たちがMicrosoft Commerce Server 2002で取ったアプローチです。索引付けされたビューは、パフォーマンスに役立ちます。