Uygulamanızı yerelleştirme

Android pek çok bölgede pek çok cihazda çalışır. En fazla sayıda kullanıcıya ulaşmak için web sitenizin Uygulamada metin, ses dosyaları, sayılar, para birimi ve grafikler emin olmanızı öneririz.

Bu sayfada, Android'i yerelleştirmek için en iyi uygulamalar

Kotlin veya Java programlaması hakkında çalışma bilgisine sahip olmanız gerekir ve bilmeniz gereken Android kaynak yükleme, kullanıcı arayüzü öğelerini XML'de tanımlayarak, geliştirmeyi değerlendirmek, etkinlik yaşam döngüsü, yerelleştirme ve yerelleştirmenin genel ilkelerini anlatacağım.

Verileri ayırmak için Android kaynak çerçevesini temel uygulama işlevinden olabildiğince fazla yerelleştirilmiş bilgiler ekleyin.

  • Uygulamanızın kullanıcı arayüzünün içeriğinin çoğunu veya tamamını kaynak dosyalarını, bu sayfada ve Uygulama kaynaklarına genel bakış.
  • Öte yandan kullanıcı arayüzünün davranışı, veya Java tabanlı kodunuzla değiştirin. Örneğin, kullanıcılar yerel ayara göre farklı şekillerde biçimlendirilmesi veya sıralanması durumunda, Kotlin veya Verileri programatik olarak işlemek için Java programlama dili. Bu sayfa Kotlin veya Java tabanlı kodunuzu nasıl yerelleştireceğinizi ele alacağız.

Uygulamanızdaki dizeleri yerelleştirmeyle ilgili kısa bir kılavuz için Farklı dilleri ve hakkında daha fazla bilgi edinin.

Genel bakış: Android'de kaynak değiştirme

Kaynaklar; metin dizeleri, düzenler, sesler, grafikler ve verileri için de geçerlidir. Bir uygulama birden fazla her biri farklı cihaz yapılandırması için özelleştirilmiş kaynak kümeleridir. Bir Kullanıcı uygulamayı çalıştırır. Android, kaynakları otomatik olarak seçip yükler. eşleştirmeye karar verdik.

Bu sayfa, yerelleştirme ve yerel ayara odaklanmaktadır. Tam açıklama için kaynak geçişi ve manuel olarak yapabileceğiniz tüm yapılandırma türleri (ekran yönü veya dokunmatik ekran türü gibi) belirtmek için Sağlama konusunda daha fazla bilgi edinin.

Uygulamanızı yazarken varsayılan ve alternatif kaynaklar oluşturursunuz oluşturmanız gerekir. Kullanıcılar uygulamanızı çalıştırdığında, Android sistemi cihazın yerel ayarına göre hangi kaynakların yükleneceğini seçer. Kaynak oluşturmak için dosyaları projenin res/ dizininin özel olarak adlandırılmış alt dizinlerini oluşturun.

Varsayılan kaynaklar neden önemlidir?

Uygulama, sağlamadığınız herhangi bir yerel ayarda çalıştığında yerel ayara özgü metin kullanıyorsanız Android, varsayılan dizeleri şuradan yükler: res/values/strings.xml Bu varsayılan dosya yoksa veya uygulamanızın ihtiyacı olan bir dize eksikse uygulamanız çalışmıyor ve bir hata gösteriyor. Aşağıdaki örnekte, varsayılan metin dosyası tamamlanmamış.

Örnek:

Bir uygulamanın Kotlin veya Java tabanlı kodu yalnızca iki dizeyi ifade eder: text_a ve text_b. Uygulama, yerelleştirilmiş bir kaynak dosyası içeriyor (res/values-en/strings.xml), text_a ve İngilizce olarak text_b. Uygulama ayrıca bir varsayılan ayar da içerir. içeren bir kaynak dosyası (res/values/strings.xml) text_a tanımı, ama text_b için değil.

  • Bu uygulama, yerel ayarı İngilizce olan bir cihazda başlatıldığında Çünkü uygulama sorunsuz bir şekilde çalışabilir, çünkü res/values-en/strings.xml gerekli metnin her ikisini de içeriyor dizeler için geçerlidir.
  • Ancak bu uygulama, bir hata mesajı görür ve "Kapatmaya Zorla" mesajı düğmesini tıklayın. Uygulama yüklenmiyor.

