回答:
Textのドキュメントを見ると、初期化子にStringではなくLocalizedStringKeyが含まれていることがわかります。
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
それはローカライズを非常にまっすぐにすることです。あなたがしなければならないすべては:
Localizable.stringsを選択すると、元の言語と追加した言語のファイルが含まれていることがわかります。ここに翻訳、つまりキーとローカライズされたテキストのペアを配置します。
あなたがこのようなテキストを持っているならあなたのアプリです:
Text("Hello World!")
Localizable.stringsに翻訳を追加する必要があります。
あなたのベース言語:
"Hello World!" = "Hello World!";
そしてあなたの第二言語(この場合はドイツ語):
"Hello World!" = "Hallo Welt!";
ローカライズされたプレビューを表示するには、次のように定義できます。
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
迅速なUIファイルの場合、ローカリゼーション.stringsファイルから文字列キーを挿入するだけです
SwiftUIをインポートする
struct ContentView: View {
var body: some View {
VStack {
Text("selectLanguage")
Text("languagesList")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.locale, .init(identifier: "en"))
}
}
これは.stringsファイルの例です
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
結果は こちら
SwiftUIでLocalazableを使用するには、次の方法を実行できます。
SwiftUIをインポートして、ファイルでLocalizedStringKeyを使用する
//MARK: - File where you enum your keys to your Localized file
enum ButtonName: LocalizedStringKey {
case submit
case cancel
}
//MARK: - Your Localized file where are your translation
"submit" = "Submit is pressed";
"cancel" = "Cancel";
//MARK: - In your code
let submitButtonName = ButtonName.submit.rawValue
let cancelButtonName = ButtonName.cancel.rawValue
VStack {
Text(submitButtonName)
Text(cancelButtonName)
}