Gestione della traduzione

Over the Air (corde)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

Aggiorna le traduzioni per le 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 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 i contenuti localizzati nelle applicazioni web senza richiedere una ridistribuzione.

Per applicare le impostazioni aggiornate è necessario creare una nuova versione.

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 di dispositivo univoco e casuale. Questo identificatore traccia gli utenti attivi in un determinato periodo di tempo. Non viene utilizzato per altre forme o mezzi di monitoraggio e non contiene informazioni sull'utente o sul dispositivo.

L'unico limite per quanto riguarda le OTA è la quantità di MAU (utenti attivi mensili), a seconda del piano tariffario selezionato.

MAU è il numero di dispositivi da cui vengono richieste le traduzioni. A ciascun dispositivo viene assegnato un ID casuale e il MAU viene calcolato dal numero di ID diversi assegnati negli ultimi 30 giorni.

Dati

L'SDK comunica con il servizio OTA per 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 aggiornamento del file di traduzione (ad es. "1542187679")

  • Versione SDK (ad es. "1.0.0")

  • Locale (ad esempio "de-DE")

  • Formato file (ad es. "stringhe")

  • 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 convertiti automaticamente.

Fallbacks

Se i fallback della lingua sono impostati nelle impostazioni della lingua del progetto a cui è connessa la distribuzione, le stringhe della lingua selezionata verranno visualizzate se la lingua richiesta esiste, ma la chiave non è tradotta.

Se viene utilizzata una lingua specifica per paese (ad esempio en-GB), ma non fa parte della versione, il sistema può eseguire il failback su una versione standard (ad esempio en) di tale lingua se presente nel progetto. Se la lingua richiesta non viene trovata, possono essere utilizzate le impostazioni locali predefinite del progetto.

Crea una distribuzione

Per creare una distribuzione, segui questi passaggi:

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

    La pagina Over the air apre e visualizza le configurazioni esistenti.

  2. Fare clic su Nuova distribuzione. Si apre la finestra di distribuzione Aggiungi.

  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 i tag HTML in CDATA, se necessario.

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

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

  6. Fare clic su Salva.

    I dettagli di distribuzione vengono visualizzati con gli ID richiesti dagli SDK. I dettagli possono essere visualizzati nuovamente facendo clic 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 questi passaggi:

  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, la piattaforma, il branch, le impostazioni locali e le versioni dell'app richieste.

    Se necessario, inserire i tag per includere solo le chiavi con tag specifici nella versione.

  3. Fare clic su Salva.

    La versione viene aggiunta all'elenco nella parte inferiore della pagina dei dettagli di distribuzione.

Rapporti sull'SDK e sulla libreria Web di OTA Mobile

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

Vengono forniti rapporti per numero di utenti attivi, richieste complessive, richieste per lingua, richieste per piattaforma e per 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 di Android SDK, soprattutto considerando gli aggiornamenti.

Se le traduzioni non vengono aggiornate:

  • Assicurati che l'ID di distribuzione e la chiave privata ambientale siano corretti.

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

  • 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 corrente dell'app e che sia impostato il nomedella versione per l'app e che si utilizzi il formato <major>.<minor>.<point>.

Requisiti

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

tutti i progetti {
    archivi {
        ...
        maven { url "https://maven.download.phrase.com" }
    }
}

Aggiungi la libreria come dipendenza:

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

Supporto Jetpack Compose

Per abilitare il supporto Jetpack Compose per le traduzioni OTA, segui questi passaggi:

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

  2. Includi il codice Jetpack Compose nella frase {...}.

Configurazione

Inizializzare l'SDK nella classe applicazione e aggiungere l'ID distribuzione e la chiave privata d'ambiente. Le classi che ereditano dall'applicazione dovrebbero sovrascrivere attachBaseContext per abilitare le 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));
  }  
}

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

BaseActivity estende 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 dentro il codice:

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 il wrapping del contesto nei componenti Jetpack Compose può essere disabilitato con:

Phrase(contextWrapping = false) {
    Testo( testo = phraseString(R.string.test) )
}

Configurazioni per i livelli di log:

  • Java PhraseLog.setLogLevel(Severity.Debug);

  • Kotlin

    PhraseLog.logLevel = Severity.Verbose

  • Altre opzioni di registrazione supportate

    • Nessuno

    • Errore

    • Avviso

    • Info

    • Debug

    • Verbo

