メッセージ - グローバル
Message Server API を使用すると、code パラメーターに等しいコード、message パラメーターに等しいキー、およびセッションの言語 (またはフォールバック言語) に等しい言語を持つエントリのメッセージ [sys_ui_message] テーブルからローカライズされたメッセージを取得できます。
- 曖昧性除去:
コードとメッセージの複合キーを使用して、異なるコンテキストで使用される同一の文字列を区別します(たとえば、動詞と名詞としての「open」)。 - 名前付きパラメーター: 名前付きプレースホルダーを使用して、値をメッセージテンプレートに動的に補間できます。
- 言語制御:
getMessageLangを使用すると、ターゲット言語を指定でき、差し込み印刷や多言語通知などのシナリオに役立ちます 2 3.
メッセージ API は、sn_i18n 名前空間内の標準ベースシステムで提供され、アクセスするためにプラグインや特別なロールは必要ありません。このクラス内のメソッドを呼び出す前に、適切なメッセージ [sys_ui_message] レコードが存在し、一致する キー フィールドと コード フィールドが入力されていることを確認してください。
Message.getMessage(String code, String message, Map args)
曖昧性除去と動的なコンテンツ挿入を可能にしながら、メッセージ [sys_ui_message] テーブルからローカライズされたメッセージを取得します。
API は翻訳者向けのインラインコメントをサポートし、多言語コンテキストでの明確さを高め、あいまいさを軽減します。コメントはメッセージ [sys_ui_message] のキーフィールドでは使用されませんが、コメントされた文字列を [commented_message] フィールドに追加できます。args パラメーターの値は、文字列内の一致するテンプレートリテラルに補間されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| コード | 文字列 | 必須。類似したテキストで意味やコンテキストが異なるメッセージを区別するための曖昧性除去キー。文字列がスコープ内で一意である場合は、スコープ名を使用できます。さらに曖昧さ回避が必要な場合は、拡張することができます。 たとえば、「オープン」はステータスまたはアクションを意味する場合があり、コードパラメーターはどちらであるかを明確にするのに役立ちます。同じ文字列で大文字と小文字が異なる 2 つのメッセージが必要な場合、スクリプトは次のようになります。 |
| メッセージ | 文字列 | オプション。ローカライズされたバージョンが見つからない場合に使用するデフォルトのメッセージ文字列。メッセージ [sys_ui_message] テーブルの キー フィールドに対応します。 |
| 引数 | JSON | オプション。メッセージを動的に値を挿入するために使用される名前付きパラメーターのマップ。キーは、メッセージ内の名前付きパラメーターと一致します。値は、スコープ内にある文字列リテラルまたは変数/定数にすることができます。 たとえば、メッセージが "Hello, ${John}!" の場合、{name: "John"} を渡して "Hello, John!" をレンダリングできます。 |
| タイプ | 説明 |
|---|---|
| 文字列 |
メッセージ [sys_ui_message] テーブルから値を返します。
一致するものが見つからない場合は、代替言語の一致がチェックされます ( Set a fallback language を参照)。それでも一致が見つからない場合は、メッセージ値 (2 番目のパラメーター) が返され、コメントが削除されます。 名前付きパラメーターは、args パラメーターで渡されたマップ内の指定された値に置き換えられます。 |
次の例では、getMessage() メソッドを呼び出して、メッセージ [sys_ui_message] テーブル内の既存のレコードをフランス語 (ユーザーセッション言語) であいまいさを取り除きます。次のコードブロックには、メッセージの内容が含まれています。
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<sys_ui_message>
<code>exampleCode</code>
<key>User {username} has been added as {role}</key>
<language>fr</language>
<message>L'utilisateur {username} a été ajouté en tant que {role}</message>
</sys_ui_message>
</xml>
この例では、フランス語のセッション言語で API スクリプトを実行します。
//defines a user object using the name and role properties
var user = {
name: "Fred Luddy",
role: "maint"
}
//retrieves a localized message where code: "exampleCode" is the disambiguation key, message: User {username} has been added as {role}" is the default message template, and args: username: user.name, role: user.role } is a map of named parameters that will replace {username} and {role} in the message.
gs.info(sn_i18n.Message.getMessage("exampleCode","User {username} has been added as {role}",{username: user.name, role: user.role}));
出力には、フランス語のメッセージが含まれています。
//English: User Fred Luddy has been added as maint
L'utilisateur Fred Luddy a été ajouté en tant que maint
名前付きパラメーターなしの基本的な使用法
// Retrieves a localized message using only code and default message
var message = sn_i18n.Message.getMessage("status.open", "Open");
gs.info(message); // Output depends on user's session language
この例では、 code ("satus.open") を使用してメッセージを明確にし、翻訳が見つからない場合のフォールバックとして message ("Open") を使用しています。
名前付きパラメーターの基本的な使用法
/ Retrieves a localized message with named parameters
var message = sn_i18n.Message.getMessage(
"greeting.personal",
"Hello, ${name}! You have ${count} new messages.",
{ name: "John", count: 5 }
);
gs.info(message); // Output: "Hello, John! You have 5 new messages." (localized if available)
この例では、 code ("greeting.personal") を使用してこの挨拶を他の挨拶と区別し、 message はプレースホルダーを含むテンプレートです。 args ({name: "John", count: 5}) はプレースホルダーを埋めます。
Message.getMessageLang(文字列コード, 文字列メッセージ, マップ引数, 文字列言語)
現在のユーザーのセッション言語に関係なく、指定された言語でメッセージ [sys_ui_message] 内のローカライズされたメッセージを取得します。
API は翻訳者向けのインラインコメントをサポートし、多言語コンテキストでの明確さを高め、あいまいさを軽減します。コメントはメッセージ [sys_ui_message] のキーフィールドでは使用されませんが、コメントされた文字列を [commented_message] フィールドに追加できます。args パラメーターの値は、文字列内の一致するテンプレートリテラルに補間されます。
- セッション言語の上書き:特定の言語で通知、メール、またはレポートを送信する場合に便利です。
- 多言語サポート:さまざまな地域のユーザーにサービスを提供するアプリケーションに最適です。
- 翻訳のテスト:開発者は、ユーザー設定を変更せずに、他の言語でメッセージがどのように表示されるかをプレビューできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| コード | 文字列 | 必須。類似したテキストで意味やコンテキストが異なるメッセージを区別するための曖昧性除去キー。文字列がスコープ内で一意である場合は、スコープ名を使用できます。さらに曖昧さ回避が必要な場合は、拡張することができます。 たとえば、「オープン」はステータスまたはアクションを意味する場合があり、コードパラメーターはどちらであるかを明確にするのに役立ちます。同じ文字列で大文字と小文字が異なる 2 つのメッセージが必要な場合、スクリプトは次のようになります。 |
| メッセージ | 文字列 | オプション。ローカライズされたバージョンが見つからない場合に使用するデフォルトのメッセージ文字列。メッセージ [sys_ui_message] テーブルの キー フィールドに対応します。 |
| 引数 | JSON | オプション。メッセージを動的に値を挿入するために使用される名前付きパラメーターのマップ。キーは、メッセージ内の名前付きパラメーターと一致します。値は、スコープ内にある文字列リテラルまたは変数/定数にすることができます。 たとえば、メッセージが "Hello, ${John}!" の場合、{name: "John"} を渡して "Hello, John!" をレンダリングできます。 |
| 言語 | 文字列 | オプション。メッセージを返す言語。 形式: BCP-47 言語コード デフォルト:セッション言語 |
| タイプ | 説明 |
|---|---|
| 文字列 |
メッセージ [sys_ui_message] テーブルから値を返します。
一致するものが見つからない場合は、代替言語の一致がチェックされます ( Set a fallback language を参照)。それでも一致が見つからない場合は、メッセージ値 (2 番目のパラメーター) が返され、コメントが削除されます。 名前付きパラメーターは、args パラメーターで渡されたマップ内の指定された値に置き換えられます。 |
次の例では、getMessageLang() メソッドを呼び出して、メッセージ [sys_ui_message] テーブルの既存のレコードを日本語に翻訳します。次のコードブロックには、メッセージの内容が含まれています。
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<sys_ui_message>
<code>exampleCode</code>
<key>User {username} has been added as {role}</key>
<language>ja</language>
<message> {username} が {role} として追加されました。</message>
</sys_ui_message>
</xml>
この例では、日本語以外のセッション言語で API スクリプトを実行します。
var user = {
name: "Fred Luddy",
role: "maint"
}
gs.info(sn_i18n.Message.getMessageLang("exampleCode","User {username} has been added as {role}",{username: user.name, role: user.role}, "ja"));
出力には、日本語のメッセージが含まれています。
Fred Luddy が maint として追加されました
次の例では、動的コンテンツに名前付きパラメーター (${username}, ${role}) を使用し、ISO 言語コード ("fr"、"ja"、"es") を使用してターゲット言語を指定し、翻訳が見つからない場合はデフォルトのメッセージにフォールバックするようにしています。
フランス語の通知:
var user = {
name: "Fred Luddy",
role: "maint"
};
var message = sn_i18n.Message.getMessageLang(
"user.added",
"User ${username} has been added as ${role}",
{ username: user.name, role: user.role },
"fr" // French
);
gs.info(message); // Output: "L'utilisateur Fred Luddy a été ajouté en tant que maint" (if translation exists)
日本語の通知:
var user = {
name: "Hanako Yamada",
role: "admin"
};
var message = sn_i18n.Message.getMessageLang(
"user.added",
"User ${username} has been added as ${role}",
{ username: user.name, role: user.role },
"ja" // Japanese
);
gs.info(message); // Output: "ユーザー Hanako Yamada が admin として追加されました" (if translation exists)
スペイン語の通知:
var user = {
name: "Carlos Ruiz",
role: "editor"
};
var message = sn_i18n.Message.getMessageLang(
"user.added",
"User ${username} has been added as ${role}",
{ username: user.name, role: user.role },
"es" // Spanish
);
gs.info(message); // Output: "El usuario Carlos Ruiz ha sido añadido como editor" (if translation exists)