ロケール対応の書式設定
ロケールに応じて数値、日付、通貨を書式設定します。
「ロケール対応の書式設定」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
数値は世界共通ではない
1,200,000.50という数値は、米国では1,200,000.50、ドイツでは1.200.000,50、インドでは12,00,000.50と表記されます。区切り文字やフォーマットをハードコードすると、世界の大部分の地域で正しく表示できません。SwiftのFormatStyle APIを使えば、ロケールごとに正しく処理できます。
import Foundation
let value = 1_200_000.5
print(value.formatted()) // uses current localeformatted()のエントリーポイント
数値、日付、計測値、リストなど、ほとんどの標準型にはformatted()メソッドがあります。引数なしで使用すると、ロケールを考慮した適切なデフォルトが使われます。カスタマイズする場合はスタイルを渡してください。
import Foundation
let n = 1234.567
print(n.formatted()) // default
print(n.formatted(.number.precision(.fractionLength(2))))数値スタイル
.numberは基本となるスタイルです。桁区切り、小数部分の長さ、丸め、符号の表示を流暢な記法で設定できます。実際の区切り文字は、引き続きロケールによって決まります。
import Foundation
let x = 1234.5
print(x.formatted(
.number
.grouping(.automatic)
.precision(.fractionLength(0...2))))通貨のフォーマット
金額には.currency(code:)を使うと、ロケールに応じて通貨記号、桁区切り、小数点以下の桁数が正しく配置されます。同じ金額でも、ユーザーの地域に応じて$1,200.00や1.200,00 €€のように表示されます。通貨の文字列を手作業で組み立てないでください。
import Foundation
let price = 1200.0
print(price.formatted(.currency(code: "USD")))
print(price.formatted(.currency(code: "EUR")))
print(price.formatted(.currency(code: "JPY")))パーセントのフォーマット
.percentは値を100倍してロケールのパーセント記号を付けます。言語によって必要となる、数値と記号の間の空白に関するルールにも対応します。
import Foundation
let ratio = 0.875
print(ratio.formatted(.percent))
print(ratio.formatted(.percent.precision(.fractionLength(1))))ロケールの上書き
デフォルトでは、フォーマットにLocale.currentが使われます。テストのため、または特定の地域の形式で値を表示するために特定のロケールを強制する場合は、任意のスタイルに.locale(_:)をチェーンしてください。
import Foundation
let value = 1234567.89
let german = Locale(identifier: "de_DE")
print(value.formatted(.number.locale(german)))
// 1.234.567,89日付のフォーマット
日付には専用のスタイルがあります。.dateTimeでは、年、月、日、時など、必要なフィールドを組み合わせることができます。システムがロケールに応じて順序を決めるため、米国では月-日-年、多くのヨーロッパ諸国では日-月-年の順になります。
import Foundation
let now = Date()
print(now.formatted(
.dateTime.year().month().day()))
print(now.formatted(date: .long, time: .shortened))相対的な日付
RelativeDateTimeFormatterと.relativeスタイルを使うと、「2時間前」や「3日後」のようなフレーズを完全に翻訳して生成できます。フィードやタイムスタンプに最適です。
import Foundation
let past = Date().addingTimeInterval(-3600)
let text = past.formatted(
.relative(presentation: .named))
print(text) // e.g. "1 hour ago"計測値と単位
Measurementは物理量をフォーマットし、単位を変換することもできます。キロメートルとマイルのどちらを表示するかはロケールが決め、スタイルが単位名そのものをローカライズします。
import Foundation
let distance = Measurement(value: 5, unit: UnitLength.kilometers)
print(distance.formatted())
print(distance.formatted(
.measurement(width: .wide)))リストと名前
項目の結合でさえ、言語を考慮して処理されます。.list(type:)は、英語では「apples, oranges, and pears」のように、それ以外の言語では正しい接続詞と区切り文字を使って生成します。コンマや「and」という単語を手作業で挿入しないでください。
import Foundation
let fruits = ["apples", "oranges", "pears"]
print(fruits.formatted(.list(type: .and)))
print(fruits.formatted(.list(type: .or)))元の値への変換
FormatStylesは可逆的です。スタイルのparseStrategyを使うか、スタイルを指定して文字列から値を初期化すると、同じロケールのルールに従ってローカライズされたテキストを数値や日付に戻せます。
import Foundation
let style = Decimal.FormatStyle.Currency(code: "USD")
let amount = try? Decimal("$1,234.50", format: style)
print(amount ?? 0)クイックチェック
金額に適したツールを思い出してください。
まとめ
FormatStyleによるロケール対応のフォーマットについて学びました:
formatted()はロケールに適したデフォルトを提供します。カスタマイズする場合はスタイルを渡してください。.number、.currency(code:)、.percent、.dateTime、.relative、.measurement、.listで、ほとんどの用途に対応できます。.locale(_:)をチェーンして地域を上書きできます。スタイルを使ってテキストを元の値に戻すこともできます。- 区切り文字、通貨記号、日付の順序を手作業で組み立てないでください。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「ロケール対応の書式設定」レッスンは無料ですか?
はい。「ロケール対応の書式設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「ロケール対応の書式設定」で何を学びますか?
ロケールに応じて数値、日付、通貨を書式設定します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ロケール対応の書式設定」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。