Konfigurace lokalizace přenosných objektů v ASP.NET Core

Hisham Bin Ateya a Sébastien Ros.

Tento článek vás provede postupem použití souborů Portable Object (PO) v aplikaci ASP.NET Core s architekturou Orchard Core .

Poznámka: Orchard Core není produktem Microsoftu. Microsoft tuto funkci nepodporuje.

Zobrazení nebo stažení ukázkového kódu (postup stažení)

Co je soubor PO?

Soubory nákupní objednávky se distribuují jako textové soubory obsahující přeložené řetězce pro daný jazyk. Mezi výhody použití souborů PO místo souborů .resx patří:

  • Soubory NÁKUPNÍ podporují pluralizaci; Soubory .resx nepodporují pluralizaci.
  • Soubory PO nejsou kompilovány jako soubory .resx . Proto se nevyžadují specializované nástroje a kroky sestavení.
  • Soubory po fungují dobře s nástroji pro online úpravy spolupráce.

Příklad

Následující ukázkový soubor PO obsahuje překlad dvou řetězců ve francouzštině, včetně jednoho s jeho množným číslem:

fr.po

#: Pages/Index.cshtml:13
msgid "Hello world!"
msgstr "Bonjour le monde!"

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Il y a un élément."
msgstr[1] "Il y a {0} éléments."

V tomto příkladu se používá následující syntaxe:

  • #:: Komentář označující kontext řetězce, který se má přeložit. Stejný řetězec se může přeložit jinak v závislosti na tom, kde se používá.
  • msgid: Nepřeložený řetězec.
  • msgstr: Přeložený řetězec.

Pro podporu pluralizace je možné definovat více položek.

  • msgid_plural: Nepřeložitý řetězec v množném čísle.
  • msgstr[0]: Přeložený řetězec pro případ 0.
  • msgstr[N]: Přeložený řetězec pro případ N.

Specifikace souboru PO najdete tady.

Konfigurace podpory souborů PO v ASP.NET Core

Tento příklad je založený na webové aplikaci ASP.NET Core vygenerované ze šablony projektu sady Visual Studio 2022.

Odkazování na balíček

Přidejte odkaz na OrchardCore.Localization.Core balíček NuGet.

Soubor .csproj teď obsahuje řádek podobný následujícímu (číslo verze se může lišit):

<PackageReference Include="OrchardCore.Localization.Core" Version="1.5.0" />

Registrace služby

Přidejte požadované služby do Program.cs:

builder.Services.AddPortableObjectLocalization();

builder.Services
    .Configure<RequestLocalizationOptions>(options => options
        .AddSupportedCultures("fr", "cs")
        .AddSupportedUICultures("fr", "cs"));

builder.Services
    .AddRazorPages()
    .AddViewLocalization();

Na zvolenou stránku přidejte následující kód Razor . Index.cshtml se používá v tomto příkladu.

