.resx Локализация не работает с ASP.Net - C # - PullRequest
4 голосов
/ 22 сентября 2009

Я создал два файла .resx - WebResources.resx и WebResources.fr-FR.resx.

Оба содержат ExceptionMessages_SignupWithCard.

Для проверки я сделал:

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
Response.Write("Current Culture is " + CultureInfo.CurrentCulture.EnglishName);
Response.Write("<br>Message is: " + Resources.WebResources.ExceptionMessages_SignupWithCard);

Проблема в том, что я все еще получаю сообщение ExceptionMessages_SignupWithCard от WebResources.resx, а не от WebResources.fr-FR.resx.

Может кто-нибудь помочь, пожалуйста?

Спасибо.

Ответы [ 4 ]

8 голосов
/ 22 сентября 2009

ASP.Net (в частности, ResourceManager) использует CurrentUICulture для извлечения ресурсов.

Попробуйте также настроить CurrentUICulture потока.

CultureInfo french = new CultureInfo("fr-FR");
Thread.CurrentThread.CurrentCulture = french;
Thread.CurrentThread.CurrentUICulture = french;
Response.Write("Current Culture is " + CultureInfo.CurrentCulture.EnglishName);
Response.Write("<br>Message is: " +  
          Resources.WebResources.ExceptionMessages_SignupWithCard);
1 голос
/ 27 октября 2009
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LanugageChanger._Default"  meta:resourcekey="PageResource1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div style="height: 481px">

        <asp:Label ID="Label1" runat="server" Text="Hello" 
            meta:resourcekey="Label1Resource1"></asp:Label>

        <asp:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1"></asp:TextBox>
        <br />
        <asp:Label ID="Label2" runat="server" Text="Goodbye" 
            meta:resourcekey="Label2Resource1"></asp:Label>

        <asp:TextBox ID="TextBox2" runat="server" meta:resourcekey="TextBox2Resource1"></asp:TextBox>
        <br />
        <asp:Label ID="Label3" runat="server" Text="Welcome" 
            meta:resourcekey="Label3Resource1"></asp:Label>

        <asp:TextBox ID="TextBox3" runat="server" meta:resourcekey="TextBox3Resource1"></asp:TextBox>
        <br />
        <asp:Label ID="Label4" runat="server" Text="Terminate" 
            meta:resourcekey="Label4Resource1"></asp:Label>

        <asp:TextBox ID="TextBox4" runat="server" meta:resourcekey="TextBox4Resource1"></asp:TextBox>
        <br />
        <asp:Label ID="Label5" runat="server" Text="End" 
            meta:resourcekey="Label5Resource1"></asp:Label>

        <asp:TextBox ID="TextBox5" runat="server" meta:resourcekey="TextBox5Resource1"></asp:TextBox>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Add new values" 
            meta:resourcekey="Button1Resource1" onclick="Button1_Click1" />

        <br />
        <asp:Button ID="Button2" runat="server" Text="Change language" 
            meta:resourcekey="Button2Resource1" onclick="Button2_Click" />

        <br />
        <br />
        <asp:Label ID="Label6" runat="server" meta:resourcekey="Label6Resource1" 
            Text="English 1"></asp:Label>
        <br />
        <asp:Label ID="Label7" runat="server" meta:resourcekey="Label7Resource1" 
            Text="English 2"></asp:Label>
        <br />
        <asp:Label ID="Label8" runat="server" meta:resourcekey="Label8Resource1" 
            Text="English 3"></asp:Label>
        <br />
        <asp:Label ID="Label9" runat="server" meta:resourcekey="Label9Resource1" 
            Text="English 4"></asp:Label>
        <br />
        <asp:Label ID="Label10" runat="server" meta:resourcekey="Label10Resource1" 
            Text="Default" />></asp:Label>

        <br />
        <asp:TextBox ID="TextBox6" runat="server" Height="153px" Width="543px"></asp:TextBox>

    </div>
    </form>
</body>
</html>
1 голос
/ 23 сентября 2009

Попробуйте напрямую установить Page.Culture и Page.UICulture вместо Thread Culture.

Поскольку это строковое свойство, кажется, что оно не очень хорошо. НО, есть много кода, который изменяет не только культуры потоков, но и ResourceManager.

Похоже, что это стандартный подход, а не назначение культуры Thread.

0 голосов
/ 03 октября 2011

Существует два способа настройки UICulture веб-страницы asp.net.

Опция # 1 заключается в том, что веб-браузер может настроить культуру пользовательского интерфейса (авто), установив текущий язык в веб-браузере.В FireFox перейдите на вкладку «Содержимое» в «Параметры» и нажмите «Языки», затем добавьте французский язык и переместите его в начало списка.IE похож, у него есть кнопка Языки на страницах параметров, и вы добавляете французский язык и перемещаете его в верхнюю часть заказа.Чтобы ваша веб-страница поддерживала этот стиль автоматической настройки, вы должны установить «UICulture = auto» в прагме веб-страницы следующим образом: <% @ Page Language = "C #" AutoEventWireup = "true" <strong>UICulture = "auto" ... ... ...%> Если вы используете этот метод, он отобразит ваш язык по умолчанию для любых языков веб-браузера, которые он не понимает.Вам нужно только определить нейтральный к культуре ресурс, чтобы охватить все версии языка, или вы можете определить конкретные языки (fr-CA, es-mx и т. Д.), И он откроется в файле нейтрального языка (fr-fr)если конкретный язык не определен.MSDN имеет больше информации об автоматической культуре и о том, как добавить больше языков веб-браузера в IE: http://msdn.microsoft.com/en-us/library/fw69ke6f.aspx

Вариант № 2 - установить его в прагме веб-страницы на конкретный язык, например UICulture = "fr-FR ", или в файле web.config для всего сайта.

MSDN объясняет эти параметры в приведенной ниже ссылке и объясняет, как их можно настроить с помощью web.config для всех страниц вашего сайта.http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

Используемый вами программный метод работает, но, как вы заметили, он работает только временно.Я использовал программный метод для чтения языка, указанного в строке запроса, и таким образом менял культуру.Вы можете реализовать HttpModule для проверки строки запроса и таким образом установить культуру для запроса текущей страницы.

...