2012-02-19 24 views
2

我在Mac OS X 10.7(Lion)下創建了一個Automator 工作流程服務(不是Automator應用程序!),其核心是AppleScript操作。該操作需要在幾個地方通知用戶其操作(包括可能的中止),並且我希望將這些消息本地化爲用戶的語言。如何在Automator工作流程內使用AppleScript的「本地化字符串」

繼蘋果string localization guidelines,我已經創建工作流束區域內的資源文件夾(即<bundle>/Contents/Resources/<lang>.lproj/文件夾),放在裏面包含UTF-16編碼字符串映射Localizable.strings文件。我使用AppleScript的localized string of <string_mapping_token>構造將它們稱爲。

當打包到一個AppleScript應用程序包(測試和確認)時,它工作得很好,但是如果在Automator生成的服務中使用完全相同的腳本和結構,本地化將失敗 - 我得到的只是原始令牌(請注意localized menu namesServicesMenu.strings被拾起就好 - 資源文件夾結構本身似乎不是問題)。

我的猜測是,在Automator工作流程內部,與​​應用程序包相反,localized string的上下文是Automator(或Automator Runner,因爲它可能),而不是捆綁本身,因此本地化查找失敗。我曾嘗試向該服務添加一個Bundle標識符(CFBundleIdentifier),並通過Automator自己的localized string in bundle with identifier <identifier>構造引用該標識符,但似乎僅限於使用Automator註冊的操作包。

是否有解決此問題的方法,允許我在自包含的AppleScript服務中使用AppleScript的本地本地化機制?

+0

它適用於我 - 您是否(重新)在Automator構建應用程序後添加Localizable.strings文件? – 2012-02-19 01:12:14

+0

@Red_Menace:問題是我正在構建Automator *服務*,而不是Automator *應用程序*。後者提供了一個本地化存根(如果我正確的話,每個支持的OS X語言都有一個虛擬的'.nib'文件),並且如果將Localizable.strings文件重新添加到其各自的',則支持本地化的字符串。通過Automator每次構建後,都會生成lproj文件夾。前者本身不提供任何本地化結構,但可以手動添加。正如我的問題中所描述的那樣,對於服務菜單條目的本地化而言,這是有效的,但僅限於此 - 「Localizable.strings」被忽略。 – kopischke 2012-02-19 15:29:45

+0

只是在黑暗中捅:您使用的短名稱,如「de」和「en」,對吧?我只是問,因爲這是更長的名稱,在某些情況下工作,如果你真的使用這些,也許這就是你必須改變。除此之外,沒有想法。 – 2012-05-03 22:47:44

回答

3

本地化字符串命令在Automator服務中似乎沒有正確的上下文,但您可以使用任何具有通常位置資源的束。如果您知道軟件包的位置(您的服務工作流程,包含的應用程序等),則可以在命令中指定該路徑,例如

get localized string of "testing" in bundle file "path:to:your:bundle" 

編輯:下面是什麼對我工作的例子:

我創建了接收任何申請文本,由運行AppleScript行動的一項新的服務工作流程:

property myPath : (path to library folder from user domain as text) & "Services:localize test.workflow" 

on run {input, parameters} 

    try 
     display alert getLocalizedString("TESTING") & return & getLocalizedString("NO_ERROR") message "Input Text: " & quoted form of (input as text) 
    on error errmess number errnum 
     display alert "Error" & errnum message errmess 
    end try 

    return input 
end run 

on getLocalizedString(theString) 
    get localized string of theString in bundle file myPath 
end getLocalizedString 

我將工作流命名爲「本地化測試」,並將其保存在默認的〜/ Library/Services文件夾中(這是路徑在myPat h財產)。接着,Localizable.strings文件(UTF-16與BBEdit中創建)中的溶液放置在/Contents/Resources/English.lproj文件夾,其包含以下的服務束:

/* Automator localization test */ 
"NO_ERROR" = "There seems to have been no error."; 
"TESTING" = "Hmmm, works OK for me..."; 

一個附加的在我的桌面上使用添加了相同資源的AppleScript腳本包進行測試也可以正常工作,因此,只要您使用有效的捆綁目錄結構的路徑,就可以進行任何操作。

+0

所有得到我的都是AppleScript錯誤:「file」路徑:to:my:bundle「can not be read」(是的,只是爲了搶先試試這個問題:我正在使用bundle的實際路徑;嘗試使用別名作爲文本和字符串文字,有和沒有文件夾「:」結束符。沒有骰子)。 – kopischke 2012-02-19 21:51:11

+0

根據Automator AS字典,捆綁條中「foo」的本地化字符串中的預期參數「bar」是一個Automator捆綁對象。運行一個快速測試,我不能強制別名或文件對象這樣的捆綁對象,但我可能會錯過什麼? – kopischke 2012-02-19 22:16:30

+0

我使用外部腳本包和服務工作流本身進行了測試,並在適當的.lproj文件夾中使用了Localizable.strings文件 - 我創建了中間文件夾,但沒有做任何其他更改。這種方法適用於使用捆綁的路徑(我剛剛測試過英文),但如果使用服務捆綁包,則可能需要玩遊戲才能動態定位它。 – 2012-02-19 23:13:35

相關問題