Bu durumu önlemek için res/values/strings.xml dosyasının mevcut olduğundan ve gerekli her dizeyi tanımladığından emin olun. Bu durum, her tür kaynağı kullanabilirsiniz. Bir dizi varsayılan kaynak uygulamanızın çağırdığı tüm kaynakları içeren kaynak dosyalar, hazırlanabilirler. Test hakkında bilgi edinmek için Varsayılan kaynakları test etme bölümü.

Yerelleştirme için kaynakları kullanma

Bu bölümde, varsayılan kaynakların yanı sıra alternatif kaynakların nasıl oluşturulacağı açıklanmaktadır. Ayrıca kaynaklara nasıl öncelik atandığı ve en iyi uygulamaları görelim.

Varsayılan kaynaklar oluşturma

Uygulamanın varsayılan metnini res/values/strings.xml olarak ayarlayın. Bu dizeler için varsayılan dil; bu dilin konuşmalarına yardımcı olur.

Varsayılan kaynak grubu, varsayılan çekilebilir öğeleri ve düzenleri de içerir. ve animasyonlar gibi başka kaynak türleri içerebilir. Aşağıdaki kaynaklar şu dizinlere gidin:

  • res/drawable/: en az sahibi olan gerekli dizin uygulamanın Google Play'deki simgesi için bir grafik dosyası
  • res/layout/: XML içeren gerekli dizin varsayılan düzeni tanımlayan dosya
  • res/anim/: varsa gereklidir res/anim-<qualifiers> klasör
  • res/xml/: varsa gereklidir res/xml-<qualifiers> klasör
  • res/raw/: varsa gereklidir res/raw-<qualifiers> klasör

İpucu: Kodunuzda, her bir referansı inceleyin ve Android kaynağı. Her biri için varsayılan bir kaynağın tanımlandığından emin olun. Ayrıca varsayılan dize dosyasının eksiksiz olduğundan emin olun: localized dize dosyası dizelerin bir alt kümesini içerebilir ancak default dizesi dosyası bunların tümünü içermelidir.

Alternatif kaynaklar oluşturun

Bir uygulamayı yerelleştirmenin büyük bir kısmı, farklı dillerde içerik sunar. Bazı durumlarda alternatif grafikler de sağlarsınız. sesler, düzenler ve yerel ayara özgü diğer kaynaklar.

Bir uygulama birden fazla res/<qualifiers>/ belirtebilir her biri farklı niteleyicilere sahip olmalıdır. Bu projede alternatif bir kaynak bir dil veya dil ya da ürün sahibini belirten bir niteleyici dil-bölge kombinasyonudur. Kaynak dizininin adı uygun olmalıdır adlandırma düzenine Sağlama alternatif kaynaklardan yararlanmanız gerekir, aksi takdirde uygulamanız derleyemez.

Örnek:

Uygulamanızın varsayılan dilinin İngilizce olduğunu ve uygulamanızdaki tüm metinleri Fransızca ve diğer dillere çevirmek uygulamanın başlığı dışındaki metni Japonca. Bu durumda, üç strings.xml oluşturursunuz. dosyaları, her biri yerel ayara özel bir kaynak dizininde depolanır:


  1. res/values/strings.xml Uygulamanın kullandığı tüm dizeler için İngilizce metin içerir. title adlı bir dizenin metni dahil.

  2. res/values-fr/strings.xml title dahil tüm dizeler için Fransızca metin içermelidir.

  3. res/values-ja/strings.xml Şunlar dışındaki tüm dizeler için Japonca metin içermelidir. title.

Kotlin veya Java tabanlı kodunuz R.string.title ile ilgiliyse çalışma zamanında gerçekleşir:

  • Cihaz Fransızca dışında bir dile ayarlanırsa Android yüklenir res/values/strings.xml dosyasından title.
  • Cihaz Fransızca olarak ayarlanırsa Android, title şuradan yüklenir: res/values-fr/strings.xml dosya

