グローバリゼーションアーキテクチャ
-
09-06-2019 - |
質問
電子商取引ソリューションの商品をデータベースに保存する必要があります。各製品には、名前、説明などの説明情報が必要です。
製品を 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 で採用したアプローチです。はい、インデックス付きビューはパフォーマンスに役立ちます。