2010-09-28 2 views
3

У меня есть два ресурс файлов под App_GlobalResourcesNightmare с локализацией по глобальным ресурсам

MyApp.resx 
MyApp.sv.resx 

для тех, кто не знает: Всех языков Откат к MyApp.resxкроме шведского UICulture будет использовать MyApp.sv.resx

и у меня есть простая страница, которая показывает 3 <asp:Label> в witch Text Недвижимость называется по-другому:

<i>using Resource.Write:</i><br /> 
    <asp:Label ID="Label1" runat="server" /> 
    <hr /> 

    <i>using HttpContext.GetGlobalResourceObject:</i><br /> 
    <asp:Label ID="Label2" runat="server" /> 
    <hr /> 

    <i>using Text Resources:</i><br /> 
    <asp:Label ID="Label3" runat="server" 
       Text="<%$ Resources:MyApp, btnRemoveMonitoring %>" /> 

    <p style="margin-top:50px;"> 
    <i>Current UI Culture:</i><br /> 
     <asp:Literal ID="litCulture" runat="server" /> 
    </p> 

Label3 является единственным называется на странице, то первые 2 установлены как:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     Label1.Text = Resources.AdwizaPAR.btnRemoveMonitoring; 
     Label2.Text = HttpContext.GetGlobalResourceObject("MyApp", "btnRemoveMonitoring").ToString(); 

     litCulture.Text = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; 
    } 
} 

, если я использую языкбраузер все работает отлично, но я хочу, чтобы переопределить эту настройку и нагрузки правильный перевод основан на другом входе, так что мне нужно перезаписать UICulture и для этого я использую:

protected void Page_Init(object sender, EventArgs e) 
{ 
    Page.Culture = "en-US"; 
    Page.UICulture = "en-US"; 
} 

ведьма такой же, как:

protected void Page_Init(object sender, EventArgs e) 
{ 
    System.Globalization.CultureInfo cinfo = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); 
    System.Threading.Thread.CurrentThread.CurrentCulture = cinfo; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = cinfo; 
} 

со всем этим, что я получаю это:

alt text

Другими словами я получаю правильную локализацию только если я использую code-behind, чтобы установить правильный текст , вся локализация inline просто использует язык браузера.

Что мне не хватает?

ответ

3

кошмар закончился ...

Page_Init не изменяет доступа к глобальным ресурсам, мы должны override инициализацию к culure

protected override void InitializeCulture() 
{ 
    //*** make sure to call base class implementation 
    base.InitializeCulture(); 

    //*** pull language preference from profile 
    string LanguagePreference = "en-US"; // get from whatever property you want 

    //*** set the cultures 
    if (LanguagePreference != null) 
    { 
     this.UICulture = LanguagePreference; 
     this.Culture = LanguagePreference; 
    } 
} 

Теперь все работает правильно

alt text

0

Если вы не хотите менять каждую страницу, вы можете установить Культура в Global.asax

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    Dim lang As String = "en-us" 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang) 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang) 
End Sub 
+0

Я наследую свои страницы из одного класса ... добавил туда, но спасибо за головы. – balexandre