Aracılığıyla paylaş


Localization (Yerelleştirme)

Örneğe göz atın. Örneğe göz atın

Yerelleştirme, bir uygulamayı hedef pazarın belirli dil veya kültürel gereksinimlerini karşılayacak şekilde uyarlama işlemidir. Bir uygulamayı yerelleştirmek için metin ve görüntülerinin birden çok dile çevrilmesi gerekebilir. Yerelleştirilmiş bir uygulama, çevrilmiş metni cihazın kültür ayarlarına göre otomatik olarak görüntüler.

.NET, kaynak dosyalarını kullanarak uygulamaları yerelleştirmeye yönelik bir mekanizma içerir. Kaynak dosyası, uygulamanın sağlanan bir anahtar için içerik almasını sağlayan ad/değer çiftleri olarak metin ve diğer içeriği depolar. Kaynak dosyaları, yerelleştirilmiş içeriğin uygulama kodundan ayrılmasına olanak sağlar. Kaynak dosyaları, metin depolamaya ek olarak görüntüleri ve ikili verileri de depolayabilir. Bununla birlikte, cihazların çeşitli ekran boyutları ve yoğunlukları vardır ve her platformda yoğunluğa bağımlı görüntüleri görüntülemeye yönelik işlevler bulunur. Bu nedenle, görüntüleri kaynak dosyalarında depolamak yerine yerelleştirmek için platform işlevselliği kullanılmalıdır.

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulamasını yerelleştirmek için şunları yapmalısınız:

  1. Dizeleri depolamak için kaynak dosyaları oluşturun. Daha fazla bilgi için bkz . Dizeleri depolamak için kaynak dosyaları oluşturma.
  2. Uygulamanın nötr dilini belirtin. Daha fazla bilgi için bkz . Uygulamanın nötr dilini belirtme.
  3. Platform kurulumu gerçekleştirin. Daha fazla bilgi için bkz . Platform kurulumu gerçekleştirme.
  4. Metni yerelleştirin. Daha fazla bilgi için bkz . Metni yerelleştirme.
  5. Görüntüleri yerelleştirin. Daha fazla bilgi için bkz . Görüntüleri yerelleştirme.
  6. Uygulama adını yerelleştirin. Daha fazla bilgi için bkz . Uygulama adını yerelleştirme.
  7. Yerelleştirmeyi test edin. Daha fazla bilgi için bkz . Test yerelleştirmesi.

Ayrıca, bir uygulamanın düzen yönü belirtilebilir. Daha fazla bilgi için bkz . Sağdan sola yerelleştirme.

Dizeleri depolamak için kaynak dosyaları oluşturma

.NET kaynak dosyaları, derleme işlemi sırasında ikili kaynak (.resources) dosyalarında derlenen .resx uzantısına sahip XML dosyalarıdır. Yerelleştirilmiş bir uygulama genellikle uygulamada kullanılan tüm dizeleri ve desteklenen her dil için kaynak dosyalarını içeren varsayılan bir kaynak dosyası içerir.

Kaynak dosyaları her öğe için aşağıdaki bilgileri içerir:

  • Ad , koddaki metne erişmek için kullanılan anahtarı belirtir.
  • Değer çevrilen metni belirtir.
  • Açıklama , ek bilgi içeren isteğe bağlı bir alandır.

Visual Studio'da Yeni Öğe Ekle iletişim kutusuyla bir kaynak dosyası eklenebilir:

Visual Studio'da kaynak dosyası ekleme ekran görüntüsü.

Dosya eklendikten sonra, her metin kaynağı için satırlar eklenebilir:

Uygulama için varsayılan dizelerin ekran görüntüsü.

Access Değiştirici açılan listesi, Visual Studio'yu kaynaklara erişmek için kullanılan sınıfı nasıl oluşturacaklarını belirler. Erişim Değiştirici'yi Genel veya İç olarak ayarlamak, belirtilen erişilebilirlik düzeyine sahip oluşturulan bir sınıfta sonuçlanıyor. Erişim Değiştirici'nin Kod oluşturma yok olarak ayarlanması sınıf dosyası oluşturmaz. Varsayılan kaynak dosyası bir sınıf dosyası oluşturacak şekilde yapılandırılmalıdır ve bu da ile bir dosyaya neden olur. Designer.cs uzantısı projeye ekleniyor.

