Lokalizace

Browse sample. Procházení ukázky

Lokalizace je proces přizpůsobení aplikace tak, aby splňovala konkrétní jazykové nebo kulturní požadavky cílového trhu. Aby se aplikace lokalizovala, může být potřeba přeložit její text a obrázky do více jazyků. Lokalizovaná aplikace automaticky zobrazí přeložený text na základě nastavení jazykové verze zařízení.

.NET obsahuje mechanismus pro lokalizaci aplikací pomocí souborů prostředků. Soubor prostředků ukládá text a další obsah jako páry název/hodnota, které aplikaci umožňují načíst obsah zadaného klíče. Soubory prostředků umožňují oddělit lokalizovaný obsah od kódu aplikace. Kromě ukládání textu můžou soubory prostředků také ukládat obrázky a binární data. Zařízení ale mají celou řadu velikostí a hustot a každá platforma má funkce pro zobrazování obrázků závislých na hustotě. Funkce platformy by proto měla být použita pro lokalizaci imagí místo jejich ukládání do souborů prostředků.

Pokud chcete lokalizovat aplikaci .NET Multi-Platform App UI (.NET MAUI), měli byste:

  1. Vytvořte soubory prostředků pro ukládání řetězců. Další informace najdete v tématu Vytvoření souborů prostředků pro ukládání řetězců.
  2. Zadejte neutrální jazyk aplikace. Další informace najdete v tématu Určení neutrálního jazyka aplikace.
  3. Proveďte nastavení platformy. Další informace naleznete v tématu Provedení instalace platformy.
  4. Lokalizovat text. Další informace naleznete v tématu Lokalizace textu.
  5. Lokalizace imagí Další informace naleznete v tématu Lokalizace obrázků.
  6. Lokalizovat název aplikace Další informace najdete v tématu Lokalizace názvu aplikace.
  7. Test lokalizace. Další informace naleznete v tématu Lokalizace testů.

Kromě toho je možné zadat směr rozložení aplikace. Další informace najdete v tématu Lokalizace zprava doleva.

Vytvoření souborů prostředků pro ukládání řetězců

Soubory prostředků .NET jsou soubory XML s příponou .resx kompilované do souborů binárních prostředků (.resources) během procesu sestavení. Lokalizovaná aplikace obvykle obsahuje výchozí soubor prostředků se všemi řetězci používanými v aplikaci a soubory prostředků pro každý podporovaný jazyk.

Soubory prostředků obsahují pro každou položku následující informace:

  • Název určuje klíč použitý pro přístup k textu v kódu.
  • Hodnota určuje přeložený text.
  • Komentář je volitelné pole obsahující další informace.

Soubor prostředků lze přidat pomocí dialogového okna Přidat novou položku v sadě Visual Studio:

Screenshot of adding a resource file in Visual Studio.

Po přidání souboru je možné přidat řádky pro každý textový prostředek:

Screenshot of the default strings for the app.

Rozevírací seznam Modifikátor přístupu určuje, jak Visual Studio generuje třídu použitou pro přístup k prostředkům. Nastavení modifikátoru přístupu na veřejné nebo interní výsledky ve vygenerované třídě se zadanou úrovní přístupnosti. Nastavení modifikátoru accessu na žádné generování kódu negeneruje soubor třídy. Výchozí soubor prostředků by měl být nakonfigurován tak, aby vygeneroval soubor třídy, což vede k souboru se souborem . Rozšíření Designer.cs , které se přidává do projektu

Po vytvoření výchozího souboru prostředků je možné vytvořit další soubory pro každé národní prostředí, které aplikace podporuje. Každý další soubor prostředků by měl mít stejný kořenový název souboru jako výchozí soubor prostředků, ale měl by také obsahovat jazyk a volitelnou jazykovou verzi v názvu souboru. Pokud například přidáte soubor prostředků s názvem AppResources.resx, můžete také vytvořit soubory prostředků s názvem AppResources.en-US.resx a AppResources.fr-FR.resx pro lokalizované prostředky pro jazykové verze angličtiny (USA) a francouzštiny (Francie). Kromě toho byste měli nastavit modifikátor přístupu pro každý další soubor prostředků na žádné generování kódu.

