Gestion des traductions

Over the Air (Strings)

Le contenu est traduit de l’anglais par Phrase Language AI.

Mettez à jour les traductions des applications iOS, Android, React Native et Flutter en un seul clic sans publier de nouvelle version sur l'App Store ou Google Play. Les mises à jour pour les étiquettes de texte sont poussées instantanément vers les applications mobiles.

OTA_user_device_diagram.png

Over-the-Air (OTA) s'intègre également aux plateformes i18Next et Rails, ce qui permet aux utilisateurs de mettre à jour et de gérer le contenu localisé dans les applications Web sans nécessiter de redéploiement.

Une nouvelle version doit être créée pour commande que les paramètres mis à jour soient appliqués. Tout contenu inclus dans une version doit être disponible dans Phrase Strings, qui diffuse les traductions directement sur l'application. Si le contenu est absent, les traductions ne seront pas livrées.

Lorsqu’un utilisateur démarre une application mettant en œuvre notre SDK pour iOS, Android, React Native ou Flutter pour la première fois sur un appareil, nous générons un identifiant unique et aléatoire pour l’appareil. Cet identifiant permet de suivre les utilisateurs actifs sur une période donnée. Cet identifiant n’est utilisé sous aucune autre forme ni comme moyen de tracking et ne contient aucune information sur l’utilisateur ou l’appareil.

Non, la seule limite concernant OTA est le nombre de MAU (utilisateurs actifs mensuels), en fonction du forfait tarifaire que tu auras choisi.

UAM est le nombre d’appareils uniques à partir desquels des traductions sont demandées. Chaque appareil se voit attribué un Identifiant aléatoire et le MAU est calculé à partir du nombre d'identifiants différents assignés au cours des 30 derniers jours. Toute interaction avec les serveurs Phrase est considérée comme une demande.

Data

Le SDK communique avec le service OTA aux commandes de vérifier les mises à jour et inclut les détails suivants à chaque demande:

  • Identifiant de l'appareil (par exemple "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Unique pour cette application et ne permet donc pas de suivre un appareil spécifique.)

  • Version de l'application (par exemple "1.2.0")

  • Dernière mise à mettre à jour du fichier de traduction (par exemple "1542187679")

  • Version du SDK (par exemple "1.0.0")

  • Paramètres régionaux (par exemple « de-DE »)

  • Format de fichier (par exemple "Strings")

  • Client (par exemple "ios")

  • Identifiant de diffusion (Identifiant de la diffusion)

  • Clé secrète pour l’environnement (distinguer le développement de la production)

OTA Distributions

Les plateformes cibles sont définies au sein de la diffusion :

  • iOS

  • Android

  • Battement

  • i18next

  • Rails

Plusieurs diffusions sont possibles mais idéalement il y a une diffusion par projet . Si vous utilisez une diffusion pour iOS et Android, les espaces réservés pour les deux formats sont automatiquement convertis.

Rejets

Si des solutions de secours en matière de langue sont définies dans les paramètres langue du projet auquel la diffusion est connectée, Strings de la langue sélectionnée sera affichée si la langue demandée existe, mais la clé n'est pas traduite.

Si une langue spécifique à un pays (par exemple en-GB) est utilisée, mais ne fait pas partie de la version, le système peut se rabattre sur une version standard (par exemple en) de cette langue si elle existe dans le projet. Si la langue demandée n'est pas trouvée du tout, les paramètres régionaux par défaut du projet peuvent être servis à la place.

Créer une diffusion

Pour créer une diffusion, procédez comme suit :

  1. Dans la over-the-air (OTA) Box de la page Intégrations, cliquez sur Configurer ou sur le nombre de configurations si certaines existent déjà.

    La page over-the-air s'ouvre et affiche les configurations existantes.

  2. Cliquez sur Nouvelle diffusion. Les fenêtres Ajouter diffusion s'ouvrent.

  3. Dans l'onglet Général, indiquez le nom, le projet auquel la diffusion est associée, les langues requises et les plateformes requises.

    • Pour les diffusions Android, cliquez sur l'onglet Android pour sélectionner l'option format qui inclut toute traduction, y compris les tags HTML dans CDATA, si nécessaire.

    • Une fois sélectionné le projet à associer à la diffusion, l'onglet Planification devient disponible. Si nécessaire, utilisez cet onglet pour configurer OTA versions planifiées dans la diffusion.

  4. Dans l'onglet Langues de secours, sélectionnez si nécessaire les paramètres de secours spécifiques à la distribution. Les options de secours sont priorisées comme affichées dans la liste.

  5. Cliquez sur l’onglet Traductions pour sélectionner l’option permettant d’utiliser la dernière version révisée des traductions.

  6. Cliquez sur Enregistrer.

    Les détails de diffusion sont affichés avec les identifiants requis par les SDK. Les détails peuvent être affichés à nouveau en cliquant sur la diffusion à partir de la page over-the-air.

