ASP.NET Core'da taşınabilir nesne yerelleştirmeyi yapılandırma
Hisham Bin Ateya ve Sébastien Ros tarafından.
Bu makalede, Orchard Core çerçevesiyle bir ASP.NET Core uygulamasında Taşınabilir Nesne (PO) dosyalarını kullanma adımları açıklanmaktadır.
Not: Orchard Core bir Microsoft ürünü değildir. Microsoft bu özellik için destek sağlamaz.
Örnek kodu görüntüleme veya indirme (indirme)
PO dosyası nedir?
PO dosyaları, belirli bir dil için çevrilmiş dizeleri içeren metin dosyaları olarak dağıtılır. .resx dosyaları yerine PO dosyalarını kullanmanın bazı avantajları şunlardır:
- PO dosyaları çoğullaştırmayı destekler; .resx dosyaları çoğullaştırmayı desteklemez.
- PO dosyaları .resx dosyaları gibi derlenmemiştir. Bu nedenle özel araçlar ve derleme adımları gerekli değildir.
- PO dosyaları, işbirliğine dayalı çevrimiçi düzenleme araçlarıyla iyi çalışır.
Örnek
Aşağıdaki örnek PO dosyası, çoğul biçimine sahip olmak üzere Fransızca iki dizenin çevirisini içerir:
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."
Bu örnekte aşağıdaki söz dizimi kullanılır:
#:
: Çevrilecek dizenin bağlamını gösteren açıklama. Aynı dize, kullanıldığı yere bağlı olarak farklı çevrilebilir.msgid
: Çevrilmemiş dize.msgstr
: Çevrilen dize.
Çoğullaştırma desteği için daha fazla giriş tanımlanabilir.
msgid_plural
: Çevrilmemiş çoğul dize.msgstr[0]
: Büyük/küçük harf 0 için çevrilmiş dize.msgstr[N]
: Büyük/küçük harf N için çevrilmiş dize.
PO dosya belirtimi burada bulunabilir.
ASP.NET Core'da PO dosya desteğini yapılandırma
Bu örnek, Visual Studio 2022 proje şablonundan oluşturulan ASP.NET Core Web uygulamasını temel alır.
Pakete başvurma
NuGet paketine OrchardCore.Localization.Core
bir başvuru ekleyin.
Dosya .csproj
artık aşağıdakine benzer bir satır içeriyor (sürüm numarası farklılık gösterebilir):
<PackageReference Include="OrchardCore.Localization.Core" Version="1.5.0" />
Hizmeti kaydetme
Gerekli hizmetleri öğesine Program.cs
ekleyin:
builder.Services.AddPortableObjectLocalization();
builder.Services
.Configure<RequestLocalizationOptions>(options => options
.AddSupportedCultures("fr", "cs")
.AddSupportedUICultures("fr", "cs"));
builder.Services
.AddRazorPages()
.AddViewLocalization();
Aşağıdaki kodu istediğiniz sayfaya Razor ekleyin. Index.cshtml
bu örnekte kullanılır.
@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>
Bir IViewLocalizer
örnek eklenir ve "Merhaba dünya!" metnini çevirmek için kullanılır.
PO dosyası oluşturma
Uygulama kök klasörünüzde culture code.po> adlı <bir dosya oluşturun. Bu örnekte, Fransızca dili kullanıldığından dosya adı fr.po şeklindedir:
msgid "Hello world!"
msgstr "Bonjour le monde!"
Bu dosya hem çevrilecek dizeyi hem de Fransızca çevrilmiş dizeyi depolar. Çeviriler gerekirse üst kültürlerine geri döner. Bu örnekte, istenen kültür fr-FR
veya fr-CA
ise fr.po dosyası kullanılır.
Uygulamayı test etme
Uygulamanızı çalıştırın; Merhaba dünya! metni görüntülenir.
/Index?culture=fr-FR
URL'sine gidin. Bonjour le monde! metni görüntülenir.
Çoğullaştırma
PO dosyaları çoğullaştırma formlarını destekler. Bu, aynı dizenin kardinaliteye göre farklı çevrilmesi gerektiğinde kullanışlıdır. Bu görev, her dilin kardinaliteye göre hangi dizenin kullanılacağını seçmek için özel kurallar tanımlaması nedeniyle karmaşık hale getirilir.
Orchard Yerelleştirme paketi, bu farklı çoğul formları otomatik olarak çağırmak için bir API sağlar.
Çoğullaştırma PO dosyaları oluşturma
Daha önce bahsedilen fr.po dosyasına aşağıdaki içeriği ekleyin:
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."
Bu örnekteki her girişin neyi temsil ettiği hakkında bir açıklama için bkz. PO dosyası nedir?
Farklı çoğullama formları kullanarak dil ekleme
Önceki örnekte İngilizce ve Fransızca dizeler kullanılmıştır. İngilizce ve Fransızca yalnızca iki çoğullaştırma formuna sahiptir ve aynı form kurallarını paylaşırlar; bu da bir kardinalitesinin ilk çoğul forma eşlenmesidir. Diğer kardinaliteler ikinci çoğul forma eşlenir.
Tüm diller aynı kuralları paylaşmaz. Bu, üç çoğul biçimi olan Çek diliyle gösterilmiştir.
cs.po
Dosyayı aşağıdaki gibi oluşturun ve çoğullaştırmanın üç farklı çeviriye nasıl ihtiyacı olduğunu not edin:
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."
Çek yerelleştirmelerini kabul etmek için yönteminde desteklenen kültürler Configure
listesine ekleyin"cs"
:
builder.Services
.Configure<RequestLocalizationOptions>(options => options
.AddSupportedCultures("fr", "cs")
.AddSupportedUICultures("fr", "cs"));
Pages/Index.cshtml
Dosyayı düzenleyerek çeşitli kardinaliteler için yerelleştirilmiş çoğul dizeleri işleyin:
<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>
Not: Gerçek dünya senaryosunda, sayıyı temsil etmek için bir değişken kullanılır. Burada, belirli bir olayı kullanıma açmak için aynı kodu üç farklı değerle yineleyeceğiz.
Kültürler arasında geçiş yaptığınızda aşağıdakileri görürsünüz:
/Index
için:
There is one item.
There are 2 items.
There are 5 items.
/Index?culture=fr
için:
Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.
/Index?culture=cs
için:
Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.
Çek kültürü için üç çeviri farklıdır. Fransız ve İngiliz kültürleri, son çevrilen iki dize için aynı yapıyı paylaşır.
Gelişmiş görevler
Ek bağımsız değişkenleri kullanma
Sıfır dizinindeki {0}
bağımsız değişken her zaman sayı değerini temsil eder. yöntemi çağrılırken Plural
, ek bağımsız değişkenler eklemek mümkündür ve dizinleri bir (1
) ile başlar.
<p>@Localizer.Plural(count, "There is one item with the color {1}.", "There are {0} items. The main color is {1}.", color)</p>
Dizeleri bağlamsallaştırma
Uygulamalar genellikle çeşitli yerlerde çevrilecek dizeleri içerir. Aynı dizenin bir uygulama içindeki belirli konumlarda (Razor görünümler veya sınıf dosyaları) farklı bir çevirisi olabilir. PO dosyası, temsil edilen dizeyi kategorilere ayırmak için kullanılabilen dosya bağlamı kavramlarını destekler. Bir dosya bağlamı kullanılarak, bir dize dosya bağlamı (veya dosya bağlamı eksikliği) bağlı olarak farklı çevrilebilir.
PO yerelleştirme hizmetleri, tam sınıfın adını veya bir dizeyi çevirirken kullanılan görünümü kullanır. Bu, girdideki msgctxt
değer ayarlanarak gerçekleştirilir.
Önceki fr.po örneğine küçük bir ekleme düşünün. Razor konumunda Pages/Index.cshtml
bulunan bir sayfa, ayrılmış msgctxt
girişin değeri ayarlanarak dosya bağlamı olarak tanımlanabilir:
msgctxt "Views.Home.About"
msgid "Hello world!"
msgstr "Bonjour le monde!"
msgctxt
Bu şekilde ayarlandığında, adresine gezinirken /Index?culture=fr-FR
metin çevirisi gerçekleşir. çevirisi adresine gezinirken /Privacy?culture=fr-FR
gerçekleşmez.
Belirli bir dosya bağlamıyla eşleşmediğinde, Orchard Core'un geri dönüş mekanizması bağlamı olmayan uygun bir PO dosyasını arar. için Pages/Privacy.cshtml
tanımlanmış belirli bir dosya bağlamı olmadığı varsayıldığında, aşağıdaki gibi bir PO dosyasını yüklemek için /Privacy?culture=fr-FR
gezinme:
msgid "Hello world!"
msgstr "Bonjour le monde!"
PO dosyalarının konumunu değiştirme
PO dosyalarının varsayılan konumu içinde Programs.cs
değiştirilebilir:
services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");
Bu örnekte, PO dosyaları Yerelleştirme klasöründen yüklenir.
Yerelleştirme dosyalarını bulmak için özel mantık uygulama
PO dosyalarını bulmak için daha karmaşık bir mantık gerektiğinde, OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider
arabirim uygulanabilir ve hizmet olarak kaydedilebilir. Bu, PO dosyalarının farklı konumlarda depolanabilmesi veya dosyaların bir klasör hiyerarşisi içinde bulunması gerektiğinde kullanışlıdır.
Farklı bir varsayılan çoğullaştırılmış dil kullanma
Paket, iki çoğul forma özgü bir Plural
uzantı yöntemi içerir. Daha fazla çoğul form gerektiren diller için bir uzantı yöntemi oluşturun. Bir uzantı yöntemiyle, varsayılan dil için herhangi bir yerelleştirme dosyası sağlamanız gerekmez; özgün dizeler doğrudan kodda zaten kullanılabilir.
Çevirilerin dize dizisini kabul eden daha genel Plural(int count, string[] pluralForms, params object[] arguments)
aşırı yüklemeyi kullanabilirsiniz.
Sébastien Ros, Scott Addie ve Hisham Bin Ateya tarafından
Bu makalede, Orchard Core çerçevesiyle bir ASP.NET Core uygulamasında Taşınabilir Nesne (PO) dosyalarını kullanma adımları açıklanmaktadır.
Not: Orchard Core bir Microsoft ürünü değildir. Sonuç olarak, Microsoft bu özellik için destek sağlamaz.
Örnek kodu görüntüleme veya indirme (indirme)
PO dosyası nedir?
PO dosyaları, belirli bir dil için çevrilmiş dizeleri içeren metin dosyaları olarak dağıtılır. .resx dosyaları yerine PO dosyalarını kullanmanın bazı avantajları şunlardır:
- PO dosyaları çoğullaştırmayı destekler; .resx dosyaları çoğullaştırmayı desteklemez.
- PO dosyaları .resx dosyaları gibi derlenmemiştir. Bu nedenle özel araçlar ve derleme adımları gerekli değildir.
- PO dosyaları, işbirliğine dayalı çevrimiçi düzenleme araçlarıyla iyi çalışır.
Örnek
Aşağıda, çoğul biçimine sahip olmak üzere fransızca iki dizenin çevirisini içeren örnek bir PO dosyası verilmiştir:
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."
Bu örnekte aşağıdaki söz dizimi kullanılır:
#:
: Çevrilecek dizenin bağlamını gösteren açıklama. Aynı dize, kullanıldığı yere bağlı olarak farklı çevrilebilir.msgid
: Çevrilmemiş dize.msgstr
: Çevrilen dize.
Çoğullaştırma desteği söz konusu olduğunda daha fazla giriş tanımlanabilir.
msgid_plural
: Çevrilmemiş çoğul dize.msgstr[0]
: Büyük/küçük harf 0 için çevrilmiş dize.msgstr[N]
: Büyük/küçük harf N için çevrilmiş dize.
PO dosya belirtimi burada bulunabilir.
ASP.NET Core'da PO dosya desteğini yapılandırma
Bu örnek, Visual Studio 2019 proje şablonundan oluşturulan ASP.NET Core MVC uygulamasını temel alır.
Pakete başvurma
NuGet paketine OrchardCore.Localization.Core
bir başvuru ekleyin.
Dosya .csproj
artık aşağıdakine benzer bir satır içeriyor (sürüm numarası farklılık gösterebilir):
<PackageReference Include="OrchardCore.Localization.Core" Version="1.2.0" />
Hizmeti kaydetme
Gerekli hizmetleri yöntemine ConfigureServices
Startup.cs
ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
services.AddPortableObjectLocalization();
services.Configure<RequestLocalizationOptions>(options => options
.AddSupportedCultures("fr", "cs")
.AddSupportedUICultures("fr", "cs")
);
}
gerekli ara yazılımı yöntemine Configure
Startup.cs
ekleyin:
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?}");
});
}
Aşağıdaki kodu istediğiniz sayfaya Razor ekleyin. Index.cshtml
bu örnekte kullanılır.
@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>
Bir IViewLocalizer
örnek eklenir ve "Merhaba dünya!" metnini çevirmek için kullanılır.
PO dosyası oluşturma
Uygulama kök klasörünüzde culture code.po> adlı <bir dosya oluşturun. Bu örnekte, Fransızca dili kullanıldığından dosya adı fr.po şeklindedir:
msgid "Hello world!"
msgstr "Bonjour le monde!"
Bu dosya hem çevrilecek dizeyi hem de Fransızca çevrilmiş dizeyi depolar. Çeviriler gerekirse üst kültürlerine geri döner. Bu örnekte, istenen kültür fr-FR
veya fr-CA
ise fr.po dosyası kullanılır.
Uygulamayı test etme
Uygulamanızı çalıştırın ve URL'sine /Index
gidin. Merhaba dünya! metni görüntülenir.
/Index?culture=fr-FR
URL'sine gidin. Bonjour le monde! metni görüntülenir.
Çoğullaştırma
PO dosyaları çoğullaştırma formlarını destekler. Bu, aynı dizenin kardinaliteye göre farklı çevrilmesi gerektiğinde kullanışlıdır. Bu görev, her dilin kardinaliteye göre hangi dizenin kullanılacağını seçmek için özel kurallar tanımlaması nedeniyle karmaşık hale getirilir.
Orchard Yerelleştirme paketi, bu farklı çoğul formları otomatik olarak çağırmak için bir API sağlar.
Çoğullaştırma PO dosyaları oluşturma
Daha önce bahsedilen fr.po dosyasına aşağıdaki içeriği ekleyin:
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."
Bu örnekteki her girişin neyi temsil ettiği hakkında bir açıklama için bkz. PO dosyası nedir?
Farklı çoğullama formları kullanarak dil ekleme
Önceki örnekte İngilizce ve Fransızca dizeler kullanılmıştır. İngilizce ve Fransızca yalnızca iki çoğullaştırma formuna sahiptir ve aynı form kurallarını paylaşırlar; bu da bir kardinalitesinin ilk çoğul forma eşlenmesidir. Diğer kardinaliteler ikinci çoğul forma eşlenir.
Tüm diller aynı kuralları paylaşmaz. Bu, üç çoğul biçimi olan Çek diliyle gösterilmiştir.
cs.po
Dosyayı aşağıdaki gibi oluşturun ve çoğullaştırmanın üç farklı çeviriye nasıl ihtiyacı olduğunu not edin:
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."
Çek yerelleştirmelerini kabul etmek için yönteminde desteklenen kültürler ConfigureServices
listesine ekleyin"cs"
:
services.Configure<RequestLocalizationOptions>(options => options
.AddSupportedCultures("fr", "cs")
.AddSupportedUICultures("fr", "cs")
);
Pages/Index.cshtml
Dosyayı düzenleyerek çeşitli kardinaliteler için yerelleştirilmiş çoğul dizeleri işleyin:
<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>
Not: Gerçek dünya senaryosunda, sayıyı temsil etmek için bir değişken kullanılır. Burada aynı kodu üç farklı değerle tekrarlar ve çok belirli bir olayı kullanıma sunarız.
Kültürler arasında geçiş yaptığınızda aşağıdakileri görürsünüz:
/Index
için:
There is one item.
There are 2 items.
There are 5 items.
/Index?culture=fr
için:
Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.
/Index?culture=cs
için:
Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.
Çek kültürü için üç çevirinin farklı olduğunu unutmayın. Fransız ve İngiliz kültürleri, son çevrilen iki dize için aynı yapıyı paylaşır.
Gelişmiş görevler
Dizeleri bağlamsallaştırma
Uygulamalar genellikle çeşitli yerlerde çevrilecek dizeleri içerir. Aynı dizenin bir uygulama içindeki belirli konumlarda (Razor görünümler veya sınıf dosyaları) farklı bir çevirisi olabilir. PO dosyası, temsil edilen dizeyi kategorilere ayırmak için kullanılabilen dosya bağlamı kavramlarını destekler. Bir dosya bağlamı kullanılarak, bir dize dosya bağlamı (veya dosya bağlamı eksikliği) bağlı olarak farklı çevrilebilir.
PO yerelleştirme hizmetleri, tam sınıfın adını veya bir dizeyi çevirirken kullanılan görünümü kullanır. Bu, girdideki msgctxt
değer ayarlanarak gerçekleştirilir.
Önceki fr.po örneğine küçük bir ekleme düşünün. konumunda Pages/Index.cshtml
bulunan bir Razor görünüm, ayrılmış msgctxt
girişin değeri ayarlanarak dosya bağlamı olarak tanımlanabilir:
msgctxt "Pages.Index"
msgid "Hello world!"
msgstr "Bonjour le monde!"
msgctxt
Bu şekilde ayarlandığında, adresine gezinirken /Index?culture=fr-FR
metin çevirisi gerçekleşir. çevirisi adresine ilerlerken /Privacy?culture=fr-FR
gerçekleşmez.
Belirli bir dosya bağlamıyla eşleşmediğinde, Orchard Core'un geri dönüş mekanizması bağlamı olmayan uygun bir PO dosyasını arar. için Pages/Privacy.cshtml
tanımlanmış belirli bir dosya bağlamı olmadığı varsayıldığında, aşağıdaki gibi bir PO dosyasını yüklemek için /Privacy?culture=fr-FR
gezinme:
msgid "Hello world!"
msgstr "Bonjour le monde!"
PO dosyalarının konumunu değiştirme
PO dosyalarının varsayılan konumu içinde ConfigureServices
değiştirilebilir:
services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");
Bu örnekte, PO dosyaları Yerelleştirme klasöründen yüklenir.
Yerelleştirme dosyalarını bulmak için özel mantık uygulama
PO dosyalarını bulmak için daha karmaşık bir mantık gerektiğinde, OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider
arabirim uygulanabilir ve hizmet olarak kaydedilebilir. Bu, PO dosyalarının farklı konumlarda depolanabilmesi veya dosyaların bir klasör hiyerarşisi içinde bulunması gerektiğinde kullanışlıdır.
Farklı bir varsayılan çoğullaştırılmış dil kullanma
Paket, iki çoğul forma özgü bir Plural
uzantı yöntemi içerir. Daha fazla çoğul form gerektiren diller için bir uzantı yöntemi oluşturun. Bir uzantı yöntemiyle, varsayılan dil için herhangi bir yerelleştirme dosyası sağlamanız gerekmez; özgün dizeler doğrudan kodda zaten kullanılabilir.
Çevirilerin dize dizisini kabul eden daha genel Plural(int count, string[] pluralForms, params object[] arguments)
aşırı yüklemeyi kullanabilirsiniz.
Sébastien Ros, Scott Addie ve Hisham Bin Ateya tarafından
Bu makalede, Orchard Core çerçevesiyle bir ASP.NET Core uygulamasında Taşınabilir Nesne (PO) dosyalarını kullanma adımları açıklanmaktadır.
Not: Orchard Core bir Microsoft ürünü değildir. Sonuç olarak, Microsoft bu özellik için destek sağlamaz.
Örnek kodu görüntüleme veya indirme (indirme)
PO dosyası nedir?
PO dosyaları, belirli bir dil için çevrilmiş dizeleri içeren metin dosyaları olarak dağıtılır. .resx dosyaları yerine PO dosyalarını kullanmanın bazı avantajları şunlardır:
- PO dosyaları çoğullaştırmayı destekler; .resx dosyaları çoğullaştırmayı desteklemez.
- PO dosyaları .resx dosyaları gibi derlenmemiştir. Bu nedenle özel araçlar ve derleme adımları gerekli değildir.
- PO dosyaları, işbirliğine dayalı çevrimiçi düzenleme araçlarıyla iyi çalışır.
Örnek
Aşağıda, çoğul biçimine sahip olmak üzere fransızca iki dizenin çevirisini içeren örnek bir PO dosyası verilmiştir:
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}\""
Bu örnekte aşağıdaki söz dizimi kullanılır:
#:
: Çevrilecek dizenin bağlamını gösteren açıklama. Aynı dize, kullanıldığı yere bağlı olarak farklı çevrilebilir.msgid
: Çevrilmemiş dize.msgstr
: Çevrilen dize.
Çoğullaştırma desteği söz konusu olduğunda daha fazla giriş tanımlanabilir.
msgid_plural
: Çevrilmemiş çoğul dize.msgstr[0]
: Büyük/küçük harf 0 için çevrilmiş dize.msgstr[N]
: Büyük/küçük harf N için çevrilmiş dize.
PO dosya belirtimi burada bulunabilir.
ASP.NET Core'da PO dosya desteğini yapılandırma
Bu örnek, Visual Studio 2017 proje şablonundan oluşturulan ASP.NET Core MVC uygulamasını temel alır.
Pakete başvurma
NuGet paketine OrchardCore.Localization.Core
bir başvuru ekleyin.
Dosya .csproj
artık aşağıdakine benzer bir satır içeriyor (sürüm numarası farklılık gösterebilir):
<PackageReference Include="OrchardCore.Localization.Core" Version="1.0.0" />
Hizmeti kaydetme
Gerekli hizmetleri yöntemine ConfigureServices
Startup.cs
ekleyin:
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;
});
}
gerekli ara yazılımı yöntemine Configure
Startup.cs
ekleyin:
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?}");
});
}
Aşağıdaki kodu istediğiniz görünüme Razor ekleyin. About.cshtml
bu örnekte kullanılır.
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<p>@Localizer["Hello world!"]</p>
Bir IViewLocalizer
örnek eklenir ve "Merhaba dünya!" metnini çevirmek için kullanılır.
PO dosyası oluşturma
Uygulama kök klasörünüzde culture code.po> adlı <bir dosya oluşturun. Bu örnekte, Fransızca dili kullanıldığından dosya adı fr.po şeklindedir:
msgid "Hello world!"
msgstr "Bonjour le monde!"
Bu dosya hem çevrilecek dizeyi hem de Fransızca çevrilmiş dizeyi depolar. Çeviriler gerekirse üst kültürlerine geri döner. Bu örnekte, istenen kültür fr-FR
veya fr-CA
ise fr.po dosyası kullanılır.
Uygulamayı test etme
Uygulamanızı çalıştırın ve URL'sine /Home/About
gidin. Merhaba dünya! metni görüntülenir.
/Home/About?culture=fr-FR
URL'sine gidin. Bonjour le monde! metni görüntülenir.
Çoğullaştırma
PO dosyaları çoğullaştırma formlarını destekler. Bu, aynı dizenin kardinaliteye göre farklı çevrilmesi gerektiğinde kullanışlıdır. Bu görev, her dilin kardinaliteye göre hangi dizenin kullanılacağını seçmek için özel kurallar tanımlaması nedeniyle karmaşık hale getirilir.
Orchard Yerelleştirme paketi, bu farklı çoğul formları otomatik olarak çağırmak için bir API sağlar.
Çoğullaştırma PO dosyaları oluşturma
Daha önce bahsedilen fr.po dosyasına aşağıdaki içeriği ekleyin:
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."
Bu örnekteki her girişin neyi temsil ettiği hakkında bir açıklama için bkz. PO dosyası nedir?
Farklı çoğullama formları kullanarak dil ekleme
Önceki örnekte İngilizce ve Fransızca dizeler kullanılmıştır. İngilizce ve Fransızca yalnızca iki çoğullaştırma formuna sahiptir ve aynı form kurallarını paylaşırlar; bu da bir kardinalitesinin ilk çoğul forma eşlenmesidir. Diğer kardinaliteler ikinci çoğul forma eşlenir.
Tüm diller aynı kuralları paylaşmaz. Bu, üç çoğul biçimi olan Çek diliyle gösterilmiştir.
cs.po
Dosyayı aşağıdaki gibi oluşturun ve çoğullaştırmanın üç farklı çeviriye nasıl ihtiyacı olduğunu not edin:
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."
Çek yerelleştirmelerini kabul etmek için yönteminde desteklenen kültürler ConfigureServices
listesine ekleyin"cs"
:
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
Dosyayı düzenleyerek çeşitli kardinaliteler için yerelleştirilmiş çoğul dizeleri işleyin:
<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>
Not: Gerçek dünya senaryosunda, sayıyı temsil etmek için bir değişken kullanılır. Burada aynı kodu üç farklı değerle tekrarlar ve çok belirli bir olayı kullanıma sunarız.
Kültürler arasında geçiş yaptığınızda aşağıdakileri görürsünüz:
/Home/About
için:
There is one item.
There are 2 items.
There are 5 items.
/Home/About?culture=fr
için:
Il y a un élément.
Il y a 2 éléments.
Il y a 5 éléments.
/Home/About?culture=cs
için:
Existuje jedna položka.
Existují 2 položky.
Existuje 5 položek.
Çek kültürü için üç çevirinin farklı olduğunu unutmayın. Fransız ve İngiliz kültürleri, son çevrilen iki dize için aynı yapıyı paylaşır.
Gelişmiş görevler
Dizeleri bağlamsallaştırma
Uygulamalar genellikle çeşitli yerlerde çevrilecek dizeleri içerir. Aynı dizenin bir uygulama içindeki belirli konumlarda (Razor görünümler veya sınıf dosyaları) farklı bir çevirisi olabilir. PO dosyası, temsil edilen dizeyi kategorilere ayırmak için kullanılabilen dosya bağlamı kavramlarını destekler. Bir dosya bağlamı kullanılarak, bir dize dosya bağlamı (veya dosya bağlamı eksikliği) bağlı olarak farklı çevrilebilir.
PO yerelleştirme hizmetleri, tam sınıfın adını veya bir dizeyi çevirirken kullanılan görünümü kullanır. Bu, girdideki msgctxt
değer ayarlanarak gerçekleştirilir.
Önceki fr.po örneğine küçük bir ekleme düşünün. konumunda Views/Home/About.cshtml
bulunan bir Razor görünüm, ayrılmış msgctxt
girişin değeri ayarlanarak dosya bağlamı olarak tanımlanabilir:
msgctxt "Views.Home.About"
msgid "Hello world!"
msgstr "Bonjour le monde!"
msgctxt
Bu şekilde ayarlandığında, adresine gezinirken /Home/About?culture=fr-FR
metin çevirisi gerçekleşir. çevirisi adresine ilerlerken /Home/Contact?culture=fr-FR
gerçekleşmez.
Belirli bir dosya bağlamıyla eşleşmediğinde, Orchard Core'un geri dönüş mekanizması bağlamı olmayan uygun bir PO dosyasını arar. için Views/Home/Contact.cshtml
tanımlanmış belirli bir dosya bağlamı olmadığı varsayıldığında, aşağıdaki gibi bir PO dosyasını yüklemek için /Home/Contact?culture=fr-FR
gezinme:
msgid "Hello world!"
msgstr "Bonjour le monde!"
PO dosyalarının konumunu değiştirme
PO dosyalarının varsayılan konumu içinde ConfigureServices
değiştirilebilir:
services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");
Bu örnekte, PO dosyaları Yerelleştirme klasöründen yüklenir.
Yerelleştirme dosyalarını bulmak için özel mantık uygulama
PO dosyalarını bulmak için daha karmaşık bir mantık gerektiğinde, OrchardCore.Localization.PortableObject.ILocalizationFileLocationProvider
arabirim uygulanabilir ve hizmet olarak kaydedilebilir. Bu, PO dosyalarının farklı konumlarda depolanabilmesi veya dosyaların bir klasör hiyerarşisi içinde bulunması gerektiğinde kullanışlıdır.
Farklı bir varsayılan çoğullaştırılmış dil kullanma
Paket, iki çoğul forma özgü bir Plural
uzantı yöntemi içerir. Daha fazla çoğul form gerektiren diller için bir uzantı yöntemi oluşturun. Bir uzantı yöntemiyle, varsayılan dil için herhangi bir yerelleştirme dosyası sağlamanız gerekmez; özgün dizeler doğrudan kodda zaten kullanılabilir.
Çevirilerin dize dizisini kabul eden daha genel Plural(int count, string[] pluralForms, params object[] arguments)
aşırı yüklemeyi kullanabilirsiniz.
ASP.NET Core