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 "Cartão Continente". When it's set to English, it reads "Continente Card". Locales you don't ship fall back to the default app name automatically.
This Forge component is a thin OutSystems Plugin Module that wraps the underlying Cordova plugin. In your mobile app:
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.
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
Each locale file is a tiny JSON with two sections — one for iOS, one for Android:
{ "config_ios": { "CFBundleDisplayName": "Cartão Continente" }, "config_android": { "app_name": "Cartão Continente" } }
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
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
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.
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.
Check, in order:
.json
Portuguese.json
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
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.
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 ->
app_name