🔭

Locale.current 観測隊 2024

2024/11/29に公開

環境

Mac mini M1
Sequoia 15.1.1
Xcode 16.1
iPhone XR iOS18.0

観測対象

Locale.current.identifier
Locale.current.language.languageCode!
Locale.current.language.region!
Locale.current.region!.identifier

の4つ。
下のように試した結果、普通に使えそう。

アプリは英語のみ対応

言語の「日,英」というのは第一言語が日本語、第二言語が英語という意味。

アプリ
デバイスの言語 日,英 日,英 英,日 英,日
デバイスの地域
.identifier en_JP en_US en_JP en_US en_JP en_US en_JP en_US
.language.languageCode! en en en en en en en en
.language.region! JP US JP US JP US JP US
.region!.identifier JP US JP US JP US JP US

デバイスの言語が日であっても、アプリが英語のみ対応しているならenが取得される。

アプリは英語と日本語に対応

アプリ 英/日 英/日 英/日 英/日 英/日 英/日 英/日 英/日
デバイスの言語 日,英 日,英 英,日 英,日
デバイスの地域
.identifier ja_JP ja_US en_JP en_US ja_JP ja_US en_JP en_US
.language.languageCode! ja ja en en ja ja en en
.language.region! JP US JP US JP US JP US
.region!.identifier JP US JP US JP US JP US

さいごに

しっかり String にするなら

Locale.current.language.languageCode!
Locale.current.language.region!

Locale.current.language.languageCode!.identifier
Locale.current.language.region!.identifier

の方になります(付けなくても結果が表示されてしまったので後で気が付きました)。

ちなみに

地域情報を取るのに

let locale = Locale(identifier:Locale.preferredLanguages[0])
print(locale.region?.identifier)

というものもありますが、この locale.region?.identifier は、スキームの設定で言語を指定しているときは nil になるようです。

Discussion