İçindekiler
Android Uygulama Yerelleştirme: Konum Ayarları, İzinler ve Yerel Ayar Tespitini Yönetme
Bugün başarılı bir Android uygulaması geliştirmek, onu küresel bir kitle için geliştirmek anlamına gelir. Kullanıcılarınız Tokyo'da, São Paulo'da veya Berlin'de olsun, uygulamanın kendi dillerini konuşmasını, bölgesel kurallarına saygı göstermesini ve — gerektiğinde — cihaz konumuna doğru biçimde erişmesini beklerler. Bu kılavuz, Android konum ayarlarının daha geniş bir uygulama yerelleştirme stratejisiyle nasıl kesiştiğini ele alır; yerel ayar tespiti, GPS izin akışları ve tüm bunların özel bir yerelleştirme servisi kullanılarak temiz biçimde nasıl yönetileceği anlatılmaktadır.
Android'de Konum ve Yerelleştirme Neden Birbirine Bu Kadar Bağlıdır?
İlk bakışta konum ve yerelleştirme birbirinden bağımsız konular gibi görünebilir. Yerelleştirme (l10n) dil, tarih formatları ve para birimiyle ilgilidir. Konum ise GPS koordinatları ve haritalarla. Ancak pratikte bu ikisi sürekli kesişir.
Şu senaryoları düşünün:
- Bir kullanıcı Fransa'dan Kanada'ya seyahat eder. Cihazının android konumu yeni bir saat dilimine ve bölgeye geçer. Uygulama dil veya para birimi gösterimini otomatik olarak güncellemeli mi?
- Bir kullanıcı uygulamanızı İspanyolca telefon ayarlarıyla yükler, ancak GPS koordinatları onu Amerika Birleşik Devletleri'ne yerleştirir. Hangi yerel ayara öncelik vermelisiniz?
- Bir teslimat uygulaması, çevrilmiş UI metinleri ve bölgeye özgü biçimlendirmenin yanı sıra mevcut konumu da kullanmak zorundadır.
Android'in bu iki sistemi nasıl yönettiğini — ve birbirleriyle nasıl etkileşime girdiklerini — anlamak, ciddi her uygulama yerelleştirme stratejisinin temelidir.
Android Yerel Ayar Tespiti: Cihazın Dil Yapılandırmasını Okumak
GPS'i düşünmeden önce yerel ayarla başlayın. Android, yerel ayarı cihazın Resources.getConfiguration() API'si aracılığıyla sunar. Modern Android'de (API 24+), kullanıcının yapılandırdığı sıralı yerel ayar listesini almak için ConfigurationCompat.getLocales(resources.configuration) kullanabilirsiniz.
Bu, cihazın fiziksel konumlandırma sistemini ifade eden android konum ayarlarından farklıdır. Yerel ayar, içeriği nasıl göstereceğinizi söyler. Konum ise kullanıcının nerede olduğunu.
Yerel Ayar ve Bölge
Sık yapılan bir hata, locale ile coğrafi bölgeyi karıştırmaktır. Bir kullanıcı GPS için telefon ayarlarını Almanya'ya ayarlamış olabilir, ancak yerel ayarı en-US olabilir. Uygulamanızın içerik sunumuyla ilgili nüanslı kararlar alması gerekiyorsa her ikisini de kontrol edin.
val config = resources.configuration val locale = ConfigurationCompat.getLocales(config).get(0) val language = locale?.language // örn. "en" val country = locale?.country // örn. "US"
Android Konum Ayarlarını Anlamak
Android'de Konum Servisleri Nedir?
Android konum servisleri, bir cihazın fiziksel konumunu belirleyen sistem servislerinin bütününü ifade eder. Bunlar şunları içerir:
- GPS (Global Positioning System): Uydu tabanlı, yüksek doğruluk, yüksek pil kullanımı
- Wi-Fi ve hücre ağı konumlandırma: Düşük doğruluk, düşük pil kullanımı
- Sensör füzyonu: En iyi sonuçlar için birden fazla kaynağı birleştirir
Kullanıcılar cihazlarında "konumları nasıl açarım" diye sorduğunda, bu servis paketini sistem genelinde etkinleştiriyorlar. Herhangi bir izin isteği yapmadan önce uygulamanızda kullanıcının android konum servislerini etkinleştirip etkinleştirmediğini kontrol edebilirsiniz.
Cihaz Konum Ayarlarını Programatik Olarak Kontrol Etme
Cihaz konum ayarlarını kontrol etmek ve kullanıcıyı yönlendirmek için Google Play Services Location API'sinden LocationSettingsRequest kullanın:
val locationRequest = LocationRequest.create().apply {
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
val builder = LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest)
val client = LocationServices.getSettingsClient(context)
val task = client.checkLocationSettings(builder.build())
task.addOnFailureListener { exception ->
if (exception is ResolvableApiException) {
// Kullanıcıyı cihaz konum ayarlarını güncellemesi için yönlendir
exception.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
}
}
Bu akış, kullanıcıların menülerde manuel olarak arama yapmadan android'de konum servislerini nasıl açacaklarını anlamalarına yardımcı olmanın standart yoludur.
Android GPS İzni: Konum Erişimini İstemenin Doğru Yolu
Konum erişimi istemek, Android'deki en hassas izin akışlarından biridir. Yanlış yönetmek kullanıcı güvenini zedeler ve kurtarılması zor redlere yol açar.
Android GPS İzin Seviyelerini Anlamak
Android, android gps izninin iki katmanını sunar:
ACCESS_COARSE_LOCATION: Yaklaşık konum (mahalle blok düzeyi), Wi-Fi ve baz istasyonlarından elde edilirACCESS_FINE_LOCATION: Kesin GPS düzeyinde konum
Android 12+'da ACCESS_FINE_LOCATION, kullanıcının açık bir seçim yapmasını gerektirir; navigasyon, geofencing veya teslimat uygulamaları gibi ince taneli android konum servisleri gerektiren uygulamalar için her iki izin de genellikle tanımlanır.
<!-- AndroidManifest.xml --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Çalışma Zamanında Konum İzinlerini İsteme
private val locationPermissionRequest = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
when {
permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true -> {
// Kesin konum erişimi verildi
}
permissions[Manifest.permission.ACCESS_COARSE_LOCATION] == true -> {
// Yalnızca yaklaşık konum erişimi
}
else -> {
// Konum izinleri reddedildi — UI'ı buna göre güncelle
}
}
}
// İsteği tetikle
locationPermissionRequest.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)
Android'de GPS'i nasıl etkinleştireceğini merak eden kullanıcılar, sistem ayarlarına geçmeden önce genellikle uygulama içi izin diyaloğunuzla etkileşime girecektir. Gerekçe diyaloğunuzu açık ve bağlama özgü yapın.
Android'de Kesin Konumu Nasıl Etkinleştirirsiniz
Android 12 (API 31) ile birlikte, uygulamanız kesin konum istese bile kullanıcılar yalnızca yaklaşık konum verebilir. Özelliğiniz gerçekten android'de kesin konumun nasıl etkinleştirileceğini gerektiriyorsa, yalnızca yaklaşık erişim verildiği durumu ele almanız gerekir:
val hasFineLocation = ContextCompat.checkSelfPermission(
context, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
if (!hasFineLocation) {
// Kesin konumun neden önemli olduğunu açıklayın, ardından kullanıcıya
// seçimini yükseltmek için telefon konum ayarlarına yol gösterin
}
Android'de GPS'i Nasıl Açarsınız: Kullanıcılara Akışta Rehberlik Etme
Uygulamanız GPS gerektiriyorsa ve kullanıcı bunu etkinleştirmediyse, onu konum etkinleştirme sürecinde yönlendirmeniz gerekir. Android telefonunda GPS'i nasıl açacağına ilişkin tipik akış şöyledir:
- Uygulama, Settings API kontrolü aracılığıyla konum servislerinin kapalı olduğunu tespit eder.
- Bir
ResolvableApiExceptionfırlatılır ve sistem diyaloğu gösterilir. - Kullanıcı diyaloğu kapatırsa uygulama içi bir açıklama gösterirsiniz.
- Son çare olarak doğrudan cihazın konum ayarlarına derin bağlantı verirsiniz:
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(intent)
Bu, sistem ayarlarından android telefonunda GPS'i nasıl etkinleştireceğini bilmesi gereken kullanıcılar için geçerlidir. Daha sorunsuz bir deneyim için, manuel derin bağlantıya başvurmadan önce her zaman Settings API diyaloğunu tercih edin.
Aynı model, kullanıcıların genel olarak android'de GPS'i nasıl açacağını sorduğu durumlar için de geçerlidir — çoğu modern Android sürümü (8+) hızlı ayarlar geçişini sunar, ancak uygulamanız asla bunun zaten açık olduğunu varsaymamalıdır.
Android Yerelleştirme Servisi: Uygulama Geliştiricileri İçin Ne Anlama Gelir?
"Android yerelleştirme servisi" ifadesi, birbiriyle ilişkili ancak farklı iki anlama gelir:
- Sistem düzeyinde: Android'in yerel ayar, dil paketleri ve giriş yöntemleri için yerleşik servisleri — Ayarlar > Sistem > Dil ve Giriş altında yönetilir, bazı bölgesel UI varyantlarında konum ve servisler olarak da bilinir.
- Uygulama düzeyinde: Uygulamanızın çevrilmiş metinler, biçimlendirilmiş sayılar ve bölgeye özgü içerik sunmak için kullandığı yerelleştirme altyapısı.
Bu kılavuz esas olarak ikinci anlamla ilgilidir, ancak sistem düzeyindeki servisleri anlamak önemlidir çünkü bunlar uygulamanızın varsayılanlarını belirler.
Android'in Uygulama Başına Dil Tercihlerini Kullanma
Android 13 (API 33), sistem yerel ayarını değiştirmeden kullanıcıların her yüklü uygulama için farklı bir yerel ayar belirlemesine olanak tanıyan uygulama başına dil tercihlerini tanıttı. Bunu şu şekilde okuyabilirsiniz:
val appLocale: LocaleList = getSystemService(LocaleManager::class.java)
.applicationLocales
Bu, uygulama yerel ayarı kararları için konum ayarını google'ı daha az belirleyici hale getirir — uygulamanız, cihazı ABD tabanlı bir android konumu bildiren bir kullanıcıya Almanca gösterebilir. Sistem yerel ayarına geri dönmeden önce her zaman uygulama başına yerel ayarı kontrol edin.
Uygulama Yerelleştirme Stratejisi: Pratik Bir Çerçeve
Yerel ayar tespiti, konum erişimi ve çevrilmiş içeriği bir araya getirmek tutarlı bir strateji gerektirir. İşte ölçeklenen bir çerçeve.
Adım 1: Yerel Ayarı Tespit Edin ve Önceliklendirin
Yerel ayar çözümü için öncelik sırası:
- Kullanıcının uygulama içi dil tercihi (backend'inizde veya shared preferences'ta saklı)
- Uygulama başına dil tercihi (Android 13+)
- Sistem yerel ayar listesi (en üstteki giriş)
- Android konumuna dayalı coğrafi yedek (yalnızca yerel ayar listesi boş veya belirsizse)
Adım 2: Mevcut Konumu Yalnızca Bölgesel Varsayılanlar İçin Kullanın
Para birimi, ölçü birimleri ve saat dilimi gibi varsayılan bölge ayarlarını belirlemek için mevcut konumu kullanın — ancak GPS'ten türetilmiş bir konumla açık bir yerel ayar tercihini asla geçersiz kılmayın. Konum erişimi yerelleştirmeyi tamamlamalıdır, geçersiz kılmamalıdır.
Adım 3: Yerelleştirilmiş İçeriği Merkezi Bir Kaynaktan Sunun
Metinleri res/values/strings.xml'e sabit kodlamak basit uygulamalar için işe yarar, ancak şu durumlarda yetersiz kalır:
- Onlarca diliniz varsa
- Pazarlama metinleri sık değişiyorsa
- Geliştirici olmayan ekip üyelerinin çevirileri güncellemesi gerekiyorsa
- Yayınlamadan önce yeni yerel ayarları test etmeniz gerekiyorsa
İşte burada özel bir yerelleştirme servisi vazgeçilmez hale gelir. Her çeviri değiştiğinde yeni bir APK sürümü beklemek yerine, bir içerik yönetim katmanı güncellemeleri yerelleştirilmiş uygulamanıza anında göndermenizi sağlar.
Adım 4: RTL ve Yerel Ayara Özgü Düzen Değişikliklerini Yönetin
Bazı yerel ayarlar sağdan sola düzen gerektirir. Manifestinizde RTL desteğini etkinleştirin ve düzenlerinizde left/right yerine start/end kullanın:
<!-- AndroidManifest.xml --> <application android:supportsRtl="true" ... />
<!-- layout.xml -->
<TextView
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp" />
Adım 5: Konuma Bağımlı Özellikleri Her Yerel Ayar İçin Doğrulayın
Bazı uygulama özellikleri yalnızca belirli bölgelerde kullanılabilir. Hem konum izinlerini hem de yerel ayarı kullanarak kullanılabilirliği doğrulayın:
fun isFeatureAvailable(locale: Locale, hasLocationAccess: Boolean): Boolean {
val supportedRegions = setOf("US", "GB", "DE", "FR")
return locale.country in supportedRegions && hasLocationAccess
}
better-i18n ile Çevirileri Büyük Ölçekte Yönetme
Uygulamanız bölgeler genelinde büyüdükçe, çevirileri manuel olarak yönetmek bir darboğaza dönüşür. XML dosyalarına gömülü içerik, çevirmenler için çalışması zor, ürün yöneticileri için incelemesi zor ve yeni bir sürüm olmadan güncellenmesi imkânsızdır.
better-i18n, tam da bu kullanım senaryosu için oluşturulmuş bir yerelleştirme içerik platformudur. Şunları yapmanıza olanak tanır:
- Tüm çeviri içeriğini tek bir yerde yönetin: metinler, blog içeriği, UI kopyaları — hepsine temiz bir API aracılığıyla erişilebilir
- Uygulama sürümü olmadan güncellemeleri yayın: çevrilmiş bir metni veya içeriği değiştirin, anında yerelleştirilmiş uygulamanıza yansısın
- Çevirmenler ve editörlerle iş birliği yapın: içerik güncellemeleri için kod gerekmez
- Yerel ayar ve konum bağlamını destekleyin: içerik girişlerini bölgeler ve diller etrafında ince taneli kontrolle yapılandırın
- Mevcut iş akışınızla entegre olun: REST API ve SDK desteği, kullanıcının çözümlenen yerel ayarına göre çalışma zamanında içerik çekmeyi kolaylaştırır
Uygulamanızın konum ve servisler bağlamlarında — kullanıcı Berlin'den veya Sydney'den göz atsın — doğru içeriği sunması gerektiğinde, better-i18n size bu karmaşıklığı kod tabanınızı karmaşıklaştırmadan yönetme altyapısını sunar.
Android Yerelleştirmede Yaygın Hatalar
Konumun Yerel Ayara Eşit Olduğunu Varsaymak
VPN kullanan bir kullanıcının android konumu, gerçek yerel ayarından farklı bir ülke bildirebilir. Dili yalnızca GPS koordinatlarından hiçbir zaman türetmeyin.
Çok Erken Konum İsteme
İlk açılışta — kullanıcı değeri anlamadan önce — konum izni istemek, kalıcı bir red almanın en hızlı yoludur. Belirli özelliklere bağlı bağlamsal izin istekleri, android konum servislerine izin verme oranlarını büyük ölçüde artırır.
UX'te Konum Servisleri Durumunu Görmezden Gelmek
Kullanıcı konum servislerini sistem genelinde devre dışı bırakmışsa, uygulamanız zarif biçimde gerilemelidir. Şifreli bir hata mesajı yerine yardımcı bir mesaj gösterin.
Uygulama Başına Yerel Ayar Desteğini Atlamak
Android 13'ün uygulama başına yerel ayar API'si ile kullanıcılar giderek daha fazla uygulamaların kendi dil ayarına sahip olmasını bekler. Bunu görmezden gelmek, çok dilli kullanıcılar için kötü bir deneyime yol açar.
Yerelleştirilmiş İçerik Sunmadan Önce İzni Bloke Etmek
Yerelleştirilmiş UI metinleri, bölgeye özgü içerik ve çevrilmiş pazarlama kopyaları konum erişimi gerektirmez. Yalnızca GPS'e bağımlı özellikler android gps izniyle kısıtlanmalıdır. Yerel ayara göre yerelleştirilmiş içeriği hemen sunun ve gerektiğinde konumu ayrıca isteyin.
Hızlı Referans: Temel Android Konum ve Yerelleştirme API'leri
| Amaç | API / Ayar |
|---|---|
| Sistem yerel ayarını oku | ConfigurationCompat.getLocales() |
| Uygulama başına yerel ayarı oku (API 33+) | LocaleManager.getApplicationLocales() |
| Konum servisleri durumunu kontrol et | LocationServices.getSettingsClient() |
| GPS izni iste | ActivityResultContracts.RequestMultiplePermissions() |
| Konum ayarlarına derin bağlantı ver | Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) |
| Kesin ve yaklaşık erişimi kontrol et | ContextCompat.checkSelfPermission() |
| RTL desteğini etkinleştir | android:supportsRtl="true" |
Sonuç
Android uygulama yerelleştirme ve konum servisleri, çoğu geliştiricinin başlangıçta fark ettiğinden daha iç içe geçmiştir. Eksiksiz bir uygulama yerelleştirme stratejisi; kullanıcıların android konum ayarlarını nasıl yapılandırdığını, özelliklerinizin gerçekte hangi konum izinlerine ihtiyaç duyduğunu ve coğrafi konum ile açık yerel ayar tercihleri arasındaki çakışmaları nasıl çözeceğinizi hesaba katmak zorundadır.
Aklınızda tutmanız gereken temel prensipler:
- Yerel ayar tespitini konum erişiminden her zaman ayırın — farklı amaçlara hizmet ederler.
- Android gps iznini bağlamsal olarak, açık bir gerekçeyle isteyin ve reddi zarif biçimde yönetin.
- Cihaz konum ayarlarını yalnızca bölgesel varsayılanları belirlemek için kullanın, kullanıcının dil tercihini geçersiz kılmak için değil.
- Yeni bir derleme göndermeden yerelleştirilmiş bir uygulamayı güncelleyebilmek için çeviri içeriğinizi better-i18n gibi bir servise dışarıdan yönetin.
- Yerel ayara bağımlı ve konuma bağımlı her kod yolunu açıkça test edin.
Bunu doğru yapmak, her kullanıcıya yerli hissettiren bir uygulamayı kaba bir porttan ayıran şeydir. Altyapıya erken yatırım yapın; yerelleştirmeniz, kod tabanınız kadar temiz ölçeklenecektir.