How to localize Cordova iOS projects?

后端 未结 6 1806
长发绾君心
长发绾君心 2020-12-10 19:36

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

相关标签:
6条回答
  • 2020-12-10 19:52

    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 :

    • make a new specific plugin name "cordova-plugin-config-ios"

    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>
    
    • make a hook add-local-plugins.sh. In it, install the specific plugin made

    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
    
    • call the hook via config.xml

    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).

    0 讨论(0)
  • 2020-12-10 19:57

    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.

    0 讨论(0)
  • 2020-12-10 20:02

    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>
    
    0 讨论(0)
  • 2020-12-10 20:03

    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.

    0 讨论(0)
  • 2020-12-10 20:10

    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.

    0 讨论(0)
  • 2020-12-10 20:17

    I post the way that i worked:

    1. Find in the x-code the folder Resources (is placed in root)
    2. Select the folder Resources
    3. Then press the main menu File->New->File...
    4. Select in section "Resource" Strings File and press Next
    5. Then in Save As field write InfoPlist ONLY ("I" capital and "P" capital)
    6. Then press Create
    7. Then select the file InfoPlist.strings that created in Resources folder and press in the right menu the button "Localize"
    8. Then you Select the Project from the Project Navigator and select the The project from project list
    9. In the info tab at the bottom you can as many as language you want (There is in section Localizations)
    10. The language you can see in Resources Folder
    11. To localize the values ("key") from info.plist file you can open with a text editor and get all the keys you want to localize
    12. 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!

    0 讨论(0)
提交回复
热议问题