Applescript:使用不同语言环境的十进制符号问题

时间:2016-06-26 18:39:51

标签: internationalization applescript locale

我们的总部设在瑞士,但在德国和奥地利有客户(这是相关的,我们将在下面看到)。

我们有一个应用程序,我们使用调用各种JavaScripts的Applescript来控制Photoshop。在某些情况下,我们会立即将JavaScript的返回值写入变量,如

将myVar设置为(执行JavaScript“pathToMyScript.jsx) - 伪代码

这非常有效,我们总是有字符串。

如果返回的字符串表示带小数符号的数字(例如“0.0184528”),则会出现此问题。最简单的是乘以1,如

将myNextVar设置为myVar * 1

只要语言环境是英语或瑞士德语,这一切都很顺利。但是当语言环境是德语(或法语)时。在这种情况下,Applescript不再接受输入并抛出错误。

在这里,我正在寻找处理这种情况的好主意......

•通过语言和区域系统首选项更改相应计算机上的区域设置 - >高级... - >一般 - >数字分隔符是不可能的;我们不能指望我们的用户照顾它。

•使用控件Applescript(如果需要,与系统事件一起)临时更改语言环境可能是一个选项。但是,这会立即起作用,并且是否会调用更改的脚本?

•由于使用系统事件来访问活动元素,因此必须使用辅助功能安全设置注册应用程序。使用applet比较容易,因为applet不会经常更改。

这就是我想到的。还有其他方法吗? Applescript中的任何可能的内容(请记住,解决方案必须独立于区域设置工作。

非常感谢任何有用的想法。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我的信念是,您的问题来自于不同国家/地区的数字代表的不同方式。示例1,029.42 vs 1.029,42因为您返回格式为" 0.0184528"的字符串,但是当您尝试将该字符串强制转换为数字时,如果该语言需要格式不同,你得到了你的错误。一种方法可能是在适当时更改字符串。找到"。"并用","

替换

在我的"英语"系统这就是我要做的事情

on run
    set myVar to (do JavaScript "pathToMyScript.jsx) as number-- where your script would return something like "0.0184528"
end run

如果我要改为"法语",我相信它会给出错误,因为它不会理解" 0.0184528"是小数。

有趣的是,在我的"英语"系统,当我从" 0.0184528"更改字符串时至" 0,0184528"并将其格式化为数字,它有效。

On"英语"系统

set myVar to "0.0184528" as number -- WORKS
set myVar to "0,0184528" as number -- ALSO WORKS

当我将语言改为"法语"

set myVar to "0.0184528" as number -- FAILS
set myVar to "0,0184528" as number -- WORKS

在我看来,用逗号表示你的十进制字符串对你来说会更好。可能有更合适的方法来处理这个问题,但我并未意识到这一点。我至少建议试一试。

建议测试摘要

尝试更新您的javascript以返回使用逗号而不是小数点格式化的字符串。

可以从您的javascript返回的示例字符串

" 0,0184528"

" 39204,09"

" 39203032,0502