Cihaz Japonca olarak ayarlanırsa Android, res/values-ja/strings.xml dosyasındaki title. Ama söz konusu dosyada böyle bir dize bulunmadığı için Android varsayılan olarak ayarlar ve title öğesini res/values/strings.xml dosya

Hangi kaynaklar önceliklidir?

Bir cihazın yapılandırmasıyla eşleşen birden fazla kaynak dosyası olması durumunda Android, karar vermede rol oynar. Niteleyicilerden biri de bir kaynak dizini adında belirtilir, yerel ayar neredeyse her zaman önceliklendirme.

Örnek:

Bir uygulamanın varsayılan bir grafik grubu ve Her biri farklı cihaz kurulumu için optimize edilmiş grafik grupları:


  • res/drawable/ Varsayılan grafikleri içerir.

  • res/drawable-small-land-stylus/ Şundan giriş bekleyen bir cihazla kullanım için optimize edilmiş grafikler içeriyor: Ekran kalemi var ve yatay yönde bir QVGA düşük yoğunluklu ekrana sahip.

  • res/drawable-ja/ Japoncada kullanım için optimize edilmiş grafikler içerir.

Uygulama, Japonca kullanacak şekilde yapılandırılmış bir cihazda çalışıyorsa Android, cihaz olsa bile res/drawable-ja/ uygulamasındaki grafikleri yükler Bunlar, ekran kaleminden giriş yapılmasını bekleyen ve QVGA düşük yoğunluklu bir yatay yönde kaydırılır.

İstisna: Belirleyici olmayan tüm niteleyiciler seçimde yerel ayara göre öncelikli olan, mobil ülke kodu (MM) ve mobil ağdır (MNC) ile uyumludur.

Örnek:

Aşağıdaki duruma sahip olduğunuzu varsayalım:

  • Uygulama kodu R.string.text_a için çağrılıyor
  • .
  • İki ilgili kaynak dosyası mevcuttur:
    • Şunları içeren res/values-mcc404/strings.xml: Uygulamanın varsayılan dilinde (bu örnekte text_a) İngilizce.
    • Şunları içeren res/values-hi/strings.xml: Hintçe text_a.
  • Uygulama şu özelliklere sahip bir cihazda çalışıyor: yapılandırma:
    • SIM kart, Hindistan'da bir mobil ağa (MCC 404) bağlı.
    • Dil Hintçe (hi) olarak ayarlanmış.

Android, text_a uygulamasını şuradan yükler: res/values-mcc404/strings.xml (İngilizce), cihaz şu olsa bile: Hintçe yapılandırıldı. Çünkü kaynak seçimi sürecinde Android dil eşleşmesi yerine MM eşleşmesini tercih eder.

Seçim süreci her zaman bu örnekler kadar kolay değildir öneririz. Süreçle ilgili daha ayrıntılı bir açıklama için Android, en iyi eşleşen kaynağı bulun. Tüm niteleyiciler, aşağıda yer alan öncelik sırasına göre açıklanmış Uygulama kaynaklarına genel bakış.

Koddaki kaynaklara başvurma

Uygulamanızın Kotlin veya Java tabanlı kodunda, söz dizimini kullanarak kaynaklara başvuruda bulunuyorsunuz. R.resource_type.resource_name veya android.R.resource_type.resource_name Daha fazla bilgi için bkz. Uygulama kaynaklarınıza erişin.

Yerelleştirme dizelerini yönetme

Bu bölümde, yerelleştirmeyle ilgili dizelerinizi yönetmeye yönelik en iyi uygulamalar açıklanmaktadır.

Tüm dizeleri string.xml dosyasına taşıyın

Uygulamalarınızı geliştirirken herhangi bir dizeyi koda gömmeyin. Bunun yerine dizeleri varsayılan bir strings.xml dosyasında kaynak olarak kullanabileceğiniz için yazıyoruz. strings.xml dosyasındaki dizeler kolayca çıkarılabildiği için uygun niteleyicilerle, önceden çevrilmiş ve uygulamanıza ve derlenen kodda değişiklik yapma.

