Aggiorna le traduzioni per applicazioni iOS, Android, React Native e Flutter con un solo clic senza rilasciare una nuova versione su App Store o Google Play. Gli aggiornamenti per le etichette di testo vengono immediatamente inviati alle app per dispositivi mobili.
Over-the-Air (OTA) si integra anche con le piattaforme i18Next e Rails, consentendo agli utenti di aggiornare e gestire contenuti localizzati nelle applicazioni web senza richiedere una ridistribuzione.
È necessario creare una nuova versione in ordine all’applicazione delle impostazioni aggiornate.
Quando si avvia per la prima volta un'applicazione che implementa iOS, Android, React Native o Flutter SDK su un dispositivo, viene generato un identificatore univoco e casuale del dispositivo. Questo identificatore traccia gli utenti attivi in un determinato periodo di tempo. Non viene utilizzato per altre forme o mezzi di tracciabilità e non contiene informazioni sull'utente o sul dispositivo.
L’unico limite relativo alle OTA è il numero di MAU (utenti attivi mensili), a seconda del piano tariffario selezionato.
MAU è il numero di dispositivi da cui vengono richieste le traduzioni. A ogni dispositivo viene assegnato un ID casuale e il MAU viene calcolato in base al numero di ID diversi assegnati negli ultimi 30 giorni.
Data
L'SDK comunica con il servizio OTA ordine verificare la presenza di aggiornamenti e include i seguenti dettagli con ogni richiesta:
-
Identificatore del dispositivo (ad es. "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Unico per questa app e quindi non consente il monitoraggio di un dispositivo specifico.)
-
Versione dell'app (ad esempio "1.2.0")
-
Ultimo aggiornato del file di traduzione (ad es. "1542187679")
-
Versione SDK (ad esempio "1.0.0")
-
Impostazioni locali (ad esempio "de-DE")
-
Formato file (ad es. "Strings")
-
Cliente (ad es. "ios")
-
ID distribuzione (ID distribuzione)
-
Chiave privata ambientale (per distinguere tra sviluppo e produzione)
Le piattaforme di destinazione sono definite all'interno della distribuzione:
-
iOS
-
Android
-
Flutter
-
i18next
-
Rails
Sono possibili più distribuzioni, ma idealmente c'è una distribuzione per progetto. Se si utilizza una distribuzione per iOS e Android, i segnaposto per i due formati vengono automaticamente convertiti.
Fallback
Se i fallback della lingua sono impostati nelle impostazioni della lingua del progetto a cui è connessa la distribuzione, verranno visualizzate Strings dalla lingua selezionata se esiste la lingua richiesta, ma la chiave non è tradotta.
Se è utilizzata una lingua specifica per paese (ad es. en-GB), ma non fa parte della versione, il sistema può ricorrere a una versione standard (ad es. en) di tale lingua se esiste nel progetto. Se la lingua richiesta non è trovata, possono essere utilizzate le impostazioni locali predefinite del progetto.
Crea una distribuzione
Per creare una distribuzione, segui i passaggi riportati di seguito:
-
Dalla Box Configura o sul numero di configurazioni se esistono già.
della pagina fare clic suLa pagina
apre e visualizza le configurazioni esistenti. -
Fai clic su Nuova distribuzione. Si apre la finestra .
-
Nella scheda Generale, fornire un , a quale è associata la distribuzione, le richieste e richieste.
-
Per le distribuzioni Android, fare clic sulla scheda Android per selezionare l'opzione di formato che racchiude qualsiasi traduzione inclusi tags HTML in CDATA, se necessario.
-
Dopo aver selezionato il progetto da associare alla distribuzione, diventa disponibile la scheda Pianificazione. Se necessario, usare questa scheda per configurare versioni pianificate nella distribuzione.
-
-
Nella scheda Lingue di failback, selezionare le impostazioni di fallback specifiche per la distribuzione come richiesto. Le opzioni di failback hanno la priorità come visualizzato nell'elenco.
-
Facoltativamente, fare clic sulla scheda Traduzioni per selezionare l'opzione per usare l'ultima versione revisionata delle traduzioni.
-
Fai clic su Salva.
I dettagli di distribuzione vengono visualizzati con gli ID richiesti dagli SDK. I dettagli possono essere visualizzati di nuovo cliccando sulla distribuzione dalla pagina
.
Per aggiornare le traduzioni, creare una nuova versione all'interno della distribuzione. Lo stato corrente del progetto viene esportato e reso disponibile ai clienti connessi.
Per creare una versione, segui i passaggi riportati di seguito:
-
Dalla pagina Over the air fare clic su Aggiungi versione accanto alla distribuzione richiesta.
Si apre la finestra
. -
Fornisci una
, le , , e richieste.Se necessario, inserisci i tags per includere solo le chiavi con tags specifici nella versione.
-
Fai clic su Salva.
La versione viene aggiunta all'elenco nella parte inferiore della pagina dei dettagli di distribuzione.
Per configurare pianificazioni ricorrenti per il rilascio della distribuzione, segui i passaggi riportati di seguito:
-
Dalla pagina
, clicca sull'icona ruota dentata accanto alla distribuzione richiesta.Viene visualizzata la finestra
. -
Seleziona la scheda Pianificazione versione e fai clic su .
Vengono visualizzate le opzioni di pianificazione della versione.
Nota
Le opzioni di pianificazione sono disponibili anche al momento della creazione di una nuova distribuzione.
-
Dal menu a discesa
, scegli la frequenza delle nuove versioni selezionando una delle opzioni disponibili:-
-
Seleziona i giorni feriali desiderati per le versioni pianificate.
-
-
Fornisci un'ora e
rilevante. -
Se necessario, selezionare
, e per le versioni pianificate.-
Il campo
viene visualizzato solo se il branching è abilitato nel progetto. La selezione di un branch aggiorna l'elenco di impostazioni locali e lingue.
-
-
Facoltativamente, specificare le versioni dell'applicazione nei campi
e .Lascia vuoto per applicare la versione di pianificazione a tutte le versioni dell'app.
-
Fai clic su Salva.
La distribuzione viene aggiornata con informazioni sulla pianificazione della versione.
La disabilitazione della pianificazione arresta il rilascio automatico della distribuzione, ma le impostazioni configurate sono salvate.
L'integrazione dell'SDK o della libreria Web appropriata per dispositivi mobili consente l'aggiornamento delle traduzioni con un solo clic, ma fornisce anche indicatori per misurare l'utilizzo. I rapporti sull'SDK e sulla libreria Web per dispositivi mobili offrono informazioni preziose sugli utenti attivi delle app e sulle loro lingue. Questo set di rapporti è accessibile per ogni distribuzione e i dati per i rapporti vengono aggiornati due volte al giorno.
Vengono forniti report per il numero di utenti attivi, richieste complessive, richieste per lingua, richieste per piattaforma e per le lingue del dispositivo non fornite.
I rapporti per ogni distribuzione sono accessibili tramite l'icona nella pagina
.Con l'SDK, l'app controlla regolarmente le traduzioni aggiornate e le scarica in background.
Controlla regolarmente le ultime versioni dell'SDK Android, soprattutto considerando gli aggiornamenti.
Se le traduzioni non vengono aggiornate:
-
Assicurati che ID distribuzione e chiave privata ambiente siano corretti.
-
Assicurati che sia stata creata una versione per la versione dell'app attuale.
-
Ricarica il
ViewController
per far apparire immediatamente le modifiche.
Se si utilizza la versione sbagliata di una traduzione, assicurarsi che sia disponibile una versione con le traduzioni più recenti e la versione dell'app corrente e che sia impostato il nomedellaversione
per l'app e che si utilizzi il formato <Grave>.<Minore>.<punto>.
Requisiti
-
L'SDK richiede almeno la versione appcompat 1.2.0. Se si utilizza una versione meno recente di appcompat, è possibile utilizzare la versione SDK 2.1.3
-
La libreria dipende da AndroidX per supportare elementi dell'interfaccia utente retrocompatibili come la barra degli strumenti.
Includi l'SDK
Aggiungi un nuovo archivio alla radice build.gradle
:
tutti i progetti { archivi { ... maven { url "https://maven.download.phrase.com" } } }
Aggiungi la libreria come dipendenza:
dipendenze { implementazione "com.phrase.android:OTA-sdk:3.5.0" ... }
Supporto Jetpack Compose
Per abilitare il supporto Jetpack Compose per le traduzioni OTA, segui i passaggi riportati di seguito:
-
Aggiungere l'
implementazione della
libreria allabuild.gradle
radice. -
Includi il codice Jetpack Compose in
Prase { ... }
.
Configurazione
Inizializzare l'SDK nella classe applicazione e aggiungere l'ID distribuzione e la chiave privata d'ambiente. Le classi ereditate da Application dovrebbero sovrascrivere attachBaseContext
per abilitare traduzioni al di fuori del contesto di attività:
MainApplication estende l'applicazione { @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)); } }
Iinject l'SDK in ogni attività, ad esempio creando un'attività di base che tutte le altre attività ereditano da:
public class BaseActivity extends AppCompatActivity { @NonNull @Override public AppCompatDelegate getDelegate() { restituire Phrase.getDelegate(this, super.getDelegate()); } }
Le traduzioni possono essere utilizzate come al solito nei layout:
<TextView android:text="@string/translation_key" />
E codice interno:
TextView text = (TextView) findViewById(R.id.text_id); text.setText(R.string.translation_key);
Alcune librerie non supportano l'annullamento automatico del contesto e si aspettano una classe specifica. In questo caso l’avvolgimento del contesto nei componenti Jetpack Compose può essere disabilitato con:
Phrase(contextWrapping = false) { Text( text = phraseString(R.string.test) ) }
Configurazioni per i livelli di registro:
-
Java
PhraseLog.setLogLevel(Severity.Debug);
-
Kotlin
PhraseLog.logLevel = Severity.Verbose
-
Altre opzioni di registrazione supportate
-
Nessuno
-
Errore
-
Avviso
-
Info
-
Debug
-
Verbose
-
Modifica lingua
Se non si utilizza la lingua del sistema, è possibile impostare una lingua diversa nel metodo setLocaleCode
. Il codice della lingua (impostazioni locali) deve essere presente in una versione.
Phrase.setLocaleCode("fr"); Phrase.updateTranslations();
Versione dell'app personalizzata
L'SDK utilizza la versione dell'app per impostazione predefinita per restituire una versione che corrisponda ai vincoli di versione per la versione min e max. La versione dell'app deve usare il controllo delle versioni semantico altrimenti non viene restituito alcun aggiornamento della traduzione. Se l’app non usa il controllo delle versioni semantico, è possibile sovrascrivere manualmente la versione dell’app utilizzata.
Esempio:
Phrase.setAppVersion("3.2.4");
La versione deve essere impostata prima di chiamare updateTranslations( )
.
Timeout impostato
Il timeout predefinito per i download della traduzione è impostato su 10s.
L’impostazione predefinita può essere modificata con:
Phrase.setTimeout(10000); // Timeout in millisecondi
Aggiorna richiamata
Se è richiesta la gestione di aggiornamenti della traduzione riusciti, allegare un gestore della richiamata:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(traduzioni booleaneModificate) { } @Override vuoto pubblico onFailure() { } });
Gli aggiornamenti della traduzione possono essere attivati anche manualmente. Le traduzioni appena recuperate vengono visualizzate all’Avanti lancio dell’applicazione.
Per rendere immediatamente disponibili le ultime traduzioni, usa il metodo Phrase.applyPendingUpdates()
. Questo può essere combinato con l'ascolto degli aggiornamenti della traduzione:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(traduzioni booleaneModificate) { if(translationsChanged) { Phrase.applyPendingUpdates() // Logica personalizzata per aggiornare l'interfaccia utente } } @Override vuoto pubblico onFailure() { } });
L'interfaccia utente non mostra automaticamente le traduzioni e deve essere ricreata.
Configura data center USA
È supportato anche il data center Phrase US. Il data center statunitense può essere configurato chiamando:
Phrase.setHost("https://ota.us.phrase.com/")
Fallback
Se non è possibile raggiungere phrase a causa di una connessione di rete mancante del cliente o di un'interruzione del servizio, l'SDK utilizza le traduzioni in bundle dal file di risorsa. Si consiglia il regolare aggiornamento delle traduzioni in bundle nell'app. L'SDK memorizza anche le traduzioni nella cache locale sul dispositivo. Se tale cache esiste, verrà utilizzata fino all’Avanti aggiornamento della traduzione.
L'SDK utilizza la versione più recente per le traduzioni. Se il versionName
per l'app è impostato, verrà utilizzata la versione più recente che soddisfa le restrizioni di versione.
Aggiungi una nuova lingua
Creazione della nuova lingua in phrase e creare di una nuova versione. L'SDK recupera la lingua quando questa è la lingua del dispositivo di un utente. Si consiglia di aggiungere regolarmente un nuovo strings.xml
per i file di nuove lingue quando si rilascia una nuova versione dell'app o gli utenti vedranno solo le traduzioni di failback determinate da Android al primo avvio dell'app.
Audit
L'SDK è di origine chiusa e non può essere visualizzato o modificato. Se si tratta di un requisito dell'organizzazione, possono essere forniti audit. Contattaci per maggiori dettagli se richiesto.
Visualizzazione personalizzata Supporto
Le visualizzazioni personalizzate possono essere tradotte utilizzando attributi in stile. Poiché TypedArray
non consente la sovrascrittura delle risorse, sono necessarie lievi modifiche nella visualizzazione personalizzata:
-
Esempio Kotlin
Prima:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getText(R.styleable.CustomView_android_text) }
Dopo:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getTextWithPhrase(R.styleable.CustomView_android_text) }
-
Esempio Java
Prima:
finale TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); prova { setText(ta.getText(R.styleable.CustomView_android_text)); } finalmente { ta.recycle(); }
Dopo:
finale TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); prova { setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text)); } finalmente { ta.recycle(); }
Esempio di app
Con l'SDK, l'app controlla regolarmente le traduzioni aggiornate e le scarica in background.
Requisiti
Questa libreria dipende dalla versione 0.18.0 della libreria interna di Flutter.Segui la loro guida per aggiungere il supporto alle localizzazioni all'app.
Installazione
Aggiungi phrase al file pubspec.yaml:
dipendenze: phrase: ^2.5.1 ... intl: ^0.18.0 flutter_localizations: sdk: flutter ... flutter: generare: true ...
Come nella libreria intl
, la generazione di codice viene utilizzata per elaborare i file ARB. Esegui questo comando per aggiornare:
Phrase di esecuzione flutter pub
Usando build_runner:
Orologio flutter pub run build_runner
Utilizzo
Inizializza phrase nel file 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()); } La classe MyApp estende StatelessWidget { @override Costruzione widget (contesto BuildContext) { restituire MaterialApp( title: "Flutter Demo", //.. localizationsDelegates: PhraseLocalizations.localizationsDelegates, supportedLocales: PhraseLocalizations.supportedLocales, ); } }
Accedi ai messaggi con:
Text(AppLocalizations.of(context)!.helloWorld);
Personalizzazione
Aggiorna comportamento
Le traduzioni OTA vengono aggiornate a ogni avvio dell'app. Per disabilitare questo:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", checkForUpdates: false);
Per aggiornare manualmente:
Phrase.updateTranslations(context).then((_) => print("Done!"));
Versione dell'app personalizzata
L'SDK utilizza la versione dell'app per impostazione predefinita per restituire una versione che corrisponda ai vincoli di versione per la versione min e max. La versione dell'app deve usare il controllo delle versioni semantico altrimenti non verrà restituito alcun aggiornamento della traduzione. Se l’app non usa il controllo delle versioni semantico, la versione dell’app può essere sovrascritta manualmente: è possibile sovrascrivere manualmente la versione dell’app:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", customAppVersion: "1.2.3");
Configura data center USA
È supportato anche il data center Phrase US. Il data center statunitense può essere selezionato passando il parametro API hostname rilevante nella configurazione dell'SDK:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", host: PhraseHost.us);
Esempio di app
Con l'SDK, l'app controlla regolarmente le traduzioni aggiornate e le scarica in background.
È supportato anche Mac Catalyst.
L'SDK può essere installato manualmente o tramite Swift Package Manager, Carthage o Cocoa Pods.
Se le traduzioni non vengono aggiornate:
-
Assicurati che ID distribuzione e chiave privata ambiente siano corretti.
-
Assicurati che sia stata creata una versione per la versione dell'app attuale.
-
Ricarica il
ViewController
per far apparire immediatamente le modifiche.
Se si utilizza la versione sbagliata di una traduzione, assicurarsi che sia disponibile una versione con le ultime traduzioni e la versione dell'app corrente.
Swift Package Manager
Aggiungi l'URL dell'archivio pubblico (https://gitHub.com/Phrase/ios-sdk/). Xcode gestisce automaticamente il resto dell'installazione.
Cartagine
Aggiungi la seguente riga al tuo Cartfile:
binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0
Esegui Carthage aggiorna ed aggiungi PhraseApp.framework
al tuo progetto come descritto nella documentazione di Cartagine.
Cialde di cacao
Aggiungi la seguente riga al tuo Podfile:
pod "PhraseSDK"
Esegui installazione pod. Se sei nuovo su CocoaPods, consulta la loro documentazione.
Installazione manuale
Segui questi passaggi:
-
Scarica l'ultima versione.
-
Aggiungi
PhraseSDK.framework
in Xcode come binario collegato alla destinazione. -
Uno script per rimuovere i binari aggiuntivi deve essere eseguito prima di caricare l'app poiché l'Apple Store rifiuta le app tra cui i binari del simulatore.
Vai a
e aggiungi una sezione cliccando sul simbolo +. Incolla in questo script:FRAMEWORK="PhraseSDK" FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK" EXTRACTED_ARCHS=() per ARCH in $ARCHS do lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") fatto lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
Configurazione
-
Import PhraseSDK:
import PhraseSDK
-
Inizializzare l'SDK chiamando il seguente codice:
Phrase.shared.setup( ID distribuzione: <ID distribuzione>, environmentSecret: <Segreto ambientale> )
-
Per aggiornare i file di localizzazione chiamare
Phrase.shared.updateTranslation()
.Questo metodo solleva un'eccezione se SDK non è configurato correttamente.
Per configurare OTA per usare il data center statunitense, impostare l’host prima di chiamare
PhraseApp.shared.updateTranslation()
conPhrase.shared.configuration.apiHost = .us
.
Si consiglia di chiamare entrambe le funzioni all'interno di AppDelegate
nel metodo applicationDidFinishLaunchingWithOptions
.
Objective-C
Integrare l'SDK nell'applicazione Objective-C:
@import PhraseSDK; @implementazione AppDelegate - (BOOL)applicazione:(UIApplicazione *)applicazione doneFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[Frase condivisa] setDebugMode:true]; // Facoltativo [[Frase condivisa] setupWithDistributionID:@"Il tuo ID distribuzione" environmentSecret:@"Your Environment Secret"]; // OPPURE: // // [[phrase shared] ID:@"Il tuo ID distribuzione" // environmentSecret:@"Il tuo segreto ambientale" // timeout:10]; // Aggiorna traduzioni utilizzando il blocco di richiamata: [[phrase condivisa] updateTranslationsWithCompletionHandler:^(BOOL aggiornato, errore NSError*){ NSLog(@"Aggiornato: %@", aggiornato ? @"true" : @"false"); if (error) { NSLog(@"Domain: %@ Code: %ld Message: %@", error.domain, (long)error.code, error.localizedDescription); } else { NSLog(@"No error"); } // Traduci tramite proxy bundle: NSString *translation = NSLocalizedString(@"layouts.application.about", @""); NSLog (@"NSLocalizedString tramite proxy bundle: %@", traduzione); // OPPURE: // // Traduci usando il metodo di fallback: NSString *otherTranslation = [[phrase condivisa]] localizedStringForKey:@"layouts.application.about" value:NULL table:NULL]; NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation); }]; // OPPURE: // // [[Frase condivisa]] updateTranslationsWithCompletionHandler:NULL]; // ignora risultati ed errori (sconsigliato) // [...] Il tuo altro codice restituire SÌ; }
Disabilita scorrimento
Per disabilitare lo swizzling, impostare PhraseSDKMainBundleProxyDisabled
su YES nel file Info.plist
.
Quando lo swizzling è disabilitato, le traduzioni aggiornate non vengono più visualizzate. La traduzione rimarrà comunque sincronizzata se si chiama updateTranslation
ed è possibile accedervi con il metodo Phrase.localizedString()
.
Gestione della versione dell'app
Per determinare quale versione deve essere restituita, l'SDK richiede una versione semantica dell'app in modo che le traduzioni vengano aggiornate.
L'SDK tenta di ottenere una versione semantica nel modo seguente:
-
CFBundleShortVersionString
viene utilizzato semantico. -
In caso contrario,
CFBundleVersion
viene utilizzato semantico. -
Se entrambi non sono semantici, viene utilizzata una combinazione di (
CFBundleShortVersionString.CFBundleVersion
).
Se CFBundleShortVersionString
manca o non può essere creato con una versione semantica insieme a CFBundleVersion
, l'SDK lancia il messaggio PhraseSetupError.appVersionNotSemantic
.
Disabilita traduzione per tabelle multiple
Per impedire a OTA di tradurre qualsiasi tabella presente nel bundle principale di iOS diversa dalla tabella localizzabile
predefinita, impostare la seguente opzione:
Phrase.shared.configuration.ignoreOtherTables = true
Richiami
Allega un gestore di richiamate per gestire gli aggiornamenti della traduzione riusciti:
Phrase.shared.updateTranslation { risultato in cambiare il risultato { caso .success (let updated): caso .failure: } }
Modalità debug
Se sono necessarie ulteriori informazioni, abilitare la modalità di debug per ottenere una registrazione aggiuntiva del PhraseSDK.framework
nella console:
Phrase.shared.configuration.debugMode = true
Imposta il timeout per le richieste
Imposta un timeout per le richieste contro phrase chiamando:
Phrase.shared.configuration.timeout = TimeInterval(20)
Il timeout predefinito è di 10 secondi e le connessioni che richiedono più di 10 secondi verranno chiuse.
Fornisci sostituzione manuale della lingua
Se non si utilizza la lingua del sistema come impostazioni locali, è possibile impostare diverse impostazioni locali nella chiamata init. Il codice delle impostazioni locali deve essere presente in una versione da phrase:
Phrase.shared.configuration.localeOverride = "en-US"
Fallback
Se non è possibile recuperare nuove traduzioni da phrase tramite SDK, vengono utilizzati gli ultimi file di traduzione ricevuti dall'installazione. Se l'app non ha mai ricevuto nuovi file da phrase, usa i file di traduzione compilati dall'app. Ciò evita errori in caso di difficoltà tecniche o errori di rete. Si consiglia di mantenere aggiornati i file di traduzione compilati nell'app con ogni versione.
Audit
L'SDK è di origine chiusa e non può essere visualizzato o modificato. Se si tratta di un requisito dell'organizzazione, possono essere forniti audit. Contattaci per maggiori dettagli se richiesto.
Con l'SDK, l'app controlla regolarmente le traduzioni aggiornate e le scarica in background.
La libreria per traduzioni OTA funziona solo con la libreria react-i18next.
Per installare React Native SDK, segui i passaggi riportati di seguito:
-
Esegui questo comando:
$ npm install react-native-Phrase -salvare
-
Inizializza phrase:
importare phrase da "react-native-phrase"; let phrase = new phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next" );
Il formato file può essere
i18next
(come nell'esempio precedente) oi18next_4
, che si traduce nel file in formato i18next v4.È supportato anche il data center Phrase US. Per usare React Native SDK con il data center statunitense, passare l'host rilevante durante l'inizializzazione:
importare phrase da "react-native-phrase"; let phrase = new phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next", host="https://ota.us.phrase.com/" );
-
Creare backend i18next in base all’istanza:
importare resourcesToBackend da "i18next-resources-to-backend"; const backendPhrase = resourcesToBackend((lingua, spazio dei nomi, richiamata) => { phrase.requestTranslation(language) .then((remoteResources) => { callback (null, remoteResources); }) .catch((errore) => { callback (errore, null); }); }); const backendFallback = resourcesToBackend(localResources)
-
Inizializza i18n con il backend phrase:
i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] } //... });
Esempio di file i18next.js
importare i18n da "i18next"; importare { initReactI18next } da "react-i18next"; importare ChainedBackend da "i18next-chained-backend"; importare resourcesToBackend da "i18next-resources-to-backend"; import translationEN from "./locales/en/translation.json"; importare translationRU da "./locales/ru/translation.json"; importare phrase da "react-native-phrase"; const localResources = { it: { traduzione: translationEN, }, ru: { traduzione: translationRU, }, }; let phrase = new phrase( "YOUR_DISTRIBUTION_ID", "YOUR_ENVIRONMENT_ID", require('./package.json').version, "i18next" ); const backendPhrase = resourcesToBackend((lingua, spazio dei nomi, richiamata) => { phrase.requestTranslation(language) .then((remoteResources) => { callback (null, remoteResources); }) .catch((errore) => { callback (errore, null); }); }); const backendFallback = resourcesToBackend(localResources) i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] }, debug: true, lng: "en", fallbackLng: "en", interpolazione: { escapeValue: false, // non necessario per reagire poiché esegue la escape per impostazione predefinita } });
Esempio di app
La libreria i18next-Phrase-backend implementa un backend di esempio per i18next che recupera le traduzioni dalle versioni OTA.
Per creare una nuova versione, la piattaforma
deve essere impostata per la distribuzione ed essere parte di una versione.Utilizzo
Per inizializzare phrase:
importare i18n da "i18next"; importare { I18nextPhraseBackend } da "@phrase/i18next-backend"; i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribuzione: 'DISTRIBUTION_ID', secret: 'YOUR_ENVIRONMENT_SECRET', appVersione: '1.0.0', } });
Caching
La libreria memorizza nella cache le traduzioni e non controllerà la presenza di nuove traduzioni per 5 minuti. Il caching può essere configurato impostando l'opzione cacheExpirationTime
nella configurazione del backend a scopo di test.
i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribuzione: 'DISTRIBUTION_ID', secret: 'YOUR_ENVIRONMENT_SECRET', appVersione: '1.0.0', cacheExpirationTime: 60 * 5, // tempo in secondi } });
Nota
Si consiglia di usare almeno 5 minuti di caching negli ambienti di produzione.
Esempio di app
La libreria Phrase-OTA-i18n implementa un backend di esempio per la gemma I18n che recupera le traduzioni dalle versioni OTA. Con la libreria, l'applicazione controlla regolarmente le traduzioni aggiornate e le scarica in background.
La libreria è valida per qualsiasi applicazione Ruby che utilizza la gemma i18n.
Per creare una nuova versione, la piattaforma
deve essere impostata per la distribuzione ed essere parte di una versione.Installazione
-
Aggiungi la seguente riga al Gemfile dell'applicazione:
gemma 'OTA
-
Esegui:
$ bundle di installazione
-
In alternativa, installalo come:
$ gem installa OTA
Utilizzo
Per generare la configurazione:
bundle exec Rails generano Phrase_ota:install --distribution-ID <DISTRIBUTION_ID> --secret-token <SECRET>
Debug
La gemma ha una configurazione di debug
che può essere abilitata nell'inizializzatore impostando:
config.debug = true