Jewelry AIの初回起動と既定の言語

アプリは英語に落ち着く前に、端末の言語リスト全体を読みます

初回起動で表示されるのは端末の言語であり、アプリが選んだ言語ではありません。端末が地域バリアントを報告した場合、画面はアプリに収録されている版で応答します。英語が現れるのは、リストの項目をすべて試したあとだけです。

何も選ばれていないときにアプリが読むもの

この規則の入力は、端末の一つの設定ではありません。端末が報告する順序付きの言語リストであり、結果のすべてはそこから導かれます。

入力は順序付きのリストです。
表示言語は、端末が報告する言語タグから、報告された順序のとおりに判定されます(apps/jewelry-mobile/src/i18n/i18n-provider.tsx、resolveDeviceLocale(deviceLanguageTags(), catalogBackedLocales()))。
リストのより下にある対応言語が、英語より先に答えになります。
英語という結果は、先頭の項目が一致しなかったことからではなく、リスト全体が一致しなかったことから生じます(apps/jewelry-mobile/src/i18n/locales.ts、return enabled.has('en-US') ? 'en-US' : enabledLocales[0] ?? 'en-US')。
完全に一致したタグは、そのまま使われます。
集約に進むのは、端末が報告したタグが完全には一致しない場合だけです。アプリがその言語を収録している端末は、その言語をそのまま受け取ります。
集約が生むのは収録版であり、代わりに置かれたものではありません。
繁体字中国語は簡体字中国語に、ヨーロッパポルトガル語はブラジルポルトガル語に解決されます(apps/jewelry-mobile/src/i18n/locales.ts、zh: 'zh-Hans-CN')。ノルウェー語の総称タグはノルウェー語ブークモールに解決されます。いずれの場合も、表示されるのはその言語のためにアプリが収録している版です。

判定が進む順序

以下の各段階に進むのは、その前の段階で問いが決着しなかったからです。

  1. 端末の言語タグが順序どおりに集められる

    アプリは端末に言語リストを求め、端末が示した順序をそのまま保ちます。そのうえで、そのリストを画面が提供する言語と照合します。

  2. 完全に一致したタグで決着する

    いずれかのタグがそれらの言語のどれかとそのまま一致した場合、その言語が使われ、それ以上は参照されません。

  3. 地域バリアントは収録版に集約される

    タグが完全には一致しない場合、バリアントはその言語のためにアプリが収録している版に解決されます。繁体字中国語は簡体字中国語へ、ヨーロッパポルトガル語はブラジルポルトガル語へ、ノルウェー語の総称タグはノルウェー語ブークモールへ解決されます。

  4. リストを使い切ったときにだけ英語になる

    リストのどの位置のタグも、画面が提供する20の言語のいずれとも一致しなかった場合、アプリは英語で開きます。

  5. 戻ってきたときに同じ順序がもう一度動く

    アプリがバックグラウンドにある間に端末の言語を変更すると、戻った時点で判定がこれらの段階をもう一度たどります。終了して開き直す必要はありません。

端末が報告するものと、画面が表示するもの

各行は同じ規則の結果です。最後の列は、真ん中の列の理由として読んでください。

端末が報告するもの画面が表示するものそこから分かること
繁体字中国語簡体字中国語タグが完全には一致せず、その言語のためにアプリが収録している版が答えになりました。
ヨーロッパポルトガル語ブラジルポルトガル語同じ集約であり、同じカタログです。ポルトガル語の二つ目の翻訳ではありません。
ノルウェー語の総称タグノルウェー語ブークモール総称タグは、アプリが収録しているバリアントに解決されます。
提供されていない言語で、リストのより下に対応言語がある場合その対応言語リストは最初の項目より先まで読まれます。
提供されていない言語で、リストのどこにも対応言語がない場合英語リスト全体を試し、どれも一致しませんでした。

選べなくなった言語のための安全策

端末にすでに固定されている言語は、適用される前に、現在選択できる言語と照合されます。その中になければ、アプリはその言語を強制せず、端末からの判定に戻ります(apps/jewelry-mobile/src/i18n/locales.ts、if (preference !== 'system' && enabledLocales.includes(preference)) {)。

これは体験ではなく安全策です。通常のビルドではリストのすべての言語を選択できるため、この経路には到達しません。意味を持つのは、ある言語がリストから外された場合、またはプレビュー用のビルドで選ばれた言語が通常のビルドの提供する言語に含まれない場合だけです。

実際の影響は限られていますが、書いておく価値はあります。そうした端末は、言語が固定されていなかったかのように、上で述べた同じ順序の読み取りで判定されます。

判定の規則の外にあるもの

このページは、何も選んでいないときに言語を決めるものを説明します。次の事柄はその外にあります。

  • 言語を手動で変更する場所と、その選択がどこに書き込まれるかは、ここでは説明しません。
  • 書字方向の変更にともなう再起動はそれ自体が別の挙動であり、このページでは扱いません。
  • 端末が自身の言語リストをどのように作り、どのように並べるかはオペレーティングシステムの領分であり、ここでは何も説明しません。
  • サーバーから届くメッセージが、画面の判定した言語に従うかどうかは、このページでは述べられません。

よくある質問

端末を英語に設定していないのに、なぜアプリは英語で開いたのですか。

端末の言語リストのどの項目も、画面が提供する20の言語のいずれとも一致しなかったときに英語が使われます。これはリスト全体を試した結果なので、言語が欠けていると結論づける前に、リストを確認する価値があります。

端末をポルトガルに設定しているのに、なぜアプリはブラジルポルトガル語なのですか。

タグが完全には一致しなかったため、バリアントがその言語のためにアプリが収録している版に解決されました。いま読んでいるのはその収録版そのものであり、別の版の代わりに置かれた翻訳ではありません。

別のアプリを使っている間に、アプリの言語が変わりました。不具合ですか。

いいえ。まだ自動で判定している端末では、端末の言語を変更すると、アプリに戻った時点で表示言語がもう一度判定されます。終了して開き直す必要はありません。

端末の言語を変更したのに、アプリはそのままでした。なぜですか。

端末の言語が決めるのは、アプリ内で何も選ばれていない間だけです。すでに言語が選ばれている端末では、画面は設定されたところにとどまり、端末の設定はもう関与しません。