Unity SDK'da yerelleştirmeleri ve yerel ayar kodlarını kullanma

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 almaya çalıştığınızda.

Yerel ayar kodları karmaşık olup platformdan platforma farklılık gösterebileceğinden, desteklediğimiz tüm platformlar için dahili bir standarda dayanıyoruz. Ancak bu kodlar karmaşık olduğundan, sunucumuza tam olarak ne gönderdiğinizi ve ardından ne olduğunu anlamanız son derece önemlidir; bu sayede her zaman beklediğiniz sonucu alırsınız.

Adapty’de yerel ayar kodu standardı

Adapty, yerel ayar kodları için biraz değiştirilmiş bir BCP 47 standardı kullanır: her kod, kısa çizgilerle ayrılmış küçük harf alt etiketlerden oluşur. Bazı örnekler: 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 şunlar gerçekleşir:

  1. Gelen yerel ayar dizesi küçük harfe dönüştürülür ve tüm alt çizgiler (_) kısa çizgiyle (-) değiştirilir
  2. Ardından tam olarak eşleşen yerel ayar koduna sahip yerelleştirme aranır
  3. Eşleşme bulunamazsa, ilk kısa çizgiden önceki alt dize alınır (pt-br için pt) ve eşleşen yerelleştirme aranır
  4. Yine eşleşme bulunamazsa, varsayılan en yerelleştirmesi 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ştirmelerle ilgileniyorsanız, büyük ihtimalle projenizde zaten yerelleştirilmiş string dosyalarıyla çalışıyorsunuzdur. Bu durumda, her dosyanıza ilgili yerelleştirme için amaçlanan Adapty locale kodu ile birlikte bir anahtar-değer çifti eklemenizi öneririz. Ardından SDK’mızı çağırırken bu anahtarın değerini şu şekilde çıkarın:

// 1. Yerelleştirme dosyalarınızı düzenleyin (örneğin, Unity'nin Localization paketini kullanarak)

/*
en.json
*/
{
  "adapty_paywalls_locale": "en"
}

/*
es.json
*/
{
  "adapty_paywalls_locale": "es"
}

/*
pt-BR.json
*/
{
  "adapty_paywalls_locale": "pt-br"
}

// 2. Yerel ayar kodunu çıkarın ve kullanın
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using AdaptySDK;

public class PaywallManager : MonoBehaviour
{
    public async void FetchPaywall()
    {
        // Unity'nin Localization sisteminden mevcut yerel ayarı alın
        var locale = LocalizationSettings.SelectedLocale;
        var localeCode = GetAdaptyLocaleCode(locale);
        
        // Yerel ayar kodunu Adapty.GetPaywall veya Adapty.GetPaywallForDefaultAudience metoduna iletin
        Adapty.GetPaywall("placement_id", localeCode, (paywall, error) => {
            if (error != null) {
                // hatayı işle
                return;
            }
            // Paywall'ı kullan
        });
    }
    
    private string GetAdaptyLocaleCode(Locale locale)
    {
        // Unity yerel ayarını Adapty formatına dönüştür
        var localeIdentifier = locale.Identifier.Code;
        return localeIdentifier.ToLower().Replace('_', '-');
    }
}

Bu sayede, uygulamanızın her kullanıcısı için hangi yerelleştirmenin getirileceği üzerinde tam kontrole sahip olursunuz.

Yerelleştirmeleri uygulama: alternatif yöntem

Her yerelleştirme için açıkça bir dil kodu tanımlamak zorunda kalmadan benzer (ama aynı değil) sonuçlar elde edebilirsiniz. Bu yaklaşımda, dil kodunu platformunuzun sunduğu başka nesnelerden çıkarabilirsiniz; örneğin:

using UnityEngine;
using System.Globalization;
using AdaptySDK;

public class PaywallManager : MonoBehaviour
{
    public void FetchPaywall()
    {
        var localeCode = GetSystemLocaleCode();
        
        // Locale kodunu Adapty.GetPaywall veya Adapty.GetPaywallForDefaultAudience metoduna geçirin
        Adapty.GetPaywall("placement_id", localeCode, (paywall, error) => {
            if (error != null) {
                // handle the error
                return;
            }
            // Use the paywall
        });
    }
    
    private string GetSystemLocaleCode()
    {
        // Sistemin mevcut kültür bilgisini al
        var culture = CultureInfo.CurrentCulture;
        var languageCode = culture.TwoLetterISOLanguageName;
        var regionCode = culture.Name.Contains('-') ? culture.Name.Split('-')[1] : null;
        
        if (!string.IsNullOrEmpty(regionCode))
        {
            return $"{languageCode}-{regionCode.ToLower()}";
        }
        
        return languageCode;
    }
}

Bu yaklaşımı birkaç nedenden dolayı önermediğimizi belirtmek gerekir:

  1. iOS’ta tercih edilen diller ile mevcut yerel ayar (locale) aynı şey değildir. Yerelleştirmenin doğru seçilmesini istiyorsanız, ya yerelleştirilmiş string dosyalarıyla önerilen yaklaşımı kullandığınızda kutudan çıktığı gibi çalışan Apple’ın mantığına güvenmeniz ya da bunu kendiniz yeniden oluşturmanız gerekir.
  2. Adapty’nin sunucusunun tam olarak ne alacağını tahmin etmek güçtür. Örneğin iOS’ta, bir cihazda ar_OM@numbers='latn' gibi bir yerel ayar elde edip sunucumuza gönderebilirsiniz. Bu durumda aradığınız ar-om yerelleştirmesini değil, büyük ihtimalle beklemediğiniz ar yerelleştirmesini alırsınız. Bu yaklaşımı kullanmaya karar verirseniz, ilgili tüm kullanım senaryolarını kapsadığınızdan emin olun.