Skip to content

Localization

LaunchSwift uses String(localized:)/localized Text with Xcode String Catalogs.

  • ios/SwiftLaunch/Core/Localization/LocalizationManager.swift
  • ios/SwiftLaunch/App/LaunchSwiftApp.swift
  • ios/SwiftLaunch/Resources/Localizable.xcstrings

Defined in LocalizationManager.swift:

enum AppLanguage: String, CaseIterable, Codable, Sendable {
case en
case es
case fr
case de
case pt
case ja
}
struct LocalizationManager: Sendable {
var preferredLanguage: AppLanguage
func currentLocale() -> Locale
}

Implementation details:

  • preferredLanguage is persisted in UserDefaults (preferredLanguage key)
  • default language is .en
  • currentLocale() returns Locale(identifier: preferredLanguage.rawValue)

LaunchSwiftApp injects locale like this:

.environment(\.locale, localizationManager.currentLocale())
  • LocalizationManager is a struct (not an @Observable class).
  • There is no dedicated language picker screen in the current SettingsView.
  • The localization foundation is present (language enum + persisted preference + locale injection), while in-app language switching UI is not yet implemented.

Current language codes in AppLanguage and the shipped string catalog:

  • en
  • es
  • fr
  • de
  • pt
  • ja
  1. Add a new case to AppLanguage in LocalizationManager.swift
  2. Add translations in ios/SwiftLaunch/Resources/Localizable.xcstrings
  3. Ensure your app flow updates preferredLanguage where you expose language selection UI