【问题标题】:Applescript: decimal sign issues with different LocalesApplescript:不同区域设置的十进制符号问题
【发布时间】:2016-10-28 18:06:51
【问题描述】:

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

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

将 myVar 设置为 (do JavaScript "pathToMyScript.jsx) -- 伪代码

这很好用,而且我们总是有字符串。

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

将 myNextVar 设置为 myVar * 1

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

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

• 通过语言和区域系统首选项更改相应计算机上的区域设置 --> 高级... --> 常规 --> 数字分隔符是没有问题的;我们不能指望我们的用户会照顾到这一点。

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

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

这就是我想到的。还有其他方法吗? Applescript 中的任何可能(请记住,解决方案必须独立于语言环境工作。

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

提前致谢。

【问题讨论】:

  • 您能解释一下为什么在设置为德语或法语时会产生错误吗?我敢肯定还有其他人,像我一样,不明白错误的原因。
  • 我要说的一个原因是 Apple 过度本地化了 Applescript 和系统。由于过度本地化,他们失去了它(尽管这并不是什么新鲜事;在过去,由于过度本地化,您可能会拆掉 PostScript 打印机)

标签: internationalization applescript locale


【解决方案1】:

我认为您的问题来自不同国家/地区的数字表示方式不同。示例 1,029.42 与 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

如果我改成“French”,我相信它会报错,因为它无法理解“0.0184528”是小数。

有趣的是,在我的“英语”系统上,当我将字符串从“0.0184528”更改为“0,0184528”并将其格式化为数字时,它起作用了。

关于“英文”系统

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

【讨论】:

  • 再次感谢您的帮助。我对这种方法不满意,但如果没有更好的方法,我将不得不返回 JavaScript 并更改返回字符串;没什么大不了的。现在,如果我只知道苹果的地址,我可以发送榴莲……
  • @MaxWyss - 从 JavaScript 获得结果后,您也可以考虑使用字符串替换
  • 在考虑了一些问题之后,所涉及的数字的种类和用途让我选择了一个有点简单的解决方案:因为数字实际上只有小数点后两位有效数字(例如百分比) ,我将结果乘以 100 并四舍五入。这样,脚本必须处理整数,其中不存在小数符号问题。不过,非常感谢您的帮助。
  • @MaxWyss - 有趣的是,您选择了该解决方案,因为我曾考虑过在某一点上提出一些建议。很高兴你成功了 - 干杯!
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多