Gestione della traduzione

Over the Air (Strings)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

Gli aggiornamenti over-the-air (OTA) offrono un modo flessibile per consegnare aggiornamenti di traduzione ad applicazioni per dispositivi mobili e web senza richiedere una nuova versione su App Store, Google Play o altre piattaforme di distribuzione. Questo approccio supporta la localizzazione continua e i flussi di lavoro di sviluppo agile riducendo ritardi e processi manuali.

La funzione OTA di Phrase Strings si integra con le piattaforme iOS, Android, React Native, Flutter, i18next e Rails. Gli aggiornamenti per le etichette di testo vengono istantaneamente inviati alle app per dispositivi mobili.

OTA_user_device_diagram.png

È necessario creare una nuova versione in ordine all’applicazione delle impostazioni aggiornate. Tutti i contenuti inclusi in una versione devono essere disponibili in Phrase Strings, che trasmette le traduzioni direttamente all'applicazione. Se il contenuto non è presente, le traduzioni non verranno consegnate.

Per le applicazioni per dispositivi mobili, OTA richiede l’integrazione del relativo Software Development Kit (SDK) nell’applicazione per recuperare traduzioni da Phrase Strings a runtime.

Quando si avvia un'applicazione che implementa iOS, Android, React Native o Flutter SDK per la prima volta 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 all’OTA è il numero di utenti attivi mensili (MAU), a seconda del piano tariffario selezionato.

MAU è il numero di dispositivi univoci da cui vengono richieste le traduzioni. A ogni dispositivo viene assegnato un ID casuale. Il MAU viene calcolato in base al numero di ID univoci assegnati negli ultimi 30 giorni. Ogni interazione con i server phrase è considerata una richiesta.

Dati inviati con richieste OTA

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 es. "1.2.0")

  • Ultimo aggiornato del file di traduzione (ad es. "1542187679")

  • Versione SDK (ad esempio "1.0.0")

  • Impostazioni locali (ad es. "de-DE")

  • Formato file (ad es. "Strings")

  • Cliente (ad es. "ios")

  • ID distribuzione (ID distribuzione)

  • Chiave privata ambientale (per distinguere tra sviluppo e produzione)

Distribuzioni OTA

Le distribuzioni sono una configurazione configurata che definisce come e dove vengono consegnati gli aggiornamenti OTA per una piattaforma o un progetto specifico.

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 utilizzi 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, vengono visualizzate Strings della lingua selezionata se esiste la lingua richiesta, ma la chiave non viene tradotta.

Se viene utilizzata una lingua specifica del paese (ad esempio en-GB), ma non fa parte della versione, il sistema può ricorrere a una versione standard (ad esempio en) di tale lingua se esiste nel progetto. Se la lingua richiesta non viene trovata, è possibile utilizzare le impostazioni locali predefinite del progetto.

Crea una distribuzione

Per creare una distribuzione, segui i passaggi riportati di seguito:

  1. Dalla Box over the air (OTA) nella pagina Integrazioni fare clic su Configura o sul numero di configurazioni se ne esistono già alcune.

    La pagina over the air apre e mostra le configurazioni esistenti.

  2. Fai clic su Nuova distribuzione. Si apre la finestra Aggiungi distribuzione.

  3. Nella scheda Generale, fornire un nome, a quale progetto è associata la distribuzione, le lingue richieste e le piattaforme richieste.

    • Per le distribuzioni Android, fare clic sulla scheda Android per selezionare l'opzione di formato che include qualsiasi traduzione inclusi tag HTML in CDATA, se necessario.

    • Dopo aver selezionato il progetto da associare alla distribuzione, diventa disponibile la scheda Pianificazione. Se necessario, usa questa scheda per configurare versioni pianificate nella distribuzione.

  4. Nella scheda Lingue di failback, seleziona le impostazioni di fallback specifiche della distribuzione come richiesto. Le opzioni di failback hanno la priorità come visualizzato nell'elenco.

  5. Facoltativamente, fare clic sulla scheda Traduzioni per selezionare l'opzione per usare l'ultima versione revisionata delle traduzioni. Abilita questa opzione solo quando si lavora con il flusso di lavoro.

  6. 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 over the air.

Rilasci OTA

