Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
iPhone:NSLocalizedString从英语.strings文件读取,即使设置了另一个lang_Iphone_Xcode_Localization - Fatal编程技术网

iPhone:NSLocalizedString从英语.strings文件读取,即使设置了另一个lang

iPhone:NSLocalizedString从英语.strings文件读取,即使设置了另一个lang,iphone,xcode,localization,Iphone,Xcode,Localization,我有一个应用程序,其中包含一些非美国本地化的.strings文件。它们出现在项目中,正如我所期望的:有一个Localizable.strings对象,以及“en”、“fr”等的子对象。其中每一个都是UTF16文本文件,我已经验证了它们作为正确的二进制plist文件传播到构建包中 但是,在运行我的应用程序时,即使设备设置是其他语言,也只有来自English Localizable.strings文件的字符串返回 NSLocale的首选语言是“fr”,我可以看到设备设置以某种方式通过,因为系统工具栏

我有一个应用程序,其中包含一些非美国本地化的.strings文件。它们出现在项目中,正如我所期望的:有一个Localizable.strings对象,以及“en”、“fr”等的子对象。其中每一个都是UTF16文本文件,我已经验证了它们作为正确的二进制plist文件传播到构建包中

但是,在运行我的应用程序时,即使设备设置是其他语言,也只有来自English Localizable.strings文件的字符串返回

NSLocale的首选语言是“fr”,我可以看到设备设置以某种方式通过,因为系统工具栏按钮(“撤消”等)被翻译

但是我的字符串仍然是英文的。(请注意,它们来自.strings文件,我编辑了该文件以进行验证。)

所以:字符串文件看起来不错,构建和部署也不错

我还需要做些什么来“告诉”项目支持其他地区吗


谢谢

对于en_US总是返回的特定问题,您需要查询当前首选语言数组的
首选语言
,而不是
currentLocale

NSLocalizedString是否不从正确的文件返回键控字符串

在本地化过程中,你必须确保你正在改变你认为你正在改变的东西。如果在首选项中更改语言,则会影响从localizable.strings文件返回的字符串。如果您更改区域格式下的设置,该格式仅为日期、货币符号等。

当项目根目录中以及单个.lproj目录中都有可本地化的.strings文件时,就会发生这种情况。应用程序似乎总是更喜欢它,如果它存在的话。事实上,它很可能是一个人为的混混,试图让本地化在项目中工作


我把这个问题留在这里,以防其他人遇到这个问题。

如果您在项目根目录下运行带有Localizable.strings文件的应用程序,清理是不够的,您还需要从模拟器中删除该应用程序。

它还可以帮助您在本地化.NIB后从模拟器中卸载该应用程序,因为本地化版本将在新位置(如“en.lproj”、“fr.lproj”)有两个(或更多)新文件。但是,当您构建到模拟器时,删除旧的.xib文件太愚蠢了,因此它将继续加载旧的过时的xib文件,而不是新的本地化版本,直到您通过重新安装应用程序清除设备。

我这样解决:
我从模拟器中删除了这个应用程序,在xcode:Product->Clean

Adam中,谢谢你的回答。当我在首选项中将语言更改为“法语”时,我的首选语言是“fr”(这是正确的)。但是NSLocalizedString从我的English.strings文件返回字符串。有什么想法吗?为了清晰起见,更新了问题。您正在将国际标题下的语言设置为法语,因此它应该可以从localizable.strings下的“fr”文件中获取文本。我想,出于某种原因,它正在回到英语——您的字符串文件或所选的编码可能有任何问题吗?我不能完全确定这一点,但字符串文件中不匹配的引号或分号可能会导致这种情况。当然,你的关键资源必须存在。是的,我同意这应该是有效的,而且它似乎正在回归到英语。但是plist.strings文件(由构建本身生成到应用程序包中的文件)可以通过属性列表编辑器打开,并且看起来很合理。感谢@Cœur的编辑。随着时间的推移,这种联系肯定变得毫无用处。