質問

電子商取引ソリューションの商品をデータベースに保存する必要があります。各製品には、名前、説明などの説明情報が必要です。

製品を 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"];

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

役に立ちましたか?

解決

現在の言語をどこか ( シングルトン, 、たとえば)、product.Name プロパティで言語設定を使用して正しい文字列を取得します。この方法では、フィールドが使用されるあらゆる場所で言語について考える必要がなく、フィールドごとに言語固有のコードを 1 回記述するだけで済みます。

たとえば、現在の言語に対応する列挙型を格納する Localizer クラスでシングルトンが定義されていると仮定します。

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

GetLocalString は次のようになります。

  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;
    }
  }

他のヒント

Rob Conery の MVC Storefront Web キャスト シリーズでは、 この問題に関するビデオ (彼は 5:30 頃にデータベースにアクセスします)。彼はカルチャのリストを保存し、ローカライズされていないデータ用の Product テーブルとローカライズされたテキスト用の ProductCultureDetail テーブルを作成しました。

リソースファイル

これは基本的に Microsoft Commerce Server 2002 で採用したアプローチです。はい、インデックス付きビューはパフォーマンスに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top