OTA Releases

Pour mettre à jour traductions, créez une nouvelle version au sein de la diffusion. L'état actuel du projet est exporté et mis à disposition des clients connectés.

Pour créer une version, procédez comme suit :

  1. Dans la page over-the-air, cliquez sur Ajouter release à côté de la diffusion requise.

    La fenêtre Nouvelles versions s'ouvre.

  2. Fournis une description, les versions de la plateforme, de la branche, des sections locales et de l'application requises.

    Si nécessaire, saisissez tags pour inclure uniquement les clés avec tags spécifiques dans la version.

  3. Cliquez sur Enregistrer.

    La version est ajoutée à la liste en bas de la page de détails de la diffusion.

Planifier les sorties OTA

Pour configurer des calendriers récurrents de publication de la diffusion, procédez comme suit :

  1. Dans la page over-the-air, cliquez sur l'icône Phrase_Gear.png de roue dentée à côté de la diffusion requise.

    La fenêtre Modifier diffusion s'affiche.

  2. Sélectionnez l'onglet Planifier la publication et cliquez sur Activer planification.

    Les options de programmation des versions sont affichées.

    Remarque

    Des options de programmation sont également disponibles lors de la création d’une nouvelle diffusion.

  3. Dans la liste déroulante Créer libère chaque publication, choisissez la fréquence de libération en sélectionnant l'une des options disponibles :

    • Jour

    • Semaine

      Sélectionner les jours de semaine souhaités pour les sorties planifiées.

  4. Fournis une heure et un fuseau horaire pertinent.

  5. Si nécessaire, sélectionnez Branche, Tags et Langues pour les versions planifiées.

    • Le champ Branche n'est affiché que si le projet active la ramification. Sélectionner une branche met à jour la liste des paramètres régionaux et des langues.

  6. Spécifiez éventuellement les versions de l’application dans les champs Version minimale et Version maximale.

    Laissez vide pour appliquer la publication de la planification à toutes les versions de l'application.

  7. Cliquez sur Enregistrer.

    La diffusion est mise à jour avec des informations sur la programmation des versions.

La désactivation de la planification arrête la publication automatique de la diffusion, mais les paramètres configurés sont enregistrés.

Note

En raison des améliorations continues, l'interface utilisateur peut ne pas être exactement la même que celle présentée dans la vidéo.

Rapports du SDK mobile OTA et de la bibliothèque en ligne

L'intégration du SDK mobile ou de la bibliothèque Web appropriés permet la mise à jour des traductions en un seul clic, mais fournit également des métriques pour mesurer l'utilisation. Les rapports du SDK mobile et de la bibliothèque Web donnent un aperçu précieux des utilisateurs actifs et de leur langue d’application. Il est possible d'accéder à cet ensemble de rapports pour chaque diffusion et les données des rapports sont mises à jour deux fois par jour.

Des rapports sont fournis pour le nombre d'utilisateurs actifs, les demandes globales, les demandes par langue, les demandes par plateforme et pour les langues de l'appareil non fournies.

Les rapports de chaque diffusion sont accessibles via l'icône Reports.jpg de la page over-the-air.

Installation du SDK OTA Android

Avec le SDK, l'application vérifie régulièrement les traductions mises à jour et les télécharge en arrière-plan.

Vérifiez régulièrement les dernières sorties du SDK Android, en particulier en envisageant des mises à niveau.

Si les traductions ne sont pas mises à jour :

  • Assurez-vous que l'Identifiant de diffusion et le secret d'environnement sont corrects.

  • Assurez-vous qu'une version a été créée pour la version actuelle de l'application.

  • Rechargez le ViewController pour faire apparaître immédiatement les modifications.

Si la mauvaise version d'une traduction est utilisée, assurez-vous qu'elle est publiée avec les dernières traductions et que la version actuelle de l'application est disponible ainsi que la versionName pour l'application définie et qu'elle utilise le format <Majeure.Mineure.point>..

