Jewelry AI・文字体系とタイポグラフィ
アプリが再起動する言語変更は、書字方向が変わるときだけです
アラビア語に切り替えても、アラビア語から離れても、アプリは再起動します。書字方向は起動しなおしたときにしか適用できないためです。文字の見え方が変わるのはこれとは別で、アプリに同梱されたフォントがその言語に必要な文字を収録していないところで起こります。
きっかけは言語ではなく書字方向です
出品者がこれに気づくのはアラビア語のときですが、原因はアラビア語ではありません。再起動は書字方向の変更に続いて起こり、それは双方向です。左から右に書く言語からアラビア語へ移るときにも、アラビア語からそうした言語へ戻るときにも起こります。
書字方向が同じ言語どうしでは、何も再読み込みされません。いま見ている画面の上で表示が切り替わります。ラテン文字の言語どうしを行き来する出品者に再起動がまったく起こらないのはそのためで、再起動を待つ必要はありません。
このページが書字方向について定めるのは、再起動そのものです。右から左に書くインターフェースが画面をどう並べるかは別の広い主題であり、ここではその一覧を示しません。
文字の見え方が変わる場所と、それを決めるもの
フォントの変更は、再起動とは独立した二つ目の仕組みです。同梱のフォントファイルが何を描画できるかによって決まります。
- アラビア語とCJKの画面は、全体がシステムフォントで描画されます。
- アラビア語・中国語・日本語・韓国語では、本文と見出しの両方で同梱の書体が使われません(apps/jewelry-mobile/src/theme/typography-for-locale.ts、delete adapted.fontFamily)。
- ロシア語とベトナム語で切り替わるのは、見出しだけです。
- これらの言語では本文がアプリ同梱の書体のままなので、同じ画面の見出しと段落が別々の書体で描画されます。
- 測定しているのは文字であって、言語ではありません。
- 判断は、同梱のフォントファイルから測定された収録範囲(font-coverage.generated.ts)に従います。ある言語が渡されるのは、同梱ファイルがその言語に必要な文字を収録していないからであり、その言語についての評価によるものではありません。
- 行の高さと大文字化は、フォントの変更と一緒に動きます。
- アラビア語とCJKでは、行の高さが広がり、自動的な大文字化が無効になります。これは描画上の事故ではなく、ラテン文字のタイポグラフィから意図して離れた結果です。
言語のグループごとに、何で描画されるか
次の各行は、画面上の文字を何が描画するかを示します。グループ分けは、同梱のフォントファイルから測定された収録範囲に従います。
| 言語グループ | 本文 | 見出し | あわせて調整されるもの |
|---|---|---|---|
| アラビア語 | 端末のシステムフォント | 端末のシステムフォント | 行の高さを広げ、自動的な大文字化を無効にする |
| 中国語・日本語・韓国語 | 端末のシステムフォント | 端末のシステムフォント | 行の高さを広げ、自動的な大文字化を無効にする |
| ロシア語・ベトナム語 | アプリ同梱の書体 | 端末のシステムフォント | それ以上の調整はなし |
| 同梱ファイルがすでに収録している言語 | アプリ同梱の書体 | アプリ同梱の書体 | それ以上の調整はなし |
不具合と読み違えられやすい挙動
次の各行は、見え方と、それを生んだ仕組みを並べたものです。
再起動をクラッシュと受け取り、そのためにアラビア語を避けてしまう。
その変更が書字方向の境目をまたいだかどうかを確かめてください。ちょうどその瞬間の再読み込みは書字方向が適用されている状態であり、書字方向が同じ言語どうしの移動では再読み込みは起こりません。
アラビア語や中国語で表示した画面のスクリーンショットを、ラテン文字の言語の画面と比べ、描画の誤りだと呼んでしまう。
それらの画面は、同梱ファイルがその文字体系を収録していないため、端末のシステムフォントで描画されています。同じ条件の画面どうしで判断し、あわせて行の高さが広がることも見込んでください。
ロシア語やベトナム語で見出しが段落と合わないことを、壊れた画面として扱ってしまう。
この二つの言語では、見出しだけが切り替わります。一つの画面に二つの書体が現れるのは想定どおりの結果であり、何かが読み込まれなかったしるしではありません。
言語変更が適用されたことの確認として、再起動を期待してしまう。
再起動が確認するのは書字方向の変更だけです。それ以外の言語では、目の前の画面ですでに表示が切り替わっています。
ここで説明していないこと
このページが扱うのは、再起動と、文字体系の変更に伴うタイポグラフィです。次の事柄はその外にあります。
- 表示言語をどこで変えるか、その変更が何に書き込まれるかは、このページでは扱いません。
- 何も選ばれていないときにアプリがどの言語で開くかは、別の規則で決まります。ここでは繰り返しません。
- 書字方向の変更そのものを超えて、右から左に書くインターフェースが画面をどう並べるかは、このページでは一覧にしていません。
- 再読み込みにどれくらい時間がかかるかは、このページでは述べません。
よくある質問
アラビア語を選んだらアプリが閉じて開き直しました。異常でしょうか?
異常ではありません。書字方向の変更は起動しなおしたときにしか適用できないため、アプリはその時点で自分を再読み込みします。再読み込みは書字方向の変更に伴うもので、アラビア語から左から右に書く言語へ戻るときにも、同じことが起こります。
ラテン文字の言語どうしを切り替えても、何も再起動しなかったのはなぜですか?
それらの言語は書字方向が同じなので、起動しなおす必要があるものがありません。すでに開いている画面の上で表示が切り替わるだけで、再起動がないことは変更が見落とされたという意味ではありません。
中国語だけ、アプリのほかの部分と文字が違うのはなぜですか?
中国語・日本語・韓国語・アラビア語では、同梱のフォントファイルがそれらの文字体系に必要な文字を収録していないため、アプリ同梱の書体が使われず、端末のシステムフォントが画面を描画します。同時に、行の高さが広がり、自動的な大文字化が無効になります。
ロシア語で、見出しだけ違って見えるのはなぜですか?
ロシア語とベトナム語では見出しだけが切り替わり、本文はアプリ同梱の書体のままです。この分かれ方は同梱ファイルが何を描画できるかに従うため、画面の二つの部分が別々の書体で描画されます。