Ole*_*h H 27 localization ios swift swiftui xcode11.1
有谁能够帮助我?我在 Swift UI 中找不到任何关于本地化的描述。任何人都可以提供建议或更好地举例说明如何本地化Text()吗?
LuL*_*aGa 45
当您查看文档时,Text您会发现它的初始值设定项中LocalizedStringKey没有 a String:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
Run Code Online (Sandbox Code Playgroud)
它使本地化变得非常简单。您所要做的就是:
Localizable.strings当您选择您时,Localizable.strings您将看到它包含原始语言和您刚刚添加的语言的文件。这就是您放置翻译的地方,即键 - 本地化文本对。
如果你有这样的文字是你的应用程序:
Text("Hello World!")
Run Code Online (Sandbox Code Playgroud)
您现在必须添加到您Localizable.strings的翻译中:
对于您的基本语言:
"Hello World!" = "Hello World!";
Run Code Online (Sandbox Code Playgroud)
以及您的第二语言(在本例中为德语):
"Hello World!" = "Hallo Welt!";
Run Code Online (Sandbox Code Playgroud)
要查看本地化的预览,您可以像这样定义它们:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Run Code Online (Sandbox Code Playgroud)
c r*_*ald 12
有一件事你可能会做错,但在我见过的任何解释中都没有说得很清楚。事实证明, Text("hello") 仅在您传递给它一个literal时才被解释为一个本地化键。如果传递 String 类型的变量,则不会发生这种情况。答案是将变量声明为 LocalizedStringKey 类型。
Text("hello") //-> implicitly treats string literal as a key; looks up and displays "Hello World!"
let cap1:String = "hello"
Text(cap1) //-> no lookup for explicit String variable; just displays "hello"
let cap2:LocalizedStringKey = "hello"
Text(cap2) //-> looks up explicit LocalizedStringKey value; displays "Hello World!"
Run Code Online (Sandbox Code Playgroud)
您可以简单地将字符串包装在 LocalizedStringKey 中,然后再将其传递给 Text()。
\n\nLocalized.strings 文件:
\n\n"Dismiss" = "\xe5\x85\xb3\xe9\x97\xad";\n"Cancel" = "\xe5\x8f\x96\xe6\xb6\x88";\nRun Code Online (Sandbox Code Playgroud)\n\nSwiftUI视图文件:
\n\nText(LocalizedStringKey("Dismiss"))\nRun Code Online (Sandbox Code Playgroud)\n
对于 swift UI 文件,您只需要从本地化 .strings 文件中插入字符串键
import 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"))
}
}
Run Code Online (Sandbox Code Playgroud)
这是 .strings 文件中的一个例子
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
Run Code Online (Sandbox Code Playgroud)
结果在这里:
要本地化您的应用程序,您需要:
| 归档时间: |
|
| 查看次数: |
15730 次 |
| 最近记录: |