0

複数の言語をサポートするデータベースを使用しています。問題は、情報を取得するために自分の言語をクエリに入力する必要があることですが、それは問題ありませんが、その情報を保存する最適な方法は何でしょうか。

もちろん、クライアント側ではCookieに保存されます。今私が考えることができる唯一の方法は、クラスでグローバル変数を作成し、それを関数で使用することです。それが唯一の方法ですか?

サンプルコード

private string lang = Infrastructure.UserSettings.Language(); // I don't have this implemented yet

[HttpGet]
public dynamic List()
{
    string lang = "English"; // That's why I set it here manually for testing

    var items = _db.Items.OrderByDescending(x => x.ID).Select(x => new
    {
        ID = x.ID,
        Price = x.Price,
        Name = x.ItemTranslations.Where(y => y.Language.Name == lang).Select(y => y.Name).SingleOrDefault(),
        Category =  new {
            ID = x.Category.ID,
            Name = x.Category.CategoryTranslations.Where(y => y.Language.Name == lang).Select(y => y.Name).SingleOrDefault()
        }
    });

    return items;
}

私の質問:これはこれを行う良い方法ですか、それとももっと最適な方法がありますか?

4

2 に答える 2

1

次のように、読み取り専用変数を使用して基本コントローラーを作成できます。

public class BaseController : Controller
{
    public string UserLanguage
    {
        get
        {
            var cLanguage = HttpContext.Request.Cookies["lang"];
            if (cLanguage != null)
                return cLanguage.Value;
            else
                return "English";
        }
    }
}

次に、次のようにベース コントローラーを継承します。

public class HomeController : BaseController

次に、次のように変数にアクセスします。

var items = _db.Items.OrderByDescending(x => x.ID).Select(x => new
{
    ID = x.ID,
    Price = x.Price,
    Name = x.ItemTranslations.Where(y => y.Language.Name == UserLanguage).Select(y => y.Name).SingleOrDefault(),
    Category =  new {
        ID = x.Category.ID,
        Name = x.Category.CategoryTranslations.Where(y => y.Language.Name == lang).Select(y => y.Name).SingleOrDefault()
    }
});

特定の時間に Cookie を設定するだけで済みます。

于 2012-09-06T18:07:19.060 に答える
0

ページ要求ごとに Cookie がサーバーに送信されます。Cookie で設定が使用可能な場合は、クエリを実行する必要があるときに Cookie を読み取るだけです。既に存在する Cookie を読み取るためのパフォーマンス オーバーヘッドはありません。

于 2012-09-06T15:37:21.467 に答える