Metin içeren resimler oluşturursanız bu dizeleri de strings.xml içine yerleştirin ve görüntüleri tekrar üretebilir.

Kullanıcı arayüzü dizeleriyle ilgili Android yönergelerini uygulayın

Kullanıcı arayüzlerinizi tasarlayıp geliştirirken gerçekten çok iyidir. Genel olarak kısa ve öz bir stil kullanın ve kullanıcı arayüzlerinizde tutarlı bir stil kullanın.

Sunumunuz için Materyal Tasarım önerilerini okuyup uyguladığınızdan emin olun yazı stil ve kelime seçimi. Bu şekilde uygulamalarınız kullanıcılara daha iyi görünür ve kullanıcıların uygulamanızı Kullanıcı arayüzü daha hızlı.

Ayrıca, şunun gibi kullanıcı arayüzü öğeleri için mümkün olduğunda her zaman Android standart terminolojisini kullanın: uygulama çubuğu, seçenekler menüsü, sistem çubuğu ve bildirimler. Android şartlarını kullanma doğru ve tutarlı bir şekilde çeviriyi kolaylaştırır ve daha iyi bir nihai ürün sunar. bir platformdur.

Beyan edilen dizeler için yeterli bağlam sağlayın

strings.xml dosyanızda dizeleri bildirirken bağlamı açıkladığınızdan emin olun. dizenin kullanıldığı yerdir. Bu bilgiler çevirmen için çok değerlidir. Çeviri kalitesini artırır. Ayrıca, dizelerinizi daha etkili bir şekilde yönetmenize yardımcı olur.

Örnek:

<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>

Aşağıdakiler gibi bağlam bilgileri sağlayabilirsiniz:

  • Bu dize ne içindir? Kullanıcıya ne zaman ve nerede sunulur?
  • Bu, düzenin neresinde? Örneğin, çeviriler aşağıdaki alanlarda daha az esnektir: metin kutularına göre daha fazla olabilir.

Çevrilmeyecek ileti bölümlerini işaretleme

Genellikle dizeler, diğer dillere çevrilmesi amaçlanmayan metinler içerir. Genel Örneğin, bir kod parçası, değer için yer tutucu, özel bir simge veya ad verilebilir. Siz dizelerinizi çeviriye hazırlayın, herhangi bir değişiklik yapılmadan, olduğu gibi kalması gereken Böylece çevirmen bunu değiştirmez.

Çevrilmeyecek metni işaretlemek için <xliff:g> kullanın yer tutucu etiketi. Burada, "%1$s" metninin farklı olduğunu gösteren bir örnek etiket verilmiştir değiştirmelerini öneririz:

<string name="countdown">
  <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday
</string>

Bir yer tutucu etiket bildirdiğinizde, yer tutucusunun amacıdır. Uygulamanız yer tutucu değeri daha sonra değiştirirse bunun için örnek özelliğini kullanın.

Yer tutucu etiketlere ilişkin birkaç örneği burada bulabilirsiniz:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special Unicode symbol -->
<string name="star_rating">Check out our 5
    <xliff:g id="star">\u2605</xliff:g>
</string>
<!-- Example placeholder for a URL -->
<string name="app_homeurl">
    Visit us at <xliff:g
    id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
    Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
<!-- Example placeholder for a literal -->
<string name="promo_message">
    Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount.
</string>
...
</resources>

Yerelleştirme kontrol listesi

Bir Android uygulamasını yerelleştirme ve dağıtma sürecine dair kapsamlı bir genel bakış için bkz. Uygulamanızı çevirme ve yerelleştirme

Yerelleştirme ipuçları

Uygulamanızı yerelleştirirken bu ipuçlarını uygulayın.

Uygulamanızı tüm yerel ayarlarda çalışacak şekilde tasarlayın