@page
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@{
    ViewData["Title"] = "Home";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<p>@Localizer["Hello world!"]</p>

Instance IViewLocalizer se vloží a použije se k překladu textu "Hello world!".

Vytvoření souboru NÁKUPNÍ

Vytvořte soubor s názvem <culture code.po> v kořenové složce aplikace. V tomto příkladu je název souboru fr.po , protože se používá francouzský jazyk:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Tento soubor ukládá řetězec pro překlad i řetězec přeložený francouzštinou. Překlady se v případě potřeby vrátí k nadřazené jazykové verzi. V tomto příkladu se použije soubor fr.po , pokud je fr-FR požadovaná jazyková verze nebo fr-CA.

Testování aplikace

Spusťte aplikaci, zobrazí se text Hello World.

Přejděte na adresu URL /Index?culture=fr-FR. Zobrazí se text Bonjour le monde!

Pluralizace

Soubory NÁKUPNÍ podporují formuláře pluralizace, což je užitečné, když stejný řetězec musí být přeložen odlišně na základě kardinality. Tato úloha je složitá skutečností, že každý jazyk definuje vlastní pravidla pro výběr řetězce, který se má použít na základě kardinality.

Balíček Orchard Localization poskytuje rozhraní API pro automatické vyvolání těchto různých formulářů v množném čísle.

Vytváření souborů nákupní objednávky v množném čísle

Do dříve zmíněného souboru fr.po přidejte následující obsah:

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Il y a un élément."
msgstr[1] "Il y a {0} éléments."

Podívejte se , co je soubor PO? Vysvětlení toho, co jednotlivé položky v tomto příkladu představují.

Přidání jazyka pomocí různých formulářů pluralizace

V předchozím příkladu byly použity anglické a francouzské řetězce. Angličtina a francouzština mají pouze dva tvary množného čísla a sdílejí stejná pravidla formuláře, což znamená, že kardinalita jednoho z nich je namapována na první formulář v množném čísle. Jakákoli jiná kardinalita se mapuje na druhý tvar množného čísla.

Ne všechny jazyky sdílejí stejná pravidla. To je ilustrováno českým jazykem, který má tři tvary množného čísla.

cs.po Vytvořte soubor následujícím způsobem a všimněte si, jak pluralizace potřebuje tři různé překlady:

msgid "Hello world!"
msgstr "Ahoj světe!!"

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Existuje jedna položka."
msgstr[1] "Existují {0} položky."
msgstr[2] "Existuje {0} položek."

Pokud chcete přijmout českou lokalizaci, přidejte "cs" do seznamu podporovaných jazykových verzí v Configure metodě:

builder.Services
    .Configure<RequestLocalizationOptions>(options => options
        .AddSupportedCultures("fr", "cs")
        .AddSupportedUICultures("fr", "cs"));

Pages/Index.cshtml Upravte soubor tak, aby se vykreslovat lokalizované řetězce množného čísla pro několik kardinalit:

<p>@Localizer.Plural(1, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(2, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(5, "There is one item.", "There are {0} items.")</p>

Poznámka: V reálném scénáři by se proměnná použila k reprezentaci počtu. Tady stejný kód opakujeme se třemi různými hodnotami, abychom zpřístupnili konkrétní případ.

Při přepínání jazykových verzí se zobrazí následující:

Pro /Index:

There is one item.
There are 2 items.
There are 5 items.

Pro /Index?culture=fr:

Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.

Pro /Index?culture=cs:

Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.

Pro českou kulturu jsou tři překlady odlišné. Francouzské a anglické jazykové verze sdílejí stejnou výstavbu dvou naposledy přeložených řetězců.

Pokročilé úlohy

Kontextové určení řetězců

Aplikace často obsahují řetězce, které se mají přeložit na několika místech. Stejný řetězec může mít v určitých umístěních v aplikaci jiný překlad (Razor zobrazení nebo soubory tříd). Soubor PO podporuje pojem kontextu souboru, který lze použít k kategorizaci reprezentované řetězce. Pomocí kontextu souboru lze řetězec přeložit odlišně v závislosti na kontextu souboru (nebo nedostatku kontextu souboru).

Lokalizační služby nákupní objednávky používají název celé třídy nebo zobrazení, které se používá při překladu řetězce. Toho dosáhnete nastavením hodnoty položky msgctxt .

Zvažte menší přidání k předchozímu příkladu fr.po . Stránku umístěnou Razor na Pages/Index.cshtml adrese může být definována jako kontext souboru nastavením hodnoty rezervované msgctxt položky:

msgctxt "Views.Home.About"
msgid "Hello world!"
msgstr "Bonjour le monde!"

Při nastavení msgctxt , jako je například, překlad textu nastane při přechodu na /Index?culture=fr-FR. Při přechodu na /Privacy?culture=fr-FR.

Pokud se žádná konkrétní položka neshoduje s daným kontextem souboru, náhradní mechanismus Orchard Core vyhledá příslušný soubor PO bez kontextu. Za předpokladu, že neexistuje žádný konkrétní kontext souboru pro Pages/Privacy.cshtmlnačtení souboru NÁKUPNÍ, /Privacy?culture=fr-FR například:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Změna umístění souborů NÁKUPNÍ

Výchozí umístění souborů PO lze změnit v Programs.cs:

services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");

V tomto příkladu se soubory nákupní objednávky načtou ze složky Lokalizace .

Implementace vlastní logiky pro vyhledání lokalizačních souborů

Pokud je k vyhledání souborů nákupní objednávky potřeba složitější logika OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider , je možné rozhraní implementovat a zaregistrovat jako službu. To je užitečné v případě, že soubory nákupní objednávky mohou být uloženy v různých umístěních nebo když se soubory musí najít v hierarchii složek.

Použití jiného výchozího množného jazyka v množném čísle

Balíček obsahuje rozšiřující metodu Plural specifickou pro dvě formuláře v množném čísle. Pro jazyky vyžadující více formulářů v množném čísle vytvořte metodu rozšíření. S rozšiřující metodou nebudete muset poskytnout žádný lokalizační soubor pro výchozí jazyk – původní řetězce jsou již k dispozici přímo v kódu.

Můžete použít obecnější Plural(int count, string[] pluralForms, params object[] arguments) přetížení, které přijímá pole řetězců překladů.

Od Sébastien Ros, Scott Addie a Hisham Bin Ateya

Tento článek vás provede postupem použití souborů Portable Object (PO) v aplikaci ASP.NET Core s architekturou Orchard Core .

Poznámka: Orchard Core není produktem Microsoftu. Společnost Microsoft proto neposkytuje pro tuto funkci žádnou podporu.

Zobrazení nebo stažení ukázkového kódu (postup stažení)

Co je soubor PO?

Soubory nákupní objednávky se distribuují jako textové soubory obsahující přeložené řetězce pro daný jazyk. Mezi výhody použití souborů PO místo souborů .resx patří:

  • Soubory NÁKUPNÍ podporují pluralizaci; Soubory .resx nepodporují pluralizaci.
  • Soubory PO nejsou kompilovány jako soubory .resx . Proto se nevyžadují specializované nástroje a kroky sestavení.
  • Soubory po fungují dobře s nástroji pro online úpravy spolupráce.

Příklad

Tady je ukázkový soubor NÁKUPNÍ obsahující překlad dvou řetězců ve francouzštině, včetně jednoho s jeho množným číslem:

fr.po

#: Pages/Index.cshtml:13
msgid "Hello world!"
msgstr "Bonjour le monde!"

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Il y a un élément."
msgstr[1] "Il y a {0} éléments."

V tomto příkladu se používá následující syntaxe:

  • #:: Komentář označující kontext řetězce, který se má přeložit. Stejný řetězec se může přeložit jinak v závislosti na tom, kde se používá.
  • msgid: Nepřeložený řetězec.
  • msgstr: Přeložený řetězec.

V případě podpory pluralizace je možné definovat více položek.

  • msgid_plural: Nepřeložitý řetězec v množném čísle.
  • msgstr[0]: Přeložený řetězec pro případ 0.
  • msgstr[N]: Přeložený řetězec pro případ N.

Specifikace souboru PO najdete tady.

Konfigurace podpory souborů PO v ASP.NET Core

Tento příklad je založený na aplikaci ASP.NET Core MVC vygenerované ze šablony projektu sady Visual Studio 2019.

Odkazování na balíček

Přidejte odkaz na OrchardCore.Localization.Core balíček NuGet.

Soubor .csproj teď obsahuje řádek podobný následujícímu (číslo verze se může lišit):

<PackageReference Include="OrchardCore.Localization.Core" Version="1.2.0" />

Registrace služby

Přidejte požadované služby do ConfigureServices metody Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);

    services.AddPortableObjectLocalization();

    services.Configure<RequestLocalizationOptions>(options => options
        .AddSupportedCultures("fr", "cs")
        .AddSupportedUICultures("fr", "cs")
    );
}

Přidejte požadovaný middleware do Configure metody Startup.cs:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseRouting();
    app.UseStaticFiles();

    app.UseRequestLocalization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Na zvolenou stránku přidejte následující kód Razor . Index.cshtml se používá v tomto příkladu.

@page
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@{
    ViewData["Title"] = "Home";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<p>@Localizer["Hello world!"]</p>

Instance IViewLocalizer se vloží a použije se k překladu textu "Hello world!".

Vytvoření souboru NÁKUPNÍ

Vytvořte soubor s názvem <culture code.po> v kořenové složce aplikace. V tomto příkladu je název souboru fr.po , protože se používá francouzský jazyk:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Tento soubor ukládá řetězec pro překlad i řetězec přeložený francouzštinou. Překlady se v případě potřeby vrátí k nadřazené jazykové verzi. V tomto příkladu se použije soubor fr.po , pokud je fr-FR požadovaná jazyková verze nebo fr-CA.

Testování aplikace

Spusťte aplikaci a přejděte na adresu URL /Index. Zobrazí se text Hello World.

Přejděte na adresu URL /Index?culture=fr-FR. Zobrazí se text Bonjour le monde!

Pluralizace

Soubory NÁKUPNÍ podporují formuláře pluralizace, což je užitečné, když stejný řetězec musí být přeložen odlišně na základě kardinality. Tato úloha je složitá skutečností, že každý jazyk definuje vlastní pravidla pro výběr řetězce, který se má použít na základě kardinality.

Balíček Orchard Localization poskytuje rozhraní API pro automatické vyvolání těchto různých formulářů v množném čísle.

Vytváření souborů nákupní objednávky v množném čísle

Do dříve zmíněného souboru fr.po přidejte následující obsah:

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Il y a un élément."
msgstr[1] "Il y a {0} éléments."

Podívejte se , co je soubor PO? Vysvětlení toho, co jednotlivé položky v tomto příkladu představují.

Přidání jazyka pomocí různých formulářů pluralizace

V předchozím příkladu byly použity anglické a francouzské řetězce. Angličtina a francouzština mají pouze dva tvary množného čísla a sdílejí stejná pravidla formuláře, což znamená, že kardinalita jednoho z nich je namapována na první formulář v množném čísle. Jakákoli jiná kardinalita se mapuje na druhý tvar množného čísla.

Ne všechny jazyky sdílejí stejná pravidla. To je ilustrováno českým jazykem, který má tři tvary množného čísla.

cs.po Vytvořte soubor následujícím způsobem a všimněte si, jak pluralizace potřebuje tři různé překlady:

msgid "Hello world!"
msgstr "Ahoj světe!!"

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Existuje jedna položka."
msgstr[1] "Existují {0} položky."
msgstr[2] "Existuje {0} položek."

Pokud chcete přijmout českou lokalizaci, přidejte "cs" do seznamu podporovaných jazykových verzí v ConfigureServices metodě:

services.Configure<RequestLocalizationOptions>(options => options
                .AddSupportedCultures("fr", "cs")
                .AddSupportedUICultures("fr", "cs")
            );

Pages/Index.cshtml Upravte soubor tak, aby se vykreslovat lokalizované řetězce množného čísla pro několik kardinalit:

<p>@Localizer.Plural(1, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(2, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(5, "There is one item.", "There are {0} items.")</p>

Poznámka: V reálném scénáři by se proměnná použila k reprezentaci počtu. Tady stejný kód opakujeme se třemi různými hodnotami, abychom zpřístupnili velmi konkrétní případ.

Při přepínání jazykových verzí se zobrazí následující:

Pro /Index:

There is one item.
There are 2 items.
There are 5 items.

Pro /Index?culture=fr:

Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.

Pro /Index?culture=cs:

Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.

Všimněte si, že pro českou kulturu jsou tři překlady odlišné. Francouzské a anglické jazykové verze sdílejí stejnou výstavbu dvou naposledy přeložených řetězců.

Pokročilé úlohy

Kontextové určení řetězců

Aplikace často obsahují řetězce, které se mají přeložit na několika místech. Stejný řetězec může mít v určitých umístěních v aplikaci jiný překlad (Razor zobrazení nebo soubory tříd). Soubor PO podporuje pojem kontextu souboru, který lze použít k kategorizaci reprezentované řetězce. Pomocí kontextu souboru lze řetězec přeložit odlišně v závislosti na kontextu souboru (nebo nedostatku kontextu souboru).

Lokalizační služby nákupní objednávky používají název celé třídy nebo zobrazení, které se používá při překladu řetězce. Toho dosáhnete nastavením hodnoty položky msgctxt .

Zvažte menší přidání k předchozímu příkladu fr.po . Zobrazení Razor umístěné na Pages/Index.cshtml adrese může být definováno jako kontext souboru nastavením hodnoty rezervované msgctxt položky:

msgctxt "Pages.Index"
msgid "Hello world!"
msgstr "Bonjour le monde!"

Při nastavení msgctxt , jako je například, překlad textu nastane při přechodu na /Index?culture=fr-FR. Při přechodu na /Privacy?culture=fr-FR.

Pokud se žádná konkrétní položka neshoduje s daným kontextem souboru, náhradní mechanismus Orchard Core vyhledá příslušný soubor PO bez kontextu. Za předpokladu, že neexistuje žádný konkrétní kontext souboru pro Pages/Privacy.cshtmlnačtení souboru NÁKUPNÍ, /Privacy?culture=fr-FR například:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Změna umístění souborů NÁKUPNÍ

Výchozí umístění souborů PO lze změnit v ConfigureServices:

services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");

V tomto příkladu se soubory nákupní objednávky načtou ze složky Lokalizace .

Implementace vlastní logiky pro vyhledání lokalizačních souborů

Pokud je k vyhledání souborů nákupní objednávky potřeba složitější logika OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider , je možné rozhraní implementovat a zaregistrovat jako službu. To je užitečné v případě, že soubory nákupní objednávky mohou být uloženy v různých umístěních nebo když se soubory musí najít v hierarchii složek.

Použití jiného výchozího množného jazyka v množném čísle

Balíček obsahuje rozšiřující metodu Plural specifickou pro dvě formuláře v množném čísle. Pro jazyky vyžadující více formulářů v množném čísle vytvořte metodu rozšíření. S rozšiřující metodou nebudete muset poskytnout žádný lokalizační soubor pro výchozí jazyk – původní řetězce jsou již k dispozici přímo v kódu.

Můžete použít obecnější Plural(int count, string[] pluralForms, params object[] arguments) přetížení, které přijímá pole řetězců překladů.

Od Sébastien Ros, Scott Addie a Hisham Bin Ateya

Tento článek vás provede postupem použití souborů Portable Object (PO) v aplikaci ASP.NET Core s architekturou Orchard Core .

Poznámka: Orchard Core není produktem Microsoftu. Společnost Microsoft proto neposkytuje pro tuto funkci žádnou podporu.

Zobrazení nebo stažení ukázkového kódu (postup stažení)

Co je soubor PO?

Soubory nákupní objednávky se distribuují jako textové soubory obsahující přeložené řetězce pro daný jazyk. Mezi výhody použití souborů PO místo souborů .resx patří:

  • Soubory NÁKUPNÍ podporují pluralizaci; Soubory .resx nepodporují pluralizaci.
  • Soubory PO nejsou kompilovány jako soubory .resx . Proto se nevyžadují specializované nástroje a kroky sestavení.
  • Soubory po fungují dobře s nástroji pro online úpravy spolupráce.

Příklad

Tady je ukázkový soubor NÁKUPNÍ obsahující překlad dvou řetězců ve francouzštině, včetně jednoho s jeho množným číslem:

fr.po

#: Services/EmailService.cs:29
msgid "Enter a comma separated list of email addresses."
msgstr "Entrez une liste d'emails séparés par une virgule."

#: Views/Email.cshtml:112
msgid "The email address is \"{0}\"."
msgid_plural "The email addresses are \"{0}\"."
msgstr[0] "L'adresse email est \"{0}\"."
msgstr[1] "Les adresses email sont \"{0}\""

V tomto příkladu se používá následující syntaxe:

  • #:: Komentář označující kontext řetězce, který se má přeložit. Stejný řetězec se může přeložit jinak v závislosti na tom, kde se používá.
  • msgid: Nepřeložený řetězec.
  • msgstr: Přeložený řetězec.

V případě podpory pluralizace je možné definovat více položek.

  • msgid_plural: Nepřeložitý řetězec v množném čísle.
  • msgstr[0]: Přeložený řetězec pro případ 0.
  • msgstr[N]: Přeložený řetězec pro případ N.

Specifikace souboru PO najdete tady.

Konfigurace podpory souborů PO v ASP.NET Core

Tento příklad vychází z aplikace ASP.NET Core MVC vygenerované ze šablony projektu sady Visual Studio 2017.

Odkazování na balíček

Přidejte odkaz na OrchardCore.Localization.Core balíček NuGet.

Soubor .csproj teď obsahuje řádek podobný následujícímu (číslo verze se může lišit):

<PackageReference Include="OrchardCore.Localization.Core" Version="1.0.0" />

Registrace služby

Přidejte požadované služby do ConfigureServices metody Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);

    services.AddPortableObjectLocalization();

    services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new List<CultureInfo>
            {
                new CultureInfo("en-US"),
                new CultureInfo("en"),
                new CultureInfo("fr-FR"),
                new CultureInfo("fr")
            };

            options.DefaultRequestCulture = new RequestCulture("en-US");
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;
        });
}

