新しいバージョンをApp StoreやGoogle Playにリリースすることなく、iOS、Android、React Native、Flutterアプリケーションの翻訳をワンクリックで更新できます。テキストラベルの更新は即座にモバイルアプリケーションにプッシュされます。
OTA (Over-the-Air) は i18Next および Rails プラットフォームとも統合されているため、ユーザーは Web アプリケーションでローカライズされたコンテンツを再デプロイすることなく更新および管理することができます。
更新された設定を適用するには、新しいリリースをオーダーする必要があります。
ユーザーが、iOS、Android、React Native、またはFlutter SDKを実装したアプリケーションをデバイスで初めて起動した際に、一意のランダムなデバイス識別子が生成されます。この識別子は、一定期間のアクティブ ユーザーを追跡します。この識別子は、他のいかなる形式や手段による追跡にも使用されず、ユーザーやデバイスの情報は含まれません。
OTAに関する唯一の制限は、選択した 料金プランに応じたMAU数(月間アクティブユーザー数)です。
MAUは、翻訳が要求されたデバイスの数です。各デバイスにランダムなIDが割り当てられ、MAUは過去30日間に割り当てられた異なるIDの数から計算されます。
データ
SDK はアップデートを確認するために OTA サービスと通信し、オーダーごとに次の詳細情報を提供します。
-
デバイス識別子(例:"F3AFCB10-80A2-84CB-94C0-27F5EF58876D".このアプリ独自の機能のため、特定のデバイスのトラッキングはできません。)
-
アプリのバージョン(例:"1.2.0")
-
翻訳ファイルの最終更新(例:"1542187679")
-
SDK バージョン (例:"1.0.0")
-
ロケール (例: "de-DE")
-
ファイル形式(例:Strings)
-
クライアント (例: "ios")
-
ディストリビューション ID (ディストリビューションの ID)
-
環境シークレット(開発と本番を区別する)
訳文プラットフォームはディストリビューション内で定義されています。
-
iOS
-
Android
-
Flutter
-
i18next
-
Rails
複数のディストリビューションが可能ですが、プロジェクトごとに1つのディストリビューションが存在するのが理想です。iOSとAndroid用のディストリビューションを使用している場合、2つの形式のプレースホルダーが自動的に変換されます。
フォールバック
ディストリビューションが接続されているプロジェクトの言語設定で言語フォールバックが設定されている場合、要求された言語があれば選択された言語の Strings が表示されますが、キーは翻訳されていません。
その国の固有の言語 (en-GB など) が使用されていてリリースに含まれていない場合、システムはその言語の標準バージョン (en など) がプロジェクトに存在していれば、その言語にフォールバックできます。要求された言語がまったく見つからない場合、代わりにプロジェクトのデフォルトロケールを使用できます。
ディストリビューションの作成
ディストリビューションを作成するには、次の手順に従います。
-
[設定(Configure)] をクリックします。設定がすでにある場合は、その数をクリックします。
)] ページの Box から、ページが開き、既存の設定が表示されます。
-
「新規ディストリビューション」をクリックします。 のウィンドウが開きます。
-
「一般」タブで、 、ディストリビューションを関連付ける 、必要な 、必要 を入力します。
-
Android ディストリビューションの場合は、Android タブをクリックして、必要に応じて CDATA で HTML tags を含むすべての翻訳を囲むファイル形式オプションを選択します。
-
ディストリビューションに関連付けるプロジェクトを選択すると、「スケジュール」タブが使用可能になります。必要に応じて、このタブを使用してディストリビューションの OTA 予定リリース設定を行います。
-
-
予備言語タブで、必要に応じてディストリビューション固有の予備設定を選択します。フォールバック オプションは一覧に表示されるように優先順位付けされます。
-
オプションで、[翻訳]タブをクリックして、最新のレビュー済バージョンの翻訳を使用するオプションを選択します。
-
保存をクリックします。
ディストリビューションの詳細は、SDKが必要とするIDで表示されます。詳細は、
ページからディストリビューションをクリックして再度表示できます。
翻訳を更新するには、ディストリビューション内で新しいリリースを作成します。プロジェクトの現在の状態がエクスポートされ、接続されたクライアントに利用可能になります。
リリースを作成するには、次の手順に従います。
-
Over the Air ページから、必要なディストリビューションの横にある追加リリースをクリックします。
「
ウィンドウが開きます。 -
、必要 、 、 、 を入力します。
必要に応じて tags を入力して、リリースに特定の tags を持つキーだけを含めます。
-
保存をクリックします。
リリースがディストリビューション詳細ページの下部の一覧に追加されます。
ディストリビューションをリリースするための定期的なスケジュールを設定するには、次の手順に従います。
-
ページで、必要なディストリビューションの横にある 歯車アイコン をクリックします。
ウィンドウが表示されます。
-
リリーススケジュールタブを選択し、 をクリックします。
リリーススケジュールのオプションが表示されます。
備考
スケジュールオプションは、新規ディストリビューション作成時にも使用できます。
-
[
ドロップダウンから、使用可能なオプションのいずれかを選択してリリース頻度を選択します。-
-
予定されているリリースの希望する曜日を選択します。
-
-
時間と関連する
を入力します。 -
必要に応じて、予定されているリリースの
、 、 を選択します。-
フィールドは、プロジェクトでブランチ機能が有効な場合にのみ表示されます。ブランチを選択すると、ロケールと言語の一覧が更新されます。
-
-
オプションで、「
および「 フィールドでアプリケーションバージョンを指定します。空白にした場合、アプリのすべてのバージョンにスケジュールリリースが適用されます。
-
保存をクリックします。
ディストリビューションがリリーススケジュール情報で更新されます。
スケジュールを無効にすると、ディストリビューションの自動リリースが停止しますが、設定内容は保存されます。
適切なモバイルSDKまたはWebライブラリを統合することで、ワンクリックで翻訳を更新できるだけでなく、使用状況を測定する指標も提供できます。モバイルSDKとWebライブラリのレポートは、アクティブアプリユーザーとそのアプリ言語に関する貴重な洞察を提供します。このレポートセットはディストリビューションごとにアクセスでき、レポートのデータは1日2回更新されます。
アクティブ ユーザー数、全体的なリクエスト、言語ごとのリクエスト、プラットフォームごとのリクエスト、提供されていないデバイスの言語に関するレポートが表示されます。
各ディストリビューションのレポートには、
ページのアイコンからアクセスできます。SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
定期的にAndroid SDKの最新リリースを確認し、特にアップグレードを検討してください。
翻訳が更新されていない場合:
-
ディストリビューションIDと環境シークレットが正しいことを確認してください。
-
現在のアプリバージョンのリリースがで作成されていることを確認してください。
-
ViewController
を再読み込みして、変更を直ちに反映してください。
間違った翻訳バージョンを使用している場合は、最新の翻訳を含むリリースが提供され、現在のアプリのバージョンが使用可能であること、アプリのバージョン名
が <メジャー>.<マイナー>.<ポイント>.
ファイル形式になっていることを確認してください。
要件
-
SDKには少なくとも appcompat バージョン1.2.0が必要です。古いバージョンのappcompatを使用している場合は、SDKバージョン2.1.3の使用を検討してください
-
ライブラリは、ツールバーなどの下位互換性のあるUI要素をサポートするために AndroidX に依存しています。
SDKを含める
ルートの build.gradle
に新しいリポジトリを追加します。
allprojects { リポジトリ { ... maven { url "https://maven.download.phrase.com" } } }
ライブラリを依存関係として追加:
dependencies { implementation "com.phrase.android:ota-sdk:3.5.0" ... }
Jetpack Composeのサポート
OTA翻訳に対するJetpack Composeサポートを有効にするには、次の手順に従います。
-
ライブラリ
実装「com.phrase.android:OTA-sdk-compose:3.5.0」
をルートのbuild.gradle
に追加します。 -
Jetpack Compose コードを
phrase {...}
でラップします。
設定
アプリケーション クラスの SDK を初期化し、ディストリビューション ID と環境シークレットを追加します。アプリケーションから継承するクラスは、attachBaseContextを
上書きして、アクティビティコンテキスト外の翻訳を有効にする必要があります。
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)); } }
各アクティビティにSDKを挿入します。例えば、他のすべてのアクティビティが継承するベースアクティビティを作成します。
public class BaseActivity extends AppCompatActivity { @NonNull @Override public AppCompatDelegate getDelegate() { return Phrase.getDelegate(this, super.getDelegate()); } }
翻訳はレイアウトで通常どおり使用できます。
<TextView android:text="@string/translation_key" />
コード内部:
TextView text = (TextView) findViewById(R.id.text_id); text.setText(R.string.translation_key);
一部のライブラリはコンテキストの自動アンラップをサポートしておらず、特定のクラスを期待できます。この場合、Jetpack Composeコンポーネントでのコンテキストラッピングは次のようにして無効にできます。
Phrase(contextWrapping = false) { Text( text = phraseString(R.string.test) ) }
ログレベル設定:
-
Java
PhraseLog.setLogLevel(Severity.Debug);
-
コトリン語
PhraseLog.logLevel = Severity.Verbose
-
その他のサポートされているロギングオプション
-
なし
-
エラー
-
警告
-
概要
-
デバッグ
-
冗長
-
言語変更
システム言語を使用しない場合は、 setLocaleCode
メソッドで別の言語を設定できます。言語コード(ロケール)はリリースに存在する必要があります。
Phrase.setLocaleCode("fr"); Phrase.updateTranslations();
カスタムアプリバージョン
SDKはデフォルトでアプリバージョンを使用し、最小バージョンと最大バージョンのリリース制約に一致するリリースを返します。アプリ バージョンではセマンティック バージョニングを使用する必要があります。そうしなかった場合、翻訳更新は返されません。アプリケーションでセマンティック バージョニングを使用しない場合は、使用中のアプリケーション バージョンを手動で上書きできます。
例:
Phrase.setAppVersion("3.2.4");
updateTranslations()
を呼び出す前にバージョンを設定する必要があります。
タイムアウトを設定
翻訳ダウンロードのデフォルトのタイムアウトは10秒に設定されています。
デフォルトは以下で変更できます。
Phrase.setTimeout(10000); // ミリ秒単位のタイムアウト
コールバック更新
成功した翻訳更新の処理が必要な場合は、コールバックハンドラーを添付します。
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { } @Override public void onFailure() { } });
翻訳の更新は手動で行うこともできます。新しく取得した翻訳は、アプリケーションの次への起動時に表示されます。
最新の翻訳をすぐに利用可能にするには、 Phrase.applyPendingUpdates()
メソッドを使用します。これは、翻訳の更新をリッスンすることと組み合わせることができます。
Phrase.updateTranslations(new TranslationsSyncCallback() { @Override public void onSuccess(boolean translationsChanged) { if(translationsChanged) { Phrase.applyPendingUpdates() // UIを更新するカスタム } } @Override public void onFailure() { } });
UIには翻訳が自動的に表示されないため、作成する必要があります。
米国データセンター
phrase USデータセンターもサポートされています。米国データセンターは、次の電話番号で設定できます。
Phrase.setHost("https://ota.us.phrase.com/")
フォールバック
クライアントのネットワーク接続の欠落やサービスの中断によってphraseに到達できない場合、SDKはリソース ファイルからバンドルされた翻訳を使用します。アプリ内のバンドル翻訳の定期的な更新が推奨されます。また、SDKは翻訳をデバイスにローカルにキャッシュします。そのようなキャッシュが存在する場合、次への翻訳更新まで使用されます。
SDKは最新のリリースの翻訳を使用します。アプリケーションの versionName
が設定されている場合は、バージョン制限を満たす最新のリリースが使用されます。
新しい言語を追加する
phraseで新しい言語を作成し、新しいリリースを作成します。SDKは、これがユーザーのデバイス言語である場合に言語を取得します。新しいアプリ バージョンのリリース時に、新しい言語ファイル用に新しい Strings.xml
を定期的に追加することをお勧めします。そうしないと、ユーザーはアプリの開始時に Android によって決定されたフォールバック翻訳だけが表示されます。
監査
SDKは原文が閉じられているため、表示または変更できません。組織の要件である場合は、監査を提供できます。詳細については、必要に応じてお問い合わせください 。
カスタムビューのサポート
カスタムビューは、スタイル付きの属性を使用して翻訳できます。TypedArray
ではリソースを上書きできないため、カスタムビューを少し変更する必要があります。
-
Kotlinの例
変更前:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getText(R.styleable.CustomView_android_text) }
変更後:
context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use { text = it.getTextWithPhrase(R.styleable.CustomView_android_text) }
-
Java の例
変更前:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(ta.getText(R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
変更後:
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); try { setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text)); } finally { ta.recycle(); }
アプリ例
SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
要件
このライブラリは、Flutterの intlライブラリの0.18.0バージョンに依存しています。アプリケーションにローカライゼーションサポートを追加するには、ガイド に従ってください。
インストール
pubspec.yaml に phrase を追加:
依存関係: phrase: ^2.5.1 ... intl: ^0.18.0 flutter_localizations: sdk: flutter ... ゆらり: generate: true ...
内部
ライブラリと同様に、コード生成はARBファイルの処理に使用されます。次のコマンドを実行して更新します。
flutter pub run Phrase
build_runnerの使用:
flutter pub run build_runner watch
使用
Initialize phrase in the main.dart
file:
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( タイトル:'Flutterデモ', //.. localizationsDelegates:PhraseLocalizations.localizationsDelegates, supportedLocales:PhraseLocalizations.supportedLocales, ); } }
以下を使用してメッセージにアクセス:
Text(AppLocalizations.of(context)!.helloWorld);
カスタマイズ
更新動作
OTA翻訳は、アプリが起動されるたびに更新されます。これを無効にするには:
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", checkForUpdates: false);
手動更新:
Phrase.updateTranslations(context).then((_) => print("Done!"));
カスタムアプリバージョン
SDKはデフォルトでアプリバージョンを使用し、最小バージョンと最大バージョンのリリース制約に一致するリリースを返します。アプリ バージョンではセマンティック バージョニングを使用する必要があります。そうしないと、翻訳更新が返されません。アプリケーションでセマンティック バージョニングを使用しない場合、アプリケーション バージョンを手動で上書きできます。アプリケーション バージョンを手動で上書きすることもできます。
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", customAppVersion:"1.2.3");
米国データセンター
phrase USデータセンターもサポートされています。米国データセンターは、SDK設定で関連APIホスト名パラメーターを渡すことで選択できます。
Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", host:PhraseHost.us);
アプリ例
SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
Mac Catalyst もサポートされています。
SDKは、手動でインストールすることも、Swift Package Manager、Carthage、Cocoa Podsを介してインストールすることもできます。
翻訳が更新されていない場合:
-
ディストリビューションIDと環境シークレットが正しいことを確認してください。
-
現在のアプリバージョンのリリースがで作成されていることを確認してください。
-
ViewController
を再読み込みして、変更を直ちに反映してください。
間違ったバージョンの翻訳を使用している場合は、最新の翻訳を含むリリースと、現在のアプリバージョンが利用可能であることを確認してください。
Swiftパッケージマネージャ
公開リポジトリURL(https://GitHub.com/Phrase/ios-sdk/)を追加します。Xcodeが残りのインストールを自動的に処理します。
カルタゴ
次の行をカートファイルに追加します。
binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0
Carthage 更新を実行し、Carthage ドキュメントの説明に従って PhraseApp.framework
をプロジェクトに追加します。
Cocoa Pods
次の行を Podfile に追加:
pod 'PhraseSDK'
podのインストールを実行します。CocoaPods を初めて利用する場合は、CocoaPods のドキュメントを参照してください。
手動インストール
以下の手順を行ってください。
-
最新リリースをダウンロード。
-
リンクされたバイナリとして Xcode の
PhraseSDK.framework
を訳文に追加。 -
Appleストアはシミュレータのバイナリを含むアプリを拒否するため、アプリのアップロード前に余分なバイナリを取り除くスクリプトを実行する必要があります。
「
に移動し、「+」記号をクリックして「 セクションを追加します。このスクリプトにペーストします。FRAMEWORK="PhraseSDK" FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK" EXTRACTED_ARCHS=() $ARCHSのARCH用 する lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") 完了 lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
設定
-
Import PhraseSDK:
import PhraseSDK
-
以下のコードを呼び出し、SDK を初期化します。
Phrase.shared.setup( distributionID: <ディストリビューションID>, environmentSecret: <環境シークレット> )
-
ローカライゼーションファイルを更新するには、
Phrase.shared.updateTranslation()
を呼び出します。この方法では、SDK が正しくセットアップされていない場合に例外が発生します。
米国データセンターを使用するようにOTAを設定するには、
Phrase.shared.configuration.apiHost = .us
でPhraseApp.shared.updateTranslation()
を呼び出す前にホストを設定します。
AppDelegate
内の applicationDidFinishLaunchingWithOptions
メソッドで両方の機能を呼び出すことを推奨します。
Objective-C
SDKをObjective-Cアプリケーションに統合します。
@import PhraseSDK; @実装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]; // コールバックブロックを使用して翻訳を更新: [[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"); } // バンドルプロキシ経由で翻訳: NSString *translation = NSLocalizedString(@"layouts.application.about", @""); NSLog(@"NSLocalizedString via bundle proxy: %@", translation); // OR: // // 予備メソッドを使用した翻訳: NSString *otherTranslation = [[Phrase shared] localizedStringForKey:@"layouts.application.about" value:NULL table:NULL]; NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation); }]; // OR: // // [[Phrase shared] updateTranslationsWithCompletionHandler:NULL]; // 結果とエラーを無視(非推奨) // [...]あなたの他のコード return YES; }
回転無効
回転を無効にするには、 Info.plist
ファイルで PhraseSDKMainBundleProxyDisabled
を YES に設定します。
切り替え機能を無効にすると、更新された翻訳は表示されなくなります。updateTranslation
が呼び出され、 Phrase.localizedString()
メソッドでアクセスできる場合でも、翻訳は同期されます。
アプリバージョンの処理
どのリリースを返すべきかを判断するには、SDKにアプリのセマンティックバージョンが必要なため、翻訳が更新されます。
SDKは以下の方法でセマンティックバージョンを取得しようとします。
-
セマンティックの場合は
CFBundleShortVersionString
が使用されます。 -
そうでない場合は、セマンティックの場合は
CFBundleVersion
が使用されます。 -
両方が意味的でない場合、 (
CFBundleShortVersionString.CFBundleVersion
) の組み合わせが使用されます。
CFBundleShortVersionString
が欠けている、または CFBundleVersion
と一緒にセマンティック バージョンを作成できない場合、SDK は PhraseSetupError.appVersionNotSemantic
メッセージをスローします。
複数のテーブルの翻訳を無効
OTA がデフォルトの Localizable
テーブル以外の iOS メインバンドルのテーブルを翻訳しないようにするには、次のオプションを設定します。
Phrase.shared.configuration.ignoreOtherTables = true
コールバック
成功した翻訳更新を処理するコールバックハンドラーを追加します。
Phrase.shared.updateTranslation {の結果 switch result { case .success(let updated): case .failure: } }
デバッグモード
詳細情報が必要な場合は、デバッグモードを有効にして、PhraseSDK.framework
の追加ログをコンソールに記録してください。
Phrase.shared.configuration.debugMode = true
リクエストのタイムアウトを設定する
呼び出して、Phraseに対するリクエストのタイムアウトを設定します。
Phrase.shared.configuration.timeout = TimeInterval(20)
デフォルトのタイムアウトは10秒で、10秒を超えると接続は終了します。
手動言語上書きを提供する
ロケールとしてシステム言語を使用しない場合は、init コールで別のロケールを設定できます。ロケールコードはphrase:
Phrase.shared.configuration.localeOverride = "en-US"
フォールバック
SDK経由でPhraseから新しい翻訳を取得できない場合は、インストール時に受け取った最新の翻訳ファイルが使用されます。アプリがphraseから新しいファイルを受信しなかった場合、アプリのコンパイル済翻訳ファイルを使用します。これにより、技術的な問題やネットワーク エラーが発生した場合のエラーを防止できます。アプリにコンパイルされた翻訳ファイルは、リリースのたびに最新の状態に保つことをおすすめします。
監査
SDKは原文が閉じられているため、表示または変更できません。組織の要件である場合は、監査を提供できます。詳細については、必要に応じてお問い合わせください 。
SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
OTA翻訳ライブラリは、 react-i18next ライブラリでのみ機能します。
React Native SDKをインストールするには、次の手順に従います。
-
次のコマンドを実行します。
$ npm install react-native-Phrase-sdk --保存
-
Initialize phrase:
import Phrase from "react-native-phrase-sdk"; let phrase = new phrase( "YOUR_DISTRIBUTION_ID", "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET", "YOUR_APP_VERSION", "i18next" );
ファイル形式は、
i18next
(上の例)またはi18next_4
のいずれかになり、i18next v4 ファイル形式になります。phrase USデータセンターもサポートされています。React Native SDKを米国データセンターで使用するには、初期化時に関連ホストを渡します。
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/" );
-
インスタンスに基づいてi18nextバックエンドを作成:
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)
-
Phraseバックエンドで i18n を初期化:
i18n .use(ChainedBackend) .use(initReactI18next) .init({ backend: { backends: [backendPhrase, backendFallback] } //... });
サンプルの 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、// デフォルトでエスケープされるため react には不要 } });
アプリ例
i18next-Phrase-backendライブラリは、OTAリリースから翻訳を取得する i18next のためのexample backend を実装しています。
新しいリリースを作成するには、
プラットフォームがディストリビューション用に設定され、リリースに含まれている必要があります。使用
To initialize phrase:
import i18n from "i18next"; import { I18nextPhraseBackend } from "@phrase/i18next-backend"; i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { ディストリビューション:'DISTRIBUTION_ID', シークレット:'YOUR_ENVIRONMENT_SECRET', appVersion:'1.0.0', } });
キャッシング
ライブラリは翻訳をキャッシュしており、5分間新しい翻訳をチェックしません。キャッシングは、テストのためにバックエンド設定で cacheExpirationTime
オプションを設定することで設定できます。
i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { ディストリビューション:'DISTRIBUTION_ID', シークレット:'YOUR_ENVIRONMENT_SECRET', appVersion:'1.0.0', cacheExpirationTime:60 * 5、// 時間(秒) } });
備考
プロダクション環境では、少なくとも5分間のキャッシュ時間を使用することをお勧めします。
アプリ例
Phrase-OTA-i18nライブラリは、OTAリリースから翻訳を取得する I18n gem用のexample backend を実装しています。ライブラリを使用すると、アプリケーションは翻訳の更新を定期的に確認し、バックグラウンドでダウンロードします。
このライブラリは、i18n Gem を使用するすべての Ruby アプリケーションで有効です。
新しいリリースを作成するには、
プラットフォームがディストリビューション用に設定され、リリースに含まれている必要があります。インストール
-
次の行をアプリケーションの Gemfile に追加:
gem 'phrase-ota-i18n'
-
実行:
$バンドルインストール
-
または、次のようにインストールします。
$ gem install phrase-ota-i18n
使用
設定を生成するには、次の手順に従います。
bundle exec Rails generate Phrase_ota:install --distribution-ID <DISTRIBUTION_ID> --secret-トークン <SECRET>
デバッグ
この宝石には、次の設定により初期化ツールで有効にできるデバッグ
設定があります。
config.debug = true