I\'ve been searching on the Internet but none of the solutions I found seems to work so, my question is with Xcode 6, how we could localize a Cordova app?
The image
The preferred answer is correct but has the drawback to be native, i. e. you have to modify the Info*.plist after cordova prepare.
If you want to stick with the Cordova's style (which i recommend), you can use a hook or a plugin for this.
I did it with a plugin because a plugin has (from scratch) the ability to modify the native configuration's files (AndroidManifest.xml or Info*.plist).
See https://stackoverflow.com/a/27947343/2728710
What I've done :
localPlugins/cordova-plugin-config-ios/plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin id="cordova-plugin-config-ios" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0">
<name>CRM Factory Cordova Localization iOS Plugin</name>
<description>A label translate example</description>
<!-- ios -->
<platform name="ios">
<config-file target="*-Info.plist" parent="CFBundleDevelopmentRegion">
<array>
<string>French</string>
</array>
</config-file>
<config-file target="*-Info.plist" parent="CFBundleLocalizations">
<array>
<string>fr_FR</string>
</array>
</config-file>
</platform>
</plugin>
add-local-plugins.sh
echo "Install specific plugin for modify Info*.plist"
cordova plugin add cordova-plugin-config-ios --searchpath ${projectDir}/localPlugins/cordova-plugin-config-ios
config.xml
<hook src="hooks/add-local-plugins.sh" type="before_prepare" />
In my case, the hook was not mandatory but I like the freedom brought by it and to be able to log what the program did (echo part).
Go to the .plist file of any plugin and comment out:
<!-- <key>CFBundleDevelopmentRegion</key>
<string>nl</string> -->
Then the plugin will use the systems set language and region. This is likely the most practical solution for a lot of cases.
You can do this within the app code itself using cordova-custom-config:
<custom-config-file parent="CFBundleLocalizations" target="*-Info.plist" mode="replace">
<array>
<string>en</string>
</array>
</custom-config-file>
Finally I figured out after some digging and with the help of a guy that greatly assisted me in other forum, you have to put this in the project .plist this:
<key>CFBundleLocalizations</key>
<array>
<string>es</string>
</array>
Each string is the language you want to localize.
It is also possible to do this without a hook or plugin by using <edit-config>
in your config.xml
. Here is an example:
<platform name="ios">
<edit-config target="CFBundleLocalizations" file="*-Info.plist" mode="overwrite">
<array>
<string>en</string>
<string>es</string>
</array>
</edit-config>
</platform>
Usage of <edit-config>
in config.xml
was introduced in Cordova 6.4.0.
I post the way that i worked:
You write any key as the example in any InfoPlist.strings like the above example
"NSLocationAlwaysAndWhenInUseUsageDescription"="blabla";
"NSLocationAlwaysUsageDescription"="blabla2";
That's all work and you have localize your info.plist file!