NSLocalizedString in Packages

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSLocalizedString in Packages

    Hallo zusammen,

    ich bin immer noch dabei meine erste App zu programmieren, ich versuche es zumindest.
    Ich dachte mir, ich mach es gleich so, dass ich es evtl. wiederverwenden kann, also hab ich mich gleich an Packages ran gewagt.

    Ich habe nun ein Package Utils, das z.B. auch gleich für die App standardisierte GUI-Komponenten beinhaltet.
    z.B. einen Stepper für BinaryInteger anstatt Double:

    Quellcode

    1. public struct PropertyStepper<T>: View where T: BinaryInteger {
    2. private var label: LocalizedStringKey
    3. private var property: Binding<T>
    4. private var min, max: T
    5. public var body: some View {
    6. let doubleValue = Binding<Double>(
    7. get: { Double(property.wrappedValue) },
    8. set: { property.wrappedValue = T($0) }
    9. )
    10. Stepper(value: doubleValue, in: Double(self.min) ... Double(self.max), step: 1.0) {
    11. HStack(spacing: .zero) {
    12. PropertyIcon("Int:\(self.property.wrappedValue)")
    13. PropertyLabel(self.label)
    14. }
    15. }
    16. }
    17. public init(label: LocalizedStringKey, property: Binding<T>, min: T, max: T) {
    18. self.label = label
    19. self.property = property
    20. self.min = min
    21. self.max = max
    22. }
    23. }
    Alles anzeigen

    Dieses Package nutze ich nun in mehreren anderen Packages, z.B. einem DisplayOptionsfür die Konfiguration der Darstellungsoptionen in der App.
    Hier ist nun wiederum die komplette View für die Konfiguration enthalten, die ich später in der App verwenden will.

    Quellcode

    1. struct DisplayOptions_View: View {
    2. @EnvironmentObject var displayOptions: DisplayOptions
    3. var body: some View {
    4. VStack {
    5. Form {
    6. PropertyStepper(label: "Type.Numeric", property: $property, min: 0, max: 100)
    7. }
    8. }
    9. }
    10. }
    Alles anzeigen
    Funktioniert soweit auch ganz gut, ABER!

    Die Auflösung der Localisation funktioniert nicht. Ich habe in meinem PropertyLabel:

    Quellcode

    1. public struct PropertyLabel: View {
    2. private var localizedStringKey: LocalizedStringKey
    3. public var body: some View {
    4. Text(localizedStringKey)
    5. .lineLimit(1)
    6. }
    7. public init(_ localizedStringKey: LocalizedStringKey) {
    8. self.localizedStringKey = localizedStringKey
    9. }
    10. }
    Alles anzeigen

    Die Auflösung über bundle: .module für die Werte die in Utils enthalten sind, funktionieren wunderbar, die die in DisplayOptions und für mein Verständnis über bundle: .main aufgelöst werden sollten, funktionieren nicht.

    Habt Ihr eine Idee wie ich das Lösen kann ohne die Werte alle als bereit lokalisierte Strings zu übergeben. (Geht nämlich nicht bei allen SwiftUI Komponenten).

    Für diejenigen die keine SwiftUI Erfahrung haben, mann kann es genauso mit NSLocalizedString testen, dass Ergebnis ist das Selbe.