Exigences

  • Le SDK nécessite au moins la version compatible 1.2.0. Si vous utilisez une ancienne version d'appcompat, envisagez d'utiliser la version 2.1.3 du SDK

  • La bibliothèque dépend d’AndroidX pour prendre en charge les éléments d’interface utilisateur rétrocompatibles tels que la barre d’outils.

Inclure le SDK

Ajouter un nouveau référentiel à la racine build.gradle :

allprojects {
    repositories {
        ...
        maven { url "https://maven.download.phrase.com" }
    }
}

Ajouter la bibliothèque comme dépendance :

dependencies {
    implementation "com.phrase.android:ota-sdk:3.5.0"
    ...
}

Jetpack Composer le support

Pour activer la prise en charge de Jetpack Compose pour les traductions OTA, procédez comme suit :

  1. Ajoutez à la racine build.gradle la bibliothèque implémentation "com.phrase.android:ota-sdk-compose:3.5.0".

  2. Enveloppez le code Jetpack Compose dans Phrase { ... }.

Configuration

Initialisez le SDK dans la classe application et ajoutez l'Identifiant de diffusion et le secret d'environnement. Les classes héritant de l'Application devraient remplacer attachBaseContext pour activer les traductions en dehors du contexte d'activité:

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));
  }  
}

J’injecte le SDK dans chaque activité, par exemple en créant une activité de base dont toutes les autres activités héritent :

public class BaseActivity extends AppCompatActivity {
  @NonNull
  @Override
  public AppCompatDelegate getDelegate() {
    return Phrase.getDelegate(this, super.getDelegate());
  }
}

Les traductions peuvent être utilisées comme d'habitude dans les mises en page :

<TextView android:text="@string/translation_key" />

Et le code interne :

TextView text = (TextView) findViewById(R.id.text_id);
text.setText(R.string.translation_key);

Certaines bibliothèques ne prennent pas en charge le déballage automatique du contexte et attendent une classe spécifique. Dans ce cas, l’habillage contextuel des composants Jetpack Compose peut être désactivé avec :

Phrase(contextWrapping = false) {
    Text( text = phraseString(R.string.test) )
}

Configurations pour les niveaux de log :

  • Java PhraseLog.setLogLevel(Severity.Debug);

  • Kotlin

    PhraseLog.logLevel = Severity.Verbose

  • Autres options d’enregistrement prises en charge

    • None

    • Error

    • Warning

    • Info

    • Debug

    • Verbose

Modifier langue

Si vous n'utilisez pas la langue système, une langue différente peut être définie dans la méthode setLocaleCode . Le code de langue (paramètres régionaux) doit être présent dans une version.

Phrase.setLocaleCode("fr");
Phrase.updateTranslations();

Version de l'application personnalisée

Le SDK utilise la version de l'application par défaut pour renvoyer une version qui correspond aux contraintes de publication pour les versions min et max. La version de l'application doit utiliser la version sémantique sinon aucune mise à mettre à jour de la traduction n'est renvoyée. Dans le cas où l'application n'utilise pas la version sémantique, il est possible de remplacer manuellement la version de l'application utilisée.

Exemple :

Phrase.setAppVersion("3.2.4");

La version doit être définie avant d'appeler updateTranslations( ).

Définir le délai d'expiration

Le délai d'expiration par défaut pour les téléchargements de traduction est défini sur 10s.

La valeur par défaut peut être modifiée avec :

Phrase.setTimeout(10000); // Timeout in milliseconds

Mettre à jour le rappel

Si la gestion de mises à jour de traduction réussies est nécessaire, joignez un gestionnaire de rappel :

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    public void onSuccess(boolean translationsChanged) {
    }

    @Override
    public void onFailure() {
    }
});

Les mises à jour de la traduction peuvent également être déclenchées manuellement. Les traductions nouvellement récupérées sont affichées au lancement de l’application Suivante.

Pour rendre les dernières traductions immédiatement disponibles, utilisez la méthode Phrase.applyPendingUpdates(). Cela peut être combiné à l’écoute des mises à jour de la traduction :

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    public void onSuccess(boolean translationsChanged) {
      if(translationsChanged) {
         Phrase.applyPendingUpdates()
        // Custom logic to refresh UI
      }
    }

    @Override
    public void onFailure() {
    }
});

L'interface utilisateur n'affiche pas automatiquement les traductions et doit être recréée.

Configurer centre de données américain

centre de données américain Phrase est également pris en charge. Le centre de données américain peut être configuré en appelant :

Phrase.setHost("https://ota.us.phrase.com/")

