A simple freestanding macro to easily localize strings in both app targets and Swift packages
Localization with String catalogs is now easier than ever, and you can also easily localize Swift packages as well.
Here is a simple example of localization:
LocalizedStringResource("This is a localized string")
However, this will not work in the context of a Swift package because the built in localization uses the app target instead of the package target. You can see more information on how this works in my blog post on Localization in SwiftUI.
To make sure localization works in the context of a Swift package, or any module, you have to enable localization of the package, and initialize the resource like so:
LocalizedStringResource("This is a localized string", bundle: .module)
This package introduces a simple freestanding Swift macro to help with reduce the boilerplate and effort of localization across modules.
You can use it anywhere that you would normally use a localized string, here are a couple examples:
// Assign to a variable
let localizedString = #Localize("This is a localized string")
// Use directly within SwiftUI
Text(#Localize("This is a localized text"))
The macro will expand to the following:
let localizedString = #Localize("This is a localized string")
{
#if SWIFT_PACKAGE
LocalizedStringResource("This is a localized string", bundle: .atURL(Bundle.module.bundleURL))
#else
LocalizedStringResource("This is a localized string")
#endif
}()
This package is released under MIT License. See LICENSE for more information.