ドキュメント

グローバリゼーション検査

不足または破損した翻訳、特定の言語や文化に依存するテキストや書式設定が新規コード内に含まれていないかをすべての変更で確認し、設定次第では他言語で正しく表示されないページもチェックします。

「グローバリゼーション品質管理におけるチェック機能により、国際化されたプロジェクトを世界で利用可能な状態に保ちます。この機能はタスクQAおよびプルリクエストで実行され、変更が対象とする範囲のみを読み取ります:

  1. カタログ。変更によって追加または変更された文字列で、すべての言語に対応します。
  2. コード。変更によって追加される行で、特定の言語や文化を前提としたテキストや書式設定が含まれます。
  3. ページ。プロジェクトがアプリケーションの起動方法を指定する際、レンダリングされるページには「疑似翻訳。

ウィザードは、pull requestがマージされるとデフォルトでこのチェック機能を有効にします。その設定は品質管理 → グローバリゼーション;ワークベンチの設定この機能が有効かどうかが表示されます。

デフォルトでブロックされる項目

文字列が欠落または破損している場合、あるいは追加されたコードが読者が直接読むテキストをコード内に埋め込んだり、断片から文を組み立てたりする場合、その変更内容は修正のために差し戻されます。それ以外の項目はすべて「指摘事項」として報告されますが、指定してブロックするまで実際にはブロックされません。書式設定、並べ替え、レイアウトに関する指摘事項も、プロジェクト固有のコードで確認されるまで報告され続けます。

何をブロックするかは「品質管理」で選択します品質管理 → グローバリゼーション:カタログコード、コード内のどの要素が変更を差し戻すのか、および修正のために変更内容が差し戻されるページ上の問題。ソースコードを確認およびページをレンダリングコード処理とページ生成のステップを無効にします。

カタログコード

コード意味デフォルトでブロック
missingその文字列には翻訳が存在しないはい
invalid_syntax翻訳結果がパースできない場合、例えばICU構文が誤っている、またはモデルの不具合により文が途切れたり、余分な句読点が残ったり、引用符が閉じていなかったり、単語が重複している場合はい
placeholder_mismatchプレースホルダーや保護された用語がソースと異なる場合、例えば製品名が重複して記載されている場合はい
plural_categoriesその言語で必要な複数形が欠落しているはい
stale文字列の翻訳後にソースが変更されたいいえ
obsoleteソースにその文字列やそれが掲載されていたページが存在しなくなったいいえ

設定ファイルで指定されている場合、用語集や長さ制限、禁止用語のルールはそれぞれ独自のコードを報告します。

翻訳処理では、不要な文字列をすべての言語から削除し、ソースが存在しなくなったページの翻訳も消去します。ただし、Coroidで翻訳されたファイルのみが削除され、単一言語で存在するページは決して削除されません。

コードコード

コード検出内容デフォルトでブロック
hardcoded_textコード内に記述され、カタログには含まれない人が読むテキスト:JSXやテンプレートテキスト、表示属性などplaceholder、title、altおよびaria-label、トーストやアラートはい
concatenated_text複数の部分から構成される文:翻訳文とテキストまたは値が「」で結合されたもの+、テンプレートリテラルや隣接する要素はい
locale_number読者のロケールに関係なく書式設定された数字、例えばtoFixedUIコード内のtoLocaleString()ロケール指定なしいいえ
locale_date読者のロケールに関係なく書式設定された日付または時刻、あるいは固定パターンで表されるもの、例えばMM/dd/yyyyいいえ
hardcoded_currency金額の横に記載される通貨記号またはコードいいえ
ordinal_sort文字コード順でソートまたは比較されるテキスト、またはlocaleCompareロケール指定なしいいえ
case_mappingtoUpperCase()またはtoLowerCase()ロケール指定なしのテキストに対していいえ
physical_directionCSSやユーティリティクラスにおける左右の方向。右から左へ書く言語を使用するプロジェクトにおいていいえ
postal_code_format特定の国のパターンで検証される郵便番号いいえ
phone_number_format北米向けに検証される電話番号いいえ
latin_only_input名前、都市、通り、住所がa~zのみで構成される場合いいえ
joined_list人が読むリストがカンマまたは「および」で結合される場合いいえ
calendar_names曜日や月の名称がコード内に直接記述されるか、週の始まりが固定されている場合いいえ
paper_size印刷物やPDF設定において固定される文字、A4サイズなどいいえ
fixed_unit表示される数字の横に記載される単位、miやlb、°Fなどいいえ
locale_parsing入力された数字が「」で読み取られる場合parseFloatまたはNumberいいえ
ime_composition中国語・日本語・韓国語の単語がまだ入力中であるかどうかを確認せずにテキスト入力でEnterキーが処理される場合いいえ

あらゆる市場向けのデザイン各問題の修正内容がここに示されています。

チェック項目の内容

