Jeżeli będziecie kiedyś w potrzebie zaimplementowania obsługi kilku języków w aplikacji opartej na WPF, to możecie skorzystać z tego wpisu. Nie jest to moje rozwiązanie, a raczej opracowanie artykułu znalezionego na codeproject. Jeżeli coś nie będzie działa, nie będzie jasne, czy w ogóle nie będzie to pytania kierujcie do mnie lub bezpośrednio do autora artykułu na codeproject. To co tutaj zamierzam umieścić, to tylko kilka kroków, które podsumowują całą pracę potrzebną do implementacji interesującej nas funkcjonalności. To tyle tytułem wyjaśnienia i wprowadzenia.
Nazwy klas odpowiadają tym, które zostały użyte w kodzie dostępnym pod tym adresem. Kod w przykładzie z codeproject używa innych nazw.
Kroki potrzebne do zaimplementowania funkcjonalności:
1) Utwórz projekt
2) Utwórz katalog w projekcie. W katalogu będziesz trzymać zasoby. Oraz implementacje klasy, zwracającej instancje zasobów, oraz obsługującej zmianę aktualnego języka
3) Dodaj zasoby do projektu
3a) Ustaw custom namespace na wpfMUI.Properties (wpfMUI to nazwa mojego projektu)
3b) Usuń domyślne zasoby z Properties
4) Utwórz klasę LocalResources
4a) Prze(pisz|kopiuj) kod klasy
5) Dodaj do projektu ResourceDictionary
5a)Prze(pisz|kopiuj) kod
6) W app.xaml dodaj ResourceDictionary do zasobów aplikacji, prze(pisz|kopiuj)
7) W Properties.Settings ustaw domyślną wartość dla CultureInfo, w przykładnie “en” jest domyślny
8) W inicjalizacji głównego okna skorzystaj z tej wartości, przeczytaj komentarz w projekcie.
9) Podepnij obsługę comboboxa, pamiętaj to tylko przykład. W normalnym projekcie, kto inny będzie informować klasę LocalResources o zmianach.
10) W zasobach ustaw dostęp na publiczny
10a) Stwórz kopie zasobów, zmień nazwę na Resources.en.resx
10b) Zrób kopie i zmień nazwę na Resources.pl.resx
10c) Ustaw odpowiednie wartości dla poszczególnych wersji językowych
11) Ustaw właściwy content dla kontrolek, np dla guzika:
Content="{Binding Path=buttonText, Source={StaticResource Resources}}"
Dla combobox:
ItemsSource="{Binding Mode=OneTime, Path=SupportedCultures,Source={StaticResource SuppCultures}}
Możesz też użyć ustawiania właściwości dla kontrolek, ale zauważyłem że Path i tak należy ustawić ręcznie.
Po tym wszystkim, możesz próbować kompilować projekt i odpalać. Potem tylko drobne poprawki i wszystko powinno działać. Projekt jak często można pobrać z xp-dev
Cieszysz się?
One thought on “WPF w wielu językach”