1771906037
2026-02-23 06:58:00
Optimizely CMS をある程度の時間使用したことがある人なら、XML ファイルによるローカリゼーションの管理が面倒な作業であることをご存知でしょう。コンテンツ タイプ名、プロパティ キャプション、タブ名、エディター ヒント – これらはすべて翻訳が必要ですが、これらの XML ファイルを複数の言語にまたがって整理しておくのは楽しいことではありません。
私は、翻訳はパートナーが所有し、ソース管理で管理する必要があると強く信じています。とはいえ、コードをデプロイすることなく、DXP 環境でローカリゼーションを迅速に修正する必要があることは十分に理解しています。リソース エディターは、開発中に編集して XML ファイルに保存し、本番環境で迅速な修正が必要な場合に DDS (ダイナミック データ ストア) 経由でランタイム オーバーライドを適用するという両方のシナリオを処理できるように構築されています。
このツールは小さなアイデアとして始まりましたが、機能を追加し続けるにつれてかなり大きくなりました。これは Blazor Server と MudBlazor で構築され、Optimizely プロジェクトで参照できる Razor クラス ライブラリとしてパッケージ化されています。
注: リソース エディターは、ローカライズのための手動の XML 編集を置き換える Optimizely CMS 用の Blazor ベースの管理ツールです。コンテンツ タイプ名、プロパティ、タブ、表示チャネル、エディター ヒント、フロントエンド翻訳のビジュアル エディターが提供され、すべて多言語がサポートされています。機能には、完全性ダッシュボード、DDS によるランタイム オーバーライド (デプロイは不要)、DeepL を利用したフィールド/アイテム/バルク レベルでの自動翻訳、CSV インポート/エクスポート、従来の XML 形式からのガイド付き移行などがあります。
はじめる
public void ConfigureServices(IServiceCollection services)
{
services.AddServerSideBlazor();
services.AddMudServices();
// Optional: Add DeepL translation (must be registered before AddResourceEditor)
services.AddDeepLTranslation(_configuration);
// Register Resource Editor services
services.AddResourceEditor(_configuration);
}
設定は「appsettings.json」を通じて行われます。
{
"ResourceEditor": {
"TranslationFolder": "Resources/Translations",
"EnableFileSaving": true,
"EnableOverrides": true,
"ShowOverridesUI": true,
"EnableAutomatedTranslation": true,
"DeepL": {
"ApiKey": "your-api-key",
"UseFreeApi": true
}
}
}
ツールをレンダリングする方法に応じて、Blazor コンポーネントをホストするための CSHTML ページも必要です。このツールは、標準の Optimizely レイアウトを使用せずに、フルページの Blazor アプリケーションとして実行されます。
@using Nergard.ResourceEditor.Components
@using Microsoft.AspNetCore.Components.Web
@model PageViewModel
@{ Layout = null; }
Resource Editor
@Html.AntiForgeryToken()
Optimizely でページ タイプを作成し、コントローラーとビューを設定すれば準備完了です。
ダッシュボード
リソース エディターを開くと、ダッシュボードが表示されます。これにより、設定されているすべての言語にわたる翻訳の完全性の概要が得られます。各言語カードにはコンテンツ タイプ、プロパティ、タブの進行状況が表示されるため、翻訳が不足している箇所をすぐに確認できます。
ダッシュボードには、ビュー/フロントエンド翻訳ファイルとそれぞれの完了ステータスも表示されます。
言語カードをクリックすると、その言語の言語概要が直接表示されます。詳細については、この投稿の後半で説明します。
コンテンツタイプエディター
おそらくここでほとんどの時間を過ごすことになります。エディターを使用すると、すべてのコンテンツ タイプの翻訳を管理でき、ページ、ブロック、メディアの 3 つのセクションで構成されます。
コンテンツ タイプごとに、すべての言語で名前と説明を編集できます。コンテンツ タイプを展開すると、そのすべてのプロパティにアクセスでき、キャプション (ラベル) とヘルプ テキストの両方を編集できます。
エディターは共有プロパティ (複数のコンテンツ タイプに存在するプロパティ) を検出し、それらを強調表示します。これは、Optimizely の共有プロパティが「icontentdata」を介したフォールバック メカニズムを使用するため、共有プロパティの変換を変更すると複数のコンテンツ タイプに影響を与える可能性があるため便利です。同じ名前のプロパティはソリューション全体で一貫している必要があると考えているため、保存された XML ファイルの基本タイプは icontentdata になります。
一度に 1 つの言語のみに焦点を当てたい場合は、言語でフィルタリングできます。このツールは自動翻訳をサポートしていますが、手動で管理する必要があるマスター言語はサポートしていません。

タブエディタ
タブ エディターは、プロパティ グループ名 (タブ) のローカライズを処理します。これらは、コンテンツ編集 UI で編集者に表示されるタブ ラベルです。
これは、コンテンツ タイプ エディターと同じように機能します。タブを選択し、構成されているすべての言語にわたって名前を編集し、保存します。

チャンネルとエディターのヒントを表示する
2 つの小さなエディターは、表示チャンネル名とエディター ヒント名を処理します。同じパターン - 項目を選択し、翻訳を編集し、保存します。これらはあまり必要ではありませんが、カバーしておくと便利です。

