Instrukcje: lokalizowanie aplikacji
W tym samouczku wyjaśniono, jak utworzyć zlokalizowaną aplikację przy użyciu narzędzia LocBaml.
Uwaga
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.
Omówienie
Ten artykuł zawiera szczegółowe podejście do lokalizowania aplikacji. Najpierw należy przygotować aplikację, aby tekst, który zostanie przetłumaczony, można wyodrębnić. Po przetłumaczeniu tekstu scalisz przetłumaczony tekst na 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 przykładu narzędzia LocBaml.
Opracuj aplikację do punktu, w którym 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 polecenie
updateuid
w pliku projektu:msbuild -t:updateuid helloapp.csproj
Aby sprawdzić, czy nie brakuje ani zduplikowanych identyfikatorów Uid, uruchom polecenie
checkuid
:msbuild -t:checkuid helloapp.csproj
Po uruchomieniu
updateuid
plik powinien 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 zestawu satelitarnego zasobów neutralnego języka
Po skonfigurowaniu aplikacji do generowania zestawu satelitarnego zasobów neutralnego języka należy skompilować aplikację. Spowoduje to wygenerowanie głównego zestawu aplikacji, a także zestawu satelitarnego zasobów języka neutralnego, który jest wymagany przez LocBaml na potrzeby lokalizacji.
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ładu 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
{filedirectory]Nazwa pliku wyjściowego. culture
lub-cul
{culture]Ustawienia regionalne zestawów wyjściowych. translation
lub-trans
{translation.csv]Przetłumaczony lub zlokalizowany plik. asmpath
lub-asmpath
{filedirectory]Jeśli kod XAML zawiera kontrolki niestandardowe, należy podać go asmpath
do niestandardowego zestawu kontrolek.nologo
Wyświetla żadne informacje o logo ani prawach autorskich. verbose
Wyświetla pełne informacje o trybie. Uwaga
Jeśli potrzebujesz listy opcji podczas uruchamiania narzędzia, wprowadź,
LocBaml.exe
a następnie naciśnij klawisz Enter.
Analizowanie pliku za pomocą metody LocBaml
Po utworzeniu narzędzia LocBaml możesz użyć go do przeanalizowania pliku HelloApp.resources.dll w celu wyodrębnienia zawartości tekstowej, która zostanie zlokalizowana.
Skopiuj plik 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
Uwaga
Jeśli plik wejściowy HelloApp.resources.dll nie znajduje się w tym samym katalogu co LocBaml.exe, przenieś jeden z plików, aby oba pliki były w tym samym katalogu.
Po uruchomieniu metody LocBaml do analizowania plików dane wyjściowe składają się z siedmiu pól rozdzielonych przecinkami (plikami CSV) lub kartami (pliki txt). Poniżej przedstawiono przeanalizowany plik CSV dla biblioteki HelloApp.resources.dll:
Przeanalizowany plik CSV HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE,,#Text1;#Text2; HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World 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 odniesieniu do 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.
Możliwość modyfikacji. 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ę.
W poniższej tabeli przedstawiono sposób mapowania tych pól na rozdzielane wartości pliku CSV:
Nazwa BAML Klucz zasobu Kategoria Czytelność Modifiability Komentarze Wartość HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Ignoruj FAŁSZ FAŁSZ #Text1;#Text2 HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content None PRAWDA PRAWDA Witaj, świecie HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content None PRAWDA PRAWDA Ż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 element w pierwszym wierszu nie jest ani czytelny, ani modyfikowalny, i ma wartość "Ignoruj" jako wartość Kategoria , z których wszystkie wskazują, ż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ści i modyfikacji. 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 przy użyciu biblioteki LocBaml
Zawartość, która została zidentyfikowana przez przeanalizowanie biblioteki HelloApp.resources.dll z locBaml, została przetłumaczona i musi zostać scalona z powrotem z oryginalną aplikacją. generate
Użyj opcji 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
Uwaga
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 były w tym samym katalogu.
Zastąp stary plik HelloApp.resources.dll w pliku 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żesz to zrobić na dwa sposoby:
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
Wskazówki na potrzeby 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ż interfejs API lokalizacji musi mieć dostęp do zestawów zależnych podczas odczytywania binarnego kodu 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 zestawem.
Zobacz też
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla