Aktualizace over-the-air (OTA) nabízejí flexibilní způsob, jak odevzdat aktualizace překladů do mobilních a webových aplikací, aniž by bylo nutné nové vydání v App Store, Google Play nebo na jiné nasazovací platformy. Tento přístup podporuje průběžnou lokalizaci a agilní vývojové pracovní postupy snížením počtu prodlev a ručních procesů.
OTA funkce ve Phrase Strings je integrovaná s platformami iOS, Android, React Native, Flutter, i18next a Rails. Aktualizace textových štítků se okamžitě přenášejí do mobilních aplikací.
Objednávku použití aktualizovaného nastavení je třeba vytvořit nové vydání. Veškerý obsah z vydání musí být k dispozici ve Phrase Strings, který streamuje překlady přímo do aplikace. Pokud obsah není k dispozici, překlady nebudou doručeny.
Pro mobilní aplikace OTA vyžaduje integraci příslušné sady pro vývoj softwaru (SDK) do aplikace a získávání překladů z Phrase Strings za běhu.
Při prvním spuštění aplikace implementující iOS, Android, React Native nebo Flutter SDK v zařízení se vygeneruje jedinečný a náhodný identifikátor zařízení. Tento identifikátor sleduje aktivní uživatele za určité časové období. Nepoužívá se pro žádnou jinou formu ani způsob sledování a neobsahuje žádné informace o uživateli ani zařízení.
Jediným limitem pro OTA je počet aktivních uživatelů za měsíc (MAU), v závislosti na zvolené cenové edici.
MAU je počet jedinečných zařízení, ze kterých se žádá o překlad. Každému zařízení je přiřazeno náhodné ID. MAU se počítá z počtu jedinečných ID přiřazených za posledních 30 dní. Každá interakce se servery Phrase se považuje za požadavek.
Data odeslaná s požadavky OTA
SDK komunikuje se službou OTA na objednávku aktualizace a ke každému požadavku přikládá následující údaje:
-
Identifikátor zařízení (např. "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Jedinečný pro tuto aplikaci, a proto neumožňuje sledování konkrétního zařízení.)
-
Verze aplikace (např. "1.2.0")
-
Poslední aktualizovat překladového souboru (např. "1542187679")
-
Verze SDK (např. "1.0.0")
-
Kód jazyka (např. „de-DE“)
-
Formát souboru (např. „Strings“)
-
Klient (např. „ios“)
-
ID distribuce (ID distribuce)
-
Tajné prostředí (rozlišit vývoj od výroby)
Distribuce jsou nakonfigurované nastavení, které definuje, jak a kde se aktualizace OTA pro konkrétní platformu nebo projekt doručují.
Platformy cíle jsou definovány v rámci distribuce:
-
iOS
-
Android
-
Flutter
-
i18next
-
Rails
Je možné více distribucí, ale v ideálním případě je distribuce jedna na projekt. Pokud používáte distribuci pro iOS a Android, zástupné znaky pro tyto dva formáty se automaticky převedou.
Záložní řešení
Pokud jsou v nastavení jazyka projektu, ke kterému je distribuce připojena, nastavené záložní jazyky, Strings z vybraného jazyka se zobrazí, pokud jazyk existuje, ale klíč není přeložený.
Pokud se použije jazyk specifický pro danou zemi (např. en-GB), ale není součástí vydání, může se systém opřít o standardní verzi (např. en) tohoto jazyka, pokud v projektu existuje. Pokud není požadovaný jazyk k dispozici, lze místo něj použít výchozí kód jazyka projektu.
Vytvořit distribuci
Distribuci vytvoříte takto:
-
V Boxu možnost Konfigurace nebo počet konfigurací, pokud už nějaké existují.
na stránce klikněte naOtevře se stránka
a zobrazí existující konfigurace. -
Klikněte na Novou distribuci. Otevře se okno .
-
V záložce Obecné zadejte , ke kterému je distribuce přiřazena, požadované a požadované .
-
V případě distribucí systému Android klikněte na záložku Android a vyberte možnost formátu, která v případě potřeby uzavře libovolný překlad včetně HTML tagů do CDATA.
-
Po výběru projektu určeného k připojení k distribuci se zobrazí záložka Naplánování. V případě potřeby použijte tuto záložku k nastavení plánovaných vydání OTA v distribuci.
-
-
V záložce Záložní jazyky vyberte podle potřeby konkrétní záložní nastavení distribuce. Záložní možnosti jsou upřednostňovány podle seznamu.
-
Případně klikněte na záložku Překlady a vyberte možnost použít poslední zkontrolovanou verzi překladů. Povolit tuto možnost pouze při práci s rozšířeným pracovním postupem.
-
Klikněte na Uložit.
Distribuční údaje se zobrazí spolu s ID vyžadovanými SDK. Podrobnosti lze znovu zobrazit kliknutím na distribuci na stránce
.
Chcete-li aktualizovat překlady, vytvořte v distribuci nové vydání. Aktuální stav projektu je exportován a zpřístupněn připojeným klientům.
Vydání vytvoříte takto:
-
Na stránce Over the air klikněte na Přidat vydání vedle požadované distribuce.
Otevře se okno
. -
Uveďte
, požadovanou , , a .V případě potřeby zadejte tags, které budou ve vydání obsahovat pouze klíče s konkrétními tags.
-
Klikněte na Uložit.
Vydání je přidáno do seznamu v dolní části stránky s podrobnostmi o distribuci.
Chcete-li nastavit opakující se harmonogramy vydání distribuce, postupujte takto:
-
Na stránce
klikněte na ikonuozubeného kola vedle požadované distribuce.
Zobrazí se okno
. -
Vyberte záložku Naplánovat vydání a klikněte na .
Zobrazí se možnosti plánování vydání.
Poznámka
Možnosti plánování jsou k dispozici také při vytvoření nové distribuce.
-
Z rozevíracího seznamu
vyberte frekvenci vydání výběrem jedné z dostupných možností:-
-
Vyberte požadované pracovní dny pro naplánovaná vydání.
-
-
Zadejte čas a příslušné
. -
V případě potřeby vyberte v naplánovaných vydáních
, a .-
Pole
se zobrazí jen v případě, že je v projektu povoleno větvení. Výběrem větve se aktualizuje seznam kódů jazyků a jazyků.
-
-
Případně zadejte verze aplikace v polích
a .Pokud chcete použít vydání harmonogramu pro všechny verze aplikace, pole nevyplňujte.
-
Klikněte na Uložit.
Distribuce je aktualizována informacemi o harmonogramu vydání.
Zakázáním harmonogramu se zastaví automatické vydání distribuce, ale nakonfigurovaná nastavení se uloží.
Integrace vhodné mobilní SDK nebo webové knihovny umožňuje aktualizovat překlady jedním kliknutím, ale také poskytuje metriky pro měření využití. Mobilní SDK a webová knihovna poskytují cenný přehled o aktivních uživatelích aplikací a jejich jazycích. Tato sada zpráv je k dispozici pro každou distribuci a data se obnovují dvakrát denně.
Přehledy se zobrazují pro počet aktivních uživatelů, celkový počet požadavků, požadavky podle jazyka, požadavky podle platformy a pro jazyky jednotlivých zařízení.
K reportům pro každou distribuci se dostanete přes ikonu na stránce .
Pomocí SDK aplikace pravidelně kontroluje aktualizované překlady a stahuje je na pozadí.
Pravidelně kontrolujte nejnovější vydání Android SDK, zejména s ohledem na upgrade.
Pokud se překlady neaktualizují:
-
Zkontrolujte správnost ID distribuce a secret prostředí.
-
Zkontrolujte, zda bylo vydání vytvořeno pro aktuální verzi aplikace.
-
Znovu načtěte
ViewController
, aby se změny projevily okamžitě.
Pokud používáte nesprávnou verzi překladu, ujistěte se, že vydání obsahuje nejnovější překlady, že je k dispozici aktuální verze aplikace a je nastaven versionName
pro aplikaci a že používají formát <Více závažné.Méně závažné.point>.
.
Požadavky
-
SDK vyžaduje minimálně kompatibilní verzi 1.2.0. Pokud používáte starší verzi appcompatu, zvažte použití SDK verze 2.1.3
-
Knihovna podporuje zpětně kompatibilní prvky uživatelského rozhraní, jako je panel nástrojů, a závisí na systému AndroidX.
Zahrnout SDK
Přidat nové úložiště do kořenového souboru build.gradle
:
allprojects { repositories { ... maven { url "https://maven.download.phrase.com" } } }
Přidejte knihovnu jako závislost:
dependencies { implementation "com.phrase.android:ota-sdk:3.5.0" ... }
Podpora Jetpack Compose
Pokud chcete povolit podporu Jetpack Compose pro překlady z OTA, postupujte takto:
-
Přidejte knihovní
implementaci "com.phrase.android:ota-sdk-compose:3.5.0"
do kořenového souborubuild.gradle
. -
Kód složíte ve
Phrase {...}
.
Konfigurace
Spusťte SDK ve třídě aplikací a přidejte ID distribuce a secret prostředí. Třídy dědící z aplikace by měly přepsat atchBaseContext
a povolit překlady mimo kontext aktivity:
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)); } }
Vložte SDK do každé aktivity, např. vytvořením základní aktivity, kterou všechny ostatní aktivity dědí z:
public class BaseActivity extends AppCompatActivity { @NonNull @Override public AppCompatDelegate getDelegate() { return Phrase.getDelegate(this, super.getDelegate()); } }
Překlady lze jako obvykle použít v sestavách:
<TextView android:text="@string/translation_key" />
A vnitřní kód:
TextView text = (TextView) findViewById(R.id.text_id); text.setText(R.string.translation_key);
Některé knihovny nepodporují automatické rozbalování kontextu a očekávají určitou třídu. V tom případě lze zalamování kontextu v komponentách Jetpack Compose zakázat pomocí:
Phrase(contextWrapping = false) { Text( text = phraseString(R.string.test) ) }
Konfigurace pro úrovně protokolu:
-
Java
PhraseLog.setLogLevel(Severity.Debug);
-
Kotlin
PhraseLog.logLevel = Severity.Verbose
-
Ostatní podporované možnosti protokolování
-
None
-
Error
-
Warning
-
Info
-
Debug
-
Verbose
-
Změnit jazyk
Pokud systémový jazyk nepoužíváte, lze v metodě setLocaleCode
nastavit jiný jazyk. Kód jazyka (kód jazyka) musí být ve vydání k dispozici.
Phrase.setLocaleCode("fr"); Phrase.updateTranslations();
Vlastní verze aplikace
SDK používá verzi aplikace ve výchozím nastavení k vrácení vydání, které odpovídá omezením pro min. a max. verzi. Verze aplikace musí použít sémantické verzování, jinak se překlad neaktualizuje. Pokud aplikace nepoužije sémantické verzování, je možné použitou verzi aplikace ručně nahradit.
Příklad:
Phrase.setAppVersion("3.2.4");
Verze musí být nastavena před voláním updateTranslations( )
.
Nastavit časový limit
Výchozí časový limit pro stahování překladů je nastaven na 10s.
Výchozí lze změnit takto:
Phrase.setTimeout(10000); // Timeout in milliseconds
Aktualizovat callback
Vyžaduje-li zpracování úspěšných aktualizací překladu, připojte handler pro zpětné volání:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { } @Override public void onFailure() { } });
Aktualizace překladů lze spustit také ručně. Nově načtené překlady se zobrazí při Další spuštění aplikace.
Abyste měli nejnovější překlady okamžitě k dispozici, použijte metodu Phrase.applyPendingUpdates()
. To lze kombinovat s poslechem aktualizací překladů:
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { if(translationsChanged) { Phrase.applyPendingUpdates() // Custom logic to refresh UI } } @Override public void onFailure() { } });
Uživatelské rozhraní nezobrazuje překlady automaticky a je třeba je znovu vytvořit.
Konfigurace datového centra v USA
Podporováno je i datové centrum Phrase US. Datové centrum v USA lze nakonfigurovat voláním:
Phrase.setHost("https://ota.us.phrase.com/")
Záložní systém
Pokud se Phrase nemůže dovolat z důvodu chybějícího síťového připojení klienta nebo přerušení služby, použije SDK překlady ze zdrojového souboru. Doporučuje se pravidelnou aktualizaci zabalených překladů v aplikaci. SDK také ukládá překlady lokálně do mezipaměti v zařízení. Pokud taková mezipaměť existuje, použije se, dokud se Další překlad neaktualizuje.
SDK používá pro překlady nejnovější vydání. Pokud je pro aplikaci nastaven verzeName
, použije se nejnovější vydání, které splňuje omezení verze.
Přidat nový jazyk
Vytvořte nový jazyk ve Phrase a vytvořte nové vydání. SDK načítá jazyk, pokud se jedná o jazyk zařízení uživatele. Při vydání nové verze aplikace se doporučuje pravidelně přidávat nové soubory strings.xml
pro nové jazykové soubory. Jinak uživatelé uvidí při prvním spuštění aplikace pouze záložní překlady určené systémem Android.
Auditování
SDK je uzavřený zdroj a nelze jej zobrazovat ani upravovat. Pokud se jedná o požadavek organizace, lze audity poskytnout. Pro podrobnější informace nás Kontaktujte.
Podpora vlastního zobrazení
Vlastní zobrazení lze překládat pomocí stylizovaných atributů. Jelikož TypedArray
neumožňuje přepsání zdrojů, je třeba provést drobné změny ve vlastním zobrazení:
-
Příklad Kotlina
Před:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getText(R.styleable.CustomView_android_text) }
Po:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getTextWithPhrase(R.styleable.CustomView_android_text) }
-
Příklad Java
Před:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(ta.getText(R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
Po:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
Vzorová aplikace
Pomocí SDK aplikace pravidelně kontroluje aktualizované překlady a stahuje je na pozadí.
Požadavky
Tato knihovna je závislá na verzi intl knihovny Flutter 0.18.0. Pokud chcete do aplikace přidat podporu lokalizací, postupujte podle jejich průvodce.
Instalace
Přidat Phrase do pubspec.yaml:
dependencies: phrase: ^2.5.1 ... intl: ^0.18.0 flutter_localizations: sdk: flutter ... flutter: generate: true ...
Stejně jako v intl
knihovně se ke zpracování ARB souborů používá generování kódu. Spuštěním tohoto příkazu aktualizujete:
flutter pub run phrase
Pomocí build_runner:
flutter pub run build_runner watch
Použití
Spusťte Phrase v souboru 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( název: „Flutter Demo“, //.. lokalizaceDelegáti: PhraseLocalizations.localizationsDelegates, supportedLocales: PhraseLocalizations.supportedLocales, ); } }
Přístup ke zprávám s:
Text(AppLocalizations.of(context)!.helloWorld);
Přizpůsobení
Aktualizovat chování
Překlady OTA se aktualizují při každém spuštění aplikace. Chcete-li zakázat:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", checkForUpdates: false);
Chcete-li aktualizovat ručně:
Phrase.updateTranslations(context).then((_) => print("Done!"));
Vlastní verze aplikace
SDK používá verzi aplikace ve výchozím nastavení k vrácení vydání, které odpovídá omezením pro min. a max. verzi. Verze aplikace musí použít sémantické verzování, jinak se překlad neaktualizuje. Pokud aplikace nepoužije sémantické verzování, lze verzi aplikace nahradit ručně:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", customAppVersion: "1.2.3");
Konfigurace datového centra v USA
Podporováno je i datové centrum Phrase US. Datové centrum v USA lze vybrat zadáním příslušného parametru API hostname v konfiguraci SDK:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", hostitel: PhraseHost.us);
Vzorová aplikace
Pomocí SDK aplikace pravidelně kontroluje aktualizované překlady a stahuje je na pozadí.
Podporovaný je i Mac Catalyst.
SDK lze nainstalovat ručně nebo prostřednictvím Swift Package Manageru, Carthage nebo Cocoa Pods.
Pokud se překlady neaktualizují:
-
Zkontrolujte správnost ID distribuce a secret prostředí.
-
Zkontrolujte, zda bylo vydání vytvořeno pro aktuální verzi aplikace.
-
Znovu načtěte
ViewController
, aby se změny projevily okamžitě.
Pokud používáte nesprávnou verzi překladu, zajistěte, aby byly k dispozici nejnovější překlady a aktuální verze aplikace.
Swift Správce balíčků
Přidat URL veřejného úložiště (https://github.com/Phrase/ios-sdk/). Xcode se automaticky postará o zbytek instalace.
Kartágo
Přidejte do košíku následující řádek:
binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0
Spusťte aktualizaci Kartága a přidejte do svého projektu PhraseApp.framework
, jak je popsáno v dokumentaci Kartága.
Kakaové lusky
Přidejte do svého podprofilu následující řádek:
pod 'PhraseSDK'
Spusťte instalaci pod. Pokud jste s CocoaPody noví, přečtěte si jejich dokumentaci.
Ruční instalace
Postupujte takto:
-
Stáhněte si nejnovější vydání.
-
Přidejte
PhraseSDK.framework
do Xcode jako propojený binární soubor s cílem. -
Před nahrát aplikace je třeba spustit skript na odebrání dodatečných binárních souborů, protože Apple Store odmítá aplikace včetně simulátorových binárních souborů.
Přejděte do části
a přidejte oddíl kliknutím na symbol +. Vložte do skriptu: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"
Konfigurace
-
Import PhraseSDK:
import PhraseSDK
-
SDK spustíte voláním následujícího kódu:
Phrase.shared.setup( distributionID: <Distribution ID>, environmentSecret: <Environment Secret> )
-
Chcete-li aktualizovat soubory s lokalizací, volejte
Phrase.shared.updateTranslation()
.Tato metoda vyvolá výjimku v případě, že SDK nemá správné nastavení.
Chcete-li nakonfigurovat OTA tak, aby použila datové centrum v USA, nastavte hostitele před voláním
PhraseApp.shared.updateTranslation()
sPhrase.shared.configuration.apiHost = .us
.
Doporučuje se volat obě funkce v AppDelegate
v metodě appplicationDidFinishLaunchingWithOptions
.
Objective-C
Integrujte SDK do aplikace 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; }
Zakázat swizzling
Swizzling zakážete nastavením PhraseSDKMainBundleProxyDisabled
na ANO v souboru Info.plist
.
Pokud je swizzling zakázán, aktualizované překlady se již nezobrazují. Synchronizuje se i po vyvolání updateTranslation
a je k dispozici metoda Phrase.localizedString()
.
Zpracování verzí aplikace
K určení vydání, které se má vrátit, vyžaduje SDK sémantickou verzi aplikace, takže se překlady aktualizují.
SDK se pokusí získat sémantickou verzi následujícím způsobem:
-
CFBundleShortVersionString
se použije, pokud je sémantický. -
Pokud ne, použije se
CFBundleVersion
, pokud je sémantická. -
Pokud nejsou obě hodnoty sémantické, použije se kombinace (
CFBundleShortVersionString.CFBundleVersion
).
Pokud CFBundleShortVersionString
chybí nebo jej nelze vytvořit se sémantickou verzí společně s CFBundleVersion
, SDK vyhodí zprávu PhraseSetupError.appVersionNotSemantic
.
Zakázat překlad pro více tabulek
Abyste zabránili OTA v překladu jiné tabulky v hlavním balíčku iOS než výchozí tabulky Localizable
, nastavte následující možnost:
Phrase.shared.configuration.ignoreOtherTables = true
Zpětné volání
Připojte callback handler, abyste mohli úspěšně aktualizovat překlad:
Phrase.shared.updateTranslation { result in switch result { case .success(let updated): case .failure: } }
Režim ladění
Vyžadují-li další informace, povolte režim Debugu, aby se do konzole znovu přihlašoval soubor PhraseSDK.framework
:
Phrase.shared.configuration.debugMode = true
Nastavit časový limit pro požadavky
Nastavte časový limit pro požadavky proti Phrase voláním:
Phrase.shared.configuration.timeout = TimeInterval(20)
Výchozí časový limit je 10 sekund a spojení, která trvají déle než 10 sekund, budou zrušena.
Zajistit ruční přepsání jazyka
Pokud jako kód jazyka nepoužíváte systémový jazyk, lze v init volání nastavit jiný kód jazyka. Kód jazyka musí být ve vydání z Phrase:
Phrase.shared.configuration.localeOverride = "en-US"
Záložní systém
Pokud nelze z Phrase načíst nové překlady prostřednictvím SDK, použijí se nejnovější překladové soubory, které instalace obdržela. Pokud aplikace od Phrase nikdy neobdržela nové soubory, použije zkompilované překladové soubory aplikace. Předejdete tak chybám v případě technických potíží nebo chyb v síti. Doporučujeme aktualizovat překladové soubory zkompilované do aplikace vždy po vydání.
Auditování
SDK je uzavřený zdroj a nelze jej zobrazovat ani upravovat. Pokud se jedná o požadavek organizace, lze audity poskytnout. Pro podrobnější informace nás Kontaktujte.
Pomocí SDK aplikace pravidelně kontroluje aktualizované překlady a stahuje je na pozadí.
Knihovna pro překlady z OTA pracuje pouze s knihovnou react-i18next.
K instalaci React Native SDK postupujte takto:
-
Spusťte následující příkaz:
$ npm install react-native-phrase-sdk --save
-
Spusťte Phrase:
import Phrase from "react-native-phrase-sdk"; let phrase = new Phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next" );
Formát souboru může být buď
i18next
(jako ve výše uvedeném příkladu), neboi18next_4
, což povede k vytvoření souboru ve formátu i18next v4.Podporováno je také datové centrum Phrase US. Chcete-li použít nativní SDK React s datovým centrem v USA, předejte při spouštění příslušný hostitel:
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/" );
-
Vytvořte i18next backend například na základě:
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)
-
Spusťte i18n pomocí Phrase backendu:
i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] } //... });
Vzorový soubor 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 } });
Vzorová aplikace
Knihovna i18next-Phrase-backend implementuje vzorový backend pro i18next, který načítá překlady z vydání OTA.
Chcete-li vytvořit nové vydání, musí být platforma
nastavena pro distribuci a musí být součástí vydání.Použití
Ke spuštění Phrase:
import i18n from "i18next"; import { I18nextPhraseBackend } from "@phrase/i18next-backend"; i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribuce: 'DISTRIBUTION_ID', secret: 'YOUR_ENVIRONMENT_SECRET', appVersion: '1.0.0', } });
Ukládání do mezipaměti
Knihovna ukládá překlady do mezipaměti a nové překlady nebude kontrolovat dalších 5 minut. Ukládání do mezipaměti lze pro testovací účely nakonfigurovat nastavením volby cacheExpirationTime
v konfiguraci backendu.
i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { distribuce: 'DISTRIBUTION_ID', secret: 'YOUR_ENVIRONMENT_SECRET', appVersion: '1.0.0', cacheExpirationTime: 60 * 5, // čas v sekundách } });
Poznámka
V produkčním prostředí se doporučuje použít dobu cachování alespoň 5 minut.
Vzorová aplikace
Knihovna Phrase-ota-i18n implementuje vzorový backend pro drahokam I18n, který načítá překlady z vydání OTA. Aplikace v knihovně pravidelně kontroluje aktualizované překlady a stahuje je na pozadí.
Knihovna je platná pro libovolnou aplikaci Ruby používající drahokam i18n.
Chcete-li vytvořit nové vydání, musí být platforma
nastavena pro distribuci a musí být součástí vydání.Instalace
-
Do Gemfile aplikace přidejte následující řádek:
gem 'phrase-ota-i18n'
-
Provést:
$ bundle install
-
Jinou možností je instalace jako:
$ gem install phrase-ota-i18n
Použití
Pro vygenerování konfigurace:
bundle exec rails generate phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>
Ladění
Drahokam má konfiguraci Debug
, kterou lze v inicializátoru povolit nastavením:
config.debug = true