【发布时间】:2012-02-19 00:50:37
【问题描述】:
我在 Mac OS X 10.7 (Lion) 下创建了一个 Automator 工作流服务(不是 Automator 应用程序!),其核心是 AppleScript 动作。该操作需要在多个时间点通知用户其操作(包括可能的中止),并且我希望将消息本地化为用户的语言。
按照 Apple 的 string localization guidelines,我在工作流包内创建了语言环境资源文件夹(即 <bundle>/Contents/Resources/<lang>.lproj/ 文件夹),并将 Localizable.strings 文件放入包含 UTF-16 编码的字符串映射的内部。我使用 AppleScript 的 localized string of <string_mapping_token> 构造来调用它们。
这在打包到 AppleScript 应用程序包(经过测试和确认)时工作得很好,但是当在 Automator 生成的服务中使用完全相同的脚本和结构时,本地化会失败——我得到的只是原始令牌(注意 @987654322 @ 在ServicesMenu.strings 中的@ 被拾取就好了——资源文件夹结构本身似乎不是问题)。
我的猜测是问题在于,在 Automator 工作流程中,与应用程序包相反,localized string 的上下文是 Automator(或 Automator Runner,可能是),而不是包本身,因此是本地化查找失败。我尝试向服务添加一个 Bundle 标识符 (CFBundleIdentifier) 并通过 Automator 自己的 localized string in bundle with identifier <identifier> 构造引用它,但这似乎仅限于使用 Automator 注册的操作包。
是否有解决此问题的方法,允许我在自包含的 AppleScript 服务中使用 AppleScript 的本机本地化机制?
【问题讨论】:
-
它适用于我 - 您是否在 Automator 构建应用程序后(重新)添加 Localizable.strings 文件?
-
@Red_Menace:问题是我正在构建 Automator 服务,而不是 Automator 应用程序。后者提供了一个本地化存根(如果我是正确的话,对于 OS X 的每种支持的语言都有一个虚拟的
.nib文件)并支持本地化字符串,如果您在每个之后将Localizable.strings文件重新添加到其各自的<lang>.lproj文件夹中由 Automator 构建。前者本身不提供任何本地化结构,但您可以手动添加。正如我的问题中所述,这适用于服务菜单条目的本地化,但仅限于此 -Localizable.strings被忽略。 -
只是在黑暗中戳戳:您正在使用
的短名称,例如“de”和“en”,对吗?我只是问,因为在 some 情况下工作的名称较长,如果您实际使用这些名称,也许这就是您必须更改的内容。除此之外,没有任何想法。 -
@ThomasTempelmann:感谢您的建议 - 长期和短期都尝试过(我以前也看到过这也是一个问题),但这似乎确实是
localized string的上下文问题在服务的情况下不是脚本本身——但 Red_Menace 的解决方案有效。 -
@kopischke 链接已损坏,您能更新一下吗?
标签: localization applescript automator