Android Yerelleştirme

Bu belgede, Xamarin ile Android SDK yerelleştirme özellikleri ve bu özelliklere nasıl erişebilirsiniz?

Android Platform Özellikleri

Bu bölümde Android'in ana yerelleştirme özellikleri açık almaktadır. Belirli kodu ve örnekleri görmek için sonraki bölüme atlayabilirsiniz.

Yerel Ayar

Kullanıcılar dillerini Dil girişi Ayarlar & seçer. Bu seçim hem görüntülenen dili hem de kullanılan bölgesel ayarları (örn. tarih ve sayı biçimlendirmesi için).

Geçerli yerel seçim geçerli bağlamın aracılığıyla sorgu Resources olabilir:

var lang = Resources.Configuration.Locale; // eg. "es_ES"

Bu değer, hem dil kodunu hem de alt çizgiyle ayrılmış bir yerel kod içeren bir yerel değer tanımlayıcısı olur. Başvuru için, StackOverflow aracılığıyla Java yerellerinin ve Android tarafından desteklenen yerellerin bir listesi ve burada ve liste yer alıyor.

Yaygın örnekler şunlardır:

  • en_US İngilizce (Birleşik Devletler)
  • es_ES İspanyolca (İspanya) için
  • ja_JP Japonca (Japonya)
  • zh_CN Çince (Çin) için
  • zh_TW Çince (Tayvan) için
  • pt_PT Portekizce (Portekiz) için
  • pt_BR Portekizce (Brezilya) için

LOCALE_CHANGED

Android, android.intent.action.LOCALE_CHANGED kullanıcı dil seçimini değiştirirken üretir.

Etkinlikler, etkinlikte özniteliğini şu şekilde android:configChanges ayararak bu işlemeyi tercih ediyor olabilir:

