When implementing internationalization for your iOS apps, you might find yourself repeating some code; you can make your life easier by using a computed property such as
.localized, that returns the localized String, that’s cleaner and understandable.
In this Article I’ll layout an advanced technique you can use in Enums, such as the List of Restaurant Categories, Languages, or Countries. I’ll assume you already have your project set up for localization.
Now Enums are a powerful way to add list such as these, since you have access to protocols such as
CaseIterable, where you can call
MyEnum.allCases to get an array of all the cases there are.
The Technique — Protocol based localization
What’s the technique?, using Enum’s raw representation ability and pass it as an argument in
NSLocalizedString, and doing so in a protocol to conform our Enums to this protocol and get the functionality.
This protocol, and it’s extension, provide the base functionality of this technique, where all conforming
Enums acquire the
.localized computed property, now we need Localizable to have an Associated Raw Value type of StringProtocol, so our Enum’s raw value property can be called.
A sample Enum
Now we can simply call
Language.english.localized to get the corresponding translation of English to the target language, such as
Spanish — Inglés, or
French — Anglais, making a Language Selector List much more easy to make.
A foundation to build on
Having our Enums conform to
Localizable, allows us to implement other protocols very easily, such as
Identifiable, making SwiftUI development way faster and cleaner, here’s an example:
NOTE that For Each doesn’t have a
ID argument, since our Enums are
Identifiable, making it very clean and elegant. Now we have a complete list that automatically localizes the enums iterations.