表示 / フロントエンド翻訳
リソース エディターはビュー変換ファイルも処理します。
これらのファイルは、すべての言語が 1 つの XML ファイルに含まれる多言語形式を使用します。エディターはそれらをナビゲート可能なツリー構造として表示し、言語ごとに値を編集したり、新しいセクションを追加したり、新しいキーを追加したりできます。
ファイル パターンは、`ViewFilePattern` オプションを使用して構成できます (デフォルトは `views_*.xml`)。

言語の概要
言語の概要では、単一の言語に焦点を当てたビューが表示されます。すべてのコンテンツ タイプとそのプロパティが翻訳ステータス インジケーターとともに表示されるため、不足している翻訳を体系的に処理できます。
ここには、一括翻訳ボタンもあります。ワンクリックで、言語の不完全なフィールドをすべて翻訳します。
注記!自動翻訳は非マスター言語のみを対象としています。したがって、マスター言語用に適切なローカライズ テキストを作成するために努力すれば、他の言語でも恩恵を受けることができます。

オーバーライド
これは、リソース エディターを DXP 環境で適切に動作させるための機能です。オーバーライドは動的データ ストアに保存され、実行時に XML 変換よりも優先されるため、展開は必要ありません。
オーバーライド システムは、プロバイダー チェーンの位置 0 に自動的に登録されるカスタム `LocalizationProvider` を通じて機能します。 Optimizely がローカリゼーション キーを解決するとき、オーバーライド プロバイダーは最初に DDS をチェックします。オーバーライドが存在しない場合は、標準の XML ベースのプロバイダーに渡されます。
**既知の問題:** 現在、ヘルプ テキストのオーバーライドは期待どおりに機能するものの、オーバーライドされたコンテンツ タイプのキャプション (名前) が Optimizely によって正しく認識されない可能性があるという既知の問題があります。調査のために Optimizely の継続的なサポート チケットを持っています。
インラインオーバーライド
`ShowOverridesUI` が有効になっている場合、エディターのすべてのテキスト フィールドに小さなオーバーライド ボタンが表示されます。それをクリックすると、その特定のフィールドと言語のオーバーライドを作成できます。オーバーライドは DDS に保存され、すぐに有効になります。

オーバーライドマネージャー
- 言語と値を含むすべてのアクティブなオーバーライドを表示します
- 言語でフィルターし、プロパティ名で検索します
- 個々のオーバーライドを追加、編集、削除する
- **CSV にエクスポート** 文書化またはバックアップ用に
- **CSV からインポート** 一括操作
- **XML に保存**してオーバーライドを永続的な翻訳ファイルに移行します
- すべてのオーバーライドをクリアします

DeepLによる自動翻訳
自動翻訳を有効にして DeepL サービスを登録すると、リソース エディターは次の 3 つのレベルで翻訳支援を提供します。
1. **フィールド レベル** - 各テキスト フィールドには、デフォルト言語から翻訳する翻訳ボタンが表示されます。
2. **項目レベル** - 各エディターのヘッダーにある「翻訳不足」ボタンにより、現在の項目の空のフィールドがすべて翻訳されます。
3. **一括レベル** - 言語概要で、言語全体の不完全なフィールドをすべて翻訳します。
翻訳はフィールドに入力されますが、自動的には保存されません。結果を確認して満足したら保存します。
これを有効にするには、DeepL の無料枠にサインアップし、リソース エディターの前に DeepL サービスを登録します。
services.AddDeepLTranslation(_configuration);
services.AddResourceEditor(_configuration);
翻訳サービスはプラグイン可能です。 DeepL 以外のプロバイダを使用したい場合は、`AddResourceEditor()` を呼び出す前に、`ITranslationService` を実装して登録します。

XMLの移行
従来の Alloy XML 形式 (`ContentTypeNames.xml`、`PropertyNames.xml`、`GroupNames.xml` などの個別のファイル) で翻訳された既存のサイトがある場合、リソース エディターはこれを自動的に検出し、ガイドに従って独自の形式への移行を提供します。移行は、進行状況の追跡とエラーのレポートを使用して段階的に実行されます。

構成オプション
すべての構成オプションの概要を次に示します。
| Option | Default | Description |
|--------|---------|-------------|
| `TranslationFolder` | `Resources/Translations` | Path to translation XML files |
| `EnableFileSaving` | `true` | Allow saving to XML files. Set to `false` on DXP |
| `EnableOverrides` | `true` | Enable DDS-based runtime overrides |
| `ShowOverridesUI` | `true` | Show inline override buttons in editors |
| `EnableAutomatedTranslation` | `false` | Enable automated translation features |
| `ViewFilePattern` | `views_*.xml` | Glob pattern for view translation files |
一般的な DXP 構成は次のようになります。
{
"ResourceEditor": {
"EnableFileSaving": false,
"EnableOverrides": true,
"ShowOverridesUI": true
}
}
ソースコードとライセンス
2026 年 2 月 23 日
#リソース #エディター #Optimizely #のローカリゼーション管理ツール