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リテラル、ローカライズしたい
素材は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