Kullanıcının uygulamasını indirin. Cihazda beklemediğiniz bir donanım olabilir veya planlamadığınız veya test edemediğiniz bir yerel ayara ayarlanmış olabilir. Uygulamanızı, normal şekilde çalışacak veya sorunsuz çalışacak şekilde tasarlayın hangi cihazda çalıştığı önemli.

Önemli: Uygulamanızın eksiksiz bir varsayılan kaynak kümesi içerir: res/drawable/ ve hiç içermeyen res/values/ klasör klasör adlarında, tüm resimleri ve metinleri içeren ek değiştiriciler en güçlü yoludur.

Bir uygulamanın varsayılan bir kaynağı bile eksikse desteklenmeyen bir yerel ayara sahip olması. Örneğin, res/values/strings.xml varsayılan dosyasında uygulama, desteklenmeyen bir yerel ayarda çalıştırıldığında ve res/values/strings.xml dosyasını yüklemeye çalışırsa kullanıcı bir hata görür mesajını ve bir Kapatmaya Zorla düğmesi görürsünüz.

Daha fazla bilgi için Varsayılan olarak test etme kaynaklar bölümüne bakın.

Esnek bir düzen tasarlama

Düzeninizi belirli bir dile uyacak şekilde yeniden düzenlemeniz gerekirse o dil için şunun gibi alternatif bir düzen oluşturabilirsiniz: Almanca sayfa düzeni için res/layout-de/main.xml. Ancak bunu yaptığınızda uygulamanızın bakımını zorlaştırabilir. Ayrı bir tema etrafında şekillenen bir düzen oluşturabilirsiniz.

Başka bir tipik durum ise bir ifadede farklı bir şey gerektiren emin olabilirsiniz. Örneğin, iki müşteriden oluşan bir iletişim formunuz uygulama Japonca olarak çalıştırıldığında ad alanı, ancak arka arkaya üç ad alanı Uygulama başka bir dilde çalışıyor. Bu işlemi, aşağıdaki iki yöntemden birini kullanarak yapabilirsiniz: iki yol vardır:

  • Programlı olarak etkinleştirebileceğiniz veya devre dışı bırakılır.
  • Ana düzende, değiştirilebilir öğe içeren başka bir düzen olsun girin. İkinci düzende, tablodaki farklı boyutlar için dil.

İhtiyacınızdan daha fazla kaynak dosyası ve metin dizesi oluşturmaktan kaçının

Muhtemelen her ülke için yerel ayara özel bir alternatif ekleyebilirsiniz. Örneğin, res/layout/main.xml dosyası her dilde çalışabilir. Bu durumda alternatif düzen dosyası oluşturmanız gerekmez.

Ayrıca, her dize için alternatif metin oluşturmanız gerekmeyebilir. Örneğin, aşağıdaki varsayımlarda bulunalım:

  • Uygulamanızın varsayılan dili Amerikan İngilizcesidir. İngilizce (ABD) yazımı kullanılarak, res/values/strings.xml
  • Birkaç önemli kelime öbeği için İngiliz İngilizcesi yazımını sağlamanız gerekir. Bu alternatif dizelerin, uygulamanız kullanıyor.

Bunu yapmak için res/values-en-rGB/strings.xml uygulama Birleşik Krallık'ta yayınlandığında farklıdır. Türkiye'nin uygulama varsayılanlara döner ve res/values/strings.xml içinde tanımlanmıştır.

Manuel yerel ayar araması için Android Context nesnesini kullan

Context nesnesini kullanarak yerel ayarı arayabilirsiniz aşağıdaki örnekte gösterildiği gibi:

Kotlin

val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName

Java

Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0);
String locale = primaryLocale.getDisplayName();

Geliştirici Konsolu'ndaki uygulama

Uygulama Çevirisi Hizmet, Play Console. Web sitenizin anında fiyat teklifi alın ve bir çeviri şirketidir. Bir veya daha fazla dile çeviri sipariş edebilirsiniz kullanıcı arayüzü dizeleri, Play Store Girişi metni, UİSA adları ve reklam kampanyası metni için.

Yerelleştirilmiş uygulamaları test etme