Varsayılan kaynak dosyası oluşturulduktan sonra, uygulamanın desteklediği her yerel ayar için ek dosyalar oluşturulabilir. Her ek kaynak dosyası, varsayılan kaynak dosyasıyla aynı kök dosya adına sahip olmalı, ancak dosya adında dili ve isteğe bağlı kültürü de içermelidir. Örneğin, AppResources.resx adlı bir kaynak dosyası eklerseniz, sırasıyla İngilizce (Birleşik Devletler) ve Fransızca (Fransa) kültürleri için yerelleştirilmiş kaynakları tutmak üzere AppResources.en-US.resx ve AppResources.fr-FR.resx adlı kaynak dosyaları da oluşturabilirsiniz. Ayrıca, her ek kaynak dosyası için Erişim Değiştirici'yi Kod oluşturma yok olarak ayarlamanız gerekir.

Çalışma zamanında uygulamanız belirlilik sırasına göre bir kaynak isteğini çözümlemeye çalışır. Örneğin, cihaz kültürü en-US ise uygulama kaynak dosyalarını şu sırayla arar:

  1. AppResources.en-US.resx
  2. AppResources.en.resx
  3. AppResources.resx (varsayılan)

Aşağıdaki ekran görüntüsünde AppResources.es.resx adlı bir İspanyolca çeviri dosyası gösterilmektedir:

Uygulamanın İspanyolca dizelerinin ekran görüntüsü.

Yerelleştirilmiş kaynak dosyası, varsayılan dosyada belirtilen Aynı Ad değerlerini kullanır, ancak Değer sütununda İspanyolca dil dizeleri içerir. Ayrıca, Erişim Değiştiricisi Kod oluşturma yok olarak ayarlanır.

Uygulamanın nötr dilini belirtme

.NET kaynak dosyalarının düzgün çalışması için uygulamanın nötr bir dil belirtmiş olması gerekir. Bu, yerel ayar için kaynaklar bulunamazsa kaynakları kullanılan dildir. Nötr dili belirtmek için:

  1. Çözüm Gezgini'da .NET MAUI uygulama projenize sağ tıklayın ve Özellikler'i seçin.

  2. Genel Paket > özellik sayfasını seçin ve Derleme nötr dil açılan listesinden uygun dili ve kültürü seçin:

    Derleme için nötr dili ayarlama işleminin ekran görüntüsü.

  3. Değişikliklerinizi kaydedin.

Alternatif olarak, öğesini proje dosyanızdaki ilk <PropertyGroup> öğeye ekleyin <NeutralLanguage> ve seçtiğiniz yerel ayarı değeri olarak belirtin:

<NeutralLanguage>en-US</NeutralLanguage>

Uyarı

Nötr bir dil belirtmezseniz, ResourceManager sınıf kaynak dosyası olmayan tüm dillerin değerlerini döndürür null . Nötr dil belirtildiğinde, sınıf desteklenmeyen ResourceManager diller için nötr dil kaynak dosyasından sonuçlar döndürür. Bu nedenle, desteklenmeyen diller için metnin görüntülenmesi için her zaman nötr bir dil belirtmeniz önerilir.

Platform kurulumu gerçekleştirme

Tüm .NET MAUI denetimlerinin yerelleştirilmesi için iOS, Mac Catalyst ve Windows'da ek kurulum gereklidir.

iOS ve Mac Catalyst

iOS ve Mac Catalyst'te, .NET MAUI uygulama projenizde platformun Info.plist dosyasında desteklenen tüm dilleri bildirmeniz gerekir. Bunu yapmak için, seçtiğiniz platform için Info.plist dosyasını bir XML düzenleyicisinde açın ve anahtar için CFBundleLocalizations bir dizi oluşturun. Ardından kaynak dosyalarına karşılık gelen dizi değerlerini sağlayın. Ayrıca, anahtar aracılığıyla beklenen bir dil ayarladığınızdan CFBundleDevelopmentRegion emin olun:

