This plugin localizes your OutSystems mobile app's home-screen icon label based on the device language. When a user's phone is set to Portuguese, the icon reads "Tempo". When it's set to English, it reads "Weather". Locales you don't ship fall back to the default app name automatically — or to an explicit fallback name you can set with the optional AppDefaultName preference.
AppDefaultName
1. Installation
Step 1 — Reference the plugin module
This Forge component is a thin OutSystems Plugin Module that wraps the underlying Cordova plugin. In your mobile app:
Step 2 — Add the iOS preference
In your mobile app's Extensibility Configurations property, add:
{ "preferences": { "ios": [ { "name": "CFBundleAllowMixedLocalizations", "value": "true" } ] } }
This is required on iOS. Without CFBundleAllowMixedLocalizations, iOS silently ignores localized display names and falls back to your default app name on every device.
CFBundleAllowMixedLocalizations
If you already have other preferences in this JSON, merge the iOS array carefully — keep your existing entries and add the new one.
Step 3 — Upload locale JSON files as Module Resources
For each language you want to support, create a JSON file named after the locale code and upload it as a Module Resource in Service Studio:
en.json
Typical set: en.json, pt.json, es.json, fr.json, de.json, it.json — ship what your users actually use.
pt.json
es.json
fr.json
de.json
it.json
Step 4 — Publish and build
2. JSON file format
Each locale file is a tiny JSON with two sections — one for iOS, one for Android:
{ "config_ios": { "CFBundleDisplayName": "Tempo" }, "config_android": { "app_name": "Tempo" } }
Field reference
config_ios.CFBundleDisplayName
config_android.app_name
launcher_name
activity_name
AndroidManifest.xml
Both fields are optional individually — if you only have config_ios, the plugin only updates iOS (and vice versa). But typically you want both.
config_ios
3. Locale codes
Name each JSON file after the locale you want it to apply to. The plugin handles platform-specific differences automatically.
en.lproj/
values-en/
pt.lproj/
values-pt/
pt-BR.json
pt-BR.lproj/
values-pt-rBR/
pt-PT.json
pt-PT.lproj/
values-pt-rPT/
zh-Hans.json
zh-Hans.lproj/
values-zh/
Recommendation: use simple two-letter codes (en, pt, es) unless you specifically need regional differentiation. For Chinese on Android, prefer zh-CN.json / zh-TW.json over zh-Hans / zh-Hant.
en
pt
es
zh-CN.json
zh-TW.json
zh-Hans
zh-Hant
4. Default app name (AppDefaultName)
Your locale files only cover the languages you ship. When the device language matches none of them, the OS uses the app's default name — normally whatever your module is named. You can override this explicitly with the AppDefaultName global preference. One value covers both platforms.
Add it to your mobile app's Extensibility Configurations under preferences.global:
preferences.global
{ "preferences": { "global": [ { "name": "AppDefaultName", "value": "Home Connect" } ], "ios": [ { "name": "CFBundleAllowMixedLocalizations", "value": "true" } ] } }
At build time the plugin writes this value to:
CFBundleDisplayName
CFBundleName
Info.plist
app_name
values/
AppDefaultName must be a global preference. A preference placed inside a platform block is ignored on purpose, since the one value is meant to apply to both platforms.
It works independently of locale files — you can set AppDefaultName without shipping any JSON files if you only need to control the default name and not per-language localization.
5. What the plugin does at build time
On every MABS build, the plugin's after_prepare hook runs and:
after_prepare
www/
<locale>.lproj/InfoPlist.strings
App.xcodeproj/project.pbxproj
xcodebuild
values-<locale>/strings.xml
You don't need to know any of this to use the plugin — but the build log will show these steps if you ever need to debug.
6. Testing on a device
Note: standard MABS IPAs are device-only builds (iphoneos SDK). They cannot be installed on the iOS Simulator directly. Use a real device for iOS verification.
7. Troubleshooting
The home-screen label still shows the default name
Check, in order:
.json
Portuguese.json
Plugin doesn't appear in the build at all
If cordova_plugins.js in the APK doesn't list cordova-plugin-localized-app-name, the plugin isn't being installed by MABS. Check:
cordova_plugins.js
cordova-plugin-localized-app-name
metadata.version
iOS build succeeds but no .lproj folders are in the IPA
If you can grab the MABS build log, search for lines starting with [localized-app-name]. You should see:
[localized-app-name]
[localized-app-name] Reading locale files from www (N file(s): ...) [localized-app-name] iOS -> en.lproj/InfoPlist.strings = "..." [localized-app-name] iOS: wrote N locale file(s). [localized-app-name] iOS: registered N new locale(s) in Xcode project. [localized-app-name] iOS: purged cordova-ios project file cache via ...
If the purge line is missing, you're likely running an older version. Upgrade to 1.0.5 or later.
Android build succeeds but the icon label doesn't change
Inspect the APK with unzip -p app.apk resources.arsc | strings | grep -i "values-pt" (or similar). If you don't see your locale folders, the plugin didn't run — check the build log for [localized-app-name] Android -> lines. If you do see them but the label still doesn't change, your AndroidManifest.xml probably references a string key the plugin isn't writing. By default the plugin writes app_name, launcher_name, and activity_name — which covers every Cordova-generated manifest.
unzip -p app.apk resources.arsc | strings | grep -i "values-pt"
[localized-app-name] Android ->
8. Resources
This plugin localizes your OutSystems mobile app's home-screen icon label based on the device language. When a user's phone is set to Portuguese, the icon reads "Tempo". When it's set to English, it reads "Weather". Locales you don't ship fall back to the default app name automatically.