Za běhu se vaše aplikace pokusí vyřešit požadavek na prostředek v pořadí specificity. Pokud je například jazyková verze zařízení en-US , aplikace hledá soubory prostředků v tomto pořadí:

  1. AppResources.en-US.resx
  2. AppResources.cs.resx
  3. AppResources.resx (výchozí)

Následující snímek obrazovky ukazuje soubor pro překlad španělštiny s názvem AppResources.es.resx:

Screenshot of the Spanish strings for the app.

Lokalizovaný soubor prostředků používá stejné hodnoty Name zadané ve výchozím souboru, ale obsahuje řetězce španělštiny ve sloupci Hodnota . Modifikátor přístupu je navíc nastavený na žádné generování kódu.

Určení neutrálního jazyka aplikace

Aby soubory prostředků .NET správně fungovaly, musí mít aplikace zadaný neutrální jazyk. Jedná se o jazyk, jehož prostředky se používají, pokud se prostředky pro národní prostředí nenašly. Určení neutrálního jazyka:

  1. V Průzkumník řešení klikněte pravým tlačítkem na projekt aplikace .NET MAUI a vyberte Vlastnosti.

  2. Vyberte stránku vlastnosti Obecné balíček > a v rozevíracím seznamu Jazyk sestavení neutrální jazyk vyberte příslušný jazyk a jazykovou verzi:

    Screenshot of setting the neutral language for the assembly.

  3. Uloží vaše změny.

Případně přidejte <NeutralLanguage> prvek do prvního <PropertyGroup> souboru projektu a jako jeho hodnotu zadejte zvolené národní prostředí:

<NeutralLanguage>en-US</NeutralLanguage>

Upozorňující

Pokud nezadáte neutrální jazyk, ResourceManager třída vrátí null hodnoty pro všechny jazyky bez souboru prostředků. Pokud je zadán neutrální jazyk, ResourceManager třída vrátí výsledky ze souboru prostředků neutrálního jazyka pro nepodporované jazyky. Proto doporučujeme vždy zadat neutrální jazyk, aby se text zobrazoval pro nepodporované jazyky.

Provedení nastavení platformy

V systémech iOS, Mac Catalyst a Windows se vyžaduje další nastavení, aby byly lokalizovány všechny ovládací prvky .NET MAUI.

iOS a Mac Catalyst

V systémech iOS a Mac Catalyst musíte deklarovat všechny podporované jazyky v souboru Info.plist platformy v projektu aplikace .NET MAUI. Uděláte to tak, že otevřete soubor Info.plist pro zvolenou platformu v editoru XML a vytvoříte pole pro CFBundleLocalizations klíč. Pak zadejte hodnoty pole, které odpovídají souborům prostředků. Kromě toho se ujistěte, že jste pomocí klíče nastavili očekávaný jazyk CFBundleDevelopmentRegion :

<key>CFBundleLocalizations</key>
<array>
    <string>de</string>
    <string>es</string>
    <string>fr</string>
    <string>ja</string>
    <string>pt</string> <!-- Brazil -->
    <string>pt-PT</string> <!-- Portugal -->
    <string>ru</string>
    <string>zh-Hans</string>
    <string>zh-Hant</string>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>

Případně v Průzkumník řešení v sadě Visual Studio otevřete soubor Info.plist pro zvolenou platformu v obecném editoru PList. Potom vytvořte pole pro CFBundleLocalizations klíč a zadejte hodnoty pole, které odpovídají souborům prostředků. Kromě toho se ujistěte, že jste pomocí klíče nastavili očekávaný jazyk CFBundleDevelopmentRegion :

Screenshot of the supported locales for the app in the generic Info.plist editor.

Další informace o souboru Info.plist naleznete v seznamu vlastností informace.

Okna