Per aggiornare le traduzioni, crea 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:

  1. Dalla pagina Over the air fare clic su Aggiungi versione accanto alla distribuzione richiesta.

    Si apre la finestra della Nuova versione.

  2. Fornire una descrizione, le versioni di piattaforma, branch, impostazioni locali e app richieste.

    Se necessario, inserisci i tags per includere solo le chiavi con tags specifici nella versione.

  3. Fai clic su Salva.

    La versione viene aggiunta all'elenco in fondo alla pagina dei dettagli di distribuzione.

Pianificare le versioni OTA

Per configurare pianificazioni ricorrenti per il rilascio della distribuzione, segui i passaggi riportati di seguito:

  1. Dalla pagina over the air, clicca sull'icona Phrase_Gear.png ruota dentata accanto alla distribuzione richiesta.

    Viene visualizzata la finestra Modifica distribuzione.

  2. Seleziona la scheda Pianificazione versioni e fai clic su Abilita pianificazione.

    Vengono visualizzate le opzioni di pianificazione del rilascio.

    Nota

    Le opzioni di pianificazione sono disponibili anche al momento della creazione di una nuova distribuzione.

  3. Dal menu a discesa Crea versioni ogni versione, scegli la frequenza delle versioni selezionando una delle opzioni disponibili:

    • Giorno

    • Settimana

      Seleziona i giorni feriali desiderati per le versioni pianificate.

  4. Fornisci un'ora e il fuso orario rilevante.

  5. Se necessario, selezionare branch, tags e lingue per le versioni pianificate.

    • Il campo branch viene visualizzato solo se il branching è abilitato nel progetto. La selezione di un branch aggiorna l'elenco di impostazioni locali e lingue.

  6. Facoltativamente, specificare le versioni dell'applicazione nei campi Versione minima e Versione massima.

    Lascia vuoto per applicare la versione di pianificazione a tutte le versioni dell'app.

  7. Fai clic su Salva.

    La distribuzione viene aggiornata con informazioni sulla pianificazione delle versioni.

La disabilitazione della pianificazione interrompe il rilascio automatico della distribuzione, ma le impostazioni configurate vengono salvate.

Nota

A causa dei miglioramenti che vengono apportati regolarmente, l'interfaccia utente potrebbe apparire leggermente diversa da quella mostrata nel video.

OTA SDK per dispositivi mobili e rapporti della Web Library

L'integrazione dell'SDK o della libreria Web appropriata per dispositivi mobili consente l'aggiornamento delle traduzioni con un solo clic, ma fornisce anche metriche per misurare l'utilizzo. I rapporti sull'SDK e sulla libreria Web per dispositivi mobili offrono informazioni preziose sugli utenti attivi dell'app e sulle loro lingue. Questo set di rapporti è disponibile per ogni distribuzione e i dati vengono aggiornati due volte al giorno.

Vengono forniti rapporti per il numero di utenti attivi, richieste complessive, richieste per lingua, richieste per piattaforma e per le lingue del dispositivo non fornite.

Ai rapporti per ogni distribuzione si accede tramite l'icona Reports.jpg nella pagina over the air.

Installazione OTA Android SDK

Con l'SDK, l'app verifica regolarmente la presenza di traduzioni aggiornate e le scarica in background.

Controlla regolarmente le ultime versioni dell'SDK per Android, soprattutto considerando gli aggiornamenti.

Se le traduzioni non vengono aggiornate:

  • Assicurati che ID distribuzione e chiave privata d'ambiente siano corretti.

  • Assicurati che sia stata creata una versione per la versione dell'app corrente.

  • Ricarica il ViewController per fare 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 versionName per l'app e che si utilizzi il formato <major>.<minor>.<point>.

Requisiti

  • L'SDK richiede almeno la versione appcompat 1.2.0. Se utilizzi una versione precedente di appcompat, considera l'utilizzo dell'SDK versione 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 root build.gradle:

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

Aggiungi la libreria come dipendenza:

