如何在Swift UI中实现本地化


10

有谁能够帮助我?我在Swift UI中找不到任何有关本地化的描述。任何人都可以提出建议或更好地举例说明如何进行本地化Text()吗?

Answers:


15

查看Text文档时,您会发现它将LocalizedStringKey而不是String放入其初始化程序中:

init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)

它使本地化非常简单。您要做的就是:

  • 创建一个类型为Strings File的新文件,将其命名为Localizable
  • 选择新文件,然后在右侧面板中导航到File Inspector,然后单击Localize...。
  • 转到项目文件的“本地化”部分,然后向列表中添加另一种语言-Xcode将为您创建本地化文件

当您选择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))
        }
    }
}

谢谢,这很有帮助!但是我遇到了一些问题,因为已经添加了几种语言。
Oleh H

我按照这些指示进行操作,但没有成功。我正在运行iOS 10.15.1 Beta和Xcode 11.1。任何建议都乐意接受。现在,我将在Beta软件中承担一个小故障,并且不要在此上浪费更多时间
Joseph Beuys的妈妈,

到底是什么问题?
LuLuGaGa

1
我发现了问题@LuLuGaGa。事实证明,我没有按照我说的那样遵循这封信的指示。我的本地化字符串文件在子文件夹中。将其放在项目级别并可以正常工作
Joseph Beuys的妈妈,

1
我还发现(我认为)调用字符串文件而不是Localizable意味着它不起作用
Joseph Beuys的妈妈,

3

对于快速的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";

结果在 这里


0

要本地化您的应用,您需要:

  1. 使用SwiftUI元素,例如:Text(“ Nice”)。尼斯成为Localizable.strings中的关键。
  2. 如果文本不在SwiftUI元素中,则需要使用NSLocalizedString
  3. 选择您的应用定位。
  4. 导出本地化:编辑 -> 导出本地化...
  5. 将导出的文件提供给翻译器。
  6. 导入翻译:编辑 -> 导入本地化...

0

要在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)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.