-
Follow these steps to add support for a new language in the Xcode project:
-
Open the Project Settings In Xcode, select the project file (
MullvadVPN.xcodeproj) in the Project Navigator, then select the project (not a target). -
Go to the Localizations Section Under the Info tab, locate the Localizations section.
-
Add a New Language
- Click the “+” button.
- Select the language you want to add from the list.
-
Update Localizable.xcstrings
-
Add New Strings Through Code
- Add a new localized string in Swift:
NSLocalizedString("welcome_message", comment: "Shown on the home screen") - Or in SwiftUI:
Text("welcome_message")
- Add a new localized string in Swift:
-
Xcode will detect that the key does not exist yet and will add it to
Localizable.xcstringsautomatically once the project is built.
-
-
Verify Build Settings Ensure the target’s Localizable.xcstrings list includes the new language.
-
Run the App
- Open Settings → Language on the simulator or device.
- Switch to the new language.
- Verify that translations appear correctly. If a string is not translated, the base language will be shown.
-
-
Add a new language on Crowdin under Settings → Translations → Target languages.
By default, the file structure is configured to produce folders using a two-letter language code (defined under Settings → Files → → … → Settings).
If you want to add a dialect (e.g.,
pt-BR), you must provide a custom mapping to tell Crowdin to output Portuguese (Brazil) aspt-BRinstead ofpt.To add a language mapping, go to Settings → General Settings → Language mapping (the three-faders icon on the left side of the “Translations” menu).
After updating the strings locally, upload them to Crowdin:
CROWDIN_API_KEY=$YOUR_CROWDIN_KEY ./scripts/ios-localization upload
Triggering translations in Crowdin must be done manually. Contact the project owner.
When translations are ready, download them by running:
CROWDIN_API_KEY=$YOUR_CROWDIN_KEY ./scripts/ios-localization download
All user-facing phrases and terms should be translated except for the following trademarks and technology names:
- Mullvad VPN
- WireGuard
- OpenVPN
- Split Tunneling
- System Transparency
- DAITA