You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS Shell脚本中获取当前区域设置的千位和小数分隔符?

获取macOS系统区域设置对应的数字分隔符

我之前也碰到过一模一样的需求:当系统语言和区域设置不一致时(比如语言设英语、区域选法国),要准确拿到对应区域的千位分隔符和小数分隔符,而不是跟着语言走的默认值。下面分享几个亲测有效的方法:

方法1:命令行一行搞定

直接组合defaults和locale命令,先获取当前系统的区域设置,再针对该区域查询分隔符:

REGION=$(defaults read -g AppleLocale); locale -k decimal_point thousands_sep <<< "$REGION"

执行后会输出类似这样的结果(对应法国区域):

decimal_point=","
thousands_sep=" "

原理是defaults read -g AppleLocale会读取你在「语言与地区」里设置的区域(比如fr_FR),然后用locale命令针对这个特定区域查询数字符号,完全不受首选语言的影响。

方法2:用AppleScript自动化

如果需要在脚本里调用,AppleScript也能轻松实现:

-- 获取当前系统区域
tell application "System Events"
    set targetRegion to value of property list item "AppleLocale" of property list file "/Library/Preferences/.GlobalPreferences.plist"
end tell

-- 查询对应区域的分隔符
set separatorInfo to do shell script "locale -k decimal_point thousands_sep <<< " & quoted form of targetRegion
display dialog separatorInfo

这个脚本会弹出对话框显示分隔符信息,也可以把结果存到变量里供后续使用。

方法3:Python脚本实现

如果用Python处理,借助locale模块也能精准获取:

import locale
import subprocess

# 读取系统区域设置
region = subprocess.check_output(["defaults", "read", "-g", "AppleLocale"]).decode().strip()

# 切换到目标区域的数字格式设置
locale.setlocale(locale.LC_NUMERIC, region)

# 获取分隔符
locale_info = locale.localeconv()
decimal_separator = locale_info['decimal_point']
thousands_separator = locale_info['thousands_sep']

print(f"小数分隔符: {decimal_separator}")
print(f"千位分隔符: {thousands_separator}")

运行后就能得到对应区域的正确值,比如法国区域会输出逗号和空格。

为什么之前的方法不适用?

  • locale decimal_point默认使用的是当前首选语言对应的locale,不是你设置的区域;
  • defaults read -g AppleICUNumberSymbols只读取用户自定义修改过的数字符号,如果没手动改过,这个值可能是空或者不完整,拿不到区域默认的分隔符。

内容的提问来源于stack exchange,提问作者apple_alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:02:28