dependencies {
    implementation "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:

  1. Aggiungere la libreria implementation "com.phrase.android:ota-sdk-compose:3.5.0" alla root build.gradle.

  2. Includi il codice Jetpack Compose in Phrase { ... }.

Configurazione

Inizializza l'SDK nella classe applicazione e aggiungi l'ID distribuzione e la chiave privata d'ambiente. Le classi ereditate dall'applicazione dovrebbero sovrascrivere attackBaseContext per abilitare traduzioni al di fuori del contesto di attività:

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

Inietta l'SDK in ogni attività, ad esempio creando un'attività di base da cui tutte le altre attività ereditano:

public class BaseActivity extends AppCompatActivity {
  @NonNull
  @Override
  public AppCompatDelegate getDelegate() {
    return 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 lo srotolamento 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

    • None

    • Error

    • Warning

    • 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) dev’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 rilascio per la versione min e max. La versione dell'app deve usare il controllo delle versioni semantico, altrimenti la traduzione non viene aggiornata. Se l'app non usa il controllo delle versioni semantico, è possibile sostituire 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 di traduzioni è impostato su 10s.

L’impostazione predefinita può essere modificata con:

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

Aggiorna richiamata

Se è necessaria la gestione di aggiornamenti della traduzione riusciti, allega un gestore della richiamata:

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

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

Gli aggiornamenti della traduzione possono anche essere attivati manualmente. Le traduzioni recuperate vengono visualizzate all’Avanti lancio dell’applicazione.

Per rendere immediatamente disponibili le traduzioni più recenti, usa il metodo Phrase.applyPendingUpdates(). Questo può essere combinato con l'ascolto degli aggiornamenti della traduzione:

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

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

L'interfaccia utente non mostra automaticamente le traduzioni e deve essere ricreata.

Configura data center USA

È supportato anche il data center phrase USA. Il data center USA 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 risorse. Si consiglia di aggiornare regolarmente le traduzioni in bundle nell'app. L'SDK memorizza anche nella cache le traduzioni localmente sul dispositivo. Se tale cache esiste, verrà utilizzata fino alla traduzione Avanti aggiornata.

L'SDK usa 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. È consigliabile 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 necessario.

Supporto visualizzazione personalizzata

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 di:

    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 di:

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

    Dopo:

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

Esempio di app

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

Installazione OTA Flutter SDK

Con l'SDK, l'app verifica regolarmente la presenza di traduzioni aggiornate e le scarica in background.

Requisiti

Questa libreria dipende dalla versione 0.18.0 della libreria intl di Flutter.Segui la loro guida per aggiungere il supporto alle localizzazioni all'app.

Installazione

Aggiungi phrase a pubspec.yaml:

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

flutter:
  generate: true
  ...

Come nella libreria intl, la generazione di codice viene usata per elaborare i file ARB. Esegui questo comando per aggiornare:

flutter pub run phrase

Utilizzando build_runner:

flutter pub run build_runner watch

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Flutter Demo",
      //..
      localizzazioniDelegati: PhraseLocalizations.localizationsDelegates,
      Locali supportati: PhraseLocalizations.supportedLocales,
    );
  }
}

Accedi ai messaggi con:

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

Personalizzazione

Aggiorna comportamento

Le traduzioni OTA vengono aggiornate ogni volta che si lancia l'app. Per disabilitare ciò:

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 rilascio 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 sostituire 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 USA. Il data center statunitense può essere selezionato passando il parametro hostname API rilevante nella configurazione dell’SDK:

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", host: PhraseHost.us);

Esempio di app

https://github.com/phrase/flutter_sdk_example

Installazione OTA iOS

Con l'SDK, l'app verifica regolarmente la presenza di 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 d'ambiente siano corretti.

  • Assicurati che sia stata creata una versione per la versione dell'app corrente.

  • Ricarica il ViewController per fare 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.

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 nel tuo Cartfile:

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

Esegui Carthage Update e aggiungi PhraseApp.framework al tuo progetto come descritto nella documentazione Carthage.

Cialde di cacao

Aggiungi la seguente riga nel tuo Podfile:

pod 'PhraseSDK'

Esegui installazione pod. Se sei nuovo su CocoaPods, consulta la loro documentazione.

Installazione manuale

Segui questi passaggi:

  1. Scarica la versione più recente.

  2. Aggiungi PhraseSDK.framework in Xcode come binario collegato alla destinazione.

  3. Uno script per rimuovere i binari extra deve essere eseguito prima di caricare l'app poiché l'Apple Store rifiuta le app inclusi i binari del simulatore.

    Vai a Build Phases e aggiungi una sezione Esegui script cliccando sul simbolo +. Incolla in questo 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"

