Paywall'ları Yerelleştirme | React Native SDK | Adapty Dokümanları

React Native SDK'da yerelleştirmeleri ve locale kodlarını kullanma

Bu neden önemli

Locale kodları, Adapty bir flow için yerelleştirmeyi seçtiğinde ve özel bir paywall için remote config okuduğunuzda devreye girer.

Locale kodları karmaşıktır ve platformdan platforma değişebilir, bu yüzden Adapty desteklediği her platformda tek bir dahili standart kullanır. Bu standardı anlamak, bir kullanıcının hangi yerelleştirmeyi aldığını tahmin etmenize yardımcı olur.

Adapty’de locale kodu standardı

Locale kodları için Adapty, hafifçe değiştirilmiş bir BCP 47 standardı kullanır: her kod, tirelerle ayrılmış küçük harfli alt etiketlerden oluşur. Bazı örnekler: en (İngilizce), pt-br (Portekizce (Brezilya)), zh (Basitleştirilmiş Çince), zh-hant (Geleneksel Çince).

Locale kodu eşleştirme

Adapty bir kullanıcının locale’iyle eşleşen yerelleştirmeyi ararken şunlar olur:

  1. Locale dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (_) tirelerle (-) değiştirilir
  2. Adapty tam olarak eşleşen locale koduna sahip yerelleştirmeyi arar
  3. Eşleşme bulunmazsa, Adapty ilk tireden önceki alt dizeyi alır (pt-br için pt) ve eşleşen yerelleştirmeyi arar
  4. Yine eşleşme bulunmazsa, Adapty varsayılan en yerelleştirmesini döndürür

Bu şekilde 'pt_BR', pt-BR ve pt-br hepsi aynı yerelleştirmeye çözümlenir.

Yerelleştirmeleri uygulama

SDK v4’te, bir flow getirirken locale kodu geçmezsiniz.

  • Flow Builder ve Paywall Builder paywall’ları: Adapty yerelleştirmeyi cihazdan ve builder’da yapılandırdığınız yerelleştirmelerden otomatik olarak çözümler. Flow’u createFlowView ile render edin — locale koduna gerek yoktur.
  • Özel (remote config) paywall’lar: getFlow, yapılandırılmış her yerelleştirmeyi flow.remoteConfigs içinde döndürür. Her girdide bir lang kodu ve bir data nesnesi bulunur. Kullanıcıya uyan girdiyi, kendi yedeğinizle birlikte seçin:

const flow = await adapty.getFlow('placement_id');
const config = flow.remoteConfigs?.find((c) => c.lang === 'en') ?? flow.remoteConfigs?.[0];
// read your values from config?.data

Yukarıdaki locale kodu eşleştirme kuralları, Adapty’nin her remote config’te saklanan lang kodlarını nasıl normalleştirdiğini açıklar.

Bu neden önemli

Locale kodlarının devreye girdiği birkaç senaryo vardır — örneğin, uygulamanızın mevcut yerelleştirmesi için doğru paywall’ı getirmeye çalışırken.

Locale kodları karmaşık olduğundan ve platformdan platforma değişebildiğinden, desteklediğimiz tüm platformlar için dahili bir standart kullanırız. Ancak bu kodlar karmaşık olduğu için, doğru yerelleştirmeyi almak üzere sunucumuza tam olarak ne gönderdiğinizi ve sonrasında ne olduğunu anlamanız gerçekten önemlidir — böylece her zaman beklediğinizi alırsınız.

Adapty’de locale kodu standardı

Locale kodları için Adapty, hafifçe değiştirilmiş bir BCP 47 standardı kullanır: her kod, tirelerle ayrılmış küçük harfli alt etiketlerden oluşur. Bazı örnekler: en (İngilizce), pt-br (Portekizce (Brezilya)), zh (Basitleştirilmiş Çince), zh-hant (Geleneksel Çince).

Locale kodu eşleştirme

Adapty, istemci tarafı SDK’dan locale kodunu içeren bir çağrı aldığında ve bir paywall’ın ilgili yerelleştirmesini aramaya başladığında şunlar olur:

  1. Gelen locale dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (_) tirelerle (-) değiştirilir
  2. Ardından tam olarak eşleşen locale koduna sahip yerelleştirmeyi ararız
  3. Eşleşme bulunmazsa, ilk tireden önceki alt dizeyi alırız (pt-br için pt) ve eşleşen yerelleştirmeyi ararız
  4. Yine eşleşme bulunmazsa, varsayılan en yerelleştirmesini döndürürüz

Bu şekilde '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ştirmeler hakkında düşünüyorsanız, muhtemelen projenizde yerelleştirilmiş dize dosyalarıyla zaten uğraşıyorsunuzdur. Durum buysa, ilgili yerelleştirmeler için dosyalarınızın her birine, amaçlanan Adapty locale kodunu içeren bir anahtar-değer yerleştirmenizi öneririz. Ardından SDK’mızı çağırırken bu anahtarın değerini şu şekilde çıkarı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 şekilde, uygulamanızın her kullanıcısı için hangi yerelleştirmenin getirileceği konusunda tam kontrole sahip olduğunuzdan emin olabilirsiniz.

Yerelleştirmeleri uygulama: diğer yöntem

Her yerelleştirme için locale kodlarını açıkça tanımlamadan benzer (ama aynı olmayan) sonuçlar elde edebilirsiniz. Bu, cihazdan bir locale kodu çıkarmak anlamına gelir; örneğin react-native-localize aracılığıyla:


const fetchPaywall = async () => {
  // getLocales() returns the user's preferred locales in BCP-47 format (e.g., 'en-US', 'pt-BR')
  const locale = RNLocalize.getLocales()[0].languageTag;
  // pass locale code to adapty.getPaywall or adapty.getPaywallForDefaultAudience method
  const paywall = await adapty.getPaywallForDefaultAudience('placement_id', locale);
};

Bu yaklaşımı birkaç nedenden dolayı önermediğimizi unutmayın:

  1. iOS’ta tercih edilen diller ve mevcut bölgesel locale aynı değildir. Yerelleştirmenin doğru seçilmesini istiyorsanız, ya Apple’ın çözümleme mantığına güvenmeniz gerekir — ki bu, yerelleştirilmiş dize dosyalarıyla önerilen yaklaşımı kullandığınızda hazır olarak çalışır — ya da onu kendiniz yeniden oluşturmanız gerekir.
  2. Cihaz locale’i, Adapty’de yapılandırdığınız hiçbir yerelleştirmeyle eşleşmeyebilir. Bu durumda SDK, ilk alt etiket eşleşmesine veya nihayetinde en’e geri döner — ki bu, o kullanıcı için varsayılan yapmak isteyeceğiniz dil olmayabilir.

Yine de bu yaklaşımı kullanmaya karar verirseniz — ilgili tüm kullanım senaryolarını kapsadığınızdan emin olun.