Přidejte požadovaný middleware do Configure metody Startup.cs:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseRouting();
    app.UseStaticFiles();

    app.UseRequestLocalization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Do volby zobrazení přidejte následující kód Razor . About.cshtml se používá v tomto příkladu.

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer

<p>@Localizer["Hello world!"]</p>

Instance IViewLocalizer se vloží a použije se k překladu textu "Hello world!".

Vytvoření souboru NÁKUPNÍ

Vytvořte soubor s názvem <culture code.po> v kořenové složce aplikace. V tomto příkladu je název souboru fr.po , protože se používá francouzský jazyk:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Tento soubor ukládá řetězec pro překlad i řetězec přeložený francouzštinou. Překlady se v případě potřeby vrátí k nadřazené jazykové verzi. V tomto příkladu se použije soubor fr.po , pokud je fr-FR požadovaná jazyková verze nebo fr-CA.

Testování aplikace

Spusťte aplikaci a přejděte na adresu URL /Home/About. Zobrazí se text Hello World.

Přejděte na adresu URL /Home/About?culture=fr-FR. Zobrazí se text Bonjour le monde!

Pluralizace

Soubory NÁKUPNÍ podporují formuláře pluralizace, což je užitečné, když stejný řetězec musí být přeložen odlišně na základě kardinality. Tato úloha je složitá skutečností, že každý jazyk definuje vlastní pravidla pro výběr řetězce, který se má použít na základě kardinality.