Configurazione

  1. Importa PhraseSDK:

    import PhraseSDK
  2. Inizializza l'SDK chiamando il seguente codice:

    Phrase.shared.setup(
      distributionID: <Distribution ID>, 
      environmentSecret: <Environment Secret>
    )
  3. Per aggiornare i file di localizzazione chiamare Phrase.shared.updateTranslation().

    Questo metodo comporterà un'eccezione se la configurazione dell'SDK non è corretta.

    Per configurare OTA per usare il data center statunitense, impostare l’host prima di chiamare PhraseApp.shared.updateTranslation() con Phrase.shared.configuration.apiHost = .us.

Si consiglia di chiamare entrambe le funzioni all'interno dell'AppDelegate nel metodo applicationDidFinishLaunchingWithOptions.

Obiettivo-C

Integrare l’SDK nell’applicazione 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;
}

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 verrà comunque sincronizzata se viene chiamato 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 usato semanticamente.

  • In caso contrario, CFBundleVersion viene usato 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 invia il messaggio PhraseSetupError.appVersionNotSemantic.

Disabilita traduzione per tabelle multiple

Per impedire a OTA di tradurre altre tabelle nel bundle principale di iOS diverse dalla tabella Localizzabile predefinita, impostare la seguente opzione:

Phrase.shared.configuration.ignoreOtherTables = true

Chiamate

Allega un gestore di richiamate per gestire gli aggiornamenti della traduzione riusciti:

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

Modalità debug

Se sono necessarie ulteriori informazioni, abilitare la modalità Debug per ottenere una registrazione aggiuntiva di 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 la sostituzione manuale della lingua

Se non si utilizza la lingua del sistema come impostazioni locali, è possibile impostare impostazioni locali diverse nella chiamata iniziale. Il codice delle impostazioni locali deve essere presente in una versione di phrase:

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

Fallback

Se non è possibile recuperare nuove traduzioni da phrase tramite l'SDK, vengono utilizzati i file di traduzione più recenti 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 necessario.

Installazione dell'SDK nativo OTA React

Con l'SDK, l'app verifica regolarmente la presenza di traduzioni aggiornate e le scarica in background.

La libreria per le traduzioni OTA funziona solo con la libreria react-i18next.

Per installare React Native SDK, segui i passaggi riportati di seguito:

  1. Esegui questo comando:

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

    import Phrase from "react-native-phrase-sdk";
    
    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 sopra) o i18next_4, il che risulta nel file in formato i18next v4.

    È supportato anche il data center phrase US. Per usare React Native SDK con il data center statunitense, passa l’host rilevante durante l’inizializzazione:

    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. Creare backend i18next in base all'istanza:

    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. Inizializza i18n con il backend phrase:

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

File di esempio 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
    }
  });

Esempio di app

https://github.com/phrase/react_native_sdk_example

Installazione del backend OTA i18next

La libreria i18next-Frase-backend implementa un backend di esempio per i18next che recupera le traduzioni dalle versioni OTA.

Per creare una nuova versione, la piattaforma i18next deve essere impostata per la distribuzione ed essere parte di una versione.

Utilizzo

Per inizializzare phrase:

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

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    backend: {
      distribuzione: "ID_DISTRIBUZIONE",
      segreto: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '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 fini di test.

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    backend: {
      distribuzione: "ID_DISTRIBUZIONE",
      segreto: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '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

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

Installazione del backend OTA Rails

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 verifica regolarmente la presenza di traduzioni aggiornate e le scarica in background.

La libreria è valida per qualsiasi applicazione Ruby che utilizzi la gemma i18n.

Per creare una nuova versione, la piattaforma Rails deve essere impostata per la distribuzione ed essere parte di una versione.

Installazione

  1. Aggiungi la seguente riga al Gemfile dell'applicazione:

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

    $ bundle install
  3. In alternativa, installalo come:

    $ gem install phrase-ota-i18n

Utilizzo

Per generare la configurazione:

bundle exec rails generate 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
Questo articolo ti è stato 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.