このコードステップはJavaScriptおよびTypeScriptを解析し、JSXやVue、Svelte、Astro、HTML、ERB、Handlebarsテンプレート、CSSもテキストとして読み取ります。ルールが適用されるのは、その文脈で指定された場合のみです。例えば郵便番号パターンは郵便番号フィールドの近くでのみ報告され、連結リストも人がそれを読む場所でのみ検出されます。

  • 定義に基づいて翻訳されます。プロジェクト内の翻訳呼び出しやコンポーネント内のテキスト(t()、formatMessage、<Trans>、<FormattedMessage>、 $t())および設定ファイルに記載された関数です。
  • 決して実行しないテキスト。保護された用語や、設定ファイルで許可されている単語です。
  • 意図的に除外されています。「"という行にはi18n-ignoreコメントが含まれ、その次の行にも記載されています。理由を記入してください:// i18n-ignore: product name。

オプションのworldのセクションは.coroid/i18n.json以下の設定を行います:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
フィールド意味
excludeルールがスキップするファイルのグロブ指定
translateフレームワーク独自のもの以外の翻訳関数
allow保護された用語以外で翻訳されない単語
formatter、currenciesウィザードのCultureステップで設定されます。詳細はCulture
render疑似ローカライゼーション用ページのアプリ起動方法については疑似ローカライゼーション

検出結果と修正内容

各検出結果はチェック実行時に保存され、タスク内の検出結果一覧に表示されます。検出された問題:カタログ別、キー別、言語別に検出結果を分類し、コードの検出結果はファイル、行、発見されたテキスト別に、ページの検出結果はページ、要素、テキスト別に整理します。同じ作業に対する最新のチェックで該当する検出結果がなくなった場合に、その検出結果は修正済みとみなされます。

チェックアウト画面のテキストを翻訳するタスク
検出された問題
  • 開くui · checkout.total · fr: missingグローバリゼーション · 未翻訳
  • 修正中src/pricing.tsx:7 · “シンプルな料金体系”グローバリゼーション · コード内に直接記述されたテキスト
  • 開く/{locale}/ · p#promo · “ご注文ごとに送料無料” · runtime_text (de-DE, ar-SA)グローバリゼーション · カタログに記載されていないテキスト
  • 修正中ui · cart.items · ja: placeholder_mismatchグローバリゼーション · プレースホルダーがソースと一致しない
  • 修正済みui · cart.count · ar: plural_categoriesグローバリゼーション · このロケールでは複数形の表現が欠落している

グローバリゼーション検査による品質上の問題点:カタログ内の文字列、コードへの変更内容、疑似ローカライズされたページ、各問題点に対応するコードが示されます。参考用データです。

プルリクエストでは、コードの検出結果も変更された行上の注釈として表示されます。ブロックする場合はエラーとして、報告のみの場合は警告として示されます。

チェックでタスクがブロックされると、開発者エージェントに各ブロッキング検出結果が渡されます。例えばsrc/pricing.tsx:7 hardcoded_text: “Simple pricing”のように、修正方法も併せて提供されます。エージェントはタスク専用の翻訳セッションを通じて翻訳を修正し、他言語のカタログを手動で編集することはありません。テキストをソースカタログに移し、組み立てられた文をプレースホルダー付きの1つのメッセージに書き換え、タスクを引き継ぐ前に自身の変更に対してコードルールを実行します。

あらゆるソースからの貢献

誰が作成した変更でも、チェックでは同一の基準が適用されます:

  • Coroidのエージェント国際化プロジェクトで作業する場合、各タスクではソースカタログと翻訳関数、文ごとの1つのメッセージ、プロジェクトのフォーマッター、右から左へ書かれる言語の論理的レイアウト、Cultureで定められた市場の慣習が指定されます。
  • 人間や他のツールからのプルリクエストはCoroid Checkを通じてチェックを受け、同じ検出結果と注釈が付与されます。CoroidのGitHub Appがリポジトリにインストールされ、プロジェクトのポリシーがプルリクエスト時に対象となるすべてのpull request上で実行されます。
  • チェックを通過せずにマージされた変更はマージ後に検出されます。 Coroid外でマージされた文字列を翻訳するこのチェックはpull request上で実行された結果を読み取り、pull requestで不足または古くなった文字列の翻訳タスクを作成します。コード検出でエラーが発生した場合には、以下のようなタスクも作成されます。 マージされたコードを国際化するpull requestで確認すべき箇所を一覧表示します。マージごとに各種類のタスクは最大1つまで作成されます。

既存のコードは決してブロックされません:グローバル対応それらを一覧表示し、ユーザーが選択したタイミングで修正タスクを作成します。

自分で実行する

エンジンはコマンドラインツールcoroid-i18nであり、設定ファイルで指定されたバージョンが使用されます:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

sourceはカタログを読み取らずにコードを解析するため、カタログが未設定の状態でも動作します。--changedまたは--diffを使用するとリポジトリ全体が対象となります。何かが見つかった場合、両コマンドはステータスコード1で終了します。機械可読なレポートを得るには--format jsonを追加してください。