Repli

Dans le cas où il n'est pas possible de joindre Phrase en raison d'une connexion réseau manquante du client ou d'une interruption de service, le SDK utilise les traductions groupées à partir du fichier de ressource. La mise à jour régulière des traductions groupées dans l'application est recommandée. Le SDK met également les traductions en cache localement sur l'appareil. Si un tel cache existe, il est utilisé jusqu'à la Suivant mise à mettre à jour de la traduction.

Le SDK utilise la version la plus récente pour les traductions. Si la versionName de l'application est définie, la version la plus récente qui satisfait aux restrictions de version sera utilisée.

Ajouter une nouvelle langue

Création de la nouvelle langue dans Phrase et créer une nouvelle version. Le SDK va chercher la langue lorsqu'il s'agit de la langue périphérique d'un utilisateur. Il est recommandé d’ajouter régulièrement un nouveau strings.xml pour les nouveaux fichiers de langue lors de la publication d’une nouvelle version de l’application ou les utilisateurs ne verront les traductions de secours déterminées par Android qu’au premier démarrage de l’application.

Audit

Le SDK est source fermée et ne peut pas être consulté ou modifié. Si c'est une exigence de l'organisation, des audits peuvent être fournis. Contactez-nous pour plus de détails si nécessaire.

Assistance en vue personnalisée

Les vues personnalisées peuvent être traduites à l'aide d'attributs de style. TypedArray ne permettant pas d'écraser les ressources, de légères modifications de la vue personnalisée sont nécessaires :

  • Exemple Kotlin

    Avant :

    context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use {
        text = it.getText(R.styleable.CustomView_android_text)
    }

    Après :

    context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use {
        text = it.getTextWithPhrase(R.styleable.CustomView_android_text)
    }
  • Exemple Java

    Avant :

    final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    try {
        setText(ta.getText(R.styleable.CustomView_android_text));
    } finally {
        ta.recycle();
    }

    Après :

    final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    try {
        setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text));
    } finally {
        ta.recycle();
    }

Exemple d'application

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

Installation du SDK OTA Flutter

Avec le SDK, l'application vérifie régulièrement les traductions mises à jour et les télécharge en arrière-plan.

Exigences

Cette bibliothèque dépend de la version 0.18.0 de la bibliothèque intl de Flutter.Suivez leur guide pour ajouter la prise en charge des localisations à l'application.

Installation

Ajouter Phrase au pubspec.yaml :

dependencies:
  phrase: ^2.5.1 
  ...
  intl: ^0.18.0
  flutter_localizations:
    sdk: flutter
  ...

flutter:
  generate: true
  ...

Comme dans la bibliothèque intl, la génération de code est utilisée pour traiter les fichiers ARB. Exécutez cette commande pour mettre à jour :

flutter pub run phrase

Utilisation de build_runner :

flutter pub run build_runner watch

Utilisation

Initialisez Phrase dans le fichier 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: 'Flutter Demo',
      //..
      localisationsDélégués : PhraseLocalizations.localizationsDelegates,
      supportedLocales : PhraseLocalizations.supportedLocales,
    );
  }
}

Accéder aux messages avec :

Text(AppLocalizations.of(context)!.helloWorld);

Personnalisation

Mettre à jour le comportement

Les traductions OTA sont mises à jour à chaque lancement de l'application. Pour désactiver cela :

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", 
    checkForUpdates: false);

À mettre à jour manuellement :

Phrase.updateTranslations(context).then((_) => print("Done!"));

Version de l'application personnalisée

Le SDK utilise la version de l'application par défaut pour renvoyer une version qui correspond aux contraintes de publication pour les versions min et max. La version de l'application doit utiliser la version sémantique sinon aucune mise à mettre à jour de la traduction ne sera renvoyée. Dans le cas où l'application n'utilise pas la version sémantique, la version de l'application peut être manuellement écrasée : il est possible d'écraser manuellement la version de l'application :

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]",
    customAppVersion: "1.2.3");

Configurer centre de données américain

centre de données américain Phrase est également pris en charge. La sélection du centre de données américain peut se faire en passant le paramètre API hostname concerné dans la configuration du SDK :

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", hôte : PhraseHost.us);

Exemple d'application

https://github.com/phrase/flutter_sdk_example

Installation OTA iOS

Avec le SDK, l'application vérifie régulièrement les traductions mises à jour et les télécharge en arrière-plan.

Mac Catalyst est également pris en charge.