<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>

Alternatif olarak, Visual Studio'daki Çözüm Gezgini Genel PList Düzenleyicisi'nde seçtiğiniz platform için Info.plist dosyasını açın. Ardından anahtar için CFBundleLocalizations bir dizi oluşturun ve kaynak dosyalarına karşılık gelen dizi değerleri sağlayın. Ayrıca, anahtar aracılığıyla beklenen bir dil ayarladığınızdan CFBundleDevelopmentRegion emin olun:

Genel Info.plist düzenleyicisinde uygulama için desteklenen yerel ayarların ekran görüntüsü.

Info.plist dosyası hakkında daha fazla bilgi için bkz. Bilgi özellik listesi.

Windows

Windows'daki bir .NET MAUI uygulamasında birden çok dili desteklemek için desteklenen her dili .NET MAUI uygulama projenizin Platforms\Windows\Package.appxmanifest dosyasında bildirmeniz gerekir:

  1. Package.appxmanifest dosyasını bir metin düzenleyicisinde açın ve aşağıdaki bölümü bulun:

    <Resources>
        <Resource Language="x-generate"/>
    </Resources>
    
  2. öğesini desteklenen dillerinizin her biri için öğelerle <Resource /> değiştirin<Resource Language="x-generate">:

    <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. Değişikliklerinizi kaydedin.

Metni yerelleştirme

Metin, varsayılan kaynaklar dosyanızdan oluşturulan bir sınıf kullanılarak yerelleştirilir. sınıfı, varsayılan kaynak dosya adına göre adlandırılır. AppResources.resx'in varsayılan kaynak dosya adı verilen Visual Studio, kaynak dosyasındaki her giriş için statik özellikler içeren adlı AppResources eşleşen bir sınıf oluşturur.

XAML'de yerelleştirilmiş metin, oluşturulan statik özelliklere x:Static erişmek için işaretleme uzantısı kullanılarak alınabilir:

<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>

İşaretlemeyi genişletme hakkında x:Static daha fazla bilgi için bkz . x:Statik işaretleme uzantısı.

Yerelleştirilmiş metin kodda da alınabilir:

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

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

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

sınıfındaki AppResources özellikler, hangi kaynak dosyasından CurrentUICulture değer alındığını belirlemek için özellik değerini kullanır.

Görüntüleri yerelleştirme

Kaynak dosyaları, metin depolamaya ek olarak görüntüleri ve ikili verileri de depolayabilir. Bununla birlikte, cihazların çeşitli ekran boyutları ve yoğunlukları vardır ve her platformda yoğunluğa bağımlı görüntüleri görüntülemeye yönelik işlevler bulunur. Bu nedenle, görüntüleri kaynak dosyalarında depolamak yerine yerelleştirmek için platform işlevselliği kullanılmalıdır.

Android

Android'de, çizilebilir öğeler olarak bilinen yerelleştirilmiş görüntüler Platforms\Android\Resources klasöründe klasör tabanlı bir adlandırma kuralı kullanılarak depolanır. Klasörler, dil ve kültür son ekiyle drawable olarak adlandırılmalıdır. Örneğin, İspanyolca klasörü drawable-es olarak adlandırılır. Drawable klasör adı, varsayılan dil ve kültürünüzün görüntülerini içermelidir. Her görüntünün derleme eylemi AndroidResource olarak ayarlanmalıdır.

Not

Tek tek dosyaları AndroidResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\Android\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği AndroidResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

es gibi en üst düzey bir dil belirtilirken klasör adında yalnızca iki karakter gereklidir. Ancak, tam bir yerel ayar belirtirken, klasör adı biçimi dili kültürden ayırmak için kısa çizgi ve küçük r gerektirir. Örneğin, Meksika yerel ayarı (es-MX) klasörü drawable-es-rMX olarak adlandırılmalıdır. Her yerel ayar klasöründeki görüntü dosyası adları aynı olmalıdır:

