Dil ve yerel ayar çözümüne genel bakış

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:

Tablo 1. Tam yerel ayar eşleşmesi olmadan kaynak çözünürlüğü.

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:

Tablo 2. Projenin etkin olmadığı durumlarda tam yerel ayar.

Kullanıcı Ayarları Uygulama Kaynakları Kaynak Çözümü
  1. 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
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.

Tablo 3. Uygulama yalnızca kullanıcının ikinci tercih edilen yerel ayarına gidin.

Kullanıcı Ayarları Uygulama Kaynakları Kaynak Çözümü
  1. tr_CH
  2. i_CH
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")
    }
}
Derleme sisteminin uygulamanızdaki kaynakları ve bağımlılarını birleştirme şekli nedeniyle kullanıcı dil ayarlarının doğru şekilde alınması için desteklenen dilleri bu şekilde belirtin.

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)