欠け文字チェック

翻訳テキストや.txt・.json・.csv・.poをフォントの文字一覧と比較し、欠けている文字と使用箇所を確認。

韓国語・日本語の文字があるはずの場所に四角(□)や空白が出るのは、フォントにそのコードポイントのグリフがないからです。ビットマップフォントには焼き込んだ文字しかなく、.fntにはグリフごとにchar id=の行が1つあります。チェッカーは.po(msgstrの値)、.json、.csv・.tsv、.txtから訳文を取り出し、異なる文字を1つずつ.fnt(またはUIラボのフォントステージで作ったフォント)と比べ、欠けた文字ごとにUnicodeのコードポイント・使用回数・最初に出る行を示します。TTFの文字マップはまだ読めません。

画像をここにドロップ複数のファイルをまとめて処理できます
アップロードなし · この端末で処理

文字が四角になる理由

すべての文字はUnicodeのコードポイントで、BMFontはそれを10進数で保存します。韓国語の시はU+C2DCで、.fntにはchar id=49884と書かれます。チェックは単純な集合の比較で、テキストに出てくる異なる文字からフォントのchar idを引くだけです。文字体系が大きいため、韓国語・日本語のゲーム用フォントは実際に使う文字列から作ります。ハングルの完成形音節U+AC00〜U+D7A3は11,172コードポイント、CJK統合漢字のブロックU+4E00〜U+9FFFは20,992コードポイントあります。

よくある原因は、フォントを焼いた後に更新された翻訳、原文の言語で作ったフォント、見た目が同じでコードポイントが違う文字(全角の! U+FF01と! U+0021)、そして分解されたハングルです。分解形では가が1つの音節(U+AC00)ではなく字母U+1100 U+1161として届きます。チェッカーはコードポイントを厳密に比べるので、これらをすべて報告します。

ファイルごとに何を読むかが重要です。.poからはmsgstr(とmsgstr[n])の値だけを読み、原文のキーmsgidは読みませんが、ヘッダー項目のmsgstr(Language:、Content-Type:)もテキストとして数えます。JSONはすべての文字列値、CSV・TSVはキーや原文の列を含むすべてのセルを読みます。ノーブレークスペースU+00A0や全角スペースU+3000を含む空白文字は、グリフとして描かないので飛ばします。

例:韓国語の.poと4グリフの.fnt

フォントは시・작・끝・내から焼いたものです。このファイルに対してチェッカーが返す結果です。

ko.po (9行)                             font.fnt (グリフ4つ)
msgid ""                                char id=49884   시 U+C2DC
msgstr ""                               char id=51089   작 U+C791
"Language: ko\n"                        char id=45149   끝 U+B05D
msgid "Start"  →  msgstr "시작"         char id=45236   내 U+B0B4
msgid "Quit"   →  msgstr "끝내기"

チェックした文  "Language: ko" / "시작" / "끝내기"   (msgidの値は読まない)
欠けている文字  기 U+AE30 ×1   (テキスト5行目)
                a ×2, g ×2, :, L, e, k, n, o, u   (ヘッダー項目、テキスト2行目)
追加するもの    기 = 0xAE30 = 44592 → 作り直したフォントに "char id=44592" が必要

ラテン文字は翻訳ではなくヘッダー項目から来ています。フォントにASCIIを入れる(多くのゲームはどのみち数字とラテン文字が必要です)か、それらの行を無視してください。ここで本当に欠けているのは기です。

チェックするテキストの出どころ

ファイル読むもの無視するもの
.pomsgstrとmsgstr[n]の値と続きの行(ヘッダー項目も含む)msgid、msgctxt、コメント
.json深さに関係なくすべての文字列値オブジェクトのキー、数値、真偽値
.csv / .tsvすべての行のすべてのセル(見出し行とキー列を含む)区切り文字と引用符
.txtまたは貼り付けたテキストすべて改行とその他の空白
.fnt(グリフの出どころ)すべてのchar行のidカーニング、ページ、メトリクス