Android'deki görüntüler için Visual Studio'daki yerelleştirilmiş klasör yapısının ekran görüntüsü.

iOS

iOS'ta, yerelleştirilmiş görüntüler Platforms\iOS\Resources klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanır. Klasörler diliyle ve isteğe bağlı kültürle ve ardından .lproj ile adlandırılmalıdır. Örneğin, İspanyolca klasörü es.lproj olarak adlandırılır. Her görüntünün derleme eylemi BundleResource olarak ayarlanmalıdır.

Not

Tek tek dosyaları BundleResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\iOS\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği BundleResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

es gibi en üst düzey bir dil belirtilirken klasör adında yalnızca iki karakter gereklidir. Ancak, tam bir yerel ayar belirtirken, klasör adı biçimi dili kültürden ayırmak için bir tire gerektirir. Örneğin, Meksika yerel ayarı (es-MX) klasörü es-MX.lproj olarak adlandırılmalıdır. Her yerel ayar klasöründeki görüntü dosyası adları aynı olmalıdır:

iOS'taki görüntüler için Visual Studio'daki yerelleştirilmiş klasör yapısının ekran görüntüsü.

Belirli bir dil için görüntü yoksa, iOS varsayılan yerel dil klasörüne geri döner ve görüntüyü oradan yükler.

Mac Catalyst

Mac Catalyst'te yerelleştirilmiş görüntüler Platforms\MacCatalyst\Resources klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanır. Klasörler diliyle ve isteğe bağlı kültürle ve ardından .lproj ile adlandırılmalıdır. Örneğin, İspanyolca klasörü es.lproj olarak adlandırılır. Her görüntünün derleme eylemi BundleResource olarak ayarlanmalıdır.

Not

Tek tek dosyaları BundleResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\MacCatalyst\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği BundleResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

es gibi en üst düzey bir dil belirtilirken klasör adında yalnızca iki karakter gereklidir. Ancak, tam bir yerel ayar belirtirken, klasör adı biçimi dili kültürden ayırmak için bir tire gerektirir. Örneğin, Meksika yerel ayarı (es-MX) klasörü es-MX.lproj olarak adlandırılmalıdır. Her yerel ayar klasöründeki görüntü dosyası adları aynı olmalıdır:

MacCatalyst'teki görüntüler için Visual Studio'daki yerelleştirilmiş klasör yapısının ekran görüntüsü.

Belirli bir dil için görüntü yoksa, Mac Catalyst varsayılan yerel dil klasörüne geri döner ve görüntüyü oradan yükler.

Windows

Windows'da yerelleştirilmiş görüntüler Platforms\Windows\Assets\Images klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanır. Klasörler, dil ve isteğe bağlı kültür ile adlandırılmalıdır. Örneğin, İspanyolca dil klasörü es, Meksika yerel ayar klasörü ise es-MX olarak adlandırılmalıdır. Her görüntünün derleme eylemi İçerik olarak ayarlanmalıdır.

Not

Tek tek dosyaları İçerik derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek, Platforms\Windows\Assets\Images klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği İçerik derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

es gibi en üst düzey bir dil belirtilirken klasör adında yalnızca iki karakter gereklidir. Ancak, tam bir yerel ayar belirtirken, klasör adı biçimi dili kültürden ayırmak için bir tire gerektirir. Örneğin, Meksika yerel ayarı (es-MX) klasörü es-MX olarak adlandırılmalıdır. Her yerel ayar klasöründeki görüntü dosyası adları aynı olmalıdır:

Windows'daki görüntüler için Visual Studio'daki yerelleştirilmiş klasör yapısının ekran görüntüsü.

Yerelleştirilmiş görüntüleri kullanma

Android, iOS, Mac Catalyst ve Windows'da yerelleştirilmiş görüntüler, bir Image öğesinin Source özelliği görüntü dosya adı olarak ayarlanarak kullanılabilir:

