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

32

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

XCode 6.3.2项目信息选项卡

我该如何更正?目标是能够激活基础国际化并将其使用法语作为基础语言,而不是英语。

6个回答

42
以下步骤对我有效,但需要手动编辑project.pbxproj文件:
  1. 退出XCode
  2. 使用您喜欢的文本编辑器打开project.pbxproj文件
  3. 更新以下部分(靠近developmentRegion):

旧的:

    developmentRegion = English;
    hasScannedForEncodings = 0;
    knownRegions = (
        en,
        Base,
    );

新:

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

我已经创建了一个GitHub仓库,其中包含一个示例项目,该项目最初使用英语作为默认开发语言创建,然后通过上述程序更新为使用法语作为开发语言。

Project ScreenShot


2
我终于成功更改了开发语言,谢谢! - Mario Burga

15

我可能已经弄清楚了。

我用瑞典语创建了一个应用,但开发语言设置为英语。

我手动编辑了MyProject.xcodeproj/project.pbxproj。有两行像这样:

91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };

并且这一部分:

developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
        en,
        Base,
);

像这样将所有的“en”更改为“sv”:

91C8245918BDFA6100A9972F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };

developmentRegion = Swedish;
hasScannedForEncodings = 0;
knownRegions = (
        sv,
        Base,
);

移动文件MyProject/en.lproj/InfoPlist.stringsMyProject/sv.lproj/InfoPlist.strings看起来已经解决了问题。现在“开发语言”显示为瑞典语,我可以添加英语翻译。

添加翻译后,故事板会有一个展开三角形,其中基础语言是现有的瑞典语版本,翻译是一个英语的字符串文件。

故事板有英语翻译。耶。


4
我希望用占位符代替实际文本,例如“WLAN_NOT_AVAILABLE”,在我的自己的“开发”语言中开发项目,并稍后将其翻译成不同的语言,包括英语。 我不喜欢必须在代码中编写完整的句子。
我只是打开了*.xcodeproj文件夹中的*.pbxproj文件,并将以下行更改为:
developmentRegion = Base;

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


1
以下是一个Ruby脚本,可使用cocoapods库更改Xcode项目中的开发区域:
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}"

https://www.ralfebert.de/snippets/ios/xcode-change-development-language/


1

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

Open base-language selection

应该就是这样了。不过,Xcode有时候不会更新项目设置的“信息”视图。


1
这与“基础”语言完全无关。这只定义了如果用户没有首选语言,则将使用哪种语言。 - geon
@geon:你在哪里看到这个的?https://developer.apple.com/library/prerelease/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html#//apple_ref/doc/uid/10000171i-CH3-SW2 和 https://developer.apple.com/library/prerelease/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html#//apple_ref/doc/uid/10000171i-CH3-SW4 没有提到如果用户语言没有可用的翻译,应该选择默认翻译。 - dergab
@dergab:https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-130430-BAJJHDJH - geon
@geon:很好,信息碎片分布得很好。因此,它既涉及默认翻译选择(在运行时),也涉及UI文件的基础语言定义(在设计时/预编译时)。 - dergab
@dergab:在你提供的文档中并没有提到CFBundleDevelopmentRegion(或“本地化开发区域”)。你为什么认为它会影响“基础国际化”? - geon
@geon:但是“开发语言”被提到了。既然没有其他参考,如果不通过开发区域来确定开发语言,那还有什么其他方式呢?但你可能是对的。这篇文章https://dev59.com/xV8e5IYBdhLWcg3wTJCL展示了如何设置“开发语言”,似乎与开发区域没有关系。 - dergab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接