Internationalisation ASP.NET.. Encore
Bonjour à toutes / tous,
Une fois encore je viens réclamer votre aide. Le contexte : Une application Web asp.net classique avec MasterPage, que je tente d'internationaliser. J'ai bien sur lu la FAQ et essayer de la mettre en oeuvre, même chose pour les articles msdn et le tuto developpez Comme vous le devinez cela ne fonctionne pas, ou disons que partiellement. je souhaite que l'utilisateur puisse changer la langue d'affichage du site sans passer par les options du navigateur, pour cela j'ai créer une Dropdownlist avec 2 langues : fr-FR et en-US. Lorsque l'utilisateur change de langue voici le code effectué :
Code:
1 2 3 4 5 6 7 8 9
| protected void DropDownListSelectLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
//store requested language as new culture in the session
Thread.CurrentThread.CurrentUICulture = new CultureInfo(DropDownListSelectLanguage.SelectedValue);
Session["user-langage"] = DropDownListSelectLanguage.SelectedValue;
//reload last requested page with new culture
//Server.Transfer(Request.Path);
Response.Redirect(Request.Path);
} |
Je récupère bien la langue en Session, lors du Page_load dans la MasterPage, je vérifie si une langue est présente en session, sinon je prends la langue du navigateur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| protected void Page_Load(object sender, EventArgs e)
{
AspUtility.SessionVars Currentsession = new AspUtility.SessionVars();
if (!IsPostBack)
{
if (Session["user-langage"] != null)
{
CultureInfo CurrentCulture = new CultureInfo(Session["user-langage"].ToString());
Thread.CurrentThread.CurrentUICulture = CurrentCulture;
}
else
{
CultureInfo CurrentCulture = new CultureInfo(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentUICulture = CurrentCulture;
}
DropDownListSelectLanguage.SelectedValue = Thread.CurrentThread.CurrentUICulture.ToString(); |
Mon problème est que la langue est bien récupérée mais ne s'applique tout simplement pas aux controls statiques de la page :
Les labels, les onglets du Menu (ItemMenu) etc.. ne se traduisent pas.
Voici leur déclaration : La première étant la MasterPage et la deuxième la page de login
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <div class="LanguageBox">
<asp:Image ID="LanguageSelectedImg" runat="server" />
<asp:DropDownList ID="DropDownListSelectLanguage" runat="server" Height="20px" Width="101px"
AutoPostBack="true" onselectedindexchanged="DropDownListSelectLanguage_SelectedIndexChanged" >
<asp:ListItem Value="en-US">English</asp:ListItem>
<asp:ListItem Value="fr-FR">Français</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btn_logout" runat="server" Text="<%$ Resources:page_consumer, button_logout %>" Font-Names="Verdana" Font-Size="Small" OnClick="logout_click" Visible="false" />
</div>
</div>
</div>
</div>
<div class="clear hideSkiplink">
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" Visible="false">
<Items>
<asp:MenuItem NavigateUrl="~/Order_Category.aspx" Value="<%$ Resources:ItemMenu, commander %>" />
<asp:MenuItem NavigateUrl="~/MyLine.aspx" Text="<%$ Resources:ItemMenu, Inventaire %>" />
<asp:MenuItem NavigateUrl="~/consumption.aspx" Text="<%$ Resources:ItemMenu, Consommation %>" />
<asp:MenuItem NavigateUrl="~/About.aspx" Text="<%$ Resources:ItemMenu, Support %>" />
<asp:MenuItem NavigateUrl="~/FAQ.aspx" Text="<%$ Resources:ItemMenu, FAQ %>" />
<asp:MenuItem NavigateUrl="~/MyAccount.aspx" Value="<%$ Resources:ItemMenu, Mon_compte %>" />
<asp:MenuItem NavigateUrl="~/Survey.aspx" Value="<%$ Resources:ItemMenu, Enquete %>" />
</Items>
</asp:Menu>
</div>
</div> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <ContentTemplate>
<div class="content">
<div class="Log">
<asp:Label ID="label_email" runat="server" Text="<%$ Resources:page_login, label_email %>"
Class="Label" Width="100px" />
<igtxt:WebTextEdit ID="email" runat="server" EnableAppStyling="True" Width="250px"
Height="22px" class="txtEdit" Style="margin-bottom: 0px">
</igtxt:WebTextEdit>
</div>
<div class="Log">
<asp:Label ID="label_pwd" runat="server" Text="<%$ Resources:page_login, label_pwd %>"
class="Label" Width="100px" />
<igtxt:WebTextEdit ID="pwd" runat="server" EnableAppStyling="True" Width="250px"
Height="22px" class="txtEdit" PasswordMode="True">
</igtxt:WebTextEdit>
</div>
<div class="Log" style="text-align: center">
<asp:Button ID="btn_log" runat="server" Text="<%$ Resources:page_login, button_login %>"
OnClick="btn_log_Click" Style="height: 26px" />
</div>
<div style="text-align: center">
<asp:Label ID="error" runat="server" Font-Bold="true"></asp:Label>
<br />
<br />
<asp:Label CssClass="info" ID="LabelInfoLogin" runat="server" Font-Italic="true"
ForeColor="GrayText" Text="<%$ Resources:page_login, info_Login %>">
</asp:Label>
</div>
</div>
</ContentTemplate> |
Page_login et ItemMenu sont les fichiers .resx dans lesquels figurent les traductions.
Voyez-vous quelques chose que j'ai fait de travers ? Si oui merci de me le dire, je suis perdu depuis 1 jours je ne vois plus de solution :s.