<Image Source="flag.png" />

Ancak, bunun Windows üzerinde çalışması için, yerelleştirilmiş her görüntü için bir <Content /> MSBuild öğesi eklediyseniz uygulamanızın proje dosyasını değiştirmeniz gerekir. Bu, her görüntü için MSBuild öğesini kaldırmak <Content /> üzere .csproj dosyanızı değiştirerek gerçekleştirilebilir. Ardından aşağıdaki MSBuild öğesini ekleyin:

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

Bu, Platforms\Windows\Assets\Images klasörünün alt klasörlerindeki tüm görüntülerin uygulama paketinizin köküne kopyalanmasını sağlar.

Uygulama adını yerelleştirme

Uygulamanın adını yerelleştirmek için platform işlevselliği gerekir.

Android

Android'de, yerelleştirilmiş uygulama adı Platforms\Android\Resources klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanabilir. Klasörler, dil ve kültür için son ek içeren değerler olarak adlandırılmalıdır. Örneğin, İspanyolca klasörü values-es olarak adlandırılır. Yerelleştirilmiş uygulama adına bir dize ayarlayan her klasöre AndroidResource derleme eylemi içeren bir Strings.xml dosyası ekleyin.

Not

Tek tek dosyaları AndroidResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\Android\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği AndroidResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

es gibi en üst düzey bir dil belirtilirken klasör adında yalnızca iki karakter gereklidir. Ancak, tam bir yerel ayar belirtirken, klasör adı biçimi dili kültürden ayırmak için kısa çizgi ve küçük r gerektirir. Örneğin, Meksika yerel ayarı (es-MX) klasörü values-es-rMX olarak adlandırılmalıdır.

Her çevrilebilir dize, öznitelik olarak belirtilen kaynak kimliğine ve değer olarak name çevrilen dizeye sahip bir XML öğesidir. Dizenizden normal XML kurallarına göre kaçış yapmanız ve name geçerli bir Android kaynak kimliği (boşluk veya tire olmadan) olması gerekir.

Bu nedenle, uygulama adını yerelleştirmek için bir Strings.xml dosyası oluşturun ve öğenin <string> alt öğesi olarak bir <resources> öğe ekleyin. Ardından özniteliğini name , çevrilmiş dize değeriyle uygun bir kimlik olarak ayarlayın:

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

Ardından, uygulamanızda yerelleştirilmiş uygulama adını kullanmak için Activity özelliğini uygulamanızın Label MainActivity sınıfına ekleyin ve değerini olarak @string/idayarlayın:

