Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何本地化Cordova iOS项目?_Ios_Xcode_Cordova_Localization_Project - Fatal编程技术网

如何本地化Cordova iOS项目?

如何本地化Cordova iOS项目?,ios,xcode,cordova,localization,project,Ios,Xcode,Cordova,Localization,Project,我一直在互联网上搜索,但我发现的解决方案似乎都不起作用,我的问题是Xcode 6,我们如何本地化Cordova应用程序 下图说明了问题所在,我在iOS模拟器中测试了该应用程序(我将模拟器的语言设置更改为西班牙语),但输入中的上下文菜单或一些类似插件的摄像头仍使用英语。我将“本地化本地开发区”更改为“es”,但仍使用英语。另外,我在es.lproj文件夹中有Localizable.strings 经过一番挖掘之后,我终于明白了,在一位在其他论坛上为我提供了巨大帮助的人的帮助下,你必须将此加入到项目

我一直在互联网上搜索,但我发现的解决方案似乎都不起作用,我的问题是Xcode 6,我们如何本地化Cordova应用程序

下图说明了问题所在,我在iOS模拟器中测试了该应用程序(我将模拟器的语言设置更改为西班牙语),但输入中的上下文菜单或一些类似插件的摄像头仍使用英语。我将“本地化本地开发区”更改为“es”,但仍使用英语。另外,我在es.lproj文件夹中有Localizable.strings


经过一番挖掘之后,我终于明白了,在一位在其他论坛上为我提供了巨大帮助的人的帮助下,你必须将此加入到项目中。请列出以下内容:

<key>CFBundleLocalizations</key>
<array>
    <string>es</string>
</array>
CbundleLocalizations
锿

每个字符串都是您要本地化的语言。

首选答案是正确的,但有一个缺点是使用本地语言,即。E您必须在cordova准备后修改Info*.plist

若你们想坚持Cordova的风格(我推荐),你们可以使用一个钩子或插件

我之所以使用插件,是因为插件(从零开始)能够修改本机配置的文件(AndroidManifest.xml或Info*.plist)

我所做的:

  • 创建一个新的特定插件名称“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>
  • 通过config.xml调用钩子
config.xml

<hook src="hooks/add-local-plugins.sh" type="before_prepare" />


在我的例子中,钩子不是强制性的,但我喜欢它带来的自由,并且能够记录程序所做的事情(echo部分)。

config.xml
中使用
也可以不使用钩子或插件来实现这一点。以下是一个例子:

<platform name="ios">
  <edit-config target="CFBundleLocalizations" file="*-Info.plist" mode="overwrite">
    <array>
      <string>en</string>
      <string>es</string>
    </array>
  </edit-config>
</platform>


.

我发布了我的工作方式:

  • 在x代码中查找文件夹资源(位于根目录中)
  • 选择文件夹资源
  • 然后按主菜单文件->新建->文件
  • 在“资源”字符串文件部分选择,然后按下一步
  • 然后在另存为字段中,只写InfoPlist(“I”大写字母和“P” (大写)
  • 然后按Create
  • 然后选择在资源中创建的文件InfoPlist.strings 文件夹,然后按右菜单中的“本地化”按钮
  • 然后从项目导航器中选择项目并选择 项目列表中的项目
  • 在底部的“信息”选项卡中,您可以选择任意语言 (在节中存在本地化)
  • 您可以在参考资料文件夹中看到的语言
  • 要本地化info.plist文件中的值(“键”),可以打开 使用文本编辑器并获取所有要本地化的键
  • 您可以在任何InfoPlist.String中编写任何键作为示例,如 上例

    "NSLocationAlwaysAndWhenInUseUsageDescription"="blabla";
    
    "NSLocationAlwaysUsageDescription"="blabla2";
    

  • 这就是所有的工作,你已经本地化了你的info.plist文件

    转到任何插件的.plist文件并注释掉:

    <!-- <key>CFBundleDevelopmentRegion</key>
    <string>nl</string> -->
    
    
    

    然后插件将使用系统设置语言和区域。对于许多情况,这可能是最实用的解决方案。

    您可以在应用程序代码中使用以下方法实现这一点:

    
    EN
    
    如何为语言使用iOS设备设置:

    CbundledDevelopmentRegion似乎在默认情况下总是设置为en_US(或者这可能是因为我构建的笔记本电脑具有这些设置),从而以英语显示上下文菜单、文件上载对话框等

    我发现将CbundleDevelopmentRegion设置为空会使用语言的设备设置。

    请注意,有些插件似乎设置了语言,所以如果您无法让它工作,请检查您的插件。这是在Ionic 5/Angular/Cordova中测试的

    将其放入config.xml ios部分:

        <platform name="ios">
           <config-file parent="CFBundleDevelopmentRegion" target="*-Info.plist">
                <array>
                    <string />
                </array>
            </config-file>
        </platform>
    
    
    

    感谢@maximillion bartango answer将我带到了正确的轨道上

    应用程序本身是否仍然没有这种可能性?
    <custom-config-file parent="CFBundleLocalizations" target="*-Info.plist" mode="replace">
        <array>
            <string>en</string>
        </array>
    </custom-config-file>
    
        <platform name="ios">
           <config-file parent="CFBundleDevelopmentRegion" target="*-Info.plist">
                <array>
                    <string />
                </array>
            </config-file>
        </platform>