新しいバージョンをApp StoreやGoogle Playにリリースすることなく、ワンクリックでiOS、Android、React Native、およびFlutterアプリケーションの翻訳を更新できます。テキストラベルの更新は即座にモバイルアプリケーションにプッシュされます。
OTA(Over-the-Air)は、i18nextおよびRailsプラットフォームとも統合されているため、ユーザーは再配置することなく、ウェブアプリケーションでローカライズされたコンテンツを更新および管理することができます。
更新された設定を適用するオーダーには、新しいリリースを作成する必要があります。リリースに含まれるすべてのコンテンツは、翻訳をアプリケーションに直接ストリーミングする Phrase Strings で使用できる必要があります。コンテンツが存在しない場合、翻訳は配信されません。
ユーザーが、iOS、Android、React Native、またはFlutter SDKを実装したアプリケーションをデバイスで初めて起動した際に、一意のランダムなデバイス識別子が生成されます。この識別子は、一定期間のアクティブ ユーザーを追跡します。この識別子は、他のいかなる形式や手段による追跡にも使用されず、ユーザーやデバイスの情報は含まれません。
OTAに関する唯一の制限は、選択した 料金プランに応じたMAU数(月間アクティブユーザー数)です。
MAUは、翻訳がリクエストされた一意のデバイスの数です。各デバイスにランダムなIDが割り当てられ、MAUは過去30日間に割り当てられた異なるIDの数から計算されます。phrase サーバーとのやりとりはすべて要求と見なされます。
データ
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 から、ページが開かれ、既存の設定が表示されます。
-
[New distribution] をクリックします。 のウィンドウが開きます。
-
「一般」タブで、 、ディストリビューションを関連付ける 、必要 、必要 を入力します。
-
Android ディストリビューションの場合は、必要に応じて Android タブをクリックして、CDATA で HTML tags を含むすべての翻訳を囲むファイル形式オプションを選択します。
-
ディストリビューションに関連付けるプロジェクトを選択すると、「スケジュール」タブが使用可能になります。必要に応じて、このタブを使用してディストリビューションでの OTA 予定リリース設定を行います。
-
-
[予備言語]タブで、必要に応じてディストリビューション固有の予備設定を選択します。フォールバック オプションは一覧に表示されるように優先順位付けされます。
-
オプションで、[翻訳] タブをクリックして、最新のレビュー済バージョンの翻訳を使用するオプションを選択します。
-
保存をクリックします。
ディストリビューションの詳細は、SDK に必要な ID で表示されます。詳細は、
ページからディストリビューションをクリックして再度表示できます。
翻訳を更新するには、ディストリビューション内で新しいリリースを作成します。プロジェクトの現在の状態がエクスポートされ、接続されているクライアントに利用可能になります。
リリースの作成手順は、次のとおりです。
-
Over the Air ページで、必要なディストリビューションの横にある Add release をクリックします。
「
ウィンドウが開きます。 -
、必要 、 、 、 を入力します。
必要に応じて tags を入力して、リリースに特定の tags を持つキーのみを含めるようにします。
-
保存をクリックします。
ディストリビューションの詳細ページ下部の一覧にリリースが追加されます。
ディストリビューションをリリースするための繰り返しスケジュールを設定するには、次の手順に従います。
-
[
]ページで、必要なディストリビューションの横にある[歯車]アイコンをクリックします 。
ウィンドウが表示されます。
-
リリーススケジュールタブを選択し、 をクリックします。
リリーススケジュールのオプションが表示されます。
備考
スケジュール オプションは、新規ディストリビューション作成時にも使用できます。
-
[
ドロップダウンから、使用可能なオプションのいずれかを選択してリリース頻度を選択します。-
-
予定されているリリースの希望する曜日を選択します。
-
-
時間と関連する
を入力します。 -
必要に応じて、予定されているリリースの
、 、 を選択します。-
フィールドは、プロジェクトでブランチ機能が有効な場合にのみ表示されます。ブランチを選択すると、ロケールと言語の一覧が更新されます。
-
-
オプションで、「
および「 フィールドでアプリケーションバージョンを指定します。空白にした場合、スケジュールリリースはアプリのすべてのバージョンに適用されます。
-
保存をクリックします。
ディストリビューションがリリーススケジュール情報で更新されます。
スケジュールを無効にすると、ディストリビューションの自動リリースが停止しますが、設定内容は保存されます。
適切なモバイルSDKまたはWebライブラリを統合すれば、ワンクリックで翻訳をアップデートできるだけでなく、使用状況を測定する指標も提供できます。モバイルSDKとWebライブラリのレポートは、アクティブアプリユーザーとそのアプリ言語に関する貴重な洞察を提供します。このレポートのセットはディストリビューションごとにアクセスでき、レポートのデータは1日2回更新されます。
レポートには、アクティブ ユーザー数、全体的なリクエスト、言語ごとのリクエスト、プラットフォームごとのリクエスト、提供されていないデバイスの言語ごとのリクエストが表示されます。
各ディストリビューションのレポートには、 アイコンからアクセスできます。
SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
定期的にAndroid SDKの最新リリースをチェックしましょう。特にアップグレードを検討しましょう。
翻訳が更新されていない場合:
-
ディストリビューションIDと環境シークレットが正しいことを確認してください。
-
現在のアプリバージョンのリリースがで作成されていることを確認してください。
-
ViewController
を再読み込みして、変更を直ちに反映してください。
間違ったバージョンの翻訳を使用している場合は、最新の翻訳が入ったリリースが入手可能であること、およびアプリケーションの versionName
が設定されていて <メジャー>.<マイナー>.<ポイント>.
ファイル形式になっていることを確認してください。
要件
-
SDK には少なくとも appcompat バージョン 1.2.0 が必要です。古いバージョンのappcompatを使用する場合は、SDKバージョン2.1.3の使用を検討してください
-
ライブラリは、ツールバーなどの下位互換性のある UI 要素をサポートするために AndroidX に依存しています。
SDKを含める
ルート build.gradle
に新しいリポジトリを追加します。
allprojects { repositories { ... maven { url "https://maven.download.phrase.com" } } }
ライブラリを依存関係として追加:
dependencies { implementation "com.phrase.android:ota-sdk:3.5.0" ... }
Jetpack Composeのサポート
Jetpack ComposeのOTA翻訳サポートを有効にするには、次の手順に従います。
-
ライブラリ
implemention "com.phrase.android:ota-sdk-compose:3.5.0"
を rootbuild.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
-
その他のサポートされているログオプション
-
None
-
Error
-
Warning
-
Info
-
Debug
-
Verbose
-
言語変更
システム言語を使用しない場合は、 setLocaleCode
メソッドで別の言語を設定できます。言語コード(ロケール)はリリースに含まれている必要があります。
Phrase.setLocaleCode("fr"); Phrase.updateTranslations();
カスタムアプリバージョン
SDK はデフォルトでアプリバージョンを使用し、最小バージョンと最大バージョンのリリース制約に一致するリリースを返します。このアプリ バージョンではセマンティック バージョニングを使用する必要があります。使用しない場合は、翻訳更新が返されません。アプリケーションでセマンティック バージョニングを使用しない場合は、使用中のアプリケーション バージョンを手動で上書きできます。
例:
Phrase.setAppVersion("3.2.4");
updateTranslations()
を呼び出す前にバージョンを設定する必要があります。
タイムアウトの設定
翻訳ダウンロードのデフォルトのタイムアウトは10秒に設定されています。
デフォルトは以下で変更できます。
Phrase.setTimeout(10000); // Timeout in milliseconds
コールバックの更新
翻訳の更新が成功した場合の処理が必要な場合は、コールバックハンドラーを添付します。
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() // Custom logic to refresh 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は原文が閉じられているため、表示または変更できません。組織の要件である場合は、監査を提供できます。詳細については、必要に応じてお問い合わせください 。
カスタムビューのサポート
カスタム ビューは、styled 属性を使用して翻訳できます。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 を追加:
dependencies: phrase: ^2.5.1 ... intl: ^0.18.0 flutter_localizations: sdk: flutter ... flutter: generate: true ...
intl
ライブラリと同様に、コード生成は 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( タイトル:'フラッターデモ', //.. 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]", ホスト:PhraseHost.us);
アプリ例
SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。
Mac Catalyst もサポートされています。
SDKは、手動でインストールすることも、Swift Package Manager、Carthage、Cocoa Pods経由でインストールすることもできます。
翻訳が更新されていない場合:
-
ディストリビューションIDと環境シークレットが正しいことを確認してください。
-
現在のアプリバージョンのリリースがで作成されていることを確認してください。
-
ViewController
を再読み込みして、変更を直ちに反映してください。
間違ったバージョンの翻訳を使用している場合は、最新の翻訳を含むリリースと現在のアプリバージョンが利用可能であることを確認してください。
Swift Package Manager
パブリック リポジトリ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=() 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"
設定
-
インポート PhraseSDK:
import PhraseSDK
-
以下のコードを呼び出して SDK を初期化します。
Phrase.shared.setup( distributionID: <Distribution ID>, environmentSecret: <Environment Secret> )
-
ローカライゼーションファイルを更新するには、
Phrase.shared.updateTranslation()
を呼び出します。このメソッドは、SDK が正しくセットアップされていない場合に例外を発生させます。
米国データセンターを使用するようにOTAを設定するには、
PhraseApp.shared.updateTranslation()
を呼び出す前に、Phrase.shared.configuration.apiHost = .us
でホストを設定します。
AppDelegate
内の applicationDidFinishLaunchingWithOptions
メソッドで両方の機能を呼び出すことを推奨します。
目的-C
SDKを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; }
スウィズリング無効
回転を無効にするには、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 { result in switch result { case .success(let updated): case .failure: } }
debug mode
詳細な情報が必要な場合は、Debugモードを有効にして、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 --save
-
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/" );
-
インスタンスに基づいてi18nextnextバックエンドを作成する:
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, // not needed for react as it escapes by default } });
アプリ例
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', secret:'YOUR_ENVIRONMENT_SECRET', appVersion:'1.0.0', } });
キャッシュ
ライブラリは翻訳をキャッシュしており、5分間新しい翻訳をチェックしません。キャッシュは、バックエンドの設定で cacheExpirationTime
オプションを設定することで設定できます。
i18n .use(I18nextPhraseBackend) .init({ fallbackLng: 'en', backend: { ディストリビューション:'DISTRIBUTION_ID', secret:'YOUR_ENVIRONMENT_SECRET', appVersion:'1.0.0', cacheExpirationTime:60 * 5、// 時間(秒) } });
備考
実動環境では、少なくとも5分間のキャッシュ時間の使用が推奨されます。
アプリ例
Phrase-OTA-i18nライブラリは、OTAリリースから翻訳を取得する the I18n gemの example backend を実装しています。ライブラリを使用すると、アプリケーションは定期的に更新された翻訳をチェックし、バックグラウンドでダウンロードします。
ライブラリは、i18n Gem を使用するすべての Ruby アプリケーションで有効です。
新しいリリースを作成するには、
プラットフォームがディストリビューション用に設定され、リリースに含まれている必要があります。インストール
-
次の行をアプリケーションの Gemfile に追加:
gem 'phrase-ota-i18n'
-
実行:
$ bundle install
-
または、次のようにインストールします。
$ gem install phrase-ota-i18n
使用例
設定を生成する
bundle exec rails generate phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>
デバッグ
gem には Debug
設定があり、次の設定で初期化時に有効にできます。
config.debug = true