如何在SwiftUI中本地化多个视图

3

我对SwiftUI还不熟悉,我的应用程序也需要翻译语言功能,因此在将此功能合并到其他项目之前,我首先创建了一个示例应用程序。正如您可以在我的下面的代码中看到的那样,我可以通过点击按钮更改语言,并且它可以完美地工作,但我不知道如何在多个视图中实现这一点。我希望本地化所有视图并消除冗余。

import SwiftUI

struct ContentView: View {
    @State var title = ""

    var body: some View {
        VStack{
            Text(title)
                .padding()
            Button {
                title = "welcomeTitle".localizableString("en")
            } label: {
                Text("EN")
            }
            Button {
                title = "welcomeTitle".localizableString("ja")
            } label: {
                Text("JA")
            }
        }
        .onAppear {
//            title = "welcomeTitle".localizableString("en")
            if(Bundle.main.preferredLocalizations.first == "ja"){
                title = "welcomeTitle".localizableString("ja")
            }
            else{
                title = "welcomeTitle".localizableString("en")
            }
               }
              
    }
}

extension String {
    func localizableString(_ name: String) -> String {
        let path = Bundle.main.path(forResource: name, ofType: "lproj")
        let bundle = Bundle(path: path!)
        return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
           
           
    }
}


这不是正确的方法。你只需要使用本地化文件,然后使用你的键。你不应该手动更改语言,用户可以进入设置应用程序并为应用程序设置不同的语言(如果需要且当地语言不适用)。 - davidev
谢谢,我明白了你的想法,让我先试一下。 - Phanet Noch
1个回答

0

查看之前 this

接下来是一个方便的扩展:

extension String {
    var localized: String {
        return NSLocalizedString(self, comment: "")
    }
}


//For your button
Button {
 //action
} label: {
Text("welcomeTitle".localized)
}

在你的 Localizable.strings 文件中添加以下内容:

对于英语,添加以下代码:"welcomeTitle" = "welcomeTitle EN";

对于日语,添加以下代码:"welcomeTitle" = "welcomeTitle JA";


谢谢您的回复,先让我试试您的代码。 - Phanet Noch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接