翻訳の管理

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 プラットフォームとも統合されているため、ユーザーは 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)

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

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. 新規ディストリビューション」をクリックします。配布の追加のウィンドウが開きます。

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

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

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

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

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

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

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

OTAリリース

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

リリースを作成するには、次の手順に従います。

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

    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およびウェブライブラリレポート

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

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

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

OTA Android SDKのインストール

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

  1. ライブラリ実装「com.phrase.android:OTA-sdk-compose:3.5.0」をルートの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

  • その他のサポートされているロギングオプション

    • なし

    • エラー

    • 警告

    • 概要

    • デバッグ

    • 冗長

言語変更

システム言語を使用しない場合は、 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();
    }

アプリ例

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

OTA Flutter SDKのインストール

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

アプリ例

https://github.com/phrase/flutter_sdk_example

OTA iOSのインストール

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

手動インストール

以下の手順を行ってください。

  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=()
    $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"

設定

  1. Import PhraseSDK:

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

    Phrase.shared.setup(
      distributionID: <ディストリビューションID>,
      environmentSecret: <環境シークレット>
    )
  3. ローカライゼーションファイルを更新するには、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 ファイルで 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 {の結果
            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は原文が閉じられているため、表示または変更できません。組織の要件である場合は、監査を提供できます。詳細については、必要に応じてお問い合わせください 。

OTA React Native SDKのインストール

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

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

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

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

    $ npm install react-native-Phrase-sdk --保存
  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. インスタンスに基づいて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)
  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、// デフォルトでエスケープされるため react には不要
    }
  });

アプリ例

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',
      シークレット:'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分間のキャッシュ時間を使用することをお勧めします。

アプリ例

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

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

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

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

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

インストール

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

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

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

    $ gem install phrase-ota-i18n

使用

設定を生成するには、次の手順に従います。

bundle exec Rails generate Phrase_ota:install --distribution-ID <DISTRIBUTION_ID> --secret-トークン <SECRET>

デバッグ

この宝石には、次の設定により初期化ツールで有効にできるデバッグ設定があります。

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.