Ios 在国际化我的应用程序之前,如何更改Xcode中的开发语言?

Ios 在国际化我的应用程序之前,如何更改Xcode中的开发语言?,ios,xcode,internationalization,Ios,Xcode,Internationalization,我正在接管一个完全用法语编写的应用程序。代码中的字符串用法语硬编码,故事板中的所有消息都用法语。但是Info.plist中最初的开发区域留给了英语。因此,我将CFBundleDevelopmentRegion更改为fr,以便它与所使用的实际语言相匹配。但是XCode一直告诉我我的开发语言是英语: developmentRegion = fr; hasScannedForEncodings = 0; knownRegions = (

我正在接管一个完全用法语编写的应用程序。代码中的字符串用法语硬编码,故事板中的所有消息都用法语。但是
Info.plist
中最初的开发区域留给了英语。因此,我将
CFBundleDevelopmentRegion
更改为
fr
,以便它与所使用的实际语言相匹配。但是XCode一直告诉我我的开发语言是英语:

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );

我该怎么纠正呢?目标是能够激活基础国际化,并使其使用法语作为基础语言,而不是英语。

在项目导航器(右侧)的
支持文件
组下选择
Info.plist
文件。然后,在
本地化本地开发区域的编辑器视图中
单击“英语”右侧的上下箭头并选择
法国

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );

应该是这样。尽管如此,Xcode有时不会更新项目设置的“信息”视图。

我可能已经找到了答案

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
我已经用瑞典语构建了一个应用程序,但是开发语言设置为英语

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
我手工编辑了
MyProject.xcodeproj/project.pbxproj
。有两行是这样的:

91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
将所有“en”更改为“sv”,如下所示:

91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
将文件
MyProject/en.lproj/InfoPlist.strings
移动到
MyProject/sv.lproj/InfoPlist.strings
似乎已经解决了这个问题。现在“开发语言”显示为瑞典语,我可以添加一个英语翻译

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
添加翻译后,故事板有一个扩展三角形,其中基础语言是现有的瑞典语版本,翻译是英语字符串文件

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );

以下步骤对我有效,但它包括手动编辑
project.pbxproj
文件:

developmentRegion = fr;
            hasScannedForEncodings = 0;
            knownRegions = (
                fr,
                Base,
            );
  • 退出XCode
  • 使用您喜爱的文本编辑器打开
    project.pbxproj
    文件
  • 更新以下部分(靠近
    developmentRegion
    ):
  • 旧版:

        developmentRegion = English;
        hasScannedForEncodings = 0;
        knownRegions = (
            en,
            Base,
        );
    
    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    
    新建:

    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    
    我创建了一个示例项目,该项目最初使用英语作为默认开发语言创建,然后通过上面的过程进行更新,使用法语作为开发语言

    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    

    我希望我理解了这个问题。顺便说一句,使用Xcode的GUI实现您想要的功能非常简单,如下所述:

    下面是一个Ruby脚本,用于使用cocoapods库更改Xcode项目中的开发区域:

    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    
    require 'fileutils'
    require 'Xcodeproj'
    
    filename = ARGV.first
    
    raise "Argument '#{filename}' is not a valid .xcodeproject" unless filename && File.directory?(filename) && File.extname(filename).downcase == ".xcodeproj"
    
    puts "Region to set: "
    region = $stdin.gets.chomp
    
    project = Xcodeproj::Project.open(filename)
    project.root_object.development_region = region
    project.save
    
    puts "#{project.path}", "development_region = #{project.root_object.development_region}"
    

    我想用我自己的“开发者”语言开发这个项目,使用占位符,而不是NSLocalizedString内部的“WLAN不可用”示例中的真实文本,该示例稍后将被翻译成不同的语言,当然包括英语。我不喜欢我必须在代码中写出完整的句子

    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    
    我刚刚打开了*.xcodeproj文件夹中的*.pbxproj文件,并将以下行更改为:

    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );
    
    developmentRegion = Base;
    

    在那之后,英语不再被设定为开发语言,我可以像对待其他语言一样对待它。作为开发人员,您可以编写简短的文本占位符,并将正确的拼写委托给团队中的其他人。

    这与“基本”语言完全无关。这只定义了当用户的首选语言不存在时将使用的语言。@geon:你在哪里读到的?如果没有可用的用户语言翻译,则不提及默认翻译的选择。@dergab:@geon:嗯,很好地传播信息片段。因此,必须同时处理默认翻译选择(在运行时)和UI文件的基础语言定义(在设计时/预编译时)。@dergab:CfBundledDevelopmentRegion(或“本地化本地开发区域”)在链接到的文档中没有提到。您认为它为什么会影响“基础国际化”?我终于能够更改开发语言了,谢谢!
    developmentRegion = fr;
                hasScannedForEncodings = 0;
                knownRegions = (
                    fr,
                    Base,
                );