Internationalization Applescript:不同地区的小数点问题

Internationalization Applescript:不同地区的小数点问题,internationalization,applescript,locale,Internationalization,Applescript,Locale,我们的总部设在瑞士,但在德国和奥地利有客户(这是相关的,我们将在下文中看到) 我们有一个应用程序,其中我们使用调用各种Javascript的Applescript来控制Photoshop。在某些情况下,我们会立即将JavaScript的返回值写入变量,如 将myVar设置为(执行JavaScript“pathToMyScript.jsx”--伪代码 这非常有效,我们总是有字符串 当返回的字符串表示带小数点的数字(例如“0.0184528”)时,就会出现问题。最简单的方法是与1相乘,如中所示 将m

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

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

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

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

当返回的字符串表示带小数点的数字(例如“0.0184528”)时,就会出现问题。最简单的方法是与1相乘,如中所示

将myNextVar设置为myVar*1

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

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

•通过语言和区域系统首选项-->高级…-->常规-->数字分隔符更改相应计算机上的区域设置是毫无疑问的;我们不能指望我们的用户会注意到这一点

•使用控件Applescript临时更改区域设置(如果需要,与系统事件一起使用)可能是一个选项。但这会立即起作用吗?对于调用更改的脚本来说

•由于使用系统事件访问活动元素,应用程序必须使用可访问性安全设置注册。使用小程序更容易,因为小程序不会频繁更改

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

任何有益的想法都将受到高度赞赏


提前感谢。

我认为您的问题来自不同国家/地区数字的不同表示方式。例如1029.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”是十进制

有趣的是,在我的“English”系统中,当我将字符串从“0.0184528”更改为“00184528”并将其格式化为数字时,它工作了

论英语系统

当我把我的语言改成“法语”

在我看来,用逗号表示十进制字符串对您更合适。可能有更合适的方法来处理此问题,但我不知道。我至少建议您尝试一下

建议测试总结

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

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

“00184528”

“39204,09”


“392030320502

我认为您的问题来自不同国家的数字表示方式不同。例如1029.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”是十进制

有趣的是,在我的“English”系统中,当我将字符串从“0.0184528”更改为“00184528”并将其格式化为数字时,它工作了

论英语系统

当我把我的语言改成“法语”

在我看来,用逗号表示十进制字符串对您更合适。可能有更合适的方法来处理此问题,但我不知道。我至少建议您尝试一下

建议测试总结

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

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

“00184528”

“39204,09”


“392030320502

你能告诉我为什么设置为德语或法语时会产生错误吗?我肯定还有其他人,像我一样,不明白错误的原因。我想说的一个原因是苹果过度本地化了Applescript和系统。过度本地化导致他们失去了它(虽然这不是什么新鲜事;在过去,您可能会因为过度本地化而将PostScript打印机拆掉)你能告诉我为什么设置为德语或法语时会产生错误吗?我肯定还有其他人,像我一样,不理解错误的原因。我想说的一个原因是苹果过度本地化了Applescript和系统。过度本地化,他们失去了它(虽然这不是什么新鲜事;在过去,您可能会因为过度本地化而将PostScript打印机拆掉)再次感谢你的帮助。我对这种方法不满意,但是如果没有更好的方法,我必须回到JavaScript并改变返回字符串;没有什么大不了的。现在,如果我只知道苹果地址,我可以发送榴莲…@ Max Wys-你也可以考虑从JavaScript中获得一个字符串替换。t在对这些问题进行了一些思考之后,所涉及的数字的种类和用途使我选择了一个有点简单的解决方案:因为这些数字实际上只有2 si
set myVar to "0.0184528" as number -- FAILS
set myVar to "0,0184528" as number -- WORKS