如何在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
相关产品推荐
相关产品推荐

