Usar localizaciones y códigos de idioma en el SDK de Flutter
Por qué esto es importante
Hay algunos casos en los que los códigos de idioma entran en juego — por ejemplo, cuando intentas obtener el paywall correcto para la localización actual de tu app.
Como los códigos de idioma son complejos y pueden variar de una plataforma a otra, nos apoyamos en un estándar interno para todas las plataformas que soportamos. Sin embargo, precisamente por esa complejidad, es muy importante que entiendas exactamente qué estás enviando a nuestro servidor para obtener la localización correcta y qué ocurre a continuación — así siempre recibirás lo que esperas.
Estándar de códigos de idioma en Adapty
Para los códigos de idioma, Adapty utiliza una versión ligeramente modificada del estándar BCP 47: cada código consiste en subtags en minúsculas separadas por guiones. Algunos ejemplos: en (inglés), pt-br (portugués (Brasil)), zh (chino simplificado), zh-hant (chino tradicional).
Coincidencia de códigos de configuración regional
Cuando Adapty recibe una llamada desde el SDK con el código de configuración regional y busca la localización correspondiente de un paywall, ocurre lo siguiente:
- La cadena de configuración regional entrante se convierte a minúsculas y todos los guiones bajos (
_) se reemplazan por guiones (-) - Se busca la localización cuyo código de configuración regional coincida exactamente
- Si no se encuentra ninguna coincidencia, se toma la subcadena anterior al primer guión (
ptparapt-br) y se busca la localización que coincida con ella - Si tampoco se encuentra ninguna coincidencia, se devuelve la localización predeterminada
enDe este modo, un dispositivo iOS que envió'pt_BR', un dispositivo Android que enviópt-BRy otro dispositivo que enviópt-brobtendrán el mismo resultado.
Implementación de localizaciones: forma recomendada
Si estás pensando en las localizaciones, lo más probable es que ya trabajes con archivos de cadenas localizadas en tu proyecto. En ese caso, te recomendamos añadir un par clave-valor con el código de idioma de Adapty correspondiente en cada uno de tus archivos para las localizaciones. Después, extrae el valor de esa clave al llamar a nuestro SDK, así:
// 1. Modify your app_en.arb, app_es.arb, app_pt_br.arb files
/*
app_en.arb
*/
"adapty_paywalls_locale": "en",
/*
app_es.arb
*/
"adapty_paywalls_locale": "es",
/*
app_pt_br.arb
*/
"adapty_paywalls_locale": "pt-br",
// 2. Extract and use the locale code
final locale = AppLocalizations.of(context)!.adapty_paywalls_locale;
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall method
De esta forma tienes control total sobre qué localización se recuperará para cada usuario de tu app.
Implementando las localizaciones: la otra forma
Puedes obtener resultados similares (aunque no idénticos) sin definir explícitamente los códigos de idioma para cada localización. Esto implicaría extraer un código de idioma de otros objetos que tu plataforma proporciona, así:
final locale = Localizations.localeOf(context).languageCode;
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall method
Ten en cuenta que no recomendamos este enfoque por las siguientes razones:
- En iOS, los idiomas preferidos y la configuración regional actual no son idénticos. Si quieres que la localización se seleccione correctamente, tendrás que apoyarte en la lógica de Apple, que funciona de forma nativa si usas el enfoque recomendado con archivos de cadenas localizadas, o bien recrearla tú mismo.
- Es difícil predecir exactamente qué recibirá el servidor de Adapty. Por ejemplo, en iOS es posible obtener una configuración regional como
ar_OM@numbers='latn'en el dispositivo y enviarla a nuestro servidor. Para esa llamada no obtendrás la localizaciónar-omque buscabas, sinoar, lo cual probablemente no es lo esperado. Aunque decidas usar este enfoque de todos modos, asegúrate de haber cubierto todos los casos de uso relevantes.