On Fri, 22 Feb 2013 08:04:07 +0100, Robert Sadza wrote:
> Jak zmusić aplikacje aby w zależności od ustawionego języka
> pobierała wartości za pomocą GetLocalResourceObject z pliku zasobu dla
> określonego języka?
Machnąłem szybki proof-of-concept:
1. Minimalny projekt
ASP.NET 4
2. Dodałem App_LocalResources
2.1. Dodałem tam Default.aspx.resx i Default.aspx.en.resx
2.2. W obu resx'ach wstawiłem klucz Foo z wartościami
- Bar Default (w culture neutral)
- Bar English (w en)
3. Utworzyłem Default.aspx z zawartością:
<%
Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo("pl-PL");
Response.Write(GetLocalResourceObject("Foo"));
Response.Write(" /// ");
Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo("en-US");
Response.Write(GetLocalResourceObject("Foo"));
%>
4. Odpaliłem i otrzymałem:
Bar Default /// Bar English
5. Na pierwszy rzut oka working as intended.
Także, za mało informacji ;-). Proponuję zaznaczyć debugowanie kodu
.NET Framework w Debugging Options i sobie "wejść" w framework. Upewnić
się że nie ma literówek i upewnić się że wartość
CurrentThread.CurrentUICulture jest poprawna. W ostateczności sprawdzić
czy poprawnie działa overload z dodatkowym argumentem:
(W Reflectorze widzę żę bezargumentowy GetLocal...
pobiera locale z CultureInfo.CurrentUICulture)
p.s. O który właściwie GetLocalResourceObject chodzi:
- HttpContextBase
- HttpContextWrapper
- HttpContext
- TemplateControl? (Niewielkie znaczenie, wszystkie i tak
są właściwie proxy do tego samej implementacji, przynajmniej tak
podpowiada Reflector - System.Web.Compilation.LocalResXResourceProvider)
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://l3v.pl/