Balíček Orchard Localization poskytuje rozhraní API pro automatické vyvolání těchto různých formulářů v množném čísle.

Vytváření souborů nákupní objednávky v množném čísle

Do dříve zmíněného souboru fr.po přidejte následující obsah:

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Il y a un élément."
msgstr[1] "Il y a {0} éléments."

Podívejte se , co je soubor PO? Vysvětlení toho, co jednotlivé položky v tomto příkladu představují.

Přidání jazyka pomocí různých formulářů pluralizace

V předchozím příkladu byly použity anglické a francouzské řetězce. Angličtina a francouzština mají pouze dva tvary množného čísla a sdílejí stejná pravidla formuláře, což znamená, že kardinalita jednoho z nich je namapována na první formulář v množném čísle. Jakákoli jiná kardinalita se mapuje na druhý tvar množného čísla.

Ne všechny jazyky sdílejí stejná pravidla. To je ilustrováno českým jazykem, který má tři tvary množného čísla.

cs.po Vytvořte soubor následujícím způsobem a všimněte si, jak pluralizace potřebuje tři různé překlady:

msgid "Hello world!"
msgstr "Ahoj světe!!"

msgid "There is one item."
msgid_plural "There are {0} items."
msgstr[0] "Existuje jedna položka."
msgstr[1] "Existují {0} položky."
msgstr[2] "Existuje {0} položek."

