1

我有一个 Cocoa 应用程序。这与 OSX 服务菜单挂钩。我创建了三个ServicesMenu.strings用于本地化服务菜单标题的en.lprojzh-Hans.lproj问题是 OSX 似乎确实在使用本地化文本。hi-IN.lproj

Info.plist(相关部分)

<key>NSServices</key>
<array>
    <dict>
        <key>NSKeyEquivalent</key>
        <key>NSMenuItem</key>
        <dict>
            <key>default</key>
            <string>CreateHere</string>
        </dict>
        <key>NSMessage</key>
        <string>createHere</string>
        <key>NSPortName</key>
        <string>CreateHereFilesService</string>
        <key>NSRequiredContext</key>
        <dict>
            <key>NSApplicationIdentifier</key>
            <string>com.apple.finder</string>
        </dict>
        <key>NSSendFileTypes</key>
        <array>
            <string>public.folder</string>
        </array>
        <key>NSUserData</key>
        <string>create</string>
    </dict>
</array>

ServicesMenu.strings (en.lproj)

/* 
  ServicesMenu.strings
*/

/* default */
"CreateHere" = "Create File Here";

在服务菜单上,我可以看到选项CreateHere而不是Create File Here.

更新

如果这有帮助。这是输出/System/Library/CoreServices/pbs -dump_pboard

{
    CFPrincipalLocalizations =     (
        English
    );
    CFVendedServices =     (
                {
            NSBundleIdentifier = "com.applegrew.apple.service.CreateHereFiles";
            NSBundlePath = "/Users/applegrew/Library/Services/CreateHereFiles.app";
            NSMenuItem =             {
                default = CreateHere;
            };
            NSMessage = createHere;
            NSPortName = CreateHereFilesService;
            NSRequiredContext =             {
                NSApplicationIdentifier = "com.apple.finder";
            };
            NSSendFileTypes =             (
                "public.folder"
            );
            NSUUID = <199fd7c0 cdd146fb 9a564a93 231b23f9>;
            NSUserData = create;
        }
    );
    CFVersion = 2;
}

不像其他服务(上面未显示)NSMenuItem没有任何条目English这与我没有English.lproj,而是我有有什么关系en.lproj吗?

4

1 回答 1

0

今天在向我的应用程序添加服务时遇到了同样的问题。

除本地化外,一切正常。

通过运行以下命令修复了该问题:

/System/Library/CoreServices/pbs -flush

/System/Library/CoreServices/pbs -update

根据English.lproj

这与我没有任何English.lproj,而是我有en.lproj 有什么关系吗?

English.lproj 已过时,请改用 en.lproj。来自苹果文档:

对于语言名称,您可以使用 ISO 639-1 或 ISO 639-2 约定。ISO 639-1 规范使用两个字母的代码来识别语言,是识别语言的首选方式。

查看国际化编程主题(语言和区域设置指定 → 语言指定)了解更多信息。

https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPInternational/Articles/LanguageDesignations.html#//apple_ref/doc/uid/20002144-SW1

于 2012-08-17T10:36:06.260 回答