Gestión de traducciones

Over the Air (Strings)

El contenido se traduce automáticamente del inglés por Phrase Language AI.

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.

OTA_user_device_diagram.png

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)

OTA Distribuciones

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:

  1. En el Box Por el aire (OTA) de la página Integraciones, haz clic en Configurar o en el número de configuraciones, si ya existen.

    Se abre la página Por el aire y muestra las configuraciones existentes.

  2. Haz clic en Nueva distribución. Se abre la ventana Agregar distribución.

  3. En la pestaña General, proporcione un Nombre, con qué proyecto está asociada la distribución, Idiomas requeridos y Plataformas 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.

  4. 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.

  5. 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.

  6. 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 Por el aire.

Lanzamientos OTA

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:

  1. Desde la página Por el aire, haz clic en Agregar publicación junto a la distribución requerida.

    Se abre la ventana Nuevo lanzamiento.

  2. Proporcionar una descripción, versión de plataforma, rama, locales y aplicación obligatorias.

    Si es necesario, introduce tags para incluir solo claves con tags específicos en la versión.

  3. 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.

Programa lanzamientos OTA

Para configuración horarios recurrentes para el lanzamiento de la distribución, sigue estos pasos:

  1. Desde la página Por el aire, haz clic en el icono de Phrase_Gear.png de rueda dentada junto a la distribución requerida.

    Se muestra la ventana Editar distribución.

  2. Selecciona la pestaña Programar lanzamiento y haz clic en Activar programación.

    Se muestran las opciones de programación de lanzamientos.

    Nota

    También hay opciones de programación disponibles al crear una nueva distribución.

  3. En el menú desplegable Crear lanzamientos cada vez, elija la frecuencia de lanzamiento seleccionando una de las opciones disponibles:

    • Día

    • Semana

      Selecciona los días laborables deseados para los lanzamientos programados.

  4. Proporciona una hora y una zona horaria relevantes.

  5. Si es necesario, selecciona rama, tags e idiomas para las versiones programadas.

    • El campo rama 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.

  6. Opcionalmente, especifique las versiones de la aplicación en los campos Versión mínima y Versión máxima.

    Déjalo en blanco para aplicar el horario de lanzamiento a todas las versiones de la aplicación.

  7. 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.

Nota

Debido a las continuas mejoras, es posible que la interfaz de usuario no sea exactamente la misma que se presenta en el vídeo.

Informes de biblioteca web y SDK móvil OTA

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 Reports.jpg de la página Por el aire.

Instalación del SDK de Android OTA

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:

  1. Agrega la biblioteca implementation "com.phrase.android:ota-sdk-compose:3.5.0" al build.gradle raíz.

  2. 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

https://github.com/phrase/android-sdk-example

Instalación del SDK de OTA Flutter

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

https://github.com/phrase/flutter_sdk_example

Instalación de OTA iOS

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:

  1. Descarga la última versión.

  2. Agrega PhraseSDK.framework en Xcode como binario vinculado a la meta.

  3. 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 Fases de construcción y agregue una sección Ejecutar script 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

  1. Importar PhraseSDK:

    import PhraseSDK
  2. Abre el SDK con el siguiente código:

    Phrase.shared.setup(
      distributionID: <Distribution ID>, 
      environmentSecret: <Environment Secret>
    )
  3. 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() con Phrase.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 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.

Instalación del SDK nativo OTA React

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:

  1. Ejecuta este comando:

    $ npm install react-native-phrase-sdk --save
  2. 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) o i18next_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/"
    );  
    
  3. 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)
  4. 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

https://github.com/phrase/react_native_sdk_example

Instalación del back-end OTA i18next

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 i18next 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

https://github.com/phrase/ota-web-demo

Instalación del back-end OTA Rails

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 Rails debe configurarse para la distribución y formar parte de un lanzamiento.

Instalación

  1. Agrega la siguiente línea al archivo Gemfile de la aplicación:

    gem 'phrase-ota-i18n'
  2. Ejecutar:

    $ bundle install
  3. 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
¿Fue útil este artículo?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.