#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. спасибо за ответ, сэр, позвольте мне сначала попробовать с вашим кодом.