翻訳の管理

Over the Air (Strings)

本コンテンツはPhrase Language AIの機械翻訳により、英語から翻訳されています。

新しいバージョンをApp StoreやGoogle Playにリリースすることなく、ワンクリックでiOS、Android、React Native、およびFlutterアプリケーションの翻訳を更新できます。テキストラベルの更新は即座にモバイルアプリケーションにプッシュされます。

OTA_user_device_diagram.png

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)

  • 環境シークレット(開発と本番を区別する)

OTAディストリビューション

訳文プラットフォームはディストリビューション内で定義されています。

  • iOS

  • Android

  • Flutter

  • i18next

  • Rails

複数のディストリビューションが可能ですが、プロジェクトごとに 1 つのディストリビューションが存在するのが理想です。iOS と Android 用のディストリビューションを使用している場合、2 つの形式のプレースホルダーは自動的に変換されます。

フォールバック

ディストリビューションが接続されているプロジェクトの言語設定で言語フォールバックが設定されている場合、要求された言語が存在するがキーが未翻訳であれば、選択された言語の Strings が表示されます。

リリースに含まれていない特定の国固有の言語 (en-GB など) が使用されている場合、その言語の標準バージョン (en など) がプロジェクトに存在する場合、システムはフォールバックできます。要求された言語がまったく見つからない場合、代わりにプロジェクトのデフォルトロケールを使用できます。

ディストリビューションの作成

ディストリビューションを作成するには、次の手順に従います。

  1. [Integrations] ページの Over the Air (OTA) Box から、[Configure] をクリックするか、すでに設定がある場合は設定の数をクリックします。

    Over the Air ページが開かれ、既存の設定が表示されます。

  2. [New distribution] をクリックします。配布の追加のウィンドウが開きます。

  3. 一般」タブで、名前、ディストリビューションを関連付けるプロジェクト、必要な言語、必要なプラットフォームを入力します。

    • Android ディストリビューションの場合は、必要に応じて Android タブをクリックして、CDATA で HTML tags を含むすべての翻訳を囲むファイル形式オプションを選択します。

    • ディストリビューションに関連付けるプロジェクトを選択すると、「スケジュール」タブが使用可能になります。必要に応じて、このタブを使用してディストリビューションでの OTA 予定リリース設定を行います。

  4. [予備言語]タブで、必要に応じてディストリビューション固有の予備設定を選択します。フォールバック オプションは一覧に表示されるように優先順位付けされます。

  5. オプションで、[翻訳] タブをクリックして、最新のレビュー済バージョンの翻訳を使用するオプションを選択します。

  6. 保存をクリックします。

    ディストリビューションの詳細は、SDK に必要な ID で表示されます。詳細は、Over the Air ページからディストリビューションをクリックして再度表示できます。

OTAリリース

翻訳を更新するには、ディストリビューション内で新しいリリースを作成します。プロジェクトの現在の状態がエクスポートされ、接続されているクライアントに利用可能になります。

リリースの作成手順は、次のとおりです。

  1. Over the Air ページで、必要なディストリビューションの横にある Add release をクリックします。

    New release」ウィンドウが開きます。

  2. 説明、必要なプラットフォームブランチロケールアプリのバージョンを入力します。

    必要に応じて tags を入力して、リリースに特定の tags を持つキーのみを含めるようにします。

  3. 保存をクリックします。

    ディストリビューションの詳細ページ下部の一覧にリリースが追加されます。

OTAリリースのスケジュール

ディストリビューションをリリースするための繰り返しスケジュールを設定するには、次の手順に従います。

  1. [Over the Air]ページで、必要なディストリビューションの横にある[歯車Phrase_Gear.png]アイコンをクリックします 。

    配布の編集ウィンドウが表示されます。

  2. リリーススケジュールタブを選択し、スケジュール有効をクリックします。

    リリーススケジュールのオプションが表示されます。

    備考

    スケジュール オプションは、新規ディストリビューション作成時にも使用できます。

  3. Create releases every] ドロップダウンから、使用可能なオプションのいずれかを選択してリリース頻度を選択します。

    • 予定されているリリースの希望する曜日を選択します。

  4. 時間と関連するタイムゾーンを入力します。

  5. 必要に応じて、予定されているリリースのブランチtagsLanguages を選択します。

    • ブランチフィールドは、プロジェクトでブランチ機能が有効な場合にのみ表示されます。ブランチを選択すると、ロケールと言語の一覧が更新されます。

  6. オプションで、「最小バージョン」および「最大バージョン」フィールドでアプリケーションバージョンを指定します。

    空白にした場合、スケジュールリリースはアプリのすべてのバージョンに適用されます。

  7. 保存をクリックします。

    ディストリビューションがリリーススケジュール情報で更新されます。

