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 kod eşleştirme
Adapty, bir kullanıcının yerel ayarına uyan yerelleştirmeyi ararken şu adımlar gerçekleşir:
- Yerel ayar dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (
_) kısa çizgilerle (-) değiştirilir - Adapty, tam olarak eşleşen yerel ayar koduna sahip yerelleştirmeyi arar
- Eşleşme bulunamazsa, Adapty ilk kısa çizgiden önceki alt dizeyi alır (
pt-briçinpt) ve eşleşen yerelleştirmeyi arar - Yine eşleşme bulunamazsa, Adapty flow’un varsayılan yerel ayarı için içeriği döndürür
Bu sayede 'pt_BR', pt-BR ve pt-br hepsi aynı yerelleştirmeye çözümlenir.
Yerelleştirmeleri uygulamak
SDK v4’te, bir flow getirirken locale kodu geçirmezsiniz — getFlow, flow’u tüm yerelleştirmeleriyle birlikte döndürür ve Adapty, flow görünümü oluşturulurken bunlardan birini uygular.
- Builder’da oluşturulan flow’lar: SDK cihazın dilini okumaz, bu yüzden uygulamanızda dili kendiniz belirleyip
createFlowViewfonksiyonununlocaleseçeneği olarak geçirin. Bu seçenek isteğe bağlıdır — atlanırsa flowendilinde görüntülenir ya da flow’unenyerelleştirmesi yoksa varsayılan dilde görüntülenir. Flow’un sahip olmadığı bir yerelleştirme talep ettiğinizde, view hata vermeden flow’un varsayılanına döner; seçilen yerelleştirmede eksik olan metinler ise varsayılan yerelleştirmeden alınır.
import { createFlowView } from '@adapty/capacitor';
const view = await createFlowView(flow, { locale: 'es' });view.locale, view’ın hangi lokalizasyonla oluşturulduğunu bildirir. Hem locale seçeneği hem de view.locale, Capacitor SDK 4.0.1-beta.1 gerektirir; eski sürümlerde view.locale değeri undefined olur.
- Özel (remote config) paywaller:
getFlow, yapılandırılmış tüm lokalizasyonlarıflow.remoteConfigsiçinde döndürür. Her girdinin birlangkodu ve birdatanesnesi vardır. Kullanıcıya uyan girdiyi kendi yedek mantığınızla 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 için ilgili bir yerelleştirme aramaya başladığında şunlar olur:
- 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, paywall’ın varsayılan yerel ayarı için içerik döndürülür
Bu sayede 'pt_BR' gönderen bir iOS cihazı, pt-BR gönderen bir Android cihazı ve pt-br gö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.