Capacitor SDK'da yerelleştirme ve yerel ayar kodlarını kullanma
Bu neden önemlidir
Adapty bir flow için lokalizasyonu seçerken ve özel bir paywall için remote config okurken locale kodları devreye girer.
Locale kodları karmaşık olabilir ve platformdan platforma farklılık gösterebilir; bu nedenle Adapty, desteklediği her platformda tek bir iç standarda dayanır. Bu standardı anlamak, kullanıcının hangi lokalizasyonu alacağını tahmin etmenize yardımcı olur.
Adapty’de kullanılan yerel ayar kodu standardı
Adapty, yerel ayar kodları için hafifçe değiştirilmiş bir BCP 47 standardı kullanır: her kod, küçük harfli alt etiketlerden oluşur ve bunlar kısa çizgilerle ayrılır. Birkaç örnek: en (İngilizce), pt-br (Portekizce (Brezilya)), zh (Basitleştirilmiş Çince), zh-hant (Geleneksel Çince).
Yerel ayar kodu eşleştirme
Adapty, bir kullanıcının yerel ayarıyla eşleşen lokalizasyonu ararken şu adımlar izlenir:
- Yerel ayar dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (
_) kısa çizgiyle (-) değiştirilir - Adapty, tam olarak eşleşen yerel ayar koduna sahip lokalizasyonu arar
- Eşleşme bulunamazsa, Adapty ilk kısa çizgiden önceki alt dizeyi alır (
pt-briçinpt) ve eşleşen lokalizasyonu arar - Yine eşleşme bulunamazsa, Adapty varsayılan
enlokalizasyonunu döndürür
Bu sayede 'pt_BR', pt-BR ve pt-br ifadelerinin hepsi aynı lokalizasyona karşılık gelir.
Lokalizasyonları uygulama
SDK v4’te bir flow çekerken locale kodu geçmenize gerek yok.
- Flow Builder ve Paywall Builder paywallları: Adapty, lokalizasyonu cihaz dilinden ve builder’da yapılandırdığınız lokalizasyonlardan otomatik olarak çözer. Flow’u
createFlowViewile render edin — locale koduna gerek yok. - Özel (remote config) paywalllar:
getFlow, yapılandırılmış tüm lokalizasyonlarıflow.remoteConfigsiçinde döndürür. Her girdinin birlangkodu ve birdatanesnesi vardır. Kendi yedek mantığınızla kullanıcıya uyan girdiyi seçin:
const flow = await adapty.getFlow({ placementId: 'placement_id' });
const config = flow.remoteConfigs?.find((c) => c.lang === 'en') ?? flow.remoteConfigs?.[0];
// read your values from config?.dataYukarıdaki yerel ayar kodu eşleştirme kuralları, Adapty’nin her remote config üzerinde saklanan lang kodlarını nasıl normalleştirdiğini açıklar.
Bu neden önemli
Yerel ayar kodlarının devreye girdiği birkaç senaryo vardır — örneğin uygulamanızın mevcut yerelleştirmesi için doğru paywall’u getirmeye çalıştığınızda.
Yerel ayar kodları karmaşık bir yapıya sahiptir ve platformdan platforma farklılık gösterebilir; bu nedenle desteklediğimiz tüm platformlar için dahili bir standart kullanıyoruz. Ancak bu kodlar karmaşık olduğundan, sunucumuza ne gönderdiğinizi ve ardından ne olduğunu tam olarak anlamanız son derece önemlidir; böylece her zaman beklediğinizi alırsınız.
Adapty’de yerel ayar kodu standardı
Adapty, yerel ayar kodları için hafifçe değiştirilmiş bir BCP 47 standardı kullanır: her kod, kısa çizgilerle ayrılmış küçük harfli alt etiketlerden oluşur. Birkaç örnek: en (İngilizce), pt-br (Portekizce (Brezilya)), zh (Basitleştirilmiş Çince), zh-hant (Geleneksel Çince).
Yerel ayar kodu eşleştirme
Adapty, istemci tarafı SDK’dan yerel ayar koduyla birlikte bir çağrı aldığında ve paywall’ın ilgili yerelleştirmesini aramaya başladığında şu adımlar gerçekleşir:
- Gelen yerel ayar dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (
_) kısa çizgiyle (-) değiştirilir - Ardından tam olarak eşleşen yerel ayar koduna sahip yerelleştirme aranır
- Eşleşme bulunamazsa, ilk kısa çizgiden önceki alt dize alınır (
pt-briçinpt) ve eşleşen yerelleştirme aranır - Yine eşleşme bulunamazsa varsayılan
enyerelleştirmesi döndürülür Bu sayede'pt_BR'gönderen bir iOS cihazı,pt-BRgönderen bir Android cihazı vept-brgönderen başka bir cihaz aynı sonucu alır.
Yerelleştirmeleri Uygulama: Önerilen Yol
Yerelleştirmelerle ilgileniyorsanız, muhtemelen projenizde zaten yerelleştirilmiş string dosyalarıyla çalışıyorsunuzdur. Bu durumda, ilgili yerelleştirmeler için her dosyaya Adapty yerel ayar kodu içeren bir anahtar-değer çifti eklemenizi öneririz. Ardından SDK’mızı çağırırken bu anahtarın değerini şu şekilde alın:
// 1. Modify your localization files (e.g., using react-i18next)
/*
en.json
*/
{
"adapty_paywalls_locale": "en"
}
/*
es.json
*/
{
"adapty_paywalls_locale": "es"
}
/*
pt-BR.json
*/
{
"adapty_paywalls_locale": "pt-br"
}
// 2. Extract and use the locale code
const MyComponent = () => {
const { t } = useTranslation();
const fetchPaywall = async () => {
const locale = t('adapty_paywalls_locale');
// pass locale code to adapty.getPaywall or adapty.getPaywallForDefaultAudience method
const paywall = await adapty.getPaywallForDefaultAudience('placement_id', locale);
};
};Bu sayede uygulamanızın her kullanıcısı için hangi yerelleştirmenin alınacağını tam olarak kontrol edebilirsiniz.
Yerelleştirmeleri uygulama: alternatif yöntem
Her yerelleştirme için açıkça yerel ayar kodu tanımlamadan da benzer (ancak özdeş olmayan) sonuçlar elde edebilirsiniz. Bu yaklaşımda, platformunuzun sağladığı başka nesnelerden yerel ayar kodu çıkarmak gerekir; örneğin:
const getLocaleCode = () => {
if (Capacitor.getPlatform() === 'ios') {
return navigator.language || 'en';
} else {
return navigator.language || 'en';
}
};
const fetchPaywall = async () => {
const locale = getLocaleCode();
// pass locale code to adapty.getPaywall or adapty.getPaywallForDefaultAudience method
const paywall = await adapty.getPaywallForDefaultAudience('placement_id', locale);
};Bu yaklaşımı birkaç nedenden dolayı önermiyoruz:
- iOS’ta tercih edilen diller ile mevcut locale aynı değildir. Yerelleştirmenin doğru seçilmesini istiyorsanız, Apple’ın mantığına güvenmeniz gerekir; bu mantık, yerelleştirilmiş string dosyalarıyla önerilen yaklaşımı kullandığınızda kutudan çıktığı gibi çalışır. Alternatif olarak bu mantığı kendiniz de yeniden oluşturabilirsiniz.
- Adapty sunucusunun tam olarak ne alacağını tahmin etmek güçtür. Örneğin iOS’ta bir cihazda
ar_OM@numbers='latn'gibi bir locale elde edip bunu sunucumuza gönderebilirsiniz. Bu durumda aradığınızar-omyerelleştirmesini değil, büyük ihtimalle beklenmedik olanaryerelleştirmesini alırsınız. Yine de bu yaklaşımı kullanmaya karar verirseniz, ilgili tüm kullanım senaryolarını kapsadığınızdan emin olun.