Pokud chcete podporovat více jazyků v aplikaci .NET MAUI ve Windows, musíte deklarovat každý podporovaný jazyk v souboru Platforms\Windows\Package.appxmanifest projektu aplikace .NET MAUI:

  1. Otevřete soubor Package.appxmanifest v textovém editoru a vyhledejte následující část:

    <Resources>
        <Resource Language="x-generate"/>
    </Resources>
    
  2. <Resource /> Nahraďte <Resource Language="x-generate"> prvky pro každý z vašich podporovaných jazyků:

    <Resources>
        <Resource Language="en-US"/>
        <Resource Language="de-DE"/>
        <Resource Language="es-ES"/>
        <Resource Language="fr-FR"/>
        <Resource Language="ja-JP"/>
        <Resource Language="pt-BR"/>
        <Resource Language="pt-PT"/>
        <Resource Language="ru-RU"/>
        <Resource Language="zh-CN"/>
        <Resource Language="zh-TW"/>
    </Resources>
    
  3. Uloží vaše změny.

Lokalizace textu

Text se lokalizuje pomocí třídy vygenerované z výchozího souboru prostředků. Třída je pojmenovaná na základě výchozího názvu souboru prostředku. Vzhledem k výchozímu názvu souboru prostředku AppResources.resx sada Visual Studio vygeneruje odpovídající třídu s názvem AppResources obsahující statické vlastnosti pro každou položku v souboru prostředku.

V jazyce XAML lze lokalizovaný text načíst pomocí x:Static rozšíření značek pro přístup ke vygenerovaným statickým vlastnostem:

<ContentPage ...
             xmlns:strings="clr-namespace:LocalizationDemo.Resources.Strings">
    <VerticalStackLayout>
        <Label Text="{x:Static strings:AppResources.NotesLabel}" />
        <Entry Placeholder="{x:Static strings:AppResources.NotesPlaceholder}" />
        <Button Text="{x:Static strings:AppResources.AddButton}" />
    </VerticalStackLayout>
</ContentPage>

Další informace o x:Static rozšíření značek naleznete v tématu x:Static markup extension.

Lokalizovaný text lze také načíst v kódu:

Label notesLabel = new Label();
notesLabel.Text = AppResources.NotesLabel,

Entry notesEntry = new Entry();
notesEntry.Placeholder = AppResources.NotesPlaceholder,

Button addButton = new Button();
addButton.Text = AppResources.AddButton,

Vlastnosti ve AppResources třídě používají CurrentUICulture hodnotu vlastnosti k určení, ze kterého souboru prostředků se mají načíst hodnoty.

Lokalizace obrázků

Kromě ukládání textu můžou soubory prostředků také ukládat obrázky a binární data. Zařízení ale mají celou řadu velikostí a hustot a každá platforma má funkce pro zobrazování obrázků závislých na hustotě. Funkce platformy by proto měla být použita pro lokalizaci imagí místo jejich ukládání do souborů prostředků.

Android

Lokalizované obrázky, označované jako kreslené obrázky, se v Androidu ukládají pomocí konvence pojmenování založené na složkách ve složce Platforms\Android\Resources . Složky by měly mít název drawable s příponou pro jazyk a jazykovou verzi. Například složka španělštiny má název drawable-es. Nakreslený název složky by měl obsahovat obrázky pro výchozí jazyk a jazykovou verzi. Akce sestavení jednotlivých imagí by měla být nastavená na AndroidResource.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení AndroidResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
  <AndroidResource Include="Platforms\Android\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platformy\Android\Resources , včetně obsahu v podsložkách, na akci sestavení AndroidResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Při zadávání jazyka nejvyšší úrovně, například es, se v názvu složky vyžadují pouze dva znaky. Při zadávání úplného národního prostředí však formát názvu složky vyžaduje pomlčku a malá písmena r k oddělení jazyka od jazykové verze. Například složka národního prostředí Mexika (es-MX) by měla mít název drawable-es-rMX. Názvy souborů obrázků v každé složce národního prostředí by měly být identické:

Screenshot of the localized folder structure in Visual Studio for images on Android.

iOS

V iOSu se lokalizované obrázky ukládají pomocí konvence pojmenování založené na složce Platformy\iOS\Resources . Složky by měly mít název s jazykem a volitelnou jazykovou verzí, za kterou následuje .lproj. Například složka se španělštinou má název es.lproj. Akce sestavení jednotlivých imagí by měla být nastavená na BundleResource.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení BundleResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
  <BundleResource Include="Platforms\iOS\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platforms\iOS\Resources , včetně obsahu v podsložkách, na akci sestavení BundleResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Při zadávání jazyka nejvyšší úrovně, například es, se v názvu složky vyžadují pouze dva znaky. Při zadávání úplného národního prostředí však formát názvu složky vyžaduje pomlčku, která odděluje jazyk od jazykové verze. Například složka národního prostředí Mexiko (es-MX) by měla mít název es-MX.lproj. Názvy souborů obrázků v každé složce národního prostředí by měly být identické:

