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.
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)
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 :
-
Dans la Configurer ou sur le nombre de configurations si certaines existent déjà.
Box de la page , cliquez surLa page
s'ouvre et affiche les configurations existantes. -
Cliquez sur Nouvelle diffusion. Les fenêtres s'ouvrent.
-
Dans l'onglet Général, indiquez le , le auquel la diffusion est associée, requises et 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.
-
-
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.
-
Cliquez sur l’onglet Traductions pour sélectionner l’option permettant d’utiliser la dernière version révisée des traductions.
-
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
.
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 :
-
Dans la page over-the-air, cliquez sur Ajouter release à côté de la diffusion requise.
La fenêtre
ouvre. -
Fournis une
, les , de la , et de l' requises.Si nécessaire, saisissez tags pour inclure uniquement les clés avec tags spécifiques dans la version.
-
Cliquez sur Enregistrer.
La version est ajoutée à la liste en bas de la page de détails de la diffusion.
Pour configurer des calendriers récurrents de publication de la diffusion, procédez comme suit :
-
Dans la page
, cliquez sur l'icônede roue dentée à côté de la diffusion requise.
La fenêtre
s'affiche. -
Sélectionnez l'onglet Planifier la publication et cliquez sur .
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.
-
Dans la liste déroulante
publication, choisissez la fréquence de libération en sélectionnant l'une des options disponibles :-
-
Sélectionner les jours de semaine souhaités pour les sorties planifiées.
-
-
Fournis une heure et un
pertinent. -
Si nécessaire, sélectionnez
, et pour les versions planifiées.-
Le champ
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.
-
-
Spécifiez éventuellement les versions de l’application dans les champs
et .Laissez vide pour appliquer la publication de la planification à toutes les versions de l'application.
-
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.
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 de la page .
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 :
-
Ajoutez à la racine
build.gradle
la bibliothèqueimplémentation "com.phrase.android:ota-sdk-compose:3.5.0"
. -
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
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
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 :
-
Téléchargez la dernière version.
-
Ajoutez
PhraseSDK.framework
dans Xcode comme binaire relié à la cible. -
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
construction et ajoutez une section 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
-
Importer PhraseSDK :
import PhraseSDK
-
Initialisez le SDK en appelant le code suivant :
Phrase.shared.setup( distributionID: <Distribution ID>, environmentSecret: <Environment Secret> )
-
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()
avecPhrase.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.
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 :
-
Lancez cette commande :
$ npm install react-native-phrase-sdk --save
-
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) soiti18next_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/" );
-
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)
-
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
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
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
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
doit être configurée pour la diffusion et faire partie d ' une version.Installation
-
Ajouter la ligne suivante au fichier Gemfile de l'application :
gem 'phrase-ota-i18n'
-
Exécuter :
$ bundle install
-
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