翻訳の検証

ICU MessageFormatテスト数字を変えて選ばれる文を確かめる

従来のICUメッセージと引数JSONを入力し、通常の出力と複数形の境界値を同時に確認します。

ICU MessageFormatテスト

ICUメッセージ

引数JSON

整形結果

数値の境界結果

pluralまたはselectordinalを含むと境界値が表示されます。

文と引数はこのブラウザーのタブ内で処理され、送信されません。

テスト設定

複数形の分類はこのブラウザーのIntlデータに依存します。CLDRの版はブラウザーによって異なります。

結果は古くなりました。書き出す前に再実行してください。

英語のoneとotherだけで問題なく見えても、別の言語ではfewやmanyが必要です。ICU MessageFormatテストは数値ごとの完成文を並べ、11と21のような見落としやすい違いを示します。

この画面は単一の翻訳文を公開前に点検するためのものです。ICUメッセージ構文の解析と実行にはFormatJSを使い、複数形は閲覧中のブラウザーのIntlデータに従います。アプリが別のICU環境を使う場合は、最終確認をその実行環境でも行ってください。

ICU MessageFormatテストを使う理由

カテゴリー名だけでなく、表示される文を値ごとに確かめます。

言語ごとの複数形を見比べる

境界値表は0、1、2、5、11、21、101で同じ文を実行します。=0の厳密一致はカテゴリー判定より先に働き、ロシア語などでは11と21も異なる分岐になり得ます。元のJSONは書き換えません。

一つのメッセージが数値とロケールの規則に応じて複数の文へ分かれる図。

欠けた引数をその場で発見

{name}のようなプレースホルダーには、大文字小文字まで一致するJSONキーが必要です。プレースホルダー検証では未指定の値や構文上の位置を知らせます。selectとpluralの入れ子も同じFormatJSの解析結果で実行します。

メッセージと引数が結果へ進み、足りない引数で処理が止まる図。

訳文を確認するときの三つの視点

01

実際の文を入力する

従来のICU MessageFormat 1の文を貼るか、plural・select・入れ子の例を読み込みます。不正な例ではother節が欠けた場合のエラーを確認できます。MF2の{$name}は別の構文です。

02

引数とロケールを揃える

JSONオブジェクトのキーを文中の名前と完全に合わせます。BCP 47のロケールを変えると同じ数字でもカテゴリーが変わります。ブラウザーのCLDRデータは固定版ではありません。

03

境界値の完成文を読む

数値変数を選び、特に0、1、11、21を比較します。境界テストは選んだ変数だけを一時的に差し替え、入力JSONは保存したままです。古い結果のコピーは無効になります。

構文と出力を同じ実行環境で確認

FormatJSで解析と評価を統一

従来のICUメッセージ形式をFormatJSで解析し、そのまま整形します。plural、select、selectordinal、offset、入れ子、基本的なnumber形式を扱います。

七つの値を並べて比較

複数形ルールをカテゴリー名だけで説明しても訳文は検証できません。この表では値、カテゴリー、実際の文を横に並べ、11と21の差まで読めます。

エラーを種類ごとに分ける

構文の行と列、引数JSONの不正、欠けた変数、利用できないロケールを区別します。編集後は前の結果をコピーできません。

置換前に内容を確認

例の読み込みやクリアはプレビューで文字数と内容を示してから適用します。適用後は一度だけ、入力と結果をまとめて復元できます。

対応する構文と検証の限界

従来のMF1のみ
この画面はFormatJSのMessageFormat 1構文用です。MessageFormat 2の{$name}や.matchを混在させたり、自動変換したりしません。
CLDRの版は固定していない
カテゴリーはブラウザーのIntl.PluralRulesで決まります。ページから正確なCLDR版は取得できず、ICU4J・ICU4Cやサーバーの出力との完全一致も保証しません。
一文と一つのJSONオブジェクト
翻訳ファイルのアップロードやカタログ全件検査、原文と訳文の比較は行いません。配列やnullを引数の最上位に置けず、足りないother節も補いません。
リッチテキストを描画しない
アプリのコールバックを要するタグは拒否し、出力をHTMLとして解釈しません。高度な日付・通貨形式は本番の実行環境で再確認してください。

ICU MessageFormatテストのよくある質問

CLDRとは何ですか?i18nで重要なのはなぜですか?

CLDRは言語ごとの数値や複数形などのデータです。このページではブラウザーのIntlが持つ規則を使うため、同じICUメッセージでもロケールによって選ぶ節が変わります。

すべての言語で「one」と「other」だけを使えないのはなぜですか?

言語によってzero、two、few、manyなどの区分が必要だからです。ICU MessageFormatテストでロケールと数値を変え、実際にどの節が使われるか確認してください。

言語に必要な複数形カテゴリはどうすれば分かりますか?

CLDRの複数形ルールを参照し、対象ロケールで境界値を試します。この画面は0、1、2、5、11、21、101のカテゴリーと完成文を示しますが、すべての値を網羅するものではありません。

ICU MessageFormatとフレームワーク独自の複数形構文のどちらを使用すべきですか?

アプリが実際に採用する構文に合わせてください。本ツールはFormatJSが扱う従来のICU MessageFormat 1を検証します。フレームワーク独自の記法やMF2はそのまま流用できません。

フランス語では0を単数扱いしますか?

フランス語のカテゴリーは英語と同じとは限りません。ロケールをfr-FRにして0と1の出力を比べ、=0の厳密一致節がある場合はその節が優先される点も確認してください。

本番の結果と違うケースがありましたか?

ICU MessageFormatテストを始める

既定のcountを変え、0と11と21の結果を比較してみてください。

一つの数値だけで翻訳が崩れるとき、ここでその条件を再現できます。

現在のブラウザー内で実行します。