Le SDK peut être installé manuellement ou via le gestionnaire de paquets Swift, Carthage ou les dosettes de cacao.

Si les traductions ne sont pas mises à jour :

  • Assurez-vous que l'Identifiant de diffusion et le secret d'environnement sont corrects.

  • Assurez-vous qu'une version a été créée pour la version actuelle de l'application.

  • Rechargez le ViewController pour faire apparaître immédiatement les modifications.

Si la mauvaise version d'une traduction est utilisée, assurez-vous qu'une version contenant les dernières traductions et la version actuelle de l'application est disponible.

Gestionnaire de paquets rapide

Ajoutez l’adresse URL du référentiel public (https://github.com/Phrase/ios-sdk/). Xcode se charge automatiquement du reste de l’installation.

Carthage

Ajoutez la ligne suivante dans votre Cartfile :

binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0

Lance carthage mise à jour et ajoute le PhraseApp.framework à ton projet comme desribed dans la documentation Carthage.

Doses de cacao

Ajoutez la ligne suivante dans votre Podfile :

pod 'PhraseSDK'

Lancez l’installation de la nacelle. Si vous êtes nouveau sur CocoaPods, consultez leur documentation.

Installation manuelle

Suis les étapes suivantes :

  1. Téléchargez la dernière version.

  2. Ajoutez PhraseSDK.framework dans Xcode comme binaire relié à la cible.

  3. Un script pour retirer les binaires supplémentaires doit être exécuté avant de charger l'application car l'Apple store rejette les applications, y compris les binaires en simulateur.

    Allez dans les phases de construction et ajoutez une section Exécuter script en cliquant sur le symbole +. Coller dans ce 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"

Configuration

  1. Importer PhraseSDK :

    import PhraseSDK
  2. Initialisez le SDK en appelant le code suivant :

    Phrase.shared.setup(
      distributionID: <Distribution ID>, 
      environmentSecret: <Environment Secret>
    )
  3. Pour mettre à jour les fichiers de localisation, appelez Phrase.shared.updateTranslation().

    Cette méthode lève une exception en cas de mauvaise configuration du SDK.

    Pour configurer OTA pour utiliser le centre de données américain, définissez l’hôte avant d’appeler PhraseApp.shared.updateTranslation() avec Phrase.shared.configuration.apiHost = .us.

Il est recommandé d’appeler les deux fonctions au sein de l’AppDelegate dans la méthode applicationDidFinishLaunchingWithOptions.

Objectif C

Intégrez le SDK dans l’application 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;
}

Désactiver le swizzling

Pour désactiver le swizzling, définissez PhraseSDKMainBundleProxyDisabled sur YES dans le fichier Info.plist .

Lorsque le swizzling est désactivé, les traductions mises à jour ne sont plus affichées. La traduction sera toujours synchronisée si updateTranslation est appelée et peut être accédée avec la méthode Phrase.localizedString().

Gestion des versions de l'application

Pour déterminer quelle version doit être renvoyée, le SDK nécessite une version sémantique de l'application afin que les traductions soient mises à jour.

Le SDK essaie d'obtenir une version sémantique de la manière suivante :

  • CFBundleShortVersionString est utilisé si sémantique.

  • Si ce n'est pas le cas, CFBundleVersion est utilisé si sémantique.

  • Si les deux ne sont pas sémantiques, une combinaison de (CFBundleShortVersionString.CFBundleVersion) est utilisée.

Si CFBundleShortVersionString est manquant ou ne peut pas être créé avec une version sémantique associée à CFBundleVersion, le SDK lance le message PhraseSetupError.appVersionNotSemantic.

Désactiver la traduction pour plusieurs tableaux

Pour empêcher OTA de traduire des tableaux du paquet iOS principal autres que le tableau Localizable par défaut, définissez l'option suivante :

Phrase.shared.configuration.ignoreOtherTables = true

Rappels

Joindre un gestionnaire de rappel pour gérer les mises à jour de traduction réussies :

Phrase.shared.updateTranslation { result in
            switch result {
            case .success(let updated):
            case .failure:
            }
        }

Debug mode

Si des informations complémentaires sont nécessaires, activez le mode Debug pour obtenir une connexion supplémentaire du PhraseSDK.framework à la console:

Phrase.shared.configuration.debugMode = true

Définir le délai d'expiration pour les demandes

Définissez un délai d'expiration pour les demandes contre Phrase en appelant :

Phrase.shared.configuration.timeout = TimeInterval(20)

