我们的总部设在瑞士,但在德国和奥地利有客户(这是相关的,我们将在下面看到)。
我们有一个应用程序,我们使用调用各种JavaScripts的Applescript来控制Photoshop。在某些情况下,我们会立即将JavaScript的返回值写入变量,如
将myVar设置为(执行JavaScript“pathToMyScript.jsx) - 伪代码
这非常有效,我们总是有字符串。
如果返回的字符串表示带小数符号的数字(例如“0.0184528”),则会出现此问题。最简单的是乘以1,如
将myNextVar设置为myVar * 1
只要语言环境是英语或瑞士德语,这一切都很顺利。但是当语言环境是德语(或法语)时。在这种情况下,Applescript不再接受输入并抛出错误。
在这里,我正在寻找处理这种情况的好主意......
•通过语言和区域系统首选项更改相应计算机上的区域设置 - >高级... - >一般 - >数字分隔符是不可能的;我们不能指望我们的用户照顾它。
•使用控件Applescript(如果需要,与系统事件一起)临时更改语言环境可能是一个选项。但是,这会立即起作用,并且是否会调用更改的脚本?
•由于使用系统事件来访问活动元素,因此必须使用辅助功能安全设置注册应用程序。使用applet比较容易,因为applet不会经常更改。
这就是我想到的。还有其他方法吗? Applescript中的任何可能的内容(请记住,解决方案必须独立于区域设置工作。
非常感谢任何有用的想法。
提前致谢。
答案 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