Screenshot of the localized folder structure in Visual Studio for images on iOS.

Kromě toho musíte v souboru projektu nastavit IPhoneResourcePrefix vlastnost sestavení na složku, která obsahuje lokalizované složky obrázků:

<PropertyGroup Condition="$(TargetFramework.Contains('-ios'))">
  <IPhoneResourcePrefix>Platforms/iOS/Resources</IPhoneResourcePrefix>
</PropertyGroup>

Pokud obrázek není k dispozici pro konkrétní jazyk, iOS se vrátí do výchozí složky nativního jazyka a načte image odtud.

Mac Catalyst

V systému Mac Catalyst se lokalizované obrázky ukládají pomocí konvence pojmenování založené na složkách ve složce Platforms\MacCatalyst\Resources . Složky by měly mít název s jazykem a volitelnou jazykovou verzí, za kterou následuje .lproj. Například složka se španělštinou má název es.lproj. Akce sestavení jednotlivých imagí by měla být nastavená na BundleResource.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení BundleResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <BundleResource Include="Platforms\MacCatalyst\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platforms\MacCatalyst\Resources , včetně obsahu v podsložkách, na akci sestavení BundleResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Při zadávání jazyka nejvyšší úrovně, například es, se v názvu složky vyžadují pouze dva znaky. Při zadávání úplného národního prostředí však formát názvu složky vyžaduje pomlčku, která odděluje jazyk od jazykové verze. Například složka národního prostředí Mexiko (es-MX) by měla mít název es-MX.lproj. Názvy souborů obrázků v každé složce národního prostředí by měly být identické:

Screenshot of the localized folder structure in Visual Studio for images on MacCatalyst.

Kromě toho musíte v souboru projektu nastavit IPhoneResourcePrefix vlastnost sestavení na složku, která obsahuje lokalizované složky obrázků:

<PropertyGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <IPhoneResourcePrefix>Platforms/MacCatalyst/Resources</IPhoneResourcePrefix>
</PropertyGroup>

Pokud obrázek není k dispozici pro konkrétní jazyk, Mac Catalyst se vrátí do výchozí složky nativního jazyka a načte image odtud.

Okna

Lokalizované obrázky se ve Windows ukládají pomocí konvence pojmenování založené na složkách ve složce Platforms\Windows\Assets\Images . Složky by měly mít název s jazykem a volitelnou jazykovou verzi. Například složka se španělštinou má název es a složka národního prostředí Mexiko by měla mít název es-MX. Akce sestavení každého obrázku by měla být nastavená na Obsah.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení obsahu lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
  <Content Include="Platforms\Windows\Assets\Images\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platformy\Windows\Assets\Images , včetně obsahu v podsložkách, na akci Sestavení obsahu . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Při zadávání jazyka nejvyšší úrovně, například es, se v názvu složky vyžadují pouze dva znaky. Při zadávání úplného národního prostředí však formát názvu složky vyžaduje pomlčku, která odděluje jazyk od jazykové verze. Například složka národního prostředí Mexika (es-MX) by měla mít název es-MX. Názvy souborů obrázků v každé složce národního prostředí by měly být identické:

Screenshot of the localized folder structure in Visual Studio for images on Windows.

Využívání lokalizovaných obrázků

V systémech Android, iOS, Mac Catalyst a Windows lze lokalizované obrázky využívat nastavením Source vlastnosti Image názvu souboru obrázku:

<Image Source="flag.png" />

Aby to ale fungovalo ve Windows, je nutné upravit soubor projektu aplikace, pokud jste přidali položku NÁSTROJE MSBuild pro každou lokalizovanou <Content /> image. Toho lze dosáhnout úpravou souboru .csproj tak, aby se odebrala <Content /> položka NÁSTROJE MSBuild pro každou image. Pak přidejte následující položku nástroje MSBuild:

