Tworzenie aplikacji wielojęzycznych z C# i WPF w Visual Studio

Tworzenie aplikacji wielojęzycznych z C# i WPF w Visual Studio

Podczas tworzenia aplikacji warto od razu uwzględnić fakt, że żyjemy w dobie globalizacji i naszą aplikacją mogą być również zainteresowani klienci poza granicami naszego kraju. Dlatego warto już na samym początku projektu przygotować mechanizm do obsługi wielu wersji językowych.

W przypadku technologii WPF jest wiele sposobów na lokalizowanie aplikacji i każda z nich ma swoje wady i zalety.

Jedna z metod polecanych przez Microsoft opiera się na znacznikach Uid. Polega o na tym, że w pliku XAML każdej kontrolce nadajemy unikalny identyfikator Uid. Następnie za pomocą narzędzia LocBalm generujemy pliki tekstowe CSV, które możemy wysłać do tłumaczenia. Następnie na podstawie przetłumaczonych plików generujemy pliki z zasobami.

Niestety ta metoda jest dosyć złożona o czym można się przekonać czytając MSDN
https://msdn.microsoft.com/library/ms788718(v=vs.100).aspx

Dlatego chciałbym zaproponować inne rozwiązanie z użyciem narzędzia Multilingual App Toolkit. Multilingual App Toolkit to dodatek do Visual Studio, który bardzo upraszcza proces tłumaczenia aplikacji. Zamiast znaczników Uid będziemy wykorzystywać statyczne odwołania do zasobów.
Załóżmy, że mamy okno MainWindow.xaml z przyciskiem i chcemy przetłumaczyć tekst:


  1. W Visual Studio w opcji Tools|Extensions wyszukujemy Multilingual App Toolkit i instalujemy dodatek. Po
    zainstalowaniu należy zrestartować Visual Studio.
  2. Otwieramy projekt i we właściwościach aplikacji ustawiamy neutralny język: Application|Assembly
    Information|Neutral Language np. English (United States)
  3. W folderze Properties otwieramy plik zasobów Resources.resx i zmieniamy Access Modifier na Public. W innym
    przypadku XAML nie będzie miał dostępu do zasobów.
  4. Następnie dopisujemy do pliku zasobów string np. Title i tekst Hello
  5. Następnie wybieramy opcję Tools|Multilingual App Toolkit|Enable Selection
  6. Na projekcie wybieramy Multilingual App Toolkit | Add Translation Languages i wybieramy np. język polski
    pl-PL. Do projektu zostanie dodany folder MultilingualResources wraz z plikiem xlf dla wybranego języka.
  7. Klikamy dwukrotnie na plik xlf. Wyświetli się okno Multilingual Editor. Teraz możemy przetłumaczyć ręcznie
    tekst lub skorzystać z możliwości automatycznego tłumaczenia za pomocą opcji Translate. Opcja ta korzysta z
    Microsoft Translator.
  8. Gdy dodajemy nowe teksty do pliku z zasobami Resources.resx należy wybrać opcję Multilingual App Toolkit |
    Generate machine translations
  9. Wracamy do widoku MainWindow.xaml
  10. Dodajemy przestrzeń nazw do zasobów:
  11. Zamieniamy odwołanie na przycisku do zasobu:
  12. Budujemy projekt. W projekcie pojawi się plik Resources.pl-PL.resx a w katalogu z binariami pojawi się
    podkatalog pl-PL i biblioteka dll z zasobami.

Teraz możemy uruchomić aplikację F5.

Jeśli mamy ustawiony polski język w ustawieniach regionalnych systemu Windows powinniśmy zobaczyć przetłumaczony przycisk. Zależnie od wybranego języka w systemie Windows będzie ładowany odpowiedni plik z zasobami.

Jeśli chcemy ułatwić sobie testowanie różnych języków podczas tworzenia aplikacji bez potrzeby przełączania ustawień regionalnych możemy dopisać:

Otwórz plik App.xaml.cs

Warto nadmienić że pliki XLIFF, które generuje Multilingual App Toolkit to uznany standard przemysłowy w formacie XML. Pliki te oprócz tekstu źródłowego i docelowego mogą zawierać dodatkowe komentarze oraz informacje o statusie tłumaczenia, więc mogą być włączone w cały proces tłumaczenia.
Dzięki temu, że jest to standard, pliki mogą zostać przesłane do tłumacza, który wcale nie musi posiadać Visual Studio.

Zobacz również

W listopadzie podpisaliśmy umowę na świadczenie usługi przygotowania interaktywnej mapy zasobów województwa...
Nasza firma podpisała kolejną umowę na realizację projektu rozwijającego i wspierającego system...
Rozpoczynamy realizację projektu wsparcia serwisowego i programistycznego Systemu Obsługi Programów (SOP) dla...