Utiliser les localisations et codes de locale dans le SDK Android
Pourquoi c’est important
Les codes de langue entrent en jeu quand Adapty choisit la localisation pour un flow, et quand vous lisez un Remote Config pour un paywall personnalisé.
Les codes de langue sont complexes et peuvent varier d’une plateforme à l’autre. Adapty s’appuie donc sur un standard interne unique pour toutes les plateformes qu’il prend en charge. Comprendre ce standard vous permet de prédire quelle localisation un utilisateur recevra.
Standard des codes de langue chez Adapty
Pour les codes de langue, Adapty utilise une version légèrement modifiée du standard BCP 47 : chaque code est composé de sous-étiquettes en minuscules, séparées par des tirets. Quelques exemples : en (anglais), pt-br (portugais (Brésil)), zh (chinois simplifié), zh-hant (chinois traditionnel).
Correspondance des codes de langue
Lorsqu’Adapty recherche la localisation correspondant à la locale d’un utilisateur, voici ce qui se passe :
- La chaîne de locale est convertie en minuscules et tous les tirets bas (
_) sont remplacés par des tirets (-) - Adapty recherche la localisation dont le code de locale correspond exactement
- Si aucune correspondance n’est trouvée, Adapty extrait la sous-chaîne avant le premier tiret (
ptpourpt-br) et recherche la localisation correspondante - Si aucune correspondance n’est trouvée à nouveau, Adapty renvoie le contenu dans la langue par défaut du flow
Cette façon de procéder permet à 'pt_BR', pt-BR et pt-br de pointer vers la même localisation.
Implémentation des localisations
Dans le SDK v4, vous ne transmettez pas de code de langue lors de la récupération d’un flow — getFlow retourne le flow avec toutes ses localisations.
- Flows créés dans le builder : le SDK ne lit pas la locale de l’appareil, vous devez donc la résoudre dans votre application et la passer comme argument
localedeAdaptyUI.getFlowConfiguration. L’argument est optionnel — omettez-le et le flow s’affiche enen, ou dans sa locale par défaut si le flow n’a pas de localisationen. Si vous demandez une localisation que le flow ne possède pas, la vue revient à la valeur par défaut du flow sans erreur, et les chaînes manquantes dans la localisation choisie sont reprises de la locale par défaut.
Le rendu en en par défaut nécessite le SDK Android 4.0.1. Dans la version 4.0.0, l’omission de locale affiche la localisation par défaut du flow.
- Paywalls personnalisés (Remote Config) :
getFlowretourne toutes les localisations configurées dansflow.remoteConfigs. Chaque entrée contient un codelocaleet le contenu de la configuration (jsonString, ou ledataMapparsé). Sélectionnez l’entrée correspondant à l’utilisateur, avec votre propre logique de repli :
Adapty.getFlow("YOUR_PLACEMENT_ID") { result ->
when (result) {
is AdaptyResult.Success -> {
val flow = result.value
val config = flow.remoteConfigs.firstOrNull { it.locale == "en" }
?: flow.remoteConfigs.firstOrNull()
// read your values from config?.dataMap
}
is AdaptyResult.Error -> {
// handle the error
}
}
}Les règles de correspondance des codes de paramètres régionaux décrites ci-dessus expliquent comment Adapty normalise les codes locale stockés dans chaque Remote Config.
Pourquoi c’est important
Il existe plusieurs situations où les codes de langue entrent en jeu — par exemple, lorsque vous essayez de récupérer le bon paywall pour la localisation actuelle de votre application.
Les codes de langue étant complexes et pouvant varier d’une plateforme à l’autre, nous nous appuyons sur un standard interne pour toutes les plateformes que nous prenons en charge. Cependant, en raison de cette complexité, il est vraiment important que vous compreniez exactement ce que vous envoyez à notre serveur pour obtenir la bonne localisation, et ce qui se passe ensuite — afin que vous receviez toujours ce que vous attendez.
Standard de code de langue chez Adapty
Pour les codes de langue, Adapty utilise une version légèrement modifiée du standard BCP 47 : chaque code est composé de sous-tags en minuscules, séparés par des tirets. Quelques exemples : en (anglais), pt-br (portugais (Brésil)), zh (chinois simplifié), zh-hant (chinois traditionnel).
Correspondance des codes de langue
Quand Adapty reçoit un appel du SDK côté client avec un code de langue et commence à chercher la localisation correspondante d’un paywall, voici ce qui se passe :
- La chaîne de locale reçue est convertie en minuscules et tous les underscores (
_) sont remplacés par des tirets (-) - On cherche ensuite la localisation dont le code de locale correspond exactement
- Si aucune correspondance n’est trouvée, on extrait la sous-chaîne avant le premier tiret (
ptpourpt-br) et on cherche la localisation correspondante - Si aucune correspondance n’est trouvée non plus, on renvoie le contenu dans la locale par défaut du paywall
Ainsi, un appareil iOS qui a envoyé 'pt_BR', un appareil Android qui a envoyé pt-BR, et un autre appareil qui a envoyé pt-br obtiendront le même résultat.
Mise en œuvre des localisations : méthode recommandée
Si vous vous interrogez sur les localisations, vous travaillez probablement déjà avec des fichiers de chaînes localisées dans votre projet. Dans ce cas, nous vous recommandons d’ajouter une paire clé-valeur avec le code de locale Adapty correspondant dans chacun de vos fichiers de localisation. Ensuite, récupérez la valeur de cette clé lors de l’appel à notre SDK, comme ceci :
// 1. Modify your strings.xml files
/*
strings.xml - Spanish
*/
<string name="adapty_paywalls_locale">es</string>
/*
strings.xml - Portuguese (Brazil)
*/
<string name="adapty_paywalls_locale">pt-br</string>
// 2. Extract and use the locale code
val localeCode = context.getString(R.string.adapty_paywalls_locale)
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall methodVous contrôlez ainsi entièrement la localisation qui sera récupérée pour chaque utilisateur de votre application.
Implémenter les localisations : l’autre méthode
Vous pouvez obtenir des résultats similaires (mais pas identiques) sans définir explicitement les codes de langue pour chaque localisation. Il s’agirait d’extraire un code de langue depuis d’autres objets fournis par votre plateforme, comme ceci :
val locale = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
context.resources.configuration.locales[0]
else
context.resources.configuration.locale
val localeCode = locale.toLanguageTag()
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall methodNotez que nous ne recommandons pas cette approche car il est difficile de prévoir exactement ce que le serveur d’Adapty recevra.
Si vous décidez tout de même d’utiliser cette approche, assurez-vous d’avoir couvert tous les cas d’utilisation pertinents.