<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
  <Content Include="Platforms\Windows\Assets\Images\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tím zajistíte, že se všechny obrázky ve složce Platforms\Windows\Assets\Images zkopírují do kořenového adresáře balíčku aplikace.

Lokalizace názvu aplikace

Pro lokalizaci názvu aplikace se vyžaduje funkce platformy.

Android

V Systému Android lze lokalizovaný název aplikace uložit pomocí konvence pojmenování na základě složky ve složce Platforms\Android\Resources . Složky by měly mít názvy hodnot s příponou pro jazyk a jazykovou verzi. Například složka španělštiny má název values-es. Přidejte soubor Strings.xml s akcí sestavení AndroidResource do každé složky, která nastaví řetězec na lokalizovaný název aplikace.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení AndroidResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
  <AndroidResource Include="Platforms\Android\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platformy\Android\Resources , včetně obsahu v podsložkách, na akci sestavení AndroidResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Při zadávání jazyka nejvyšší úrovně, například es, se v názvu složky vyžadují pouze dva znaky. Při zadávání úplného národního prostředí však formát názvu složky vyžaduje pomlčku a malá písmena r k oddělení jazyka od jazykové verze. Například složka národního prostředí Mexika (es-MX) by měla mít název values-es-rMX.

Každý přeložitelný řetězec je element XML s ID prostředku zadaným jako name atribut a přeložený řetězec jako hodnota. Potřebujete utéct řetězec podle normálních pravidel XML a name musí to být platné ID prostředku Androidu (bez mezer nebo pomlček).

Proto pro lokalizaci názvu aplikace vytvořte soubor Strings.xml a přidejte <string> prvek jako podřízený prvek elementu <resources> . Potom nastavte jeho name atribut na vhodné ID s přeloženým řetězcem jako hodnotou:

<resources>
    <!-- French -->
    <string name="app_name">Maison</string>
</resources>

Potom použijte lokalizovaný název aplikace v aplikaci, přidejte Label vlastnost do Activity třídy vaší aplikace MainActivity a nastavte její hodnotu na @string/id:

[Activity(Label = "@string/app_name", Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }
}

iOS

V iOSu se lokalizovaný název aplikace ukládá pomocí konvence pojmenování na základě složky ve složce Platforms\iOS\Resources . Složky by měly mít název s jazykem a volitelnou jazykovou verzí, za kterou následuje .lproj. Například složka se španělštinou má název es.lproj. Přidejte soubor InfoPlist.strings s akcí sestavení BundleResource do každé složky, která nastaví CFBundleDisplayName klíč a hodnotu.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení BundleResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
  <BundleResource Include="Platforms\iOS\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platforms\iOS\Resources , včetně obsahu v podsložkách, na akci sestavení BundleResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Syntaxe lokalizovaných řetězcových hodnot je:

/* comment */
"key"="localized-value";

V řetězcích byste měli utéct následující znaky:

  • Kvóta pro \"
  • \\ Zpětné lomítko
  • \n Newline

Proto pro lokalizaci názvu aplikace vytvořte soubor InfoPlist.strings a přidejte hodnotu CFBundleDisplayName klíče do souboru:

/* French */
CFBundleDisplayName="Maisons";

Další klíče, které můžete použít k lokalizaci řetězců specifických pro aplikaci, jsou:

  • CFBundleName – určuje krátký název sady aplikací, který se může uživatelům zobrazit v situacích, jako je absence hodnoty pro CFBundleDisplayName.
  • CFBundleShortVersionString – určuje číslo verze sady aplikací.
  • NSHumanReadableCopyright – oznámení o autorských právech pro sadu aplikací.

Kromě toho musíte v souboru projektu nastavit IPhoneResourcePrefix vlastnost sestavení na složku, která obsahuje lokalizované složky:

<PropertyGroup Condition="$(TargetFramework.Contains('-ios'))">
  <IPhoneResourcePrefix>Platforms/iOS/Resources</IPhoneResourcePrefix>
</PropertyGroup>

Mac Catalyst