[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
    ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

Android'de UluslararasıLaşmanın Temelleri

Android'in yerelleştirme stratejisi aşağıdaki önemli parçalara sahip:

  • Yerelleştirilmiş dizeleri, görüntüleri ve diğer kaynakları içeren kaynak klasörleri.

  • GetText yöntemi: Kodda yerelleştirilmiş dizeleri almak için kullanılır

  • @string/id AXML dosyalarında, düzenlerde yerelleştirilmiş dizeleri otomatik olarak yer.

Kaynak Klasörleri

Android uygulamaları, kaynak klasörlerinden çoğu içeriği yönetir, örneğin:

  • layout - AXML düzen dosyalarını içerir.
  • drawable - görüntüleri ve diğer çizilebilir kaynakları içerir.
  • values : dizeleri içerir.
  • raw - veri dosyalarını içerir.

Geliştiricilerin çoğu, android'in her cihaz için doğru sürümü seçmesine izin vererek bir görüntünün birden çok sürümünü sağlamak için drawable dizininde dpi son eklerini kullanmayı zaten biliyor. Aynı mekanizma, kaynak dizinlerini dil ve kültür tanımlayıcıları ile son ek olarak kullanarak birden çok dil çevirisi sağlamak için de kullanılır.

Birden çok kültürel tanımlayıcı için Kaynaklar/çizilebilir ve Kaynaklar/değerler klasörlerinin ekran görüntüsü

Not

Yalnızca iki karakter gibi üst düzey bir dil belirtirken gereklidir; ancak tam bir yerel dil belirtirken dizin adı biçimi, iki bölümü ayırmak için espt-rBR veya zh-rCNgibi bir tire ve küçük harf es gerektirir. Bunu, bir alt çizgiye sahip kodda döndürülen değerle karşılaştırın (örn. pt_BR). Bunların ikisi de yalnızca kısa çizgiye sahip olan .NET sınıfının kullandığı CultureInfo değerden farklıdır (örn. pt-BR). Xamarin platformlarında çalışırken bu farklılıkları gözatma.

Strings.xml biçimi

Yerelleştirilmiş değerler dizini (örn. values-es veya values-pt-rBR), bu yerelStrings.xml çevrilmiş metni içerenStrings.xmladlı bir dosya içermesi gerekir.

Çevrilebilir her dize, öznitelik olarak belirtilen kaynak kimliğine ve çevrilen dizeye değer olarak sahip bir XML name öğesidir:

<string name="app_name">TaskyL10n</string>

Normal XML kurallarına göre kaçış kaçışı gerekir ve geçerli bir Android kaynak kimliği name (boşluk veya tire yok) olmalıdır. Örnek için varsayılan (İngilizce) dizeler dosyasının bir örneği aşağıdaki gibidir:

values/Strings.xml

<resources>
    <string name="app_name">TaskyL10n</string>
    <string name="taskadd">Add Task</string>
    <string name="taskname">Name</string>
    <string name="tasknotes">Notes</string>
    <string name="taskdone">Done</string>
    <string name="taskcancel">Cancel</string>
</resources>

İspanyolca dizin values-es, çevirileri içeren aynı adı (Strings.xml) içeren bir dosya içerir:

values-es/Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">TaskyLeon</string>
    <string name="taskadd">agregar tarea</string>
    <string name="taskname">Nombre</string>
    <string name="tasknotes">Notas</string>
    <string name="taskdone">Completo</string>
    <string name="taskcancel">Cancelar</string>
</resources>

Her biri bir dosya dosyası içeren birden çok değer Strings.xml görüntüsü

Dize dosyaları ayarlandı, çevrilmiş değerlere hem düzenlerde hem de kodda başvurulabilir.

AXML Düzen Dosyaları

Düzen dosyalarında yerelleştirilmiş dizelere başvuru yapmak için söz dizimini @string/id kullanın. Örnekteki bu XML kod parçacığı, yerelleştirilmiş kaynak kimlikleriyle ayarlanmış özellikleri gösterir text (diğer bazı öznitelikler atlanmıştır):

<TextView
    android:id="@+id/NameLabel"
    android:text="@string/taskname"
    ... />
<CheckBox
    android:id="@+id/chkDone"
    android:text="@string/taskdone"
    ... />

GetText Yöntemi

Kodda çevrilmiş dizeleri almak için yöntemini GetText kullanın ve kaynak kimliğini girin:

var cancelText = Resources.GetText (Resource.String.taskcancel);

Miktar Dizeleri

Android dize kaynakları ayrıca, çevirmenlerin farklı miktarlar için farklı çeviriler sağlamalarını sağlayan miktar dizeleri oluşturmanıza da olanak sağlar, örneğin:

  • "1 görev kaldı."
  • "Hala gerçekleştirmemiz gereken 2 görev var."

(genel bir "N görev kaldı") yerine.

Strings.xml

<plurals name="numberOfTasks">
   <!--
      As a developer, you should always supply "one" and "other"
      strings. Your translators will know which strings are actually
      needed for their language.
    -->
   <item quantity="one">There is %d task left.</item>
   <item quantity="other">There are %d tasks still to do.</item>
 </plurals>

Dizenin tamamını işlemek için yöntemini kullanarak kaynak kimliğini ve görüntülenecek değeri (bu değer GetQuantityString iki kez geçir) iletir. İkinci parametre Android tarafından kullanılacak dizeyi belirlemek için kullanılır, üçüncü parametre ise dizenin yerine geçen değerdir (her ikisi de gereklidir).

var translated = Resources.GetQuantityString (
                    Resource.Plurals.numberOfTasks, taskcount, taskcount);`

Geçerli quantity anahtarlar:

  • sıfır
  • bir
  • iki
  • Fwe
  • birçok
  • other

Bunlar Android belgesinde daha ayrıntılı olarak açıklanmıştır. Belirli bir dil için 'özel' işleme gerekli yoksayılırsa, bu dizeler yoksayılır (örneğin, yalnızca İngilizce ve kullanır; bir dizenin belirtilse hiçbir etkisi oneotherzero olmaz, kullanılmayacaktır).

Görüntüler

Yerelleştirilmiş görüntüler dize dosyalarıyla aynı kurallara uyar: Uygulamada başvurulan tüm görüntüler, bir geri dönüş olması için çizilebilir dizinlere yerleştirilmeli.

Yerel ayara özgü görüntüler daha sonra drawable-es veya drawable-ja gibi uygun çizilebilir klasörlere yerleştirilebiliyor (dpi belirleyicileri de eklenebilir).

Bu ekran görüntüsünde, çizilebilir dizine dört görüntü kaydedilir, ancak yalnızca bir görüntü flag.png, diğer dizinlerde yerelleştirilmiş kopyalara sahip olur.

Her biri bir veya daha fazla yerelleştirilmiş dosya dosyası içeren birden çok çizilebilir .png ekran görüntüsü

Diğer Kaynak Türleri

Ayrıca düzenler, animasyonlar ve ham dosyalar gibi dile özgü diğer alternatif kaynak türlerini de sebilirsiniz. Bu, hedef dillerden biri veya daha fazlası için belirli bir ekran düzeni sağlayabilirsiniz; örneğin, Almanca için çok uzun metin etiketlerine izin veren bir düzen oluşturabilirsiniz.

Android 4.2, uygulama ayarını ayarlarsanız sağdan sola (RTL) dil desteği sunu. Kaynak "ldrtl" niteleyicisi, RTL görüntüsü için tasarlanmış özel düzenleri içeren bir dizin adına dahil olabilir.

Kaynak dizini adlandırma ve geri dönüş hakkında daha fazla bilgi için alternatif kaynaklar sağlamak için Android belgelerine bakın.

Uygulama adı

Uygulama adı, etkinlik için içinde kullanarak @string/id yerelleştirmek MainLauncher kolaydır:

[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
    ConfigurationChanges =  ConfigChanges.Orientation | ConfigChanges.Locale)]

Sağdan Sola (RTL) Diller

Android 4.2 ve daha yeni sürümleri, Yerel RTL Desteği blog'larında ayrıntılı olarak açıklanan RTL düzenleri için tam destek sağlar.

Android 4.2 (API düzeyi 17) ve daha yenisi kullanılırken, ve yerine ve startend ile hizalama değerleri leftright belirtilebilir android:paddingStart (örneğin). RTL okuyucuları için uyarlanmış ekranlar derlemeye yardımcı olmak için , ve LayoutDirectionTextDirection gibi yeni TextAlignment API'ler de vardır.

Aşağıdaki ekran görüntüsünde, Arapça yerelleştirilmiş Tasky örneği gösterir:

Arapça Tasky uygulamasının ekran görüntüsü

Sonraki ekran görüntüsünde İbranice yerelleştirilmiş Tasky örneği yer amektedir:

İbranice Tasky uygulamasının ekran görüntüsü

RTL metni, dosya Strings.xml LTR metniyle aynı şekilde yerelleştirilmiştir.

Test Etme

Varsayılan yerel ayarı kapsamlı bir şekilde test etmek için emin olun. Varsayılan kaynaklar herhangi bir nedenle yüklenemedikse (örneğin, bunlar eksikse) uygulamanız kilitlenmeye devam edecek.

Emulator Testi

ADB kabuğunu kullanarak bir öykünücü Emulator belirli bir yerel ayara ayarlama yönergeleri için Android Emulator'da Google'ın Test Etme bölümüne bakın.

adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start

Cihaz Testi

Cihazda test etmek için uygulamanın Ayarlar.

İpucu

Menü öğelerinin simgelerini ve konumunu not alan bu dili özgün ayara döndürebilirsiniz.

Özet

Bu makale, yerleşik kaynak işlemeyi kullanarak Android uygulamalarını yerelleştirmenin temellerini kapsar. Bu platformlar arası kılavuzda iOS, Android ve platformlar arası (Xamarin.Forms dahil) uygulamalar için i18n ve L10n hakkında daha fazla bilgi edinebilirsiniz.