sobota, 24 kwietnia 2010

Globalizacja w ASP.NET

Internet to ogromna społeczność, zrzeszająca użytkowników z całego świata. Odwiedzający naszą stronę internauci, mogą mieszkać w różnych krajach i posługiwać się różnymi językami. Odwiedzając naszą stronę, z pewnością chcieliby przeczytać zawarte na niej informacje w swoim ojczystym języku.
ASP.NET oferuje bardzo prosty mechanizm, pozwalający na uzyskanie wielojęzyczności naszej strony – globalizacja.
Globalizację w ASP.NET uzyskujemy dzięki plikom typu resource. W pliku takim znajduje się tekst strony dla danego języka. Użytkownik wchodząc na stronę może wybrać lub poprzez jego ustawienia przeglądarki zostanie dla niego automatycznie wybrany język o ile jest dostępny. Jeżeli nie ma, zostanie wybrany domyślny język dla naszej strony. Tworzenie plików resorce powinno podlegać odpowiedniemu nazewnictwu ich. Mając stronę nazwaną WebForm1.aspx plik resursa powinien być nazwany: WebForm1.aspx.resx. Takie nazwanie powoduje, że będzie to także domyślnie ładowany plik. Co to oznacza dla nas? Jeśli ktoś z Japonii będzie chciał się dostać na naszą stronę, a my nie będziemy mieli naszej strony przetłumaczonej na ten język, użytkownik zostanie automatycznie przekierowany do pliku domyślnego. Aby stworzyć plik resource dla specyficznego języka używamy następującego schematu: .aspx..resx czyli np. dla podanego wyżej przykładu i języka niemieckiego mamy: WebForm1.aspx.de.resx.
Visual Studio pozwala na bardzo szybkie i łatwe generowanie takich plików. Zobaczmy na przykład poniższej aplikacji:








Aby wygenerować plik klikamy kolejno (należy być w trybie design): Options -> Tools -> Generate Local Resource. Powoduje to kolejno:
- stworzenie folderu App_LocalResource (o ile jeszcze nie został stworzony)
- wygenerowanie pliku resource, zawierającego wszystkie widzialne (wyświetlane) teksty (caption, text, tooltip itp.)

Plik ten można podglądnąć klikając na niego dwukrotnie:


Plik który otworzyliśmy jest plikiem XML. Można go edytować dowolnym edytorem XMLa czy nawet zwykłym notatnikiem. Większość wpisów to węzły typu nazwa – wartość (nazwa kontrolki na formie – wyświetlany tekst). Ważne jest tu stwierdzenie „nazwa kontrolki” – oznacza to tyle, że jeżeli wprowadzimy jakiś tekst w czystej formie (nie korzystając z kontrolki) tekst ten nie zostanie uwzględniony w pliku resource. Należy więc mieć to na uwadze i dla własnej wygody stosować wszędzie gdzie się da kontrolki.

Przypisanie kontrolek do konkretnego pliku resource odbywa się poprzez dodanie znacznika XML meta:resourcekey do atrybutów danej kontrolki. Przykładowo dla kontrolki TextBox będzie to:


Ważne jest pamiętać, że Visual Studio nie będzie uaktualniał pliku resource. Po dodaniu nowej kontrolki, należy samemu się zatroszczyć o to, żeby ją poprawnie interpretował nasz zasób. Najłatwiej wykonać pliki resource na końcu pracy z projektem.

Aby dodać kolejny język do naszego projektu, kopiujemy plik resource, który jest domyślnym, wklejamy go do tego samego folderu i odpowiednio go nazywamy. Następnie zmieniamy wewnątrz tego pliku pola odpowiedzialne za wyświetlanie tekstu. Dla przykładu stworzyłem na podstawie domyślnego języka, plik dla użytkowników anglojęzycznych:


Oczywiście, wybór kultury możemy powierzyć użytkownikowi. Aby programistycznie przypisać język aplikacji danemu plikowi resorce, należy podczas wywoływania metody InitializeCulture odpowiednio przypisać właściwości UICulture język:

        protected override void InitializeCulture()
        {
            switch (languageId)
            {
                case 1:
                    UICulture = "pl";
                    break;
                case 2:
                    UICulture = "en";
                    break;
                default:
                    break;
            }
            base.InitializeCulture();
        }


To wszystko co jest wymagane, aby z łatwością korzystać z wielojęzyczności w aplikacjach ASP.NET

1 komentarz:

  1. Bomba, dzięki!
    Krótko i konkretnie, i o to właśnie chodzi.
    Pokój!

    OdpowiedzUsuń