Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages
Started by Robert Sadza
Fri, 22 Feb 2013 07:04
UICulture i GetLocalResourceObject
Author: Robert Sadza
Date: Fri, 22 Feb 2013 07:04
Date: Fri, 22 Feb 2013 07:04
15 lines
1575 bytes
1575 bytes
Witam, mam aplikacje ASP.net 4.0 aplikacja ma działać dla języka polskiego i angielskiego, przykładowo mam default.aspx i dla tego pliku wygenerowane pliki lokalnych zasobów default.aspx.resx i default.aspx.en.resx przy zmianie UICulture z polskiego na angielski wartości z plików zasobów są prawidłowo pobierane, ale gdy chem pobrać wartość z pliku zasobu za pomocą GetLocalResourceObject zawsze jest pobierana wartość z pliku default.aspx.resx niezależnie jak jest w danym momencie ustawione UICulture. 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? Z góry dziękuje za pomoc. Pozdrawiam RS
Re: UICulture i GetLocalResourceObject
Author: Łukasz 'Maly' Ostrowski
Date: Fri, 22 Feb 2013 17:09
Date: Fri, 22 Feb 2013 17:09
46 lines
2594 bytes
2594 bytes
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/
Re: UICulture i GetLocalResourceObject
Author: Robert Sadza
Date: Tue, 26 Feb 2013 11:40
Date: Tue, 26 Feb 2013 11:40
16 lines
1829 bytes
1829 bytes
Dziękuje za odpowiedz. > 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) > Sprawdziłem CurrentThread.CurrentUICulture jest ustawione prawidłowo. Ogólnie to źle opisałem problem bo w moim projekcie dla stron aspx również prawidłowo pobiera dane z plików zasobów, problem występuje gdy używam GetLocalResourceObjest w User Control czyli wgląda jak by nie było zmienione UICulture dla user control a jest ustawione na en-US.
Re: UICulture i GetLocalResourceObject
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 26 Feb 2013 12:43
Date: Tue, 26 Feb 2013 12:43
36 lines
2319 bytes
2319 bytes
On Tue, 26 Feb 2013 12:40:54 +0100, Robert Sadza wrote:
> Sprawdziłem CurrentThread.CurrentUICulture jest ustawione prawidłowo.
>
> Ogólnie to źle opisałem problem bo w moim projekcie dla stron aspx
> również prawidłowo pobiera dane z plików zasobów, problem występuje gdy
> używam GetLocalResourceObjest w User Control czyli wgląda jak by nie
> było zmienione UICulture dla user control a jest ustawione na en-US.
UICulture jest ustawione per-thread, więc technicznie rzecz ujmując
nie może być źle ustawione dla User Control. Strzelałbym, że
problem jest tej natury:
http://stackoverflow.com/questions/2029315/resource-file-for-a-custom-asp-net-control-ascx-invalidoperationexception
<quote>
When you call GetLocalResourceObject from within a user control, you are
actually calling TemplateControl.GetLocalResourceObject, which will look in
the wrong place for the resource file.
<quote>
Tzn. zamiast wołać lokalny GLRO(czyli, implicit GLRO z TemplateControl),
zawołać:
<quote>
protected string HttpContextGetLocalResourceObjectAsString(string message)
{
string path = HttpContext.Current.Request.Path;
return (HttpContext.GetLocalResourceObject(path, message) as string);
}
label1.InnerText = HttpContextGetLocalResourceObjectAsString("default");
</quote>
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: UICulture i GetLocalResourceObject
Author: Robert Sadza
Date: Wed, 27 Feb 2013 07:34
Date: Wed, 27 Feb 2013 07:34
31 lines
2260 bytes
2260 bytes
> UICulture jest ustawione per-thread, więc technicznie rzecz ujmując
> nie może być źle ustawione dla User Control. Strzelałbym, że
> problem jest tej natury:
>
> http://stackoverflow.com/questions/2029315/resource-file-for-a-custom-asp-net-control-ascx-invalidoperationexception
>
> <quote>
> When you call GetLocalResourceObject from within a user control, you are
> actually calling TemplateControl.GetLocalResourceObject, which will look in
> the wrong place for the resource file.
> <quote>
>
> Tzn. zamiast wołać lokalny GLRO(czyli, implicit GLRO z TemplateControl),
> zawołać:
>
> <quote>
> protected string HttpContextGetLocalResourceObjectAsString(string message)
> {
> string path = HttpContext.Current.Request.Path;
> return (HttpContext.GetLocalResourceObject(path, message) as string);
> }
>
> label1.InnerText = HttpContextGetLocalResourceObjectAsString("default");
> </quote>
>
to rozwiązanie również nie zadziałało. Na obecną chwile utworzyłem plik
globalnych zasobów dla języka polskiego i angielskiego i za pomocą
HttpContext.GetGlobalResourceObject pobiera prawidłowe wartości w
zależności od ustawionego języka.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads