Actualiza traducciones para aplicaciones iOS, Android, React Native y Flutter con un solo clic sin lanzar una nueva versión a la App Store o Google Play. Las actualizaciones de las etiquetas de texto se envían al instante a las aplicaciones móviles.
Over-the-Air (OTA) también se integra con las plataformas i18next y Rails, lo que permite a los usuarios actualizar y administrar el contenido localizado en las aplicaciones web sin requerir una redistribución.
Se debe crear una nueva versión con orden de aplicar la configuración actualizada. Todo el contenido incluido en una publicación debe estar disponible en Phrase Strings, que transmite las traducciones directamente a la aplicación. Si el contenido no está presente, no se entregarán las traducciones.
Cuando un usuario inicia una aplicación que implementa nuestro SDK de iOS, Android, React Native o Flutter por primera vez en su dispositivo, generamos un identificador de dispositivo único y aleatorio. Este identificador sigue a los usuarios activos durante un período de tiempo determinado. No se utiliza para realizar ningún otro tipo de seguimiento ni contiene información sobre el usuario o el dispositivo.
No, el único límite de OTA es la cantidad de usuarios mensuales activos (MAU), dependiendo del plan de precios que hayas elegido.
MAU es el número de dispositivos únicos desde los que se solicitan traducciones. A cada dispositivo se le asigna un ID aleatorio y la MAU se calcula a partir del número de ID diferentes asignados en los últimos 30 días. Cada interacción con los servidores phrase se considera una solicitud.
Datos
El SDK se comunica con el servicio OTA con orden de comprobar actualizaciones e incluye los siguientes detalles con cada solicitud:
-
Identificador de dispositivo (p. ej., "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Único para esta aplicación y, por lo tanto, no permite realizar un seguimiento de un dispositivo específico.)
-
Versión de la aplicación (p. ej. "1.2.0")
-
Última actualizar del archivo de traducción (p. ej., "1542187679")
-
Versión SDK (p. ej. "1.0.0")
-
Localización (p. ej., "de-DE")
-
Formato de archivo (p. ej., "Strings")
-
Cliente (p. ej., "ios")
-
ID de distribución (ID de la distribución)
-
Secreto de medio ambiente (para distinguir entre desarrollo y producción)
Las plataformas meta se definen dentro de la distribución:
-
iOS
-
Android
-
Aleteo
-
i18next
-
Rails
Son posibles múltiples distribuciones, pero lo ideal es que haya una distribución por proyecto. Si se utiliza una distribución para iOS y Android, los marcadores de posición para los dos formatos se convierten automáticamente.
Respaldos
Si se establecen idiomas alternativos en la configuración de idiomas del proyecto al que está conectada la distribución, se desplegarán Strings del idioma seleccionado si existe el idioma solicitado, pero la clave no está traducida.
Si se utiliza un idioma específico del país (por ejemplo, en GB), pero no forma parte del lanzamiento, el sistema puede recurrir a una versión estándar (por ejemplo, en) de ese idioma si existe en el proyecto. Si no se encuentra el idioma solicitado, se puede servir en su lugar la localización predeterminada del proyecto.
Crear una distribución
Para crear una distribución, sigue estos pasos:
-
En el Box Configurar o en el número de configuraciones, si ya existen.
de la página , haz clic enSe abre la página
y muestra las configuraciones existentes. -
Haz clic en Nueva distribución. Se abre la ventana .
-
En la pestaña General, proporcione un , con qué está asociada la distribución, requeridos y requeridas.
-
Para distribuciones Android, haz clic en la pestaña Android para seleccionar la opción formato que incluye cualquier traducción, incluidas las etiquetas HTML en CDATA, si es necesario.
-
Después de seleccionar el proyecto que se asociará a la distribución, se dispone de la pestaña Programación. Si es necesario, usa esta pestaña para configuración publicaciones programadas OTA en la distribución.
-
-
En la pestaña Idiomas alternativos, selecciona configuraciones alternativas específicas de la distribución según sea necesario. Las opciones alternativas se priorizan como se muestra en la lista.
-
Opcionalmente, haz clic en la pestaña Traducciones para seleccionar la opción de usar la última versión revisada de las traducciones. Habilite esta opción solo cuando trabaje con el flujo de trabajo avanzado.
-
Haz clic en Guardar.
Los detalles de distribución se muestran con las ID requeridas por los SDK. Los detalles se pueden mostrar de nuevo haciendo clic en la distribución desde la página
.
Para actualizar traducciones, crea un nuevo lanzamiento dentro de la distribución. El estado actual del proyecto se exporta y se pone a disposición de los clientes conectados.
Para crear un lanzamiento, sigue estos pasos:
-
Desde la página Por el aire, haz clic en Agregar publicación junto a la distribución requerida.
Se abre la ventana
. -
Proporcionar una
, , , y obligatorias.Si es necesario, introduce tags para incluir solo claves con tags específicos en la versión.
-
Haz clic en Guardar.
La versión se añade a la lista en la parte inferior de la página de detalles de distribución.
Para configuración horarios recurrentes para el lanzamiento de la distribución, sigue estos pasos:
-
Desde la página
, haz clic en el icono dede rueda dentada junto a la distribución requerida.
Se muestra la ventana
. -
Selecciona la pestaña Programar lanzamiento y haz clic en .
Se muestran las opciones de programación de lanzamientos.
Nota
También hay opciones de programación disponibles al crear una nueva distribución.
-
En el menú desplegable
vez, elija la frecuencia de lanzamiento seleccionando una de las opciones disponibles:-
-
Selecciona los días laborables deseados para los lanzamientos programados.
-
-
Proporciona una hora y una
relevantes. -
Si es necesario, selecciona
, e para las versiones programadas.-
El campo
se muestra solo si se ha habilitado la ramificación en el proyecto. Al seleccionar una rama se actualiza la lista de localizaciones e idiomas.
-
-
Opcionalmente, especifique las versiones de la aplicación en los campos
y .Déjalo en blanco para aplicar el horario de lanzamiento a todas las versiones de la aplicación.
-
Haz clic en Guardar.
La distribución se actualiza con información de programación de lanzamientos.
Deshabilitar la programación detiene el lanzamiento automático de la distribución, pero se guardan las configuraciones configuradas.
La integración del SDK móvil o biblioteca web adecuados permite actualizar las traducciones con un solo clic, pero también proporciona métricas para medir el uso. Los informes del SDK móvil y de la biblioteca web proporcionan información valiosa sobre los usuarios activos y los idiomas de sus aplicaciones. Se puede acceder a este conjunto de informes para cada distribución y actualizar los datos de los informes dos veces al día.
Se proporcionan informes sobre el número de usuarios activos, las solicitudes generales, las solicitudes por idioma, las solicitudes por plataforma y los idiomas de dispositivo no proporcionados.
Se puede acceder a los informes de cada distribución mediante el icono de de la página .
Con el SDK, la aplicación comprueba regularmente si hay traducciones actualizadas y las descarga en segundo plano.
Revisa regularmente las últimas versiones del SDK de Android, especialmente teniendo en cuenta las actualizaciones.
Si las traducciones no se están actualizando:
-
Asegúrate de que el ID de distribución y el secreto de entorno sean correctos.
-
Asegúrate de que se ha creado un lanzamiento para la versión actual de la aplicación.
-
Recarga el
ViewController
para que los cambios aparezcan inmediatamente.
Si se está utilizando la versión incorrecta de una traducción, asegúrate de que haya un lanzamiento con las traducciones más recientes, que la versión actual de la aplicación esté disponible y que se haya establecido el versionName
para la aplicación y que estás utilizando el formato <Grave. Menor.point>.
Requisitos
-
El SDK requiere al menos la versión 1.2.0 de Appcompat. Si utilizas una versión más antigua de appcompat, considera utilizar la versión 2.1.3 del SDK
-
La biblioteca depende de AndroidX para admitir elementos de IU compatibles con versiones anteriores, como la barra de herramientas.
Incluir el SDK
Agregar un nuevo repositorio al root build.gradle
:
allprojects { repositories { ... maven { url "https://maven.download.phrase.com" } } }
Agregar la biblioteca como dependencia:
dependencies { implementation "com.phrase.android:ota-sdk:3.5.0" ... }
Jetpack Soporte técnico para Compose
Para habilitar la compatibilidad de Jetpack Compose con traducciones OTA, sigue estos pasos:
-
Agrega la biblioteca
implementation "com.phrase.android:ota-sdk-compose:3.5.0"
albuild.gradle
raíz. -
Envuelve el código Jetpack Compose en
Phrase { ... }
.
Configuración
Inicialice el SDK en la clase de aplicación y agregue el ID de distribución y el secreto de entorno. Las clases que heredan de Application deben sobrescribir adtachBaseContext
para habilitar traducciones fuera del contexto de actividad:
public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); Phrase.setup(this, "DISTRIBUTION_ID", "ENVIRONMENT_TOKEN"); Phrase.updateTranslations(); } @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(Phrase.wrapApplicationContext(newBase)); } }
Inyecto el SDK en cada actividad, por ejemplo creando una actividad base de la que hereden todas las demás actividades:
public class BaseActivity extends AppCompatActivity { @NonNull @Override public AppCompatDelegate getDelegate() { return Phrase.getDelegate(this, super.getDelegate()); } }
Las traducciones se pueden utilizar como de costumbre en los diseños:
<TextView android:text="@string/translation_key" />
Y dentro del código:
TextView text = (TextView) findViewById(R.id.text_id); text.setText(R.string.translation_key);
Algunas bibliotecas no admiten desenvolver automáticamente el contexto y esperan una clase específica. En este caso, la envoltura de contexto en los componentes Jetpack Compose se puede deshabilitar con:
Phrase(contextWrapping = false) { Text( text = phraseString(R.string.test) ) }
Configuraciones para niveles de registro:
-
Java
PhraseLog.setLogLevel(Severity.Debug);
-
Kotlin
PhraseLog.logLevel = Severity.Verbose
-
Otras opciones de registro admitidas
-
None
-
Error
-
Warning
-
Info
-
Debug
-
Verbose
-
Cambiar idioma
Si no se utiliza el idioma del sistema, se puede establecer un idioma diferente en el método setLocaleCode
. El código de idioma (localización) debe estar presente en un comunicado.
Phrase.setLocaleCode("fr"); Phrase.updateTranslations();
Versión personalizada app
El SDK usa la versión de la aplicación de forma predeterminada para devolver una versión que coincide con las restricciones de versión para las versiones mínima y máxima. La versión de la aplicación debe usar versión semántica, de lo contrario no se devolverá ninguna actualización. En caso de que la aplicación no use versionado semántico, es posible anular manualmente la versión de la aplicación usada.
Ejemplo:
Phrase.setAppVersion("3.2.4");
La versión debe establecerse antes de llamar actualizationTranslations( )
.
Establecer tiempo de espera
El tiempo de espera predeterminado para las descargas de traducción está establecido en 10 s.
El valor predeterminado se puede cambiar con:
Phrase.setTimeout(10000); // Timeout in milliseconds
Actualizar rellamada
Si se requiere la gestión de actualizaciones de traducción exitosas, adjunta un controlador de rellamada:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { } @Override public void onFailure() { } });
Las actualizaciones de traducción también se pueden activar manualmente. Las traducciones recién obtenidas se muestran en el Siguiente lanzamiento de la aplicación.
Para que las últimas traducciones estén disponibles de inmediato, usa el método Phrase.applyPendingUpdates()
. Esto se puede combinar con la escucha de actualizaciones de traducción:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { if(translationsChanged) { Phrase.applyPendingUpdates() // Custom logic to refresh UI } } @Override public void onFailure() { } });
La IU no muestra las traducciones automáticamente y debe volver a crearse.
Configurar centro de datos estadounidense
También se admite phrase US centro de datos. El centro de datos estadounidense se puede configurar llamando a:
Phrase.setHost("https://ota.us.phrase.com/")
Fallback
En caso de que no sea posible llegar a phrase debido a que falta una conexión de red del cliente o a una interrupción del servicio, el SDK utiliza las traducciones incluidas en el archivo de recursos. Se recomienda actualizar periódicamente las traducciones incluidas en la aplicación. El SDK también almacena en caché las traducciones locales en el dispositivo. Si dicha caché existe, se utiliza hasta la Siguiente actualización.
El SDK utiliza la versión más reciente para las traducciones. En caso de que se establezca el versionName
para la aplicación, se utilizará la versión más reciente que cumpla con las restricciones de versión.
Agregar un nuevo idioma
Creando el nuevo idioma en phrase y crear una nueva versión. El SDK obtiene el idioma cuando este es el idioma del dispositivo de un usuario. Se recomienda agregar regularmente un nuevo strings.xml
para los archivos de idiomas nuevos al lanzar una nueva versión de la aplicación o los usuarios solo verán las traducciones alternativas determinadas por Android al principio de la aplicación.
Auditoría
El SDK es fuente cerrado y no se puede ver ni modificar. Si es un requisito de la organización, se pueden proporcionar auditorías. Contáctanos para más detalles si es necesario.
Soporte para la vista personalizada
Las vistas personalizadas se pueden traducir utilizando atributos de estilo. Dado que TypedArray
no permite sobrescribir los recursos, se requieren ligeros cambios en la vista personalizada:
-
Ejemplo de Kotlin
Antes:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getText(R.styleable.CustomView_android_text) }
Después de:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getTextWithPhrase(R.styleable.CustomView_android_text) }
-
Ejemplo Java
Antes:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(ta.getText(R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
Después de:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
Aplicación de ejemplo
Con el SDK, la aplicación comprueba regularmente si hay traducciones actualizadas y las descarga en segundo plano.
Requisitos
Esta biblioteca depende de la versión 0.18.0 de la biblioteca intl de Flutter.Sigue su guía para agregar soporte de localizaciones a la aplicación.
Instalación
Agregar phrase a pubspec.yaml:
dependencies: phrase: ^2.5.1 ... intl: ^0.18.0 flutter_localizations: sdk: flutter ... flutter: generate: true ...
Como en la biblioteca intl
, la generación de código se usa para procesar archivos ARB. Ejecuta este comando para actualizar:
flutter pub run phrase
Usando build_runner:
flutter pub run build_runner watch
Uso
Abre phrase en el archivo main.dart
:
import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/phrase_localizations.dart'; import 'package:phrase/phrase.dart'; void main() { Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]"); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: «Demostración completa», //.. localizacionesDelegados: PhraseLocalizations.localizationsDelegates, supportedLocales: PhraseLocalizations.supportedLocales, ); } }
Acceder mensajes con:
Text(AppLocalizations.of(context)!.helloWorld);
Personalización
Actualizar comportamiento
Las traducciones OTA se actualizan cada vez que se lanza la aplicación. Para deshabilitar esto:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", checkForUpdates: false);
Para actualizar manualmente:
Phrase.updateTranslations(context).then((_) => print("Done!"));
Versión personalizada app
El SDK usa la versión de la aplicación de forma predeterminada para devolver una versión que coincide con las restricciones de versión para las versiones mínima y máxima. La versión de la aplicación debe usar versión semántica, de lo contrario no se devolverá ninguna actualización. En caso de que la aplicación no use versionado semántico, se puede anular manualmente la versión de la aplicación: es posible anular manualmente la versión de la aplicación:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", customAppVersion: "1.2.3");
Configurar centro de datos estadounidense
También se admite phrase US centro de datos. El centro de datos estadounidense se puede seleccionar pasando el parámetro API hostname pertinente en la configuración del SDK:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", host: PhraseHost.us);
Aplicación de ejemplo
Con el SDK, la aplicación comprueba regularmente si hay traducciones actualizadas y las descarga en segundo plano.
También se admite Mac Catalyst.
El SDK se puede instalar manualmente o a través de Swift Package Manager, Cartago o Cocoa Pods.
Si las traducciones no se están actualizando:
-
Asegúrate de que el ID de distribución y el secreto de entorno sean correctos.
-
Asegúrate de que se ha creado un lanzamiento para la versión actual de la aplicación.
-
Recarga el
ViewController
para que los cambios aparezcan inmediatamente.
Si se utiliza la versión incorrecta de una traducción, asegúrate de que haya un lanzamiento con las traducciones más recientes y de que la versión actual de la aplicación esté disponible.
Gestor de paquetes rápido
Agregar la URL del repositorio público (https:/ / GitHub.com/ Phrase/ios-sdk/). Xcode se encarga automáticamente del resto de la instalación.
Cartago
Agrega la siguiente línea a tu archivo de carrito:
binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0
Ejecuta cartago actualizar y agrega PhraseApp.framework
a tu proyecto como se describe en la documentación de Cartago.
Vainas de cacao
Agrega la siguiente línea a tu archivo pod:
pod 'PhraseSDK'
Ejecuta pod install. Si es nuevo en CocoaPods, consulte su documentación.
Instalación manual
Sigue estos pasos:
-
Descarga la última versión.
-
Agrega
PhraseSDK.framework
en Xcode como binario vinculado a la meta. -
Es necesario ejecutar un script para eliminar los binarios adicionales antes de cargar la aplicación, ya que la Apple Store rechaza aplicaciones, incluidos los binarios del simulador.
Vaya a
y agregue una sección haciendo clic en el símbolo +. Pegar en este script:FRAMEWORK="PhraseSDK" FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK" EXTRACTED_ARCHS=() for ARCH in $ARCHS do lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
Configuración
-
Importar PhraseSDK:
import PhraseSDK
-
Abre el SDK con el siguiente código:
Phrase.shared.setup( distributionID: <Distribution ID>, environmentSecret: <Environment Secret> )
-
Para actualizar archivos de localización llame
Phrase.shared.updateTranslation()
.Este método generará una excepción si el SDK no se configura correctamente.
Para configurar OTA para usar el centro de datos estadounidense, configura el host antes de llamar a
PhraseApp.shared.updateTranslation()
conPhrase.shared.configuration.apiHost = .us
.
Se recomienda llamar a ambas funciones dentro del AppDelegate
en el método applicationDidFinishLaunchingWithOptions
.
Objetivo C
Integra el SDK en la aplicación Objective-C:
@import PhraseSDK; @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[Phrase shared] setDebugMode:true]; // Optional [[Phrase shared] setupWithDistributionID:@"Your Distribution ID" environmentSecret:@"Your Environment Secret"]; // OR: // // [[Phrase shared] setupWithDistributionID:@"Your Distribution ID" // environmentSecret:@"Your Environment Secret" // timeout:10]; // Update translations using callback block: [[Phrase shared] updateTranslationsWithCompletionHandler:^(BOOL updated, NSError* error){ NSLog(@"Updated: %@", updated ? @"true" : @"false"); if (error) { NSLog(@"Domain: %@ Code: %ld Message: %@", error.domain, (long)error.code, error.localizedDescription); } else { NSLog(@"No error"); } // Translate via bundle proxy: NSString *translation = NSLocalizedString(@"layouts.application.about", @""); NSLog(@"NSLocalizedString via bundle proxy: %@", translation); // OR: // // Translate using fallback method: NSString *otherTranslation = [[Phrase shared] localizedStringForKey:@"layouts.application.about" value:NULL table:NULL]; NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation); }]; // OR: // // [[Phrase shared] updateTranslationsWithCompletionHandler:NULL]; // ignore result and errors (not recommended) // [...] Your other code return YES; }
Deshabilitar remolino
Para deshabilitar swizzling, cambia PhraseSDKMainBundleProxyDisabled
a SÍ en el archivo Info.plist
.
Cuando se desactiva el swizzling, ya no se muestran las traducciones actualizadas. La traducción se seguirá sincronizando si se llama a updateTranslation
y se puede acceder a ella con el método Phrase.localizedString()
.
Gestión de versiones de aplicaciones
Para determinar qué versión debe devolverse, el SDK requiere una versión semántica de la aplicación para que las traducciones se actualicen.
El SDK intenta obtener una versión semántica de la siguiente manera:
-
CFBundleShortVersionString
se usa si es semántico. -
Si no, se usa
CFBundleVersion
si es semántico. -
Si ambos no son semánticos, se utiliza una combinación de (
CFBundleShortVersionString.CFBundleVersion
).
Si falta CFBundleShortVersionString
o no se puede crear con una versión semántica junto con CFBundleVersion
, el SDK lanza el mensaje PhraseSetupError.appVersionNotSemantic
.
Deshabilitar traducción para varias tablas
Para evitar que OTA traduzca ninguna tabla del paquete iOS principal que no sea la tabla Localizable
predeterminada, establezca la siguiente opción:
Phrase.shared.configuration.ignoreOtherTables = true
Devoluciones
Asigna un gestor de rellamadas para gestionar las actualizaciones de traducción correctas:
Phrase.shared.updateTranslation { result in switch result { case .success(let updated): case .failure: } }
Modo debug
Si se requiere más información, habilite el modo debug para obtener un registro adicional de PhraseSDK.framework
en la consola:
Phrase.shared.configuration.debugMode = true
Establecer tiempo de espera para solicitudes
Establece un tiempo de espera para las solicitudes contra phrase llamando a:
Phrase.shared.configuration.timeout = TimeInterval(20)
El tiempo de espera predeterminado es de 10 segundos y las conexiones que tarden más de 10 segundos se cerrarán.
Proporcionar anulación de idioma manual
Si no se utiliza el idioma del sistema como localización, se puede establecer una localización diferente en la llamada de entrada. El código de localización debe estar presente en un comunicado de phrase:
Phrase.shared.configuration.localeOverride = "en-US"
Fallback
En caso de que no se puedan obtener nuevas traducciones de phrase mediante el SDK, se utilizan los últimos archivos de traducción que recibió la instalación. Si la aplicación nunca recibió nuevos archivos de phrase, usa los archivos de traducción compilados de la aplicación. Esto evita errores en caso de dificultades técnicas o errores de red. Se recomienda mantener actualizados los archivos de traducción que se compilan en la aplicación con cada versión.
Auditoría
El SDK es fuente cerrado y no se puede ver ni modificar. Si es un requisito de la organización, se pueden proporcionar auditorías. Contáctanos para más detalles si es necesario.
Con el SDK, la aplicación comprueba regularmente si hay traducciones actualizadas y las descarga en segundo plano.
La biblioteca para traducciones OTA solo funciona con la biblioteca react i18next.
Para instalar el SDK nativo React, sigue estos pasos:
-
Ejecuta este comando:
$ npm install react-native-phrase-sdk --save
-
Initialize phrase:
import Phrase from "react-native-phrase-sdk"; let phrase = new Phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next" );
El formato del archivo puede ser
i18next
(como en el ejemplo anterior) oi18next_4
, lo que da lugar al archivo de formato i18next v4.También se admite centro de datos phrase US. Para usar el SDK React Native con el centro de datos estadounidense, pasa el host correspondiente durante la inicialización:
import Phrase from "react-native-phrase-sdk"; let phrase = new Phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next", host="https://ota.us.phrase.com/" );
-
Crear back-end i18next basado en la instancia:
import resourcesToBackend from "i18next-resources-to-backend"; const backendPhrase = resourcesToBackend((language, namespace, callback) => { phrase.requestTranslation(language) .then((remoteResources) => { callback(null, remoteResources); }) .catch((error) => { callback(error, null); }); }); const backendFallback = resourcesToBackend(localResources)
-
Abre i18n con phrase backend:
i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] } //... });
Archivo de muestra i18next.js
import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import ChainedBackend from "i18next-chained-backend"; import resourcesToBackend from "i18next-resources-to-backend"; import translationEN from "./locales/en/translation.json"; import translationRU from "./locales/ru/translation.json"; import Phrase from "react-native-phrase-sdk"; const localResources = { en: { translation: translationEN, }, ru: { translation: translationRU, }, }; let phrase = new Phrase( "YOUR_DISTRIBUTION_ID", "YOUR_ENVIRONMENT_ID", require('./package.json').version, "i18next" ); const backendPhrase = resourcesToBackend((language, namespace, callback) => { phrase.requestTranslation(language) .then((remoteResources) => { callback(null, remoteResources); }) .catch((error) => { callback(error, null); }); }); const backendFallback = resourcesToBackend(localResources) i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] }, debug: true, lng: "en", fallbackLng: "en", interpolation: { escapeValue: false, // not needed for react as it escapes by default } });
Aplicación de ejemplo
La biblioteca i18next Phrase Backend implementa un backend de ejemplo para i18next que recupera las traducciones de versiones OTA.
Para crear un nuevo lanzamiento, la plataforma
debe configurarse para su distribución y formar parte de un lanzamiento.Uso
Para inicializar phrase:
import i18n from "i18next"; import { I18nextPhraseBackend } from "@phrase/i18next-backend"; i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribución: 'DISTRIBUTION_ID', secreta: 'YOUR_ENVIRONMENT_SECRET', appVersion: '1.0.0', } });
Almacenamiento en caché
La biblioteca guarda en caché las traducciones y no comprobará si hay nuevas traducciones durante 5 minutos. La caché se puede configurar configurando la opción cacheExpirationTime
en la configuración del back-end para fines de prueba.
i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribución: 'DISTRIBUTION_ID', secreta: 'YOUR_ENVIRONMENT_SECRET', appVersion: '1.0.0', cacheExpirationTime: 60 * 5, // tiempo en segundos } });
Nota
Se recomienda usar al menos 5 minutos de tiempo de almacenamiento en caché en entornos de producción.
Aplicación de ejemplo
La biblioteca Phrase OTA i18n implementa un back-end de ejemplo para la gema I18n que recupera las traducciones de las versiones OTA. Con la biblioteca, la aplicación comprueba regularmente si hay traducciones actualizadas y las descarga en segundo plano.
La biblioteca es válida para cualquier aplicación Ruby que use la gema i18n.
Para crear un nuevo lanzamiento, la plataforma
debe configurarse para la distribución y formar parte de un lanzamiento.Instalación
-
Agrega la siguiente línea al archivo Gemfile de la aplicación:
gem 'phrase-ota-i18n'
-
Ejecutar:
$ bundle install
-
Otra opción es instalarlo como:
$ gem install phrase-ota-i18n
Uso
Para generar la configuración:
bundle exec rails generate phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>
Depuración
La gema tiene una configuración debug
que se puede habilitar en el inicializador configurando:
config.debug = true