Le délai par défaut est de 10 secondes et les connexions prenant plus de 10 secondes seront fermées.

Prise en charge manuelle de la langue

Si vous n'utilisez pas la langue système comme paramètres régionaux, un paramètre régional différent peut être défini dans l'appel d'initialisation. Le code des paramètres régionaux doit être présent dans une version de phrase:

Phrase.shared.configuration.localeOverride = "en-US"

Repli

Dans le cas où il est impossible de récupérer de nouvelles traductions depuis Phrase via le SDK, les derniers fichiers de traduction reçus par l’installation sont utilisés. Si l’application n’a jamais reçu de nouveaux fichiers de Phrase, elle utilise les fichiers de traduction compilés de l’application. Cela permet d’éviter les erreurs en cas de difficultés techniques ou d’erreurs de mise en réseau. Il est recommandé de maintenir à jour vos fichiers de traduction compilés dans l’application à chaque publication.

Audit

Le SDK est source fermée et ne peut pas être consulté ou modifié. Si c'est une exigence de l'organisation, des audits peuvent être fournis. Contactez-nous pour plus de détails si nécessaire.

Installation du SDK natif OTA React

Avec le SDK, l'application vérifie régulièrement les traductions mises à jour et les télécharge en arrière-plan.

La bibliothèque pour les traductions OTA ne fonctionne qu'avec la bibliothèque react-i18next .

Pour installer le SDK React Native, procédez comme suit :

  1. Lancez cette commande :

    $ npm install react-native-phrase-sdk --save
  2. Initialisez phrase:

    import Phrase from "react-native-phrase-sdk";
    
    let phrase = new Phrase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next"
    );

    Le format de fichier peut être soit i18next (comme dans l'exemple ci-dessus) soit i18next_4, ce qui donne le fichier format i18next v4.

    Centre de données américain Phrase est également pris en charge. Pour utiliser le SDK React Native avec le centre de données américain, passez l'hôte concerné lors de l'initialisation:

    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. Créer le backend i18next en fonction de l’instance :

    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. Initialisez i18n avec le backend Phrase :

    i18n
      .use(ChainedBackend)
      .use(initReactI18next)
      .init({
        backend: {
            backends: [backendPhrase, backendFallback]
        }
        //...
      });

Exemple de fichier 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
    }
  });

Exemple d'application

https://github.com/phrase/react_native_sdk_example

Installation du backend OTA i18next

La bibliothèque i18next Phrase backend implémente un exemple de backend pour i18next qui récupère les traductions des versions OTA.

Pour créer une nouvelle version, la plateforme i18next doit être configurée pour la diffusion et faire partie d'une version.

Utilisation

Pour initialiser phrase:

import i18n from "i18next";
import { I18nextPhraseBackend } from "@phrase/i18next-backend";

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    backend: {
      Diffusion : 'DISTRIBUTION_ID',
      secret : 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0', '1.0.0',
    }
  });

Mise en cache

La bibliothèque met les traductions en cache et ne vérifiera pas les nouvelles traductions pendant 5 minutes. La mise en cache peut être configurée en définissant l'option cacheExpirationTime dans la configuration backend à des fins de test.

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    backend: {
      Diffusion : 'DISTRIBUTION_ID',
      secret : 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0', '1.0.0',
      cacheExpirationTime : 60 * 5, // temps en secondes
    }
  });

Remarque

Il est recommandé d'utiliser au moins 5 minutes de temps de mise en cache dans les environnements de production.

Exemple d'application

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

Installation dorsale OTA Rails

La bibliothèque Phrase-ota-i18n implémente un exemple de backend pour la gemme I18n qui récupère les traductions des versions OTA. Avec la bibliothèque, l'application vérifie régulièrement les traductions mises à jour et les télécharge en arrière-plan.

La bibliothèque est valide pour toute application Ruby utilisant la gemme i18n.

Pour créer une nouvelle version, la plateforme Rails doit être configurée pour la diffusion et faire partie d ' une version.

Installation

  1. Ajouter la ligne suivante au fichier Gemfile de l'application :

    gem 'phrase-ota-i18n'
  2. Exécuter :

    $ bundle install
  3. Vous pouvez également l'installer comme :

    $ gem install phrase-ota-i18n

Utilisation

Pour générer la configuration :

bundle exec rails generate phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>

Débogage

La gemme a une configuration Debug qui peut être activée dans l'initialiseur en définissant :

config.debug = true
Cet article vous a-t-il été utile ?

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.