Android 7.0'dan (API düzeyi 24) itibaren Android, çok dilli kullanıcılar için gelişmiş destek sağlayarak ayarlarda birden fazla yerel ayar seçmelerine olanak tanır. Android, desteklenen yerel ayarların sayısını artırarak ve sistemin kaynakları çözümleme şeklini değiştirerek bu özelliği sunar.
Bu belgede, kaynak çözümleme stratejisi, Android 7.0'dan önceki sürümlerin (API düzeyi 24) açıklanmasıyla açıklanmaktadır. Sonraki videoda Android 7.0'daki iyileştirilmiş kaynak çözünürlüğü stratejisi açıklanmaktadır. Son olarak, daha çok dilli kullanıcıları desteklemek için giderek artan yerel ayardan nasıl yararlanılacağı anlatılmaktadır.
Dil kaynaklarını çözümlemede karşılaşılan zorluklar
Android 7.0'dan önce uygulama ve sistem yerel ayarlarını her zaman başarılı bir şekilde eşleştiremiyordu.
Örneğin, aşağıdaki durumda olduğunuzu varsayalım:
- Uygulamanızın varsayılan dili
en_US
(ABD İngilizcesi) vees_ES
kaynak dosyasında yerelleştirilmiş İspanyolca dizeler de var. - Bir cihaz
es_MX
olarak ayarlandı
Java kodunuz dizelere referansta bulunduğunda, uygulamanın es_ES
altında yerelleştirilmiş İspanyolca kaynakları olsa bile sistem, dizeleri varsayılan (en_US
) kaynak dosyasından yükler. Bunun nedeni, sistemin tam eşleşme bulamadığında ülke kodunu yerel ayardan çıkararak kaynak aramaya devam etmesidir. Son olarak, hiçbir eşleşme bulunamazsa sistem varsayılan ayar olan en_US
değerine geri döner.
Kullanıcı, uygulamanın hiç desteklemediği bir dili (ör. Fransızca) seçerse sistem de varsayılan olarak en_US
değerini alır. Örneğin:
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözünürlüğü |
---|---|---|
fr_CH |
varsayılan (en) de_DE es_ES fr_FR it_IT |
fr_CH => Başarısız fr => Başarısız Varsayılanı kullan (en) |
Bu örnekte sistem, kullanıcının İngilizceyi anlayıp anlayamayacağını bilmeden İngilizce dizeleri gösterir. Bu davranış günümüzde oldukça yaygındır.
Kaynak çözümleme stratejisinde yapılan iyileştirmeler
Android 7.0 (API düzeyi 24), daha güçlü kaynak çözünürlüğü sunar ve otomatik olarak daha iyi yedekler bulur.
Ancak, çözünürlüğü hızlandırmak ve sürdürülebilirliği artırmak için kaynakları en yaygın ebeveyn diyalektinde depolamanız gerekir.
Örneğin, İspanyolca kaynaklarını daha önce values-es-rUS
dizininde depoluyorsanız bunları Latin Amerika İspanyolcasını içeren values-b+es+419
dizinine taşıyın.
Benzer şekilde, values-en-rGB
adlı bir dizinde kaynak dizeleriniz varsa dizini values-b+en+001
(Uluslararası İngilizce) olarak yeniden adlandırın. en-GB
dizelerinin en yaygın üst öğesi en-001
şeklindedir.
Aşağıdaki örnekler, bu uygulamaların kaynak çözümlemenin performansını ve güvenilirliğini neden iyileştirdiğini açıklamaktadır.
Kaynak çözümlemesi örnekleri
Android'in 7.0'dan sonraki sürümlerinde, Tablo 1'de açıklanan durum farklı şekilde çözümlenir:
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözünürlüğü |
---|---|---|
|
varsayılan (en) de_DE es_ES fr_FR it_IT |
fr_CH => Başarısız Ftr değerini deneyin => Başarısız Fr_> fr_FR alt öğelerini deneyin fr_FR değerini kullanın |
Kullanıcı artık İngilizce yerine Fransızca kaynakları edinir. Bu örnek, Android 7.0 veya sonraki sürümler için neden fr_FR
yerine Fransızca dizeleri fr
içinde depolamanız gerektiğini de gösterir. Burada yapılması gereken işlem, en yakın ebeveyn lehçesini eşleştirmek ve böylece çözümü daha hızlı ve tahmin edilebilir hale getirmektir.
Bu iyileştirilmiş çözünürlük mantığına ek olarak, Android artık daha fazla kullanıcı dili seçeneği sunuyor. İtalyancanın ek kullanıcı dili olarak belirtildiği, ancak Fransızca için uygulama desteğinin olmadığı bir durumda yukarıdaki örneği tekrar deneyelim.
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözünürlüğü |
---|---|---|
|
varsayılan (en) de_DE es_ES it_IT |
fr_CH => Başarısız Fr'yi dene => Başarısız Ftr çocuklarını dene => Başarısız Dene_CH => Başarısız Dene => Başarısız Çocukları dene => it_IT Kullan_IT |
Uygulama Fransızcayı desteklemese bile kullanıcı anladığı bir dili görür.
Uygulamanızı ek yerel ayarları destekleyecek şekilde tasarlama
Android, uygulama içeriğini yerelleştirmeyi ve kullanıcıların tercih ettikleri dillerde etkileşime girmesini kolaylaştıran araçlar sunar. Uygulamanızı ölçeklenebilir bir şekilde farklı dillere ve biçimlendirme kurallarına uygun olacak şekilde yapılandırmak için aşağıdaki teknikleri kullanmanızı öneririz.
Uygulamanızın desteklediği dilleri belirtme
Dillerin doğru şekilde çözümlendiğinden emin olmak için modül düzeyindeki build.gradle
dosyasında resConfigs
özelliğini kullanarak uygulamanızın desteklediği dilleri belirtin.
Aşağıdaki kod örneğinde, desteklenen dilleri belirtmek için resConfigs
özelliğinin nasıl kullanılacağı gösterilmektedir.
Bu örnekte, uygulama hem İngilizceyi hem de İspanyolcayı desteklemektedir.
Modern
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
LocaleList API'sı
Android 7.0'dan (API düzeyi 24) başlayarak Android, uygulamaların kullanıcının belirttiği dillerin listesini doğrudan sorgulamasına olanak tanıyan LocaleList.getDefault()
API'sini kullanıma sunar. Bu API, daha gelişmiş uygulama davranışları ve içeriğin daha iyi optimize edilmiş bir görünümünü oluşturmanıza olanak tanır. Örneğin Arama, kullanıcının ayarlarına bağlı olarak birden fazla dilde sonuç gösterebilir. Tarayıcı uygulamaları, sayfaları kullanıcının bildiği bir dilde çevirmeyi teklif etmekten kaçınabilir ve klavye uygulamaları, uygun tüm düzenleri otomatik olarak etkinleştirebilir.
Biçimlendiriciler
Android 6.0'a (API düzeyi 23) kadar Android, birçok yaygın dil (en, es, ar, fr, ru) için yalnızca bir veya iki yerel ayarı destekliyordu. Her dilin yalnızca birkaç varyantı olduğundan uygulamalar, bazı sayıları ve tarihleri kaynak dosyalarda sabit kodlu dizeler olarak depolamanın önüne geçebilir. Bununla birlikte, Android'in daha fazla desteklenen yerel ayar içermesiyle birlikte, tek bir yerel ayarda bile tarih, saat, para birimi ve benzeri bilgilerin biçiminde önemli farklılıklar olabilir. Biçimlerinizi sabit bir şekilde kodlamak, son kullanıcılar için kafa karıştırıcı bir deneyim oluşturabilir. Bu nedenle, Android 7.0 veya sonraki sürümler için geliştirme yaparken, numaraları ve tarih dizelerini sabit kodlamak yerine biçimlendiriciler kullandığınızdan emin olun.
Örneğin Android 7.0 ve sonraki sürümler 27 Arapça yerel ayarı desteklemektedir. Bu yerel ayarlar çoğu kaynağı paylaşabilir ancak bazıları ASCII rakamlarını tercih ederken bazıları yerel rakamları tercih eder. Örneğin, "4 basamaklı bir raptiye seçin" gibi rakam değişkeni içeren bir cümle oluşturmak istediğinizde, aşağıda gösterildiği gibi biçimlendiriciler kullanın:
format(locale, "Choose a %d-digit PIN", 4)