Android 7.0 (API düzeyi 24) sürümünden itibaren Android, çok dilli kullanıcılar için gelişmiş destek sağlar. Böylece ayarlarda birden fazla yerel ayar seçebiliyorlar. Android desteklenen yerel ayarların sayısını önemli ölçüde artırarak bu olanağı ve sistemin kaynakları çözme şeklini değiştirmektir.
Bu belgede başlangıç olarak kaynak çözümleme stratejisi, Android'in 7.0'dan (API düzeyi 24) önceki sürümleri. Ardından, kullanıma sunduk. Son olarak, Görüntülü Reklam Ağı'ndaki yerel ayar sayısını artırmayı ve daha çok dil konuşan kullanıcıları desteklemeyi amaçladık.
Dil kaynaklarını çözmeyle ilgili zorluklar
Android 7.0'dan önceki sürümlerde Android her zaman başarılı olamıyordu. uygulama ve sistem yerel ayarlarını eşleştirin.
Örneğin, aşağıdaki duruma sahip olduğunuzu varsayalım:
- Uygulamanızın varsayılan dili
en_US
(ABD İngilizcesi) ve ayrıca şunlardır:es_ES
dilinde yerelleştirilmiş İspanyolca dizeler kaynak dosyalar. - Bir cihaz
es_MX
olarak ayarlandı
Java kodunuz dizeleri ifade ettiğinde sistem
uygulamada, varsayılan (en_US
) kaynak dosyasındaki dizeler
İspanyolca kaynaklar es_ES
altında yerelleştirilmiş. Bunun nedeni, sistemin
tam eşleşme bulamadığı zaman,
ülke kodunu yerel ayardan kaldırın. Son olarak, eşleşme bulunmazsa sistem devre dışı kalır.
varsayılan değere (en_US
) dönecek.
Kullanıcı aşağıdaki dili seçse de sistem varsayılan olarak en_US
uygulama, Fransızca gibi bir dili hiç desteklemiyordu. Örnek:
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözümü |
---|---|---|
tr_CH |
varsayılan (tr) de_DE es_ES fr_FR b_IT |
fr_CH => değerini deneyin Başarısız Şunu deneyin: fr => Başarısız Varsayılanı kullan (tr) |
Bu örnekte, sistem İngilizce dizeleri kullanıcının İngilizceyi anlayıp anlayamayacağını bilme. Bu davranış oldukça yaygındır. .
Kaynak çözümleme stratejisinde 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üm sürecini hızlandırmak ve
kaynakları en yaygın ebeveyn diyalektinde saklamalısınız.
Örneğin, İspanya'daki
kaynakları depoluyorsanız
values-es-rUS
dizininde
önce, bunları values-b+es+419
dizinine taşıyın ve
Latin Amerika İspanyolcasını içerir.
Benzer şekilde
values-en-rGB
adlı dizin, yeniden adlandır
dizini values-b+en+001
(Uluslararası
İngilizce), çünkü en yaygın
en-GB
dizeleri için üst öğe en-001
değeridir.
Aşağıdaki örnekler bu uygulamaların performansı neden iyileştirdiğini ve
güvenilir olduğunu
anlamanızı sağlar.
Kaynak çözümleme örnekleri
Android'in 7.0'dan sonraki sürümlerinde, Tablo 1 farklı şekilde çözümlenir:
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözümü |
---|---|---|
|
varsayılan (tr) de_DE es_ES fr_FR b_IT |
fr_CH => değerini deneyin Başarısız Şunu deneyin: fr => Başarısız F'nin alt öğelerini deneyin => fr_FR fr_FR kullan |
Artık kullanıcı İngilizce yerine Fransızca kaynaklara erişebiliyor. Bu örnekte ayrıca şunlar da gösterilir:
Fransızca dizeleri neden fr_FR
yerine fr
dilinde depolamalısınız?
Android 7.0 veya daha yeni sürümler için. Bu örnekte,
en yakın ebeveyn lehçesiyle eşleşmek
daha hızlı ve öngörülebilir hale getirir.
Bu iyileştirilmiş çözünürlük mantığına ek olarak, Android artık seçim yapabileceğiniz kullanıcı dillerine bağlıdır. Yukarıdaki örneği İtalyanca ile tekrar deneyelim ek bir kullanıcı dili olarak belirtildiğinden, ancak Fransızca uygulama desteği olmadan.
Kullanıcı Ayarları | Uygulama Kaynakları | Kaynak Çözümü |
---|---|---|
|
varsayılan (tr) de_DE es_ES b_IT |
fr_CH => değerini deneyin Başarısız Şunu deneyin: fr => Başarısız F'nin alt öğelerini deneyin => Başarısız Deneyin_CH => Başarısız Deneyin => Başarısız Bunun alt öğelerini deneyin => b_IT Kullanın_BT |
Uygulama anlamasa da kullanıcı anladığı bir dili kullanmaya devam eder Fransızcayı desteklemeliyiz.
Uygulamanızı ek yerel ayarları destekleyecek şekilde tasarlama
Android, uygulama içeriğini yerelleştirmeyi ve kullanıcıların uygulama içinde ilgi çekmesini kolaylaştıran araçlar sunar. tercih edebilirsiniz. Uygulamanızı aşağıdaki tekniklerden biriyle yapılandırmanızı öneririz: farklı dilleri ve biçimlendirme kurallarını ölçeklenebilir bir şekilde barındırabilirsiniz.
Uygulamanızın desteklediği dilleri belirtme
Dillerin doğru şekilde çözümlenmesini sağlamak için
resConfigs
özelliğini kullanmanız gerekir.build.gradle
Aşağıdaki kod örneğinde, desteklenen dilleri belirtmek için resConfigs
özelliğinin nasıl kullanılacağı gösterilmektedir.
Bu örnekte, uygulama hem İngilizce hem de İspanyolcayı desteklemektedir.
Eski
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
Yerel Ayar API'sı
Android 7.0 (API düzeyi 24) sürümünden başlayarak,
LocaleList.getDefault()
API'si
Bu da uygulamaların, kullanıcının belirttiği dillerin listesini doğrudan sorgulamasına olanak tanır. Bu API
daha karmaşık ve daha karmaşık
daha iyi optimize edilmiş içerik
göstergesi elde ediyor. Örneğin, Arama Ağı
Kullanıcının ayarlarına bağlı olarak birden fazla dilde sonuç gösterebilir. Tarayıcı uygulamaları
kullanıcının bildiği bir dildeki sayfaları çevirmeyi teklif etmekten kaçınabilir.
klavye uygulamaları da uygun düzenleri otomatik olarak etkinleştirebilir.
Biçimlendiriciler
Android 6.0 (API düzeyi 23) sürümüne kadar, Android yalnızca bir veya daha fazla sürümü destekler. iki yerel ayar yaygın olarak kullanılan pek çok dil için (en, es, ar, fr, ru). Her dilin yalnızca birkaç varyantı olduğu için, uygulamalar, bazı sayıları ve tarihleri sabit kodlu dizeler olarak depolamakla uğraşmayabilir. kaynak dosyalarda kullanabilirsiniz. Ancak Android'in desteklenen geniş yerel ayarlarda tarih, saat, para birimi ve benzer biçimler için tek bir yerel ayarda bile olabilir. Biçimlerinizi sabit kodlamayla elde edeceğiniz sonuçlar kullanıcılar için kafa karıştırıcı bir deneyim haline gelir. Bu nedenle, Android 7.0 veya sonraki sürümler için geliştirme yaparken sayıları 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. Bu yerel ayarlar çoğu kaynağı paylaşabilir. ancak bazıları ASCII rakamları, diğerleri yerel rakamları tercih eder. Örneğin, veya "4 haneli bir PIN seçin", aşağıda gösterildiği gibi biçimlendiricileri kullanın:
format(locale, "Choose a %d-digit PIN", 4)