Wersje językowe. 1. Przygotowanie obsługi multijęzykowej Część stron wymaga obsługi wielojęzycznej. W ich wypadku wymagane jest, aby teksty na stronie pojawiały się w natywnym języku użytkownika odwiedzającego stronę. Informacja o preferowanym języku użytkownika znajduję się w nagłówku Accept-Language żądania (podobnie jak ciasteczka) przesyłanego do serwera przez przeglądarkę. Analizując żądania za pomocą narzędzi developerskich można odczytać listę preferowanych języków, jak na poniższym przykładzie. Accept-Language: pl-pl,pl;q=0.8,en-us;q=0.6,en;q=0.4 Natomiast w MVC po stronie serwera nagłówek ten zostanie przypisany do pola UserLanguages w obiekcie Reguest przechowującym wszystkie informacje odebranego żądania. UserLanguages jest listą typu string tak więc odwołując się do pierwszego indeksu pobierzemy nazwę języka najbardziej preferowanego przez użytkownika. Request.UserLanguages[0]; W naszym przypadku zwrócony zostanie string pl-pl ; Aby natomiast ustawić w systemie MVC język należy podmienić wartości, jak na poniższym przykładzie. Po tej zmianie MVC będzie starało się wyświetlać napisy we wskazanym lub domyślnym języku. Zmiana języka ma również wpływ na sposób interpretacji przesyłanych zmiennych, w szczególności formatu dat i liczb ułamkowych, gdyż system stara się dostosować do klienta. var ci = new CultureInfo("pl-PL"); Thread.CurrentThread.CurrentUICulture = ci; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); Pokazaną zmianę przeprowadza się przed rozpoczęciem obsługi żądania. W tym celu przeciąża się metodę w klasie aplikacji w pliku Global.asax. Metoda ta zostanie wywołana przed wywołaniem właściwej metody kontrolera, do której się odwoła. protected void Application_AcquireRequestState(object sender, EventArgs e) { } Wymuszenie języka służy również do zmiany języka strony na żądanie klienta. Najczęściej odbywa się to poprzez akcję kliknięcia na flagę odpowiedniego państwa. Po czym wskazana wartość zostanie wpisana w ciasteczko. Response.Cookies.Add(new System.Web.HttpCookie("Culture", pl-pl )); Następnie za każdym razem nazwę wybranego języka można pobrać z ciasteczka. var cokie = Request.Cookies["Culture"]; CultureInfo ci = cokie!= null? new CultureInfo( cokie.value ) : null;
2. Dodawanie plików tłumaczeń. Aby można było wyświetlać teksty w różnych wersjach językowych należy zwroty umieszczać w plikach resource file (.resx). Każdy plik zawiera zestaw zwrotów w tym samym języku. Wersja językowa rozróżniana jest w systemie po rozszerzeniu, jak np. <nazwa>.en-us.resx, <nazwa>.pl- PL.resx. Zestawy bez tego rozszerzenia są zestawami domyślnymi, gdy żaden powyższy nie zostanie wskazany.
3. Używanie plików zasobów w kodzie. Po dodaniu plików zasobów można ich używać w dowolnym miejscu kodu widoku lub kontrolera, wystarczy dodać przestrzeń nazw odpowiadających plikowi z zasobami. Wersję językowe modeli, [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(errors))] [StringLength(250, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(errors))] [Display(Name = "name", ResourceType = typeof(modelresources))]
Zadanie Przebudować kod obecnego projektu, tak aby obsługiwał przynajmniej dwa języki.