スケジュールを無効にすると、ディストリビューションの自動リリースが停止しますが、設定内容は保存されます。

備考

継続的な改善が行われているため、ユーザーインターフェイスは動画で紹介されているものと完全に同じではない可能性があります。

OTAモバイルSDKおよびWebライブラリレポート

適切なモバイルSDKまたはWebライブラリを統合すれば、ワンクリックで翻訳をアップデートできるだけでなく、使用状況を測定する指標も提供できます。モバイルSDKとWebライブラリのレポートは、アクティブアプリユーザーとそのアプリ言語に関する貴重な洞察を提供します。このレポートのセットはディストリビューションごとにアクセスでき、レポートのデータは1日2回更新されます。

レポートには、アクティブ ユーザー数、全体的なリクエスト、言語ごとのリクエスト、プラットフォームごとのリクエスト、提供されていないデバイスの言語ごとのリクエストが表示されます。

各ディストリビューションのレポートには、Over the Air ページの Reports.jpg アイコンからアクセスできます。

OTA Android SDKのインストール

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翻訳サポートを有効にするには、次の手順に従います。

  1. ライブラリ implemention "com.phrase.android:ota-sdk-compose:3.5.0" を root build.gradle に追加。

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

アプリ例

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

OTA Flutter SDKのインストール

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

アプリ例

https://github.com/phrase/flutter_sdk_example

OTA iOSのインストール

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 のドキュメントを参照してください。

手動インストール

手順は、次のとおりです。

  1. 最新リリースをダウンロードします。

  2. リンクされたバイナリとして Xcode で PhraseSDK.framework を訳文に追加。

  3. Appleストアはシミュレータバイナリを含むアプリを拒否するため、アプリのアップロード前に余分なバイナリを取り除くスクリプトを実行する必要があります。

    Build Phases(ビルドフェーズ)」に移動し、「+」記号をクリックして「Run Script(スクリプトの実行)」セクションを追加します。このスクリプトにペースト:

    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"

設定

  1. インポート PhraseSDK:

    import PhraseSDK
  2. 以下のコードを呼び出して SDK を初期化します。

    Phrase.shared.setup(
      distributionID: <Distribution ID>,
      environmentSecret: <Environment Secret>
    )
  3. ローカライゼーションファイルを更新するには、 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 ファイルで PhraseSDKMainBundleProxyDisabledYES に設定します。

スワイズ機能が無効になっている場合、更新された翻訳は表示されなくなります。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は原文が閉じられているため、表示または変更できません。組織の要件である場合は、監査を提供できます。詳細については、必要に応じてお問い合わせください 。

OTA React Native SDKのインストール

SDKを使用すると、アプリは更新された翻訳を定期的にチェックし、バックグラウンドでダウンロードします。

OTA 翻訳用のライブラリは、react-i18next ライブラリでのみ機能します。

React Native SDKをインストールするには、次の手順に従います。

  1. 次のコマンドを実行します。

    $ npm install react-native-phrase-sdk --save
  2. 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/"
    );  
    
  3. インスタンスに基づいて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)
  4. 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
    }
  });

アプリ例

https://github.com/phrase/react_native_sdk_example

OTA i18nextバックエンドのインストール

i18next-Phrase-backendライブラリは、OTAリリースから翻訳を取得する i18next のexample backend を実装しています。

新しいリリースを作成するには、i18next プラットフォームがディストリビューション用に設定され、リリースに含まれている必要があります。

使用例

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分間のキャッシュ時間の使用が推奨されます。

アプリ例

https://github.com/phrase/ota-web-demo

OTA Rails バックエンドのインストール

Phrase-OTA-i18nライブラリは、OTAリリースから翻訳を取得する the I18n gemの example backend を実装しています。ライブラリを使用すると、アプリケーションは定期的に更新された翻訳をチェックし、バックグラウンドでダウンロードします。

ライブラリは、i18n Gem を使用するすべての Ruby アプリケーションで有効です。

新しいリリースを作成するには、Rails プラットフォームがディストリビューション用に設定され、リリースに含まれている必要があります。

インストール

  1. 次の行をアプリケーションの Gemfile に追加:

    gem 'phrase-ota-i18n'
  2. 実行:

    $ bundle install
  3. または、次のようにインストールします。

    $ gem install phrase-ota-i18n

使用例

設定を生成する

bundle exec rails generate phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>

デバッグ

gem には Debug 設定があり、次の設定で初期化時に有効にできます。

config.debug = true
この記事は役に立ちましたか?

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.