Yerelleştirilmiş uygulamanızı bir cihazda veya Android Emülatör'ü kullanarak test edin. Özellikle, gerekli tüm varsayılan kaynakların dahil edildiğinden emin olmak için uygulamanızı test edin.

Bir cihazda test edin

Test ettiğiniz cihazın kullanıma sunduk. Mevcut yerel ayarlar diğer cihazlarda kullanılabilenlerden farklı olabilir. Ayrıca, çözünürlüğü ve yoğunluğu farklılık gösterebilir. Bu durum, dizelerin ve çekilebilir öğelerin kullanıcı arayüzünde gösterilmesini sağlar.

Cihazdaki yerel ayarı veya dili değiştirmek için Ayarlar uygulamasını kullanın.

Emülatörde test etme

Emülatörü kullanma ile ilgili ayrıntılar için Uygulamaları Android Emülatör'de çalıştırma konusuna bakın.

Özel bir yerel ayar oluşturma ve kullanma

"Özel" yerel ayar, Android'in değiştirdiği bir dil veya bölge kombinasyonudur. özelliği açıkça desteklemez. Uygulamanızın nasıl çalıştığını test edebilirsiniz oluşturarak bunu özel bir yerel ayarda yapabilirsiniz. İki tür şu yolları izleyebilirsiniz:

  • Şu sayfadan erişilebilen Özel Yerel Ayar uygulamasını kullanın: Uygulama sekmesi Özel bir yerel ayar oluşturduktan sonra, & tutmak yerel ayar adını yazın.
  • Aşağıdaki bölümde açıklandığı şekilde, adb kabuğundan özel bir yerel ayara geçin.

Emülatörü Android'de bulunmayan bir yerel ayara ayarladığınızda sistem görüntüsü aldığınızda, sistemin kendisi varsayılan dilinde görüntülenir. Sizin düzgün şekilde yerelleştirilir.

Adb kabuğundan emülatör yerel ayarını değiştirme

adb kabuğunu kullanarak emülatördeki yerel ayarı değiştirmek için şunları yapın:

  1. Test etmek istediğiniz yerel ayarı seçin ve bu dilin BCP-47 dil etiketini belirleyin. Örneğin, Kanada Fransızcası için fr-CA.
  2. Bir emülatör çalıştırın.
  3. Ana bilgisayardaki bir komut satırı kabuğunda aşağıdakini çalıştırın: komut:
    adb shell
    veya bağlı bir cihazınız varsa emülatörü istediğinizi -e seçeneği:
    adb -e shell
  4. adb kabuk isteminde (#) şu komutu çalıştırın:
    setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
    Parantez içindeki bölümleri, Adımdaki uygun kodlarla değiştirin 1.

    Örneğin, Kanada Fransızcası dilinde test etmek için:
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

Bu, emülatörün yeniden başlatılmasına neden olur. Ana ekran tekrar görününce uygulamanızı yeniden başlatın, Uygulama yeni yerel ayarla başlatılır.

Varsayılan kaynakları test etme

Bir uygulamanın ihtiyaç duyduğu her dize kaynağını içerip içermediğini test etmek için aşağıdakileri yapın:

  1. Emülatörü veya cihazı, uygulamanızın ayarlamadığı bir dile ayarlayın destek. Örneğin, uygulama res/values-fr/ ancak dilinde İspanyolca dizeler yok res/values-es/, ardından emülatörün yerel ayarını İspanyolca olarak ayarla. Emülatörü desteklenmeyen yerel ayar.
  2. Uygulamayı çalıştırın.
  3. Uygulama bir hata mesajı ve Kapatmaya Zorla düğmesi gösteriyorsa mevcut olmayan bir dizeyi arıyor olabilirsiniz. Lütfen res/values/strings.xml dosyası şunun tanımını içeriyor: her dizeyi temsil eder.

Test başarılı olursa diğer yapılandırma türleri için tekrar edin. Örneğin, Örneğin, uygulama res/layout-land/main.xml, ancak şu ada sahip bir dosya içermiyor: res/layout-port/main.xml, ardından emülatörü veya cihazı uygulamanın çalışıp çalışmadığını kontrol edin.