Currently Supported Languages
Loop currently supports the following languages:- Arabic (ar)
- German (de)
- English (en)
- Spanish (es)
- French (fr)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Dutch (Belgium) (nl-BE)
- Polish (pl)
- Portuguese (Brazil) (pt-BR)
- Russian (ru)
- Chinese Simplified (zh-Hans)
- Chinese Traditional (zh-Hant)
Using Crowdin (Recommended)
The easiest way to contribute translations is through Crowdin:Join the Crowdin project
- Go to the Loop Crowdin page
- Click the
Join the teambutton
Request access
- Add a message at the top of the page
- Click
Request Access - Wait for your account to be approved
If your language isn’t listed on Crowdin, don’t worry! Contact us on Discord or create an issue on GitHub, and we’ll help you get started.
Manual Translation (Advanced)
For contributors who want to add translations directly to the codebase:Understanding the Structure
Localization files are stored in.lproj directories within the Loop project:
InfoPlist.strings- App metadata translations- Other
.stringsfiles for UI text
Adding a New Language
Contact maintainers first
Before manually adding a language, reach out on Discord or open an issue. This ensures:
- Your language isn’t already being worked on
- Maintainers can provide guidance
- Your work aligns with the project’s needs
Create the .lproj directory
In Xcode or via the file system, create a new directory following the naming convention:
- Use ISO 639-1 language codes (e.g.,
jafor Japanese) - For regional variants, use
language-Region(e.g.,pt-BRfor Brazilian Portuguese)
Copy base strings files
Copy all
.strings files from en.lproj/ to your new language directory as a starting point.Translate the strings
Open each
.strings file and translate the values (right side) while keeping the keys (left side) unchanged:Test your translations
- Build Loop in Xcode
- Change your system language to the one you added
- Launch Loop and verify all strings appear correctly
- Check for truncation, layout issues, or missing translations
Submit a pull request
Translation Guidelines
When translating Loop:- Be consistent - Use the same terms throughout for repeated concepts
- Match the tone - Keep the friendly, accessible tone of the original English text
- Test thoroughly - Ensure translations fit in the UI without being cut off
- Preserve formatting - Keep any format specifiers like
%@or%din the same position - Ask for help - If you’re unsure about a translation, ask on Discord
Getting Help
Need assistance with localization?- Discord - Join our Discord server and ask in the localization channel
- GitHub Issues - Open an issue tagged with “localization”
- Crowdin - Use Crowdin’s comment feature to ask questions about specific strings