[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

iOS'ta, yerelleştirilmiş uygulama adı Platforms\iOS\Resources klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanır. Klasörler diliyle ve isteğe bağlı kültürle ve ardından .lproj ile adlandırılmalıdır. Örneğin, İspanyolca klasörü es.lproj olarak adlandırılır. Anahtarı ve değeri ayarlayan CFBundleDisplayName her klasöre BundleResource derleme eylemiyle bir InfoPlist.strings dosyası ekleyin.

Not

Tek tek dosyaları BundleResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\iOS\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği BundleResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

Yerelleştirilmiş dize değerlerinin söz dizimi şöyledir:

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

Dizelerde aşağıdaki karakterlerden kaçmalısınız:

  • \" teklif
  • \\ ters eğik çizgi
  • \n Newline

Bu nedenle, uygulama adını yerelleştirmek için bir InfoPlist.strings dosyası oluşturun ve dosyaya CFBundleDisplayName anahtar için bir değer ekleyin:

/* French */
CFBundleDisplayName="Maisons";

Uygulamaya özgü dizeleri yerelleştirmek için kullanabileceğiniz diğer anahtarlar şunlardır:

  • CFBundleName - için bir değerin CFBundleDisplayNameolmaması gibi durumlarda kullanıcılara gösterilebilen uygulama paketinin kısa adını belirtir.
  • CFBundleShortVersionString - Uygulama paketinin sürüm numarasını belirtir.
  • NSHumanReadableCopyright - uygulama paketi için telif hakkı bildirimi.

Mac Catalyst

Mac Catalyst'te, yerelleştirilmiş uygulama adı Platforms\MacCatalyst\Resources klasöründe klasör tabanlı adlandırma kuralı kullanılarak depolanır. Klasörler diliyle ve isteğe bağlı kültürle ve ardından .lproj ile adlandırılmalıdır. Örneğin, İspanyolca klasörü es.lproj olarak adlandırılır. Anahtarı ve değeri ayarlayan CFBundleDisplayName her klasöre BundleResource derleme eylemiyle bir InfoPlist.strings dosyası ekleyin.

Not

Tek tek dosyaları BundleResource derleme eylemine ayarlamak yerine, uygulamanızın proje (.csproj) dosyasına aşağıdaki XML eklenerek belirli bir klasörün içeriği bu derleme eylemine ayarlanabilir:

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

Bu örnek Platforms\MacCatalyst\Resources klasöründeki alt klasörlerdeki içerik de dahil olmak üzere tüm içeriği BundleResource derleme eylemine ayarlar. Ayrıca bu derleme eylemiyle her dosya için çıkış yolunu ayarlar.

Yerelleştirilmiş dize değerlerinin söz dizimi şöyledir:

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

Dizelerde aşağıdaki karakterlerden kaçmalısınız:

  • \" teklif
  • \\ ters eğik çizgi
  • \n Newline

Bu nedenle, uygulama adını yerelleştirmek için bir InfoPlist.strings dosyası oluşturun ve dosyaya CFBundleDisplayName anahtar için bir değer ekleyin:

/* French */
CFBundleDisplayName="Maisons";

Uygulamaya özgü dizeleri yerelleştirmek için kullanabileceğiniz diğer anahtarlar şunlardır:

  • CFBundleName - için bir değerin CFBundleDisplayNameolmaması gibi durumlarda kullanıcılara gösterilebilen uygulama paketinin kısa adını belirtir.
  • CFBundleShortVersionString - Uygulama paketinin sürüm numarasını belirtir.
  • NSHumanReadableCopyright - uygulama paketi için telif hakkı bildirimi.

Windows

Windows'ta, uygulama adı uygulama paketi bildiriminizde tanımlanır. Uygulama adını yerelleştirmek için önce uygulama için varsayılan dili belirtmeniz ve ardından desteklemek istediğiniz her yerel ayar için bir dize kaynak dosyası oluşturmanız gerekir. Yerelleştirilmiş uygulama adını temsil eden dize kaynağı daha sonra URI şeması kullanılarak ms-resource uygulama paketi bildiriminizde kullanılabilir.

Uygulama paketi bildiriminizdeki dizeleri yerelleştirme hakkında daha fazla bilgi için bkz . Kullanıcı arabiriminizde ve uygulama paketi bildiriminizde dizeleri yerelleştirme.

Varsayılan dili belirtin

Bir uygulama adını yerelleştirmek için, Windows uygulamanızın önce bir varsayılan dil belirtmiş olması gerekir. Bu, belirli bir dil için yerelleştirilmiş kaynak bulunamıyorsa kaynakları kullanılan dildir. Varsayılan dili belirtmek için:

  1. Çözüm Gezgini paket bildirimi düzenleyicisinde Packageappxmanifest dosyasını açın.

  2. Paket bildirimi düzenleyicisinde, Uygulama sekmesinde Varsayılan dil alanını seçtiğiniz varsayılan dil olarak ayarlayın:

    Paket bildiriminde bir Windows uygulamasının varsayılan dilini ayarlama işleminin ekran görüntüsü.

  3. Değişikliklerinizi kaydedin.

En azından, varsayılan dil için uygulama adı için bir dize kaynağı sağlamanız gerekir. Bu, kullanıcının tercih ettiği dil veya görüntüleme dili ayarları için daha iyi eşleşme bulunamazsa yüklenen kaynaktır.

Windows kaynak dosyaları oluşturma

Windows'da, yerelleştirilmiş uygulama adı her yerel ayar için bir Windows kaynak dosyasında depolanmalıdır. Windows kaynak dosyası, ikili biçimde derlenmiş ve .pri dosyasında depolanan .resw uzantısına sahip bir XML dosyasıdır. Her yerel ayar için .resw dosyası Resources.resw olarak adlandırılmalı ve Platforms\Windows\Strings klasöründe klasör tabanlı bir adlandırma kuralı kullanılarak depolanmalıdır. Klasörler, dil ve isteğe bağlı kültür ile adlandırılmalıdır. Örneğin, İspanyolca dil klasörü es, Meksika yerel ayar klasörü ise es-MX olarak adlandırılmalıdır.

Şu anda bir .NET MAUI uygulamasında Windows kaynak dosyası oluşturmak için Visual Studio öğe şablonu yoktur. Bu nedenle, her yerel ayar için bir Windows kaynak dosyası oluşturmak için:

  1. .NET MAUI uygulama projenizin Platforms\Windows klasöründe bir Strings klasörü oluşturun.

  2. Dizeler klasöründe, her yerel ayar için bir klasör oluşturun.

  3. Her yerel ayarın klasöründe aşağıdaki XML'yi içeren Resources.resw adlı bir dosya oluşturun:

    <?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>
    

    Not

    Windows kaynak dosyaları derleme eylemini PRIResourcekullanır. Örtük olarak uygulandığından, bu derleme eyleminin bir .NET MAUI uygulamasındaki her .resw dosyasında ayarlanması gerekmez.

  4. Her Resources.resw dosyasını açın ve uygulamanın adını temsil eden bir dize kaynağı ekleyin:

    Windows üzerinde Visual Studio'da yeniden dosya düzenleyicisinin ekran görüntüsü.

    Not

    Kaynak tanımlayıcıları büyük/küçük harfe duyarlı değildir ve kaynak dosyası başına benzersiz olmalıdır.

  5. Her Windows kaynak dosyasını kaydedin.

Aşağıdaki ekran görüntüsünde gerekli klasör ve dosya yapısı örneği gösterilmiştir:

Windows'daki dizeler için Visual Studio'da yerelleştirilmiş klasör yapısının ekran görüntüsü.

Yerelleştirilmiş uygulama adını kullanma

Yerelleştirilmiş uygulama adını temsil eden dize kaynağı, URI şeması kullanılarak ms-resource kullanılabilir:

  1. Çözüm Gezgini paket bildirimi düzenleyicisinde Packageappxmanifest dosyasını açın.

  2. Paket bildirimi düzenleyicisinde, Uygulama sekmesinde Görünen ad alanını ms-resource: ve ardından uygulama adınızı tanımlayan dize kaynağının adını ayarlayın:

    Windows'daki paket bildiriminde yerelleştirilmiş uygulama adını ayarlama işleminin ekran görüntüsü.

  3. Değişikliklerinizi kaydedin.

Önemli

.resw dosyalarınız .NET MAUI uygulama projenizde farklı bir derlemede depolanıyorsa, kaynak adınızın tam yolunu belirtmeniz gerekir. Bu, biçimini ms-resource:Assembly/ResourceFilename/Resourcekullanır.

Sağdan sola yerelleştirme

Akış yönü veya düzen yönü, sayfadaki kullanıcı arabirimi öğelerinin göz tarafından tarandığı yöndür. Arapça ve İbranice gibi bazı diller, kullanıcı arabirimi öğelerinin sağdan sola akış yönünde düzenlenmiş olmasını gerektirir. .NET MAUI uygulamaları, seçilen dile ve bölgeye göre cihazın akış yönüne otomatik olarak uyar. Cihazın yerel ayarına göre akış yönünü alma hakkında bilgi için bkz . Düzen yönünü alma.

Bir uygulamanın akış yönünü geçersiz kılmak için özelliğini ayarlayın Window.FlowDirection . Alternatif olarak, özelliği öğe bazında ayarlayın VisualElement.FlowDirection . Bu özellikler, kullanıcı arabirimi öğelerinin düzenlerini denetleyen herhangi bir üst öğe içinde akış yönünü alır veya ayarlar ve numaralandırma değerlerinden FlowDirection birine ayarlanmalıdır:

  • LeftToRight
  • RightToLeft
  • MatchParent

FlowDirection özelliğinin bir öğede olarak RightToLeft ayarlanması hizalamayı sağa, okuma sırasını sağdan sola ve denetimin düzenini sağdan sola doğru akacak şekilde ayarlar.

Uyarı

Özelliğin FlowDirection çalışma zamanında değiştirilmesi, performansı etkileyecek pahalı bir düzen işlemine neden olur.

Bir öğenin varsayılan FlowDirection özellik değeri şeklindedir MatchParent. Bu nedenle, bir öğe özellik değerini görsel ağaçtaki üst öğesinden devralır FlowDirection ve herhangi bir öğe üst öğesinden aldığı değeri geçersiz kılabilir.

İpucu

Akış yönünü değiştirmeniz gerekiyorsa, bir pencere, sayfa veya kök düzeninde özelliğini ayarlayın FlowDirection . Bu, uygulama, sayfa veya kök düzeninde yer alan tüm öğelerin akış yönüne uygun şekilde yanıt vermesine neden olur.

Platform kurulumu

Sağdan sola yerel ayarları etkinleştirmek için belirli bir platform kurulumu gereklidir.

Android

.NET MAUI uygulama projesi şablonu kullanılarak oluşturulan uygulamalar otomatik olarak sağdan sola yerel ayarlar için destek içerir. Bu destek, uygulamanın AndroidManifest.xml dosyasındaki <application> düğümde olarak ayarlanan true öznitelik tarafından android:supportsRtl etkinleştirilir:

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

Sağdan sola yerelleştirme daha sonra cihaz veya öykünücü sağdan sola dili kullanacak şekilde değiştirilerek test edilebilir. Alternatif olarak, Ayarlar uygulamasında geliştirici seçeneklerini etkinleştirdiyseniz Ayarlar Geliştirici Seçenekleri'nde RTL düzeni yönünü zorla seçeneğini > etkinleştirebilirsiniz. Geliştirici seçeneklerini yapılandırma hakkında bilgi için bkz . developer.android.com cihaz içi geliştirici seçeneklerini yapılandırma.

iOS ve Mac Catalyst

Gerekli sağdan sola yerel ayar, Info.plist dosyasındaki anahtarın dizi öğelerine CFBundleLocalizations desteklenen bir dil olarak eklenmelidir. Aşağıdaki örnekte, anahtar dizisine Arapça eklendiği gösterilmektedir CFBundleLocalizations :

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

Bundan sonra sağdan sola yerelleştirme, cihaz veya simülatördeki dil ve bölge Info.plist içinde belirtilen sağdan sola yerel ayar olarak değiştirilerek test edilebilir.

Windows

Gerekli dil kaynakları Package.appxmanifest dosyasının düğümünde <Resources> belirtilmelidir. öğesini desteklenen dillerinizin her biri için öğelerle <Resource /> değiştirin<Resource Language="x-generate">. Örneğin, aşağıdaki işaretleme "en" ve "ar" yerelleştirilmiş kaynakların kullanılabilir olduğunu belirtir:

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

Bundan sonra sağdan sola yerelleştirme, cihazdaki dil ve bölge uygun sağdan sola yerel ayara değiştirilerek test edilebilir.

Yerelleştirmeyi test et

Çalışma zamanında uygulamanız, özelliği tarafından CurrentUICulture belirtilen kültüre göre iş parçacığı başına uygun yerelleştirilmiş kaynakları yükler.

Yerelleştirmeyi test etme işlemi, en iyi şekilde her cihazdaki Ayarlar uygulamasında cihazınızın dilini değiştirerek gerçekleştirilir.

Uyarı

Değerini kodda ayarlamak CurrentUICulture mümkün olsa da, sonuçta elde edilen davranış platformlar arasında tutarsız olduğundan test için bu önerilmez.