Instrukcje: lokalizowanie aplikacji
W tym samouczku wyjaśniono, jak utworzyć zlokalizowaną aplikację przy użyciu narzędzia LocBaml.
Notatka
Narzędzie LocBaml nie jest aplikacją gotową do produkcji. Jest on przedstawiony jako przykład, który używa niektórych interfejsów API lokalizacji i ilustruje, jak można napisać narzędzie lokalizacji.
Przegląd
Ten artykuł zawiera szczegółowe podejście do lokalizowania aplikacji. Najpierw należy przygotować aplikację, aby można było wyodrębnić tekst, który zostanie przetłumaczony. Po przetłumaczeniu tekstu łączy się przetłumaczony tekst z nową kopią oryginalnej aplikacji.
Tworzenie przykładowej aplikacji
W tym kroku przygotujesz aplikację do lokalizacji. W przykładach programu Windows Presentation Foundation (WPF) podano przykład HelloApp, który będzie używany do przykładów kodu w tej dyskusji. Jeśli chcesz użyć tego przykładu, pobierz pliki Extensible Application Markup Language (XAML) z LocBaml Tool Sample.
Opracuj aplikację do etapu, gdzie chcesz rozpocząć lokalizację.
Określ język programowania w pliku projektu, aby program MSBuild wygenerował główny zestaw i zestaw satelitarny (plik z rozszerzeniem .resources.dll) zawierający neutralne zasoby językowe. Plik projektu w przykładzie HelloApp to HelloApp.csproj. W tym pliku znajdziesz język programowania zidentyfikowany w następujący sposób:
<UICulture>en-US</UICulture>
Dodaj identyfikatory UID do plików XAML. Identyfikatory Uid służą do śledzenia zmian w plikach i identyfikowania elementów, które należy przetłumaczyć. Aby dodać identyfikatory UID do plików, uruchom
updateuid
w pliku projektu:msbuild -t:updateuid helloapp.csproj
Aby sprawdzić, czy nie brakuje lub nie ma zduplikowanych identyfikatorów Uid, uruchom polecenie
checkuid
:msbuild -t:checkuid helloapp.csproj
Po uruchomieniu
updateuid
pliki powinny zawierać identyfikatory UID. Na przykład w pliku Pane1.xaml aplikacji HelloApp powinny znajdować się następujące elementy:<StackPanel x:Uid="StackPanel_1"> <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock> <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock> </StackPanel>
Tworzenie satelitarnego zestawu zasobów języka neutralnego
Po skonfigurowaniu aplikacji do generowania satelitarnego zestawu zasobów w neutralnym języku, skompiluj aplikację. Wynikiem tego jest wygenerowanie głównego zestawu aplikacji oraz satelitarnego zestawu zasobów neutralnojęzykowych, który jest wymagany przez LocBaml do celów lokalizacyjnych.
Aby skompilować aplikację:
Skompiluj aplikację HelloApp, aby utworzyć bibliotekę linku dynamicznego (DLL):
msbuild helloapp.csproj
Nowo utworzony główny zestaw aplikacji, HelloApp.exe, jest tworzony w następującym folderze: C:\HelloApp\Bin\Debug
Nowo utworzony zestaw satelitarny zasobów w języku neutralnym, HelloApp.resources.dll, jest tworzony w następującym folderze: C:\HelloApp\Bin\Debug\en-US
Kompilowanie narzędzia LocBaml
Wszystkie pliki niezbędne do skompilowania LocBaml znajdują się w przykładach WPF. Pobierz pliki języka C# z przykładowego narzędzia LocBaml.
W wierszu polecenia uruchom plik projektu (locbaml.csproj), aby skompilować narzędzie:
msbuild locbaml.csproj
Przejdź do katalogu Bin\Release, aby znaleźć nowo utworzony plik wykonywalny (locbaml.exe). Przykład: C:\LocBaml\Bin\Release\locbaml.exe
Opcje, które można określić podczas uruchamiania LocBaml, są następujące.
Opcja Opis parse
lub-p
Analizuje pliki Baml, resources lub DLL, aby wygenerować plik .csv lub .txt. generate
lub-g
Generuje zlokalizowany plik binarny przy użyciu przetłumaczonego pliku. out
lub-o
{katalog plików]Nazwa pliku wyjściowego. culture
lub-cul
{kultury]Ustawienia regionalne zestawów wyjściowych. translation
lub-trans
{translation.csv]Przetłumaczony lub zlokalizowany plik. asmpath
lub-asmpath
{katalog plików}Jeśli kod XAML zawiera kontrolki niestandardowe, należy podać asmpath
do niestandardowego zestawu kontrolek.nologo
Nie wyświetla logo ani informacji o prawach autorskich. verbose
Wyświetla szczegółowe informacje trybu verbose. Uwaga
Jeśli potrzebujesz listy opcji podczas uruchamiania narzędzia, wprowadź
LocBaml.exe
, a następnie naciśnij Enter.
Analizowanie pliku za pomocą metody LocBaml
Teraz, gdy utworzyłeś narzędzie LocBaml, jesteś gotowy, aby użyć go do przeanalizowania HelloApp.resources.dll w celu wyodrębnienia zawartości tekstowej, która zostanie zlokalizowana.
Skopiuj LocBaml.exe do folderu bin\debug aplikacji, w którym utworzono główny zestaw aplikacji.
Aby przeanalizować plik zestawu satelitarnego i zapisać dane wyjściowe jako plik .csv, użyj następującego polecenia:
LocBaml.exe /parse HelloApp.resources.dll /out:Hello.csv
Notatka
Jeśli plik wejściowy, HelloApp.resources.dll, nie znajduje się w tym samym katalogu, co LocBaml.exe przenieść jeden z plików, tak aby oba pliki znajdują się w tym samym katalogu.
Po uruchomieniu LocBaml do parsowania plików dane wyjściowe składają się z siedmiu pól oddzielonych przecinkami (dla plików.csv) lub tabulatorami (dla plików.txt). Poniżej przedstawiono przeanalizowany plik .csv dla HelloApp.resources.dll:
Przeanalizowany plik .csv HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2; HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Witaj świecie HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World Siedem pól to:
nazwa BAML. Nazwa zasobu BAML w kontekście zestawu satelitarnego języka źródłowego.
klucz zasobu. Zlokalizowany identyfikator zasobu.
kategoria. Typ wartości. Zobacz Atrybuty lokalizacji i komentarze.
czytelność. Czy wartość może być odczytywana przez lokalizator. Zobacz Atrybuty lokalizacji i komentarze.
modyfikowalność. Określa, czy wartość można modyfikować za pomocą lokalizatora. Zobacz atrybuty lokalizacji i komentarze .
komentarze. Dodatkowy opis wartości, aby ułatwić określenie lokalizacji wartości. Zobacz Atrybuty lokalizacji i komentarze.
wartość. Wartość tekstowa do tłumaczenia na żądaną kulturę.
Poniższa tabela pokazuje, w jaki sposób te pola są mapowane na rozdzielane wartości pliku .csv.
Nazwa BAML Klucz zasobu Kategoria Czytelność Modyfikowalność Komentarze Wartość HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Ignoruj FAŁSZYWY FAŁSZYWY #Text1;#Text2 HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content Żaden PRAWDZIWY PRAWDZIWY Witaj świecie HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content Żaden PRAWDZIWY PRAWDZIWY Żegnaj Świat Zwróć uwagę, że wszystkie wartości pola komentarze nie zawierają wartości; Jeśli pole nie ma wartości, jest puste. Należy również zauważyć, że pozycja w pierwszym rzędzie nie jest ani czytelna, ani modyfikowalna, a jej kategoria jest określona jako "Ignoruj" (Category), co wskazuje, że wartość nie jest lokalizowalna.
Aby ułatwić odnajdywanie elementów lokalizowalnych w plikach analizowanych, szczególnie w dużych plikach, można sortować lub filtrować elementy według kategorii, czytelnościi modyfikowalnej. Na przykład można odfiltrować nieprzeczytane i niezmodyfikowane wartości.
Tłumaczenie zawartości lokalizowalnej
Użyj dowolnego dostępnego narzędzia do tłumaczenia wyodrębnionej zawartości. Dobrym sposobem jest zapisanie zasobów w pliku .csv i wyświetlenie ich w programie Microsoft Excel, wprowadzenie zmian tłumaczenia w ostatniej kolumnie (wartość).
Generowanie nowego pliku .resources.dll za pomocą narzędzia LocBaml
Zawartość zidentyfikowana przez analizę HelloApp.resources.dll z LocBaml została przetłumaczona i musi zostać scalona z powrotem do oryginalnej aplikacji. Użyj opcji generate
lub -g
, aby wygenerować nowy plik .resources.dll.
Użyj następującej składni, aby wygenerować nowy plik HelloApp.resources.dll. Oznacz kulturę jako en-US (/cul:en-US).
LocBaml.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US
Notatka
Jeśli plik wejściowy, Hello.csv, nie znajduje się w tym samym katalogu co plik wykonywalny, LocBaml.exe, przenieś jeden z plików, aby oba pliki znajdują się w tym samym katalogu.
Zastąp stary plik HelloApp.resources.dll w katalogu C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll nowo utworzonym plikiem HelloApp.resources.dll.
"Hello World" i "Goodbye World" powinny być teraz tłumaczone w aplikacji.
Aby przetłumaczyć na inną kulturę, użyj kultury języka, na który tłumaczysz. W poniższym przykładzie pokazano, jak przetłumaczyć na język francuski-kanadyjski:
LocBaml.exe /generate HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA
W tym samym zestawie co główny zestaw aplikacji utwórz nowy folder specyficzny dla kultury, aby pomieścić nowy zestaw satelitarny. W przypadku Francuzów-Kanadyjczyk folder będzie fr-CA.
Skopiuj wygenerowany zestaw satelitarny do nowego folderu.
Aby przetestować nowy zestaw satelitarny, należy zmienić kulturę, w której będzie uruchamiana aplikacja. Można to zrobić na jeden z dwóch sposobów:
Zmień ustawienia regionalne systemu operacyjnego.
W aplikacji dodaj następujący kod do pliku App.xaml.cs.
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.App" x:Uid="Application_1" StartupUri="Window1.xaml"> </Application>
using System.Windows; using System.Globalization; using System.Threading; namespace SDKSample { public partial class App : Application { public App() { // Change culture under which this application runs CultureInfo ci = new CultureInfo("fr-CA"); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; } } }
Imports System.Windows Imports System.Globalization Imports System.Threading Namespace SDKSample Partial Public Class App Inherits Application Public Sub New() ' Change culture under which this application runs Dim ci As New CultureInfo("fr-CA") Thread.CurrentThread.CurrentCulture = ci Thread.CurrentThread.CurrentUICulture = ci End Sub End Class End Namespace
Porady dotyczące korzystania z locBaml
Wszystkie zależne zestawy, które definiują kontrolki niestandardowe, muszą być kopiowane do katalogu lokalnego LocBaml lub zainstalowane w GAC. Jest to konieczne, ponieważ API lokalizacji musi mieć dostęp do zależnych bibliotek podczas odczytywania binarnego XAML (BAML).
Jeśli zestaw główny jest podpisany, wygenerowana biblioteka DLL zasobu musi być również podpisana, aby można było go załadować.
Wersja zlokalizowanej biblioteki DLL zasobu musi być zsynchronizowana z głównym elementem zestawu.
Zobacz też
- globalizacja dla WPF
- użyj automatycznego przeglądu układu
.NET Desktop feedback