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 Resources
aracı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çinja_JP
Japonca (Japonya) içinzh_CN
Çince (Çin) içinzh_TW
Çince (Tayvan) içinpt_PT
Portekizce (Portekiz) içinpt_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.
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>
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.
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 , TextDirection
ve TextAlignment
gibi LayoutDirection
yeni API'ler de vardır.
Aşağıdaki ekran görüntüsünde Arapça yerelleştirilmiş Tasky örneği gösterilmektedir:
Sonraki ekran görüntüsünde Yerelleştirilmiş Tasky örneği İbranice gösterilmiştir:
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.