Cambia lingua

Se non si utilizza la lingua di sistema, è possibile impostare una lingua diversa nel metodo setLocaleCode. Il codice 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. Nel caso in cui l’app non utilizzi 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 della traduzione è impostato su 10s.

Il valore predefinito può essere cambiato con:

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

Aggiorna callback

Se è necessaria la gestione di aggiornamenti della traduzione riusciti, allegare un gestore di callback:

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    public void onSuccess(traduzioni booleaneModificate) {
    }

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

Gli aggiornamenti della traduzione possono essere attivati anche manualmente. Le traduzioni appena recuperate vengono visualizzate al prossimo avvio dell'applicazione.

Per rendere immediatamente disponibili le ultime traduzioni, utilizzare 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
    public void onFailure() {
    }
});

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

Configura centro dati USA

È supportato anche il centro dati Phrase US. Il data center statunitense può essere configurato chiamando:

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

Fallback

Nel caso in cui non sia possibile raggiungere Phrase a causa di una connessione di rete mancante del client o di un'interruzione del servizio, l'SDK utilizza le traduzioni in bundle dal file di risorsa. Si consiglia l'aggiornamento regolare delle traduzioni in bundle nell'app. L'SDK memorizza anche nella cache le traduzioni localmente sul dispositivo. Se tale cache esiste, verrà utilizzata fino al prossimo aggiornamento della traduzione.

L'SDK usa la versione più recente per le traduzioni. Nel caso in cui il versionName dell'app sia impostato, verrà utilizzata la versione più recente che soddisfa le restrizioni di versione.

Aggiungi una nuova lingua

Creazione della nuova lingua in Phrase e creazione 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 organizzativo, possono essere forniti audit. Contattateci per ulteriori dettagli se necessario.

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:

    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

OTA Flutter SDK Installazione

Con l'SDK, l'app controlla regolarmente le traduzioni aggiornate e le scarica in background.

Requisiti

Questa libreria dipende dalla versione 0.17.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: ^1.0.1 
  ...
  intl: ^0.17.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:

frase di esecuzione flutter pub

Using build_runner:

Orologio flutter pub run build_runner

Uso

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

classe MyApp estende StatelessWidget {
  @override
  Widget build(BuildContext context) {
    restituire MaterialApp(
      titolo: 'Flutter Demo',
      //..
      localizationsDelegates: PhraseLocalizations.localizationsDelegates,
      supportedLocales: PhraseLocalizations.supportedLocales,
    );
  }
}

Accedi ai messaggi con:

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

Personalizzazione

Aggiorna il comportamento

Le traduzioni OTA vengono aggiornate ogni volta che l'app viene avviata. 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 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. Nel caso in cui l’app non utilizzi il controllo delle versioni semantico, la versione dell’app può essere sostituita manualmente: è possibile sostituire manualmente la versione dell’app:

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

Configura centro dati USA

È supportato anche il centro dati Phrase US. Il centro dati statunitense può essere selezionato passando il parametro hostname API pertinente 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 l'ID di distribuzione e la chiave privata ambientale siano corretti.

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

  • 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 corrente dell'app.

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 l'aggiornamento di carthage e aggiungi PhraseApp.framework al tuo progetto come descritto nella documentazione di Carthage.

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 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=()
    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(
      distributionID: <ID distribuzione>, 
      environmentSecret: <Segreto ambientale>
    )
  3. Per aggiornare i file di localizzazione chiamare Phrase.shared.updateTranslation().

    Questo metodo solleva un'eccezione se l'SDK non è impostato correttamente.

    Per configurare OTA per utilizzare il centro dati 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 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [[Phrase shared] setDebugMode:true]; // Optional

  [[Frase condivisa] setupWithDistributionID:@"Il tuo ID distribuzione"
                         environmentSecret:@"Your Environment Secret"];

  // OR:
  //
  // [Phrase shared] setupWithDistributionID:@"Your Distribution ID"
  // environmentSecret:@"Your Environment Secret"
  //                                   timeout:10];

  // Aggiorna le traduzioni usando il blocco di callback:
  [[Frase condivisa] updateTranslationsWithCompletionHandler:^(BOOL aggiornato, errore NSError*){
    NSLog(@"Updated: %@", updated ? @"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 via bundle proxy: %@", traduzione);

    // OR:
    //
    // Traduci utilizzando il metodo di fallback:
    NSString *otherTranslation = [[Frase condivisa]]
                                  localizedStringForKey:@"layouts.application.about" value:NULL table:NULL];
    NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation);
  }];

  // OR:
  //
  // [[Phrase shared] updateTranslationsWithCompletionHandler:NULL]; // ignora risultato ed errori (sconsigliato)

  // [...] Il tuo altro codice
  
  restituire SÌ;
}

