74 lines
2.1 KiB
Swift
74 lines
2.1 KiB
Swift
//
|
|
// LocalizationServiceScreen.swift
|
|
// Demo
|
|
//
|
|
// Created by Daniel Saidi on 2020-12-07.
|
|
// Copyright © 2020 Daniel Saidi. All rights reserved.
|
|
//
|
|
|
|
import SwiftKit
|
|
import SwiftUI
|
|
import SwiftUIKit
|
|
|
|
struct LocalizationServiceScreen: View {
|
|
|
|
init(service: LocalizationService = StandardLocalizationService()) {
|
|
self.service = service
|
|
}
|
|
|
|
class ViewModel: ObservableObject {
|
|
|
|
@Published var locale = Locale(identifier: "en")
|
|
}
|
|
|
|
private let service: LocalizationService
|
|
private let english = Locale(identifier: "en")
|
|
private let swedish = Locale(identifier: "sv")
|
|
|
|
@State private var title = ""
|
|
@State private var text = ""
|
|
@StateObject private var state = ViewModel()
|
|
|
|
var body: some View {
|
|
List {
|
|
Section {
|
|
ListText("SwiftKit has services for working with localized content and changing locale without restarting the app. This demo uses a StandardLocalizationService.")
|
|
}
|
|
|
|
Section(header: Text("Locales")) {
|
|
Picker("Select locale", selection: $state.locale) {
|
|
Text("English").tag(english)
|
|
Text("Swedish").tag(swedish)
|
|
}.pickerStyle(SegmentedPickerStyle())
|
|
}
|
|
|
|
Section(header: Text("Translations")) {
|
|
ListText(title).font(.headline)
|
|
ListText(text)
|
|
}
|
|
}
|
|
.onAppear(perform: refresh)
|
|
.onReceive(state.$locale, perform: { _ in refreshAsync() })
|
|
.navigationTitle("Localization Service")
|
|
}
|
|
}
|
|
|
|
extension LocalizationServiceScreen {
|
|
|
|
func refresh() {
|
|
try? service.setLocale(state.locale)
|
|
title = service.translate("localization_service_title")
|
|
text = service.translate("localization_service_text")
|
|
}
|
|
|
|
func refreshAsync() {
|
|
DispatchQueue.main.async(execute: refresh)
|
|
}
|
|
}
|
|
|
|
struct LocalizationServiceScreen_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
LocalizationServiceScreen()
|
|
}
|
|
}
|