Black Friday deal: 30% off our book "Integrating SwiftUI into UIKit apps"! Learn more ...Black Friday deal:30% off "Integrating SwiftUI into UIKit apps" >>
Quick Tip Icon
Quick Tip

Check localizable strings with the accented pseudolanguage in Xcode

There are a few different ways to declare localizable strings in a SwiftUI app, such as create a Text view with a string literal, explicitly declare a LocalizedStringKey variable or initialize a string with the String(localized:) API from Foundation. But if we are not careful we can miss out on localization of some strings in the app. This can happen, for example, when we create a Text view with a string variable and want that string to be localizable.

Integrating SwiftUI into UIKit Apps by Natalia Panferova book coverIntegrating SwiftUI into UIKit Apps by Natalia Panferova book cover
Black Friday offer
Our book "Integrating SwiftUI into UIKit apps" is now 30% off!

Discover various ways to adopt SwiftUI in existing UIKit projects and take full advantage of the new iOS 16 frameworks and APIs such as Swift Charts.

The offer is active until the 1st of December.

Let's imagine that we are working with the following UI where we have three different strings and we want to localize all of them. At the moment though, the parkDescription string won't be localized, because it's a regular Swift string, not a LocalizedStringKey.

struct ContentView: View {
    let parkDescription = """
    A national park in the heart of
    the Southern Alps/Kā Tiritiri o te Moana
    """
    
    let historyNote = String(
        localized: """
        Arthur's Pass was the first national park
        in the South Island of New Zealand.
        """
    )
    
    var body: some View {
        VStack(alignment: .leading, spacing: 10) {
            Text("Arthur's Pass")
                .font(.headline)
            
            Text(parkDescription)
            
            Text(historyNote)
                .font(.footnote)
                .foregroundColor(.secondary)
        }
        .padding(10)
    }
}

To make it easy to spot such strings in the app that won't be localized by default, we can use the accented pseudolanguage in Xcode. By previewing our UI in the accented pseudolanguage we can notice the strings we missed and make them localizable.

We can enable the pseudolanguage from the scheme settings in Product > Scheme > Edit Scheme. In the Options tab of the Run scheme we need to replace the App Language by the Accented PseudoLanguage that can be found at the very end of the language options list among other pseudolanguages.

Screenshot of Xcode scheme settings showing Accented Pseudolanguage set as the App Language in the Options tab of the Run scheme

We can now run the app on a device or simply check the view in Xcode previews and see which strings will be localized and which strings are missing. The localizable strings will get the accents in contrast to the non-localizable ones.

Screenshot of Xcode previews showing the UI in accented pseudolanguage

Once we spotted the missing localizations, we can go back to code and fix them, so that all of the strings that need to be localized in the app get exported and translated properly. One of the ways to fix the missing localization is to declare the string variable as a LocalizedStringKey, which we can do by specifying its type explicitly.

let parkDescription: LocalizedStringKey = """
A national park in the heart of
the Southern Alps/Kā Tiritiri o te Moana
"""


If you would like to learn more about how the Text view works in SwiftUI and why it automatically localizes strings in some situations and doesn't in others, you can watch my talk from iOSDevUK called Mysteries of SwiftUI Text View.