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

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) ve es_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:

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

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:

Tablo 2. Tam yerel ayar eşleşmesinin olmadığı durumlar için iyileştirilmiş bir çözüm stratejisi.

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

Tablo 3. Uygulama yalnızca kullanıcının ikinci tercih edilen yerel ayarıyla eşleştiğinde kaynak çözünürlüğü.

Kullanıcı Ayarları Uygulama Kaynakları Kaynak Çözünürlüğü
  1. fr_CH
  2. CANNOT TRANSLATE
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")
    }
}
Derleme sisteminin uygulamanızdaki kaynakları ve bağımlılıklarını birleştirme şekli nedeniyle, kullanıcı dili ayarlarının doğru şekilde alınması için desteklenen dilleri bu şekilde belirtmeniz gerekir.

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)