4

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

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

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

4

4 に答える 4

2

現在の言語をどこかに (たとえば、 singletonに) 保存し、 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;
    }
  }
于 2008-08-26T19:08:53.837 に答える
1

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

于 2008-08-26T16:58:31.793 に答える
1

リソース ファイル

于 2008-08-26T16:59:21.620 に答える
0

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

于 2008-09-16T20:33:02.023 に答える