Pokud chcete přijmout českou lokalizaci, přidejte "cs" do seznamu podporovaných jazykových verzí v ConfigureServices metodě:

var supportedCultures = new List<CultureInfo>
{
    new CultureInfo("en-US"),
    new CultureInfo("en"),
    new CultureInfo("fr-FR"),
    new CultureInfo("fr"),
    new CultureInfo("cs")
};

Views/Home/About.cshtml Upravte soubor tak, aby se vykreslovat lokalizované řetězce množného čísla pro několik kardinalit:

<p>@Localizer.Plural(1, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(2, "There is one item.", "There are {0} items.")</p>
<p>@Localizer.Plural(5, "There is one item.", "There are {0} items.")</p>

Poznámka: V reálném scénáři by se proměnná použila k reprezentaci počtu. Tady stejný kód opakujeme se třemi různými hodnotami, abychom zpřístupnili velmi konkrétní případ.

Při přepínání jazykových verzí se zobrazí následující:

Pro /Home/About:

There is one item.
There are 2 items.
There are 5 items.

Pro /Home/About?culture=fr:

Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.

Pro /Home/About?culture=cs:

Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.

Všimněte si, že pro českou kulturu jsou tři překlady odlišné. Francouzské a anglické jazykové verze sdílejí stejnou výstavbu dvou naposledy přeložených řetězců.

Pokročilé úlohy

Kontextové určení řetězců

Aplikace často obsahují řetězce, které se mají přeložit na několika místech. Stejný řetězec může mít v určitých umístěních v aplikaci jiný překlad (Razor zobrazení nebo soubory tříd). Soubor PO podporuje pojem kontextu souboru, který lze použít k kategorizaci reprezentované řetězce. Pomocí kontextu souboru lze řetězec přeložit odlišně v závislosti na kontextu souboru (nebo nedostatku kontextu souboru).

Lokalizační služby nákupní objednávky používají název celé třídy nebo zobrazení, které se používá při překladu řetězce. Toho dosáhnete nastavením hodnoty položky msgctxt .

Zvažte menší přidání k předchozímu příkladu fr.po . Zobrazení Razor umístěné na Views/Home/About.cshtml adrese může být definováno jako kontext souboru nastavením hodnoty rezervované msgctxt položky:

msgctxt "Views.Home.About"
msgid "Hello world!"
msgstr "Bonjour le monde!"

Při nastavení msgctxt , jako je například, překlad textu nastane při přechodu na /Home/About?culture=fr-FR. Při přechodu na /Home/Contact?culture=fr-FR.

Pokud se žádná konkrétní položka neshoduje s daným kontextem souboru, náhradní mechanismus Orchard Core vyhledá příslušný soubor PO bez kontextu. Za předpokladu, že neexistuje žádný konkrétní kontext souboru pro Views/Home/Contact.cshtmlnačtení souboru NÁKUPNÍ, /Home/Contact?culture=fr-FR například:

msgid "Hello world!"
msgstr "Bonjour le monde!"

Změna umístění souborů NÁKUPNÍ

Výchozí umístění souborů PO lze změnit v ConfigureServices:

services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");

V tomto příkladu se soubory nákupní objednávky načtou ze složky Lokalizace .

Implementace vlastní logiky pro vyhledání lokalizačních souborů

Pokud je k vyhledání souborů nákupní objednávky potřeba složitější logika OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider , je možné rozhraní implementovat a zaregistrovat jako službu. To je užitečné v případě, že soubory nákupní objednávky mohou být uloženy v různých umístěních nebo když se soubory musí najít v hierarchii složek.

Použití jiného výchozího množného jazyka v množném čísle

Balíček obsahuje rozšiřující metodu Plural specifickou pro dvě formuláře v množném čísle. Pro jazyky vyžadující více formulářů v množném čísle vytvořte metodu rozšíření. S rozšiřující metodou nebudete muset poskytnout žádný lokalizační soubor pro výchozí jazyk – původní řetězce jsou již k dispozici přímo v kódu.

Můžete použít obecnější Plural(int count, string[] pluralForms, params object[] arguments) přetížení, které přijímá pole řetězců překladů.