Disabilita lo swizzling

Per disabilitare lo swizzling, impostare PhraseSDKMainBundleProxyDisabled su YES nel file Info.plist.

Quando lo scorrimento è disabilitato, le traduzioni aggiornate non vengono più visualizzate. La traduzione sarà ancora sincronizzata se si chiama updateTranslation ed è accessibile 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 seguente modo:

  • CFBundleShortVersionString viene usato semantico.

  • In caso contrario, CFBundleVersion viene utilizzato semantico.

  • Se entrambe non sono semantiche, 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 la traduzione per più tabelle

Per impedire a OTA di tradurre qualsiasi tabella nel bundle principale di iOS diversa dalla tabella localizzabile predefinita, imposta la seguente opzione:

Phrase.shared.configuration.ignoreOtherTables = true

Richiami

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

Phrase.shared.updateTranslation { risultato in
            cambia risultato {
            case .success(let updated):
            caso .failure:
            }
        }

Modalità debug

Se sono necessarie ulteriori informazioni, abilitare la modalità di 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.

Fornire la sostituzione manuale della lingua

Se non si utilizza la lingua di sistema come impostazione locale, è possibile impostare impostazioni locali diverse nella chiamata init. Il codice delle impostazioni locali deve essere presente in una versione da Phrase:

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

Fallback

Nel caso in cui non sia possibile recuperare nuove traduzioni da Phrase tramite 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 dell'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 organizzativo, possono essere forniti audit. Contattateci per ulteriori dettagli se necessario.

Installazione nativa SDK di OTA React

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 questi passaggi:

  1. Esegui questo comando:

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

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

    Il formato del file può essere i18next (come nell'esempio sopra) o i18next_4, che si traduce nel file di formato i18next v4.

    È supportato anche il centro dati Phrase US. Per utilizzare React Native SDK con il centro dati statunitense, passare l'host interessato durante l'inizializzazione:

    importare Phrase da "react-native-phrase-sdk";
    
    let phrase = new Phrase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next",
        host="https://ota.us.app.phrase.com"
    );  
    
  3. Creare il backend i18next in base all'istanza:

    importare resourcesToBackend da "i18next-resources-to-backend";
    
    const backendPhrase = resourcesToBackend((lingua, spazio dei nomi, callback) => {
        phrase.requestTranslation(language)
            .then((remoteResources) => {
                callback (null, remoteResources);
            })
            .catch((error) => {
                callback (errore, null);
            });
    });
    
    const backendFallback = resourcesToBackend(localResources)
  4. Inizializza i18n con il backend Phrase:

    i18n
      .use(ChainedBackend)
      .use(initReactI18next)
      .init({
        backend: {
            backend: [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-sdk";

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, callback) => {
    phrase.requestTranslation(language)
        .then((remoteResources) => {
            callback (null, remoteResources);
        })
        .catch((error) => {
            callback (errore, null);
        });
});

const backendFallback = resourcesToBackend(localResources)

i18n
  .use(ChainedBackend)
  .use(initReactI18next)
  .init({
    backend: {
        backend: [backendPhrase, backendFallback]
    },
    debug: true,
    lng: "en",
    fallbackLng: "en",
    interpolazione: {
      escapeValue: false, // non necessario per reagire poiché esegue l'escape predefinito
    }
  });

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.

Uso

Per inizializzare Phrase:

importare i18n da "i18next";
importare { I18nextPhraseBackend } da "@phrase/i18next-backend";

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    backend: {
      distribuzione: 'DISTRIBUTION_ID',
      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: 'DISTRIBUTION_ID',
      segreto: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0',
      cacheExpirationTime: 60 * 5, // tempo in secondi
    }
  });

Nota

Si consiglia di utilizzare almeno 5 minuti di tempo di cache 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. Aggiungere la seguente riga al Gemfile dell'applicazione:

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

    $ bundle di installazione
  3. In alternativa, installalo come:

    $ gem install phrase-ota-i18n

Uso

Per generare la configurazione:

bundle exec rails genera 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.