V systému Mac Catalyst se lokalizovaný název aplikace ukládá pomocí konvence pojmenování na základě složky ve složce Platforms\MacCatalyst\Resources . Složky by měly mít název s jazykem a volitelnou jazykovou verzí, za kterou následuje .lproj. Například složka se španělštinou má název es.lproj. Přidejte soubor InfoPlist.strings s akcí sestavení BundleResource do každé složky, která nastaví CFBundleDisplayName klíč a hodnotu.

Poznámka:

Místo nastavení jednotlivých souborů na akci sestavení BundleResource lze obsah konkrétní složky nastavit na tuto akci sestavení přidáním následujícího XML do souboru projektu vaší aplikace (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <BundleResource Include="Platforms\MacCatalyst\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Tento příklad nastaví veškerý obsah ve složce Platforms\MacCatalyst\Resources , včetně obsahu v podsložkách, na akci sestavení BundleResource . Nastaví také výstupní cestu pro každý soubor pomocí této akce sestavení.

Syntaxe lokalizovaných řetězcových hodnot je:

/* comment */
"key"="localized-value";

V řetězcích byste měli utéct následující znaky:

  • Kvóta pro \"
  • \\ Zpětné lomítko
  • \n Newline

Proto pro lokalizaci názvu aplikace vytvořte soubor InfoPlist.strings a přidejte hodnotu CFBundleDisplayName klíče do souboru:

/* French */
CFBundleDisplayName="Maisons";

Další klíče, které můžete použít k lokalizaci řetězců specifických pro aplikaci, jsou:

  • CFBundleName – specifikuje krátký název sady aplikací, který se může uživatelům zobrazit v situacích, jako je absence hodnoty pro CFBundleDisplayName.
  • CFBundleShortVersionString – určuje číslo verze sady aplikací.
  • NSHumanReadableCopyright – oznámení o autorských právech pro sadu aplikací.

Kromě toho musíte v souboru projektu nastavit IPhoneResourcePrefix vlastnost sestavení na složku, která obsahuje lokalizované složky:

<PropertyGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <IPhoneResourcePrefix>Platforms/MacCatalyst/Resources</IPhoneResourcePrefix>
</PropertyGroup>

Okna

Ve Windows se název aplikace definuje v manifestu balíčku aplikace. Lokalizace názvu aplikace vyžaduje, abyste nejprve zadali výchozí jazyk aplikace a pak vytvořili soubor prostředků řetězce pro každé národní prostředí, které chcete podporovat. Prostředek řetězce, který představuje lokalizovaný název aplikace, se pak dá použít v manifestu balíčku aplikace pomocí schématu identifikátoru ms-resource URI.

Další informace o lokalizaci řetězců v manifestu balíčku aplikace najdete v tématu Lokalizace řetězců v uživatelském rozhraní a manifestu balíčku aplikace.

Zadání výchozího jazyka

Pokud chcete lokalizovat název aplikace, musí mít vaše aplikace pro Windows nejdřív zadaný výchozí jazyk. Jedná se o jazyk, jehož prostředky se používají, pokud nelze najít žádné lokalizované prostředky pro konkrétní jazyk. Určení výchozího jazyka:

  1. V Průzkumník řešení otevřete soubor Packageappxmanifest v editoru manifestu balíčku.

  2. V editoru manifestu balíčku na kartě Aplikace nastavte pole Výchozí jazyk na vámi zvolený výchozí jazyk:

    Screenshot of setting the default language of a Windows app in the package manifest.

  3. Uloží vaše změny.

Minimálně musíte zadat prostředek řetězce pro název aplikace pro výchozí jazyk. Toto je prostředek, který se načte, pokud není lepší najít shodu pro preferovaný jazyk uživatele nebo nastavení jazyka zobrazení.

Vytvoření souborů prostředků Systému Windows

Ve Windows by měl být lokalizovaný název aplikace uložený v souboru prostředků Systému Windows pro každé národní prostředí. Soubor prostředků Systému Windows je soubor XML s příponou .resw , která je zkompilovaná do binárního formátu a uložená v souboru .pri . Soubor .resw pro každé národní prostředí by měl mít název Resources.resw a uložený pomocí konvence pojmenování na základě složky ve složce Platforms\Windows\Strings . Složky by měly mít název s jazykem a volitelnou jazykovou verzi. Například složka se španělštinou má název es a složka národního prostředí Mexiko by měla mít název es-MX.

V současné době neexistuje žádná šablona položky sady Visual Studio pro vytvoření souboru prostředků Windows v aplikaci .NET MAUI. Proto vytvořte soubor prostředků systému Windows pro každé národní prostředí:

  1. Ve složce Platforms\Windows projektu aplikace .NET MAUI vytvořte složku Strings.

  2. Ve složce Řetězce vytvořte složku pro každé národní prostředí.

  3. Ve složce pro každé národní prostředí vytvořte soubor s názvem Resources.resw , který obsahuje následující XML:

    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <!--
        Microsoft ResX Schema
    
        Version 2.0
    
        The primary goals of this format is to allow a simple XML format
        that is mostly human readable. The generation and parsing of the
        various data types are done through the TypeConverter classes
        associated with the data types.
    
        Example:
    
        ... ado.net/XML headers & schema ...
        <resheader name="resmimetype">text/microsoft-resx</resheader>
        <resheader name="version">2.0</resheader>
        <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
        <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
        <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
        <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
        <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
            <value>[base64 mime encoded serialized .NET Framework object]</value>
        </data>
        <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
            <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
            <comment>This is a comment</comment>
        </data>
    
        There are any number of "resheader" rows that contain simple
        name/value pairs.
    
        Each data row contains a name, and value. The row also contains a
        type or mimetype. Type corresponds to a .NET class that support
        text/value conversion through the TypeConverter architecture.
        Classes that don't support this are serialized and stored with the
        mimetype set.
    
        The mimetype is used for serialized objects, and tells the
        ResXResourceReader how to depersist the object. This is currently not
        extensible. For a given mimetype the value must be set accordingly:
    
        Note - application/x-microsoft.net.object.binary.base64 is the format
        that the ResXResourceWriter will generate, however the reader can
        read any of the formats listed below.
    
        mimetype: application/x-microsoft.net.object.binary.base64
        value   : The object must be serialized with
                : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.soap.base64
        value   : The object must be serialized with
                : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.bytearray.base64
        value   : The object must be serialized into a byte array
                : using a System.ComponentModel.TypeConverter
                : and then encoded with base64 encoding.
        -->
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
      </resheader>
      <resheader name="version">
        <value>2.0</value>
      </resheader>
      <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
    </root>
    

    Poznámka:

    Soubory prostředků systému Windows používají akci PRIResourcesestavení . Tato akce sestavení nepotřebuje nastavení pro každý soubor .resw v aplikaci .NET MAUI, protože se implicitně používá.

  4. Otevřete každý soubor Resources.resw a přidejte řetězcový prostředek, který představuje název aplikace:

    Screenshot of the resw file editor in Visual Studio on Windows.

    Poznámka:

    Identifikátory prostředků nerozlišují malá a velká písmena a musí být jedinečné pro každý soubor prostředků.

  5. Uložte každý soubor prostředků systému Windows.

Příklad požadované složky a struktury souborů je znázorněn na následujícím snímku obrazovky:

Screenshot of the localized folder structure in Visual Studio for strings on Windows.

Využití lokalizovaného názvu aplikace

Prostředek řetězce, který představuje lokalizovaný název aplikace, lze použít pomocí schématu identifikátoru ms-resource URI:

  1. V Průzkumník řešení otevřete soubor Packageappxmanifest v editoru manifestu balíčku.

  2. V editoru manifestu balíčku na kartě Aplikace nastavte pole Zobrazovaný název na ms-resource: název řetězce, který identifikuje název vaší aplikace:

    Screenshot of setting the localized app name in the package manifest on Windows.

  3. Uloží vaše změny.

Důležité

Pokud jsou vaše soubory .resw uložené v jiném sestavení projektu aplikace .NET MAUI, budete muset zadat plně kvalifikovanou cestu k názvu prostředku. To používá formát ms-resource:Assembly/ResourceFilename/Resource.

Lokalizace zprava doleva

Směr toku nebo směr rozložení je směr, ve kterém jsou prvky uživatelského rozhraní na stránce naskenovány okem. Některé jazyky, jako je arabština a hebrejština, vyžadují, aby prvky uživatelského rozhraní byly rozloženy ve směru toku zprava doleva. Aplikace .NET MAUI automaticky respektují směr toku zařízení na základě vybraného jazyka a oblasti. Informace o tom, jak načíst směr toku zařízení na základě národního prostředí, najdete v tématu Získání směru rozložení.

Pokud chcete přepsat směr toku aplikace, nastavte Window.FlowDirection vlastnost. Alternativně nastavte VisualElement.FlowDirection vlastnost pro jednotlivé elementy. Tyto vlastnosti získají nebo nastaví směr toku prvků uživatelského rozhraní v rámci jakéhokoli nadřazeného prvku, který řídí jejich rozložení, a měl by být nastaven na jednu z hodnot výčtu FlowDirection :

  • LeftToRight
  • RightToLeft
  • MatchParent

FlowDirection Nastavení vlastnosti na RightToLeft element nastaví zarovnání doprava, pořadí čtení doleva a rozložení ovládacího prvku pro tok zprava doleva.

Upozorňující

FlowDirection Změna vlastnosti za běhu způsobí nákladný proces rozložení, který ovlivní výkon.

Výchozí FlowDirection hodnota vlastnosti prvku je MatchParent. Proto prvek dědí FlowDirection hodnotu vlastnosti z nadřazeného objektu ve vizuálním stromu a jakýkoli prvek může přepsat hodnotu, kterou získá z nadřazeného objektu.

Tip

Pokud potřebujete změnit směr toku, nastavte FlowDirection vlastnost v okně, stránce nebo kořenovém rozložení. To způsobí, že všechny prvky obsažené v aplikaci, stránce nebo kořenovém rozložení správně reagují na směr toku.

Nastavení platformy

K povolení národního prostředí se zprava doleva vyžaduje konkrétní nastavení platformy.

Android

Aplikace vytvořené pomocí šablony projektu aplikace .NET MAUI automaticky zahrnují podporu pro národní prostředí se zprava doleva. Tuto podporu povolí android:supportsRtl atribut nastavený na <application>true uzel v souboru AndroidManifest.xml aplikace:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application ... android:supportsRtl="true" />
    ...
</manifest>

Lokalizace zprava doleva je pak možné otestovat změnou zařízení nebo emulátoru tak, aby používal jazyk se zprava doleva. Pokud jste v aplikaci Nastavení aktivovali možnosti pro vývojáře, můžete také povolit směr rozložení Force RTL v Nastavení > Možnosti pro vývojáře. Informace o konfiguraci možností pro vývojáře najdete v tématu Konfigurace možností pro vývojáře na zařízení na developer.android.com.

iOS a Mac Catalyst

Požadované národní prostředí zprava doleva by mělo být přidáno jako podporovaný jazyk do položek pole pro CFBundleLocalizations klíč v souboru Info.plist. Následující příklad ukazuje přidání arabštiny do pole klíče CFBundleLocalizations :

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>ar</string>
</array>

Lokalizace zprava doleva je pak možné otestovat změnou jazyka a oblasti v zařízení nebo simulátoru na národní prostředí se zápisem zprava doleva, které bylo zadáno v souboru Info.plist.

Okna

Požadované prostředky jazyka by měly být zadány v <Resources> uzlu souboru Package.appxmanifest . <Resource /> Nahraďte <Resource Language="x-generate"> prvky pro každý z vašich podporovaných jazyků. Například následující kód určuje, že jsou k dispozici lokalizované prostředky "en" a "ar":

<Resources>
    <Resource Language="en" />
    <Resource Language="ar" />
</Resources>

Lokalizace zprava doleva se pak dá otestovat změnou jazyka a oblasti v zařízení na odpovídající národní prostředí se zápisem zprava doleva.

Lokalizace testů

Za běhu aplikace načte odpovídající lokalizované prostředky na základě jednotlivých vláken na základě jazykové verze určené vlastností CurrentUICulture .

Lokalizace testování je nejvhodnější díky změně jazyka zařízení v aplikaci Nastavení na každém zařízení.

Upozorňující

I když je možné nastavit hodnotu CurrentUICulture v kódu, výsledné chování je nekonzistentní napříč platformami, takže se nedoporučuje pro testování.