我有一个OS X应用程序,它使用Base Internationalization功能(一个XIB +许多字符串文件)。我正在使用-AppleLanguages '(cs)'
命令行参数启动应用程序来测试捷克语本地化。它有效,但是有一个特殊的窗口没有加载本地化的字符串,它以英语(基本开发语言)出现。
该窗口是一个带有本地化字符串文件的普通XIB。我检查了构建的产品,字符串文件就在那里。 XIB的加载方式如下:
[[NSWindowController alloc] initWithWindowNibName:@"NibName"]
当我在构建方案编辑器中打开显示非本地化字符串调试开关时,我在控制台中收到了一堆警告:
Localizable string "B1p-qW-vKP.title" not found in strings table "NibName" of bundle CFBundle 0x100305400 </System/Library/Frameworks/AppKit.framework> (not loaded).
我尝试了一个干净的构建,并删除了Derived Data文件夹以重新开始。还尝试删除XIB并将其替换为只有一个可本地化字符串的简单测试窗口。什么都没有帮助。我能做错什么?
更新:当我从其中一个工作字符串文件中删除本地化字符串时,运行时的错误消息有点不同:
Localizable string "90.title" not found in strings table "AppMenu" of bundle CFBundle 0x100202460 </long/path/to/My.app> (executable, loaded).
请注意,捆绑包不同。看起来在虚假窗口的情况下,本地化系统正在尝试从错误的包(AppKit.framework
)加载字符串。为什么呢?
答案 0 :(得分:1)
我明白了。由于我在窗口中不需要自定义行为,因此我使用了带有自定义XIB接口的普通NSWindowController
。但是在运行时,本地化系统正在从与此类关联的包中加载字符串:AppKit。我创建了一个空的NSWindowController
子类,现在可以从我的应用程序包中正确加载字符串。