Aracılığıyla paylaş


Android Yerelleştirme

Bu belgede, Android SDK'sının yerelleştirme özellikleri ve Xamarin ile bunlara nasıl erişecekleri tanıtilmiştir.

Android Platform Özellikleri

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

Yerel ayar

Kullanıcılar dillerini Ayarlar > Dil ve giriş bölümünden seçer. Bu seçim hem görüntülenen dili hem de kullanılan bölgesel ayarları (örneğin, tarih ve sayı biçimlendirme için) denetler.

Geçerli yerel ayar, geçerli bağlamın Resourcesaracılığıyla sorgulanabilir:

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

Bu değer, hem dil kodunu hem de yerel ayar kodunu içeren ve alt çizgiyle ayrılmış bir yerel ayar tanımlayıcısı olacaktır. Başvuru için StackOverflow aracılığıyla Java yerel ayarları ve Android tarafından desteklenen yerel ayarların listesi aşağıdadır.

Bazı yaygın örnekler aşağıdakileri içermektedir:

  • en_USİngilizce için (Birleşik Devletler)
  • es_ES İspanyolca (İspanya) için
  • ja_JP Japonca (Japonya) için
  • 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

Kullanıcı dil seçimini değiştirdiğinde Android oluşturur android.intent.action.LOCALE_CHANGED .

Etkinlikler, etkinlikte özniteliğini ayarlayarak bunu işlemeyi android:configChanges tercih edebilir, örneğin:

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

Android'de Uluslararasılaştırma Temelleri

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

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

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

  • @string/id yerelleştirilmiş dizeleri otomatik olarak düzenlere yerleştirmek için AXML dosyalarında.

Kaynak Klasörleri

Android uygulamaları kaynak klasörlerindeki içeriklerin çoğunu 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, bir görüntünün birden çok sürümünü sağlamak için çizilebilir dizinde dpi son eklerinin kullanımını zaten biliyor ve Android'in her cihaz için doğru sürümü seçmesine izin veriyor. Aynı mekanizma, dil ve kültür tanımlayıcılarıyla kaynak dizinleri son eklenerek birden çok dil çevirisi sağlamak için 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 es üst düzey bir dil belirtilirken gereklidir; ancak tam bir yerel ayar belirtirken, dizin adı biçimi iki bölümü ayırmak için kısa çizgi ve küçük r gerektirir, örneğin pt-rBR veya zh-rCN. Bunu, alt çizgi içeren kodda döndürülen değerle karşılaştırın (örn. pt_BR). Bunların her ikisi de yalnızca tire içeren .NET CultureInfo sınıfının kullandığı değerden farklıdır (örn. pt-BR). Xamarin platformlarında çalışırken bu farklılıkları göz önünde bulundurun.

Strings.xml dosya biçimi

Yerelleştirilmiş değerler dizini (örn. values-es veya values-pt-rBR), bu yerel ayar için çevrilmiş metni içerecek Strings.xml adlı bir dosya içermelidir.

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

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

Normal XML kurallarına name göre kaçış yapmanız ve geçerli bir Android kaynak kimliği (boşluk veya tire olmadan) olması gerekir. Örnek için varsayılan (İngilizce) dize dosyası örneği aşağıda verilmiştir:

değerler/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ı ada (Strings.xml) sahip 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 Strings.xml dosyası içeren birden çok değer klasörünün ekran görüntüsü

Dize dosyalarının ayarlanmasıyla, çevrilen değerlere hem düzenlerde hem de kodda başvurulabilir.

AXML Düzen Dosyaları

Düzen dosyalarındaki yerelleştirilmiş dizelere başvurmak için söz dizimini @string/id kullanın. Örnekteki bu XML parçacığı yerelleştirilmiş kaynak kimlikleriyle ayarlanan ö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 kullanın GetText ve kaynak kimliğini geçirin:

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

Miktar Dizeleri

Android dize kaynakları, çeviricilerin farklı miktarlar için farklı çeviriler sağlamasına olanak tanıyan miktar dizeleri oluşturmanıza da olanak tanır, örneğin:

  • "1 görev kaldı."
  • "Hala yapılması 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>

Tam dizeyi GetQuantityString işlemek için, kaynak kimliğini ve görüntülenecek değeri (iki kez geçirilir) geçirerek yöntemini kullanın. İkinci parametre, Hangi dizenin kullanılacağını belirlemek quantity için Android tarafından kullanılır, üçüncü parametre aslında dizeyle değiştirilen değerdir (her ikisi de gereklidir).

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

Geçerli quantity anahtarlar şunlardır:

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

Bunlar Android belgelerinde daha ayrıntılı olarak açıklanmıştır. Belirli bir dil 'özel' işleme gerektirmiyorsa, bu quantity dizeler yoksayılır (örneğin, yalnızca İngilizce kullanır one ve other; bir zero dize belirtmenin hiçbir etkisi olmaz, kullanılmaz).

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 çizilebilir dizinlere yerleştirilerek bir geri dönüş olması gerekir.

Yerel ayara özgü görüntüler daha sonra drawable-es veya drawable-ja gibi uygun çizilebilir klasörlere yerleştirilmelidir (dpi tanımlayıcıları da eklenebilir).

Bu ekran görüntüsünde, çizilebilir dizine dört resim kaydedilir, ancak yalnızca biri, flag.png diğer dizinlerde yerelleştirilmiş kopyaları vardır.

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

Diğer Kaynak Türleri

Ayrıca düzenler, animasyonlar ve ham dosyalar gibi diğer alternatif, dile özgü kaynaklar da sağlayabilirsiniz. Bu, bir veya daha fazla hedef diliniz için belirli bir ekran düzeni sağlayabileceğiniz anlamına gelir; örneğin, özellikle 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) diller için destek kullanıma sunulmuşturandroid:supportsRtl="true". Kaynak niteleyicisi "ldrtl" , RTL görüntüsü için tasarlanmış özel düzenler içerecek şekilde bir dizin adına eklenebilir.

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ı

Etkinlik için MainLauncher bir @string/id kullanarak uygulama adını kolayca yerelleştirebilirsiniz:

[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ümler, Yerel RTL Desteği blogunda ayrıntılı olarak açıklanan RTL düzenleri için tam destek sağlar.

Android 4.2 (API düzeyi 17) ve daha yenisini kullanırken, hizalama değerleri ve yerine left ve right end ile start belirtilebilir (örneğinandroid:paddingStart). RTL okuyucuları için uyarlanan ekranlar oluşturmaya yardımcı olmak için , TextDirectionve TextAlignment gibi LayoutDirectionyeni API'ler de vardır.

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

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

Sonraki ekran görüntüsünde Yerelleştirilmiş Tasky örneği İbranice gösterilmiştir:

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

RTL metni, ltr metniyle aynı şekilde Strings.xml dosyaları kullanılarak yerelleştirilir.

Test Etme

Varsayılan yerel ayarı kapsamlı bir şekilde test edin. Varsayılan kaynaklar bir nedenden dolayı yüklenemediğinde uygulamanız kilitlenir (örn. eksiktir).

Öykünücü Testi

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

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

Cihaz Testi

Bir cihazda test etmek için Ayarlar uygulamasında dili değiştirin.

İpucu

Dili özgün ayara geri döndürmek için menü öğelerinin simgelerini ve konumunu not edin.

Özet

Bu makalede, yerleşik kaynak işlemeyi kullanarak Android uygulamalarını yerelleştirmenin temelleri ele alınır. 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.