Incorrect text mirroring when switching .layoutDirection

I’m trying to localise my project for an RTL language, and including an in app language switcher, but I’m encountering an issue where after switching to the RTL language, and switching back to English the English text is getting mirrored.

It occurs both on iOS 26.2 and iOS 18, but not when running natively on macOS 26.3

Only the text withing the SettingsView is experiencing the issue.

(I will also note that I know I should leave setting the localisation to the system languages, but this is for a class assignment so that not feasible.)

@main
struct Room_PlannerApp: App {
    @State var localizableManager = LocalizableManager.shared
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(localizableManager)
                .environment(\.locale, Locale(identifier: localizableManager.currentLanguage.rawValue))
                .environment(\.layoutDirection, localizableManager.currentLanguage.layoutDirection)
        }
    }
}

struct ContentView: View {
    @Environment(LocalizableManager.self) private var localizableManager
    
    var body: some View {
        TabView {
            Tab("Home", systemImage: "tray.and.arrow.down.fill") {
                VStack {
                    HStack {
                        Image(systemName: "globe")
                            .imageScale(.large)
                            .foregroundStyle(.tint)
                        Text("Hello World")
                    }
                    Text(localizableManager.currentLanguage.name)
                }
                .padding()
            }
            Tab("Settings", systemImage: "person.crop.circle.fill") {
                SettingsView()
            }
        }
    }
}

struct SettingsView: View {
    @Environment(LocalizableManager.self) private var localizableManager
    
    var body: some View {
        List(LanguageTypes.allCases, id: \.self) { language in
            Button(action: {
                localizableManager.currentLanguage = language
            }, label: {
                Text(language.name)
            })
        }
    }
}

enum LanguageTypes: String, CaseIterable {
    case english = "en"
    case yiddish = "yi"
    
    var code: String {
        self.rawValue
    }
    
    var layoutDirection: LayoutDirection {
        switch self {
        case .english: return .leftToRight
        case .yiddish: return .rightToLeft
        }
    }
    
    var name: LocalizedStringResource {
        switch self {
        case .english: return LocalizedStringResource(stringLiteral: "English")
        case .yiddish: return LocalizedStringResource(stringLiteral: "Yiddish")
        }
    }
}

@Observable
class LocalizableManager {
    static let shared = LocalizableManager()
    
    private var storedLanguage: LanguageTypes = .english
    
    var currentLanguage: LanguageTypes = .english {
        didSet {
            storedLanguage = currentLanguage
        }
    }
    
    private init() {
        currentLanguage = storedLanguage
    }
}

example

Hi, we would like to refer you to the Apple Developer Forums for apple framework questions. You can use this forum for Swift (Compiler) specific questions.