I watched the talk at WWDC25 where Apple introduced the generated symbols feature for Strings Catalog.
Since I have just started a new project as my first iOS development experience (I come from 10+ experience in Android), I found this feature very neat considering how it was done in the past.
Anyway, I started implementing my very first string for English & French (my native tongue). The project is setup to use English as the default language.
My project is decoupled into multiple targets (simple swift frameworks) and in my View target, where I am writing the UI code, I have created a resource folder in which I created the Strings Catalog which content is a follow:
{ "sourceLanguage" : "en", "strings" : { "loading data" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Loading data..." } }, "fr" : { "stringUnit" : { "state" : "translated", "value" : "Chargement des données..." } } } } }, "version" : "1.1" } And in the code:
public struct HomeScreen: View { public init(){} @StateObject private var viewModel: HomeViewModel = Resolver.resolve() public var body: some View { content } @ViewBuilder private var content: some View { switch(viewModel.uiState) { case .loading: ProgressView(String(localized: .HomeScreenStrings.loadinData)) .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color(.systemBackground)) ... // other cases } } When building the app on my iPhone X - iOS 16 (the minimum supported by the app), the displayed text is in English. But my iPhone is setup French...
If I switch to French as the default language in Project > Infos > Localizations, the french text is properly displayed which at least confirm the catalog is properly bundled in my app. By the way, both language (FR / EN) are listed in the project main Infos.plist.
I also made sure to add the 2 supported languages in the Infos.plist of my View target:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleLocalizations</key> <array> <string>en</string> <string>fr</string> </array> </dict> </plist> But in Xcode it also shows that Default Localization is set to "$(DEVELOPMENT_LANGUAGE)". I don't know if that matters somehow?
Finally, if I print the preferred language of my device:
print(Locale.preferredLanguages) it get: ["fr"].
And there you have it. I don't how to fix that. Am I doing something wrong?

Locale.preferredLanguagesis not relevant here. Look at the value ofLocale.currentinstead.String Catalogin my main app's target, just as I reported it in my comment stackoverflow.com/questions/79807357/…. So I inadvertently fixed the issue! Kudos to you to find out the real solution, which I have validated.