Gestione della traduzione

Over the Air (Strings)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

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.

OTA_user_device_diagram.png

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)

Distribuzioni OTA

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:

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

    La pagina over the air apre e visualizza 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 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.

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

  5. Facoltativamente, fare clic sulla scheda Traduzioni per selezionare l'opzione per usare l'ultima versione revisionata delle traduzioni.

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

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

    Si apre la finestra Nuova versione.

  2. Fornisci 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 nella parte inferiore della pagina dei dettagli di distribuzione.

Pianificare rilasci 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 versione e fai clic su Abilita pianificazione.

    Vengono visualizzate le opzioni di pianificazione della versione.

    Nota

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

  3. Dal menu a discesa Crea nuove versioni, scegli la frequenza delle nuove 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 della versione.

La disabilitazione della pianificazione arresta il rilascio automatico della distribuzione, ma le impostazioni configurate sono salvate.

Nota

A causa dei continui miglioramenti, l'interfaccia utente potrebbe non essere esattamente la stessa presentata nel video.

Rapporti SDK e Web Library per dispositivi mobili OTA

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 Reports.jpg nella pagina over the air.

Installazione OTA Android SDK

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:

  1. Aggiungere l'implementazione della libreria alla build.gradle radice.

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

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

Installazione OTA Flutter SDK

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

https://github.com/phrase/flutter_sdk_example

Installazione OTA iOS

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:

  1. Scarica l'ultima versione.

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

  3. 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 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=()
    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

  1. Import PhraseSDK:

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

    Phrase.shared.setup(
      ID distribuzione: <ID distribuzione>, 
      environmentSecret: <Segreto ambientale>
    )
  3. 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() con Phrase.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.

Installazione OTA React Native SDK

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:

  1. Esegui questo comando:

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

https://github.com/phrase/react_native_sdk_example

Installazione del backend OTA i18next

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

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 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 Rails deve essere impostata per la distribuzione ed essere parte di una versione.

Installazione

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

    gemma 'OTA 
  2. Esegui:

    $ bundle di installazione
  3. 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
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.