アラビア語と英語から始まる 2 つの言語を使用した多言語 Web サイトに取り組んでいます
IE と FireFox で言語をアラビア語 (ar-ae) に設定しましたが、常に英語版が表示されます。この問題をトラブルシューティングすることはできません。
サイト構造
Default.aspx
en/Default.aspx
ar/Default.aspx
問題は、URL を次のように使用すると、アラビア語が言語として選択されている場合はhttp://localhost:49831/site/Defualt.aspx
正常に動作し、アラビア語版にリダイレクトされることです。ar/Default.aspx
しかし、URLを使用するhttp://localhost:49831/site/
と、常に英語版にリダイレクトされます en/Default.aspx
何が間違っているのかわかりません。
Default.aspx を使用して、既定のブラウザー言語を検出し、それに応じてリダイレクトします
Default.aspx.cs ファイルのコード
// Localization and Globalization code
protected override void InitializeCulture()
{
String lang = Request["Language"];
Session["lang"] = Helper.DetectLanguage(lang);
//Set Direction of page LTR/RTL
if (Session["lang"] == "ar-AE")
{
Session["PageDIR"] = "rtl";
}
else
{
Session["PageDIR"] = "ltr";
}
base.InitializeCulture();
}
public static String DetectLanguage(String lang)
{
String LangCode = lang;
if (!string.IsNullOrEmpty(lang))
{
lang = lang.ToLower();
}
String Lang2Char;
CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture;
String LangName = ci.Name.ToString().ToLower();
//check leng & if length is less than 2 then set english as default language.
if (LangName.Length > 1)
{
Lang2Char = LangName.Substring(0, 2);
}
else
{
Lang2Char = "en";
}
// if QueryString is not null then execute foollowinf if block
//If Language is present in Querystring then excute if part else, else part
if (lang != null)
{
switch (lang)
{
case "en-us":
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
case "ar-ae":
Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-AE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-AE");
LangCode = "ar-AE";
break;
default:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
}
}
// if lang query string is null then set the language based on following logic
else
{
switch (Lang2Char)
{
case "en":
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
case "ar":
Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-AE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-AE");
LangCode = "ar-AE";
break;
default:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
}
}
return LangCode;
}
このコードが機能するように定義するにはどうすればよいですか。Global.asx ファイルで CurrentUICulture を定義する方が良いですか?