結果の確認

  • 文字を追加してフォントを作り直したら、もう一度チェックします。欠落なしと表示され、チェックした異なる文字の数が出るはずです。
  • missing-glyphs.jsonを開きます。各項目にchar、U+XXXX形式のcodepoint、count、linesがあり、missing-glyphs.txtは同じ文字を1行にまとめたもので、フォントツールの文字欄にそのまま貼れます。
  • ゲーム内で、言語ファイルのすべての文字を含むテスト用の文字列を1つ表示します。四角や空白が1つも残らないはずです。

トラブルシューティング

症状考えられる原因確認方法対処
韓国語・日本語の.poなのにラテン文字(L、a、n、g…)が欠落と出るヘッダー項目のmsgstr(Language:、Content-Type:)をテキストとして読んでいる行番号が取り出したテキストの最初の行を指しているフォントにASCIIを入れるか、それらの行を無視する
CSVの英語の原文列が報告されるキー列・原文列を含め、CSV・TSVのすべてのセルを読んでいる欠けた文字の大半がラテン文字で、すべての行に出てくる対象言語の列だけを書き出すか、そのテキストを貼り付ける
あるように見える文字が欠落と出るコードポイントが違うそっくりな文字(全角の!、~、別のダッシュ)レポートのU+コードと.fntのidを比べるそのコードポイントをフォントに追加するか、書き出す前にテキストを正規化する
フォントにあるハングル音節が欠落と出るテキストが分解形で、音節ではなく字母U+1100〜U+11FFになっているレポートにU+11xxのコードが並ぶローカライズの工程で文字列をNFCに正規化する
欠落はないのにゲームでは四角が出るゲームがチェックした.fntとは別のフォント・太さで描いている、またはUIラボのフォントをフォントファイルモードで作り、TTFにない文字をブラウザーの代替フォントで描いたまま焼き込んだビルドに実際に入る.fntを確認し、グリフシートで形の違う文字を探す実際に配布する.fntでチェックする。GodotではBMFontのインポート設定に代替フォントを指定できる
行番号がファイルと合わない元のファイルではなく、取り出したテキストの行を数えている.poのレポートの2行目はヘッダーのテキストファイル内でその文字自体を検索する
TTF・OTFをグリフの出どころに選べないこのリリースはフォントのcmap表を解析しない—先にフォントから.fntを作り、それと比べる

バージョンと出典

docs/UI-LAB.mdのためにChromiumで測定しました。4グリフの.fntで.poをチェックするとa 시 작 끝 내 기を正しい件数と行番号で報告し、フォントにある가は報告しませんでした。上の例は同じ関数で計算し直したもので、ヘッダー項目の行は現在のパーサーの動作どおりです。.fntのフィールドの意味はAngelCode BMFontのドキュメント、.poの構造はGNU gettextのマニュアルに基づきます。

参照した公式ドキュメント

欠け文字チェック

翻訳テキストや.txt・.json・.csv・.poをフォントの文字一覧と比較し、欠けている文字と使用箇所を確認。

使い方

  1. 画像を追加
  2. 設定を調整して結果を確認
  3. 新しいファイルを保存

対応形式

PNG / JPG / WebP / AVIF / HEIC → PNG + JSON (ZIP) — 入力のデコードはブラウザ対応と追加エンジンに依存します。

このツールでできること

翻訳テキストや.txt・.json・.csv・.poをフォントの文字一覧と比較し、欠けている文字と使用箇所を確認。

処理方式と検証状況

advanced · BMFont .fnt parser / per-character occurrence counts. 品質検証中です。Pro・Flagship水準はまだ実証されていません。

書き出す前に

BMFontの.fntファイル、またはこのラボで作ったフォントの文字一覧と比較します。TTF・OTFのcmapテーブルは読みません。

よくある質問

このツールにはどのような制限がありますか?

BMFontの.fntファイル、またはこのラボで作ったフォントの文字一覧と比較します。TTF・OTFのcmapテーブルは読みません。

ファイルはアップロードされますか?

このツールで開いたファイルはアップロードせず端末で処理します。コミュニティの投稿に明示的に添付する画像は別途アップロードされます。一部のエンジンやモデルは外部から取得するため、IPアドレスなどの接続情報は配信元に伝わります。

作業は自動保存されますか?

いいえ。画像と編集状態はこのタブに保持され、メディア出力は端末の一時保存を利用する場合があります。言語を変えても作業は残りますが、再読み込み、タブを閉じる操作、別のページへの移動で失われることがあります。