機械翻訳
ローカリゼーション管理者ページは、ローカリゼーションJSONファイルを1つ以上の言語に機械翻訳して1回のパスで行えます。プロバイダーに依存しない抽象化(各船にAzure AI Translator、DeepL、Google Cloud Translationが組み込まれています)に基づいており、Dataverseバックアップの翻訳メモリを再利用するため、各文字列に一度だけ翻訳料金を支払うことができます。結果は言語ごとまたは単一のzipファイルとしてダウンロードされ、それぞれに新たに翻訳された文字列数と記憶から再利用した文字列数が注釈付きで提供されました。
ファイルの翻訳
機能の設定が完了すると(下記 の設定参照)、フレームワークのローカリゼーション管理ページに翻訳パネルが表示されます。
- ファイルをアップロードする — ドラッグ&ドロップや
app.en.jsonのようなローカリゼーションJSONファイルにブラウズできます。 - ソース言語を確認してください — ファイル名のカルチャーセグメント(
app.en.json)から自動検出され、編集可能なままです。 - ターゲット言語を選ぶ — ポータルが支援するすべての文化を提供し、プロバイダーが翻訳できるものが提供されています。プロバイダーが翻訳できない培養は無効化されています。
- 翻訳 — 文字列はプロバイダーのリクエストあたりの制限を尊重するバッチで送信され、選択した言語は同時に翻訳されます。
- ダウンロード — 各言語を単独または全部zipとして入手できます。各行は、翻訳された文字列数と記憶から再利用された文字列数を報告しています。
翻訳記憶
プロバイダーが翻訳する各文字列はDataverseに保存され、ソーステキスト、ソース言語、ターゲット言語でキーが割り当てられます。同じ文字列が次に届くとき――別のファイルや別の実行、あるいは手つかずの編集で――は再送信ではなくメモリから送信されます。プロバイダーは文字ごとに課金するため、繰り返し実行や段階的な再翻訳はほぼ無料で、言語ごとの結果は分割を示して、何が新しく使われたか正確に確認できます。
セットアップ
移動パネルは、下記の両パーツが揃った場合にのみ表示されます。そうでなければ、管理者ページで省略されるか(あるいは欠けているものを説明する一行のプロンプトが表示されます)。
1. 翻訳メモリソリューションのインストール
翻訳メモリは、 PowerPortalsProLocalization 管理ソリューションによってプロビジョニングされた2つのDataverseテーブルに存在します。 GitHubのリリース から最新のマネージドソリューションをダウンロードし、環境にインポートしてください。管理者ページは解決策を固有の名前で検出し、存在してからのみ翻訳を提供します。
2. 翻訳提供者を登録する
Azure AI Translator、DeepL、Google Cloud Translationの3つのプロバイダーが、それぞれ独自のNuGetパッケージで提供されるため、コアフレームワークは翻訳ベンダーに依存しません。キーを持っているサービスのパッケージを追加して、 AddPowerPortalsProWebServer()の隣に登録してください。Azureの場合は無料(F0)または有料の Azure AI翻訳 ツールリソースを作成し、キーと地域で登録してください:
// Azure AI翻訳プロバイダーを登録してください — パネルを隠すためにキーは設定せずに残す
builder.Services
.AddPowerPortalsProWebServer()
.AddPowerPortalsProAzureTranslationService(options =>
{
options.TranslationKey = builder.Configuration["Azure:Translation:Key"];
options.Region = "westus";
});
DeepLの場合は、PowerPortalsPro.Web.Server.Translation.DeepLパッケージを追加し、認証キー(無料キーは無料でエンドポイントに自動的に:fxルート)で登録します。
// DeepLプロバイダーを登録してください — パネルを隠すためにキーは設定せずにいてください
builder.Services
.AddPowerPortalsProWebServer()
.AddPowerPortalsProDeepLTranslationService(options =>
{
options.AuthKey = builder.Configuration["DeepL:Translation:Key"];
});
Google Cloud Translationの場合は、PowerPortalsPro.Web.Server.Translation.Googleパッケージを追加し、Cloud Translation APIが有効のAPIキーで登録してください:
// Google Cloud Translationプロバイダーに登録してください — パネルを隠すためにキーは設定せずにいてください
builder.Services
.AddPowerPortalsProWebServer()
.AddPowerPortalsProGoogleTranslationService(options =>
{
options.ApiKey = builder.Configuration["Google:Translation:Key"];
});
注記
キーを空欄にしておくのは安全です。プロバイダーが登録されておらず、翻訳パネルも非表示のままなので、同じビルドが変換の設定の有無にかかわらず動作します。
ご自身のプロバイダーを連れてきてください
翻訳は提供者に依存しません。組み込みのAzure、DeepL、Googleプロバイダーはそれぞれ ITranslationProviderの実装であり、それぞれ独自の PowerPortalsPro.Web.Server.Translation.* パッケージで提供されているため、コアフレームワークは翻訳ベンダーに依存しません。Amazon Translate、オンプレミスモデル、LLMなどの別のサービスを使う場合は、組み込みのものの代わりに ITranslationProvider を実装し登録してください。それ以上のもの(管理UI、翻訳メモリ、バッチ処理、翻訳と再利用のカウント)は同じままです。
ブレイザーとリアクション
翻訳パネルは両方のスタックで独立したコンポーネントなので、フレームワークの管理ページではなく自分の管理ページにホストできます。それぞれが独自の可用性データを読み込み、変換が設定されるまで何もレンダリングしません。
// プロバイダーが設定されてソリューションがインストールされていない限り、何もレンダリングされません
import { LocalizationTranslator } from '@powerportalspro/react-fluent';
<LocalizationTranslator /><!-- プロバイダーが設定されてソリューションがインストールされていない限り、何もレンダリングされません -->
<LocalizationTranslator />注記
翻訳実行は自動的に制限されており、リクエストはプロバイダーのリクエストごとのサイズ制限内に収まるように分割され、ターゲット言語は同時実行に上限が設定され、スロットル(HTTP 429)応答は指数関数的なバックオフで再試されます。つまり、大規模な多言語ジョブは追加の設定なしでどのプロバイダー層でもレート制限内に収まります。
