---------------- 古いコード -------------------------------- -------------- ローカライズする必要があるメイン メニューであるユーザー コントロールを作成しました。そのため、App_LocalResources 内に 3 つのリソース ファイルを作成し、選択した言語を変更するためのドロップダウンを用意しました。
メインメニューは次のようになります:-
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MainMenu.ascx.cs" Inherits="GGX4._2.MainMenu" %>
<div>
<asp:DropDownList ID="ddlLangs" runat="server"
onselectedindexchanged="ddlLangs_SelectedIndexChanged" AutoPostBack="True" meta:resourcekey="ddlLangsResource1">
<asp:ListItem Text="English" Value="en-US" meta:resourcekey="ListItemResource1"></asp:ListItem>
<asp:ListItem Text="German" Value="de-DE" meta:resourcekey="ListItemResource2"></asp:ListItem>
<asp:ListItem Text="Spanish" Value="es-ES" meta:resourcekey="ListItemResource3"></asp:ListItem>
</asp:DropDownList>
</div>
<div>
<table>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/GREENSQUARE.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypIntroduction" runat="server" NavigateUrl="Overview.htm"
meta:resourcekey="hypIntroductionResource1" >[hypIntroduction]</asp:HyperLink>
</tr>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/GREENSQUARE.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypGlobalGradingMethodology" runat="server" NavigateUrl="GGMethodology.htm"
meta:resourcekey="hypGlobalGradingMethodologyResource1" >[hypGlobalGradingMethodology]</asp:HyperLink>
</td>
</tr>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/Redsquare.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypDeterminingBusiness" runat="server"
NavigateUrl="ScopematrixGeneral.htm"
meta:resourcekey="hypDeterminingBusinessResource1">[hypDeterminingBusiness]</asp:HyperLink>
</td>
</tr>
<tr>
<td width="100%" nowrap height="16"><font size="2" face="Arial">
<img border="0" src="Images/BLUEBULLET.gif" width="16" height="16">
<asp:HyperLink ID="hypMethodology" runat="server"
NavigateUrl="methodology.htm"
meta:resourcekey="hypMethodologyResource1">[hypMethodology]</asp:HyperLink>
</font>
</td>
</tr>
</table>
</div>
コードビハインドには次のものがあります:-
string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();
protected void Page_Load(object sender, EventArgs e)
{
this.InitializeCulture();
}
protected void InitializeCulture()
{
if (String.IsNullOrEmpty(CurrentCulture))
{
CurrentCulture = defaultLanguage;
}
if (!String.IsNullOrEmpty(CurrentCulture))
{
try
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(CurrentCulture);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
catch
{
throw;
}
}
}
public String CurrentCulture
{
get
{
if (null != Session["PreferedCulture"])
return Session["PreferedCulture"].ToString();
else
return "en-US";
}
set
{
Session["PreferedCulture"] = value;
}
}
protected void ddlLangs_SelectedIndexChanged(object sender, EventArgs e)
{
Session["PreferedCulture"] = ddlLangs.SelectedValue;
InitializeCulture();
}
ただし、ドロップダウンリストで変更を行うと、カルチャは同じままになります。通常、System.Web.UI.Page に適用すると、InitializeCulture() をオーバーライドしますが、ascx でそれを行う方法が見つかりません。
どうすればそれを達成できますか?
あなたの助けと時間をありがとう
--------------新しいコード----------------------------------- ------------
私は物事をよりシンプルにすることに決めました。私は自分が望むものを達成することができましたが、ページの更新はまったく好きではなく、せずに作りたいと思っています.
だから基本的に私は今働いている簡単な例を作成しました:-
Site.Master には、追加のコードとしてドロップダウンがあります:-
<div>
<asp:DropDownList ID="ddlLangs" runat="server" onselectedindexchanged="ddlLangs_SelectedIndexChanged" AutoPostBack="True"
meta:resourcekey="ddlLangsResource1">
<asp:ListItem Text="English" Value="en-US"
meta:resourcekey="ListItemResource1" ></asp:ListItem>
<asp:ListItem Text="German" Value="fr-FR" meta:resourcekey="ListItemResource2" ></asp:ListItem>
<asp:ListItem Text="Spanish" Value="it-IT"
meta:resourcekey="ListItemResource3" ></asp:ListItem>
</asp:DropDownList>
</div>
コードビハインドは次のようになります:-
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["PreferredCulture"]!= null)
ddlLangs.SelectedValue = Session["PreferredCulture"].ToString();
}
}
protected void ddlLangs_SelectedIndexChanged(object sender, EventArgs e)
{
Session["PreferredCulture"] = ddlLangs.SelectedValue;
Server.Transfer(Request.Path);
}
Default.aspx には MainMenu UC とサンプル ラベルがありますが、BasePage から継承されます:-
<asp:Content ID="MenuContent" runat="server" ContentPlaceHolderID="MainMenuContent">
<uc:MainMenu runat="server" ID="ucMainMenu" />
ASP.NET へようこそ!
</asp:Content>
BasePage には、Culture を初期化するコードがあります。
Server.Transfer(Request.Path) を取り除き、ページの更新を避けたいのですが、まだ方法が見つかりません。
どんな助け/アイデアも大歓迎です!
ありがとう