Как локализовать несколько представлений в SwiftUI

#swift #swiftui

Вопрос:

Я новичок в 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()
           
           
    }
}

 

Комментарии:

1. Это не тот способ, которым можно это сделать. Вы просто используете файлы локализации, а затем используете свои ключи. Вы не должны изменять язык вручную, пользователь может перейти в приложение «Настройки» и установить другой язык для приложения (если требуется, и местный язык не должен применяться).

2. спасибо, я понял твою идею, позволь мне сначала попробовать.

Ответ №1:

Смотри перед этим

Затем удобное расширение:

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


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

В свой локализуемый файл.strings на английском языке добавьте следующее:
"welcomeTitle" = "welcomeTitle EN";

В свой локализуемый файл.strings на японском языке добавьте следующее: "welcomeTitle" = "welcomeTitle JA";

Комментарии:

1. спасибо за ответ, сэр, позвольте мне сначала попробовать с вашим кодом.