🧪

【iOS/Swift】ローカライズする/しない チートシート【String/Text】

2024/04/03に公開

String

素材はString、ローカライズしたい

let a = "abc"
let b = String(localized: String.LocalizationValue(a)) //OK
// let c = String(localized: a) これはNG、コンパイルエラー

localized: の引数は String.LocalizationValue なので String を投げたらエラー。

素材はStringリテラル、ローカライズしたい

let a = String(localized: "abc")

素材はString Interpolation、ローカライズしたくない、String Interpolation展開はする

素材 キー 英環境 日環境
next: \(a) - next: 4 next: 4
let a = 4
let b = "next: \(a)"

素材はString Interpolation、素の部分だけローカライズして、その後にString Interpolation展開する

素材 キー 英環境 日環境
sum \(count) sum %lld sum 5 合計 5
let count = 5
let b = String(localized: "sum \(count)")

素材はString Interpolation、String Interpolation展開した部分も含めたものをキーにしてローカライズしたい

素材 キー 英環境 日環境
member\(memberN) member5 Kimura 木村
let memberN = 5
let b = "member\(memberN)"
let c = String(localized: String.LocalizationValue(b)) //OK
// let d = String(localized: b) これはNG

Text

素材はStringインスタンス、ローカライズしたくない

let abcString = "abc"
Text(abcString)

素材はStringインスタンス、ローカライズしたい

let abcString = "abc"
Text(LocalizedStringKey(abcString))

素材はStringリテラル、ローカライズしたくない

Text(verbatim: "abc")
//または
Text(String("abc"))

素材はStringリテラル、ローカライズしたい

Text("abc")

素材はString Interpolation、ローカライズしたくない、String Interpolation展開はする

素材 キー 英環境 日環境
now \(page) - now 5 now 5
let page = 4
Text(String("now \(page)"))
//または
Text(verbaitim: "now \(page)")

verbaitim: の引数は String なので 「Stringが想定されるところに "next: \(b)" が投げられたので対応するStringのイニシャライザつながる」の法則で、String Interpolation展開されたStringインスタンス(非ローカライズ)が作成される。それが verbaitim: に投げられる。

素材はString Interpolation、素の部分だけローカライズして、その後にString Interpolation展開する

素材 キー 英環境 日環境
sum \(count) sum %lld sum 5 合計 5
let count = 5
Text("sum \(count)")

素材はString Interpolation、String Interpolation展開した部分も含めたものをキーにしてローカライズしたい

素材 キー 英環境 日環境
member\(memberN) member5 Kimura 木村
let memberN = 5
Text(LocalizedStringKey(String("member\(memberN)")))

関連

https://zenn.dev/samekard_dev/articles/c31f40ab3377eb

Discussion