macOS 终端只有英文吗?

sea*_*ull 7 terminal international macos

在 Windows 中,命令行中的字符串解析对于 Batch 和 PowerShell 来说都是一个错误。基本的命令行工具(如 )以字符串形式fsutil返回dcdiag其输出,这些字符串已国际化为操作系统安装的语言,如果不考虑对每种语言的措辞和格式选择的支持,几乎不可能以一刀切的方式编写脚本。

只要有可能,我都会在 PowerShell 中编写(返回对象而不是字符串)并使用 WMI 返回非本地化枚举器,我通过查找表自行翻译;然而,总会有一些工具是设备上收集所需信息的唯一手段。

我现在正在为 macOS 编写一个调用(在本例中)该csrutil工具的脚本。
与许多 *nix 实用程序一样,它的输出是字符串格式。运行它会产生以下输出:

System Integrity Protection status: unknown (Custom Configuration).

Configuration:
    Apple Internal: disabled
    Kext Signing: disabled
    Filesystem Protections: disabled
    Debugging Restrictions: disabled
    DTrace Restrictions: disabled
    NVRAM Protections: disabled
    BaseSystem Verification: enabled

This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.
Run Code Online (Sandbox Code Playgroud)

不知怎的,互联网不包含我能找到的关于这个主题的任何知识,所以:

苹果在终端输出国际化方面有多积极?

这不是关于 Bash 或 ZSH 的问题,因为我知道它们总是英语,但 macOS 因创建不兼容的 Apple 特定 POSIX 工具分支而臭名昭著;此外,如上所述,有许多 Apple 开发的命令行工具旨在管理 macOS 系统。我是否应该假设这些内容至少已翻译成德语并购买安装了德语的 macOS 设备?或者一切都是英文的?

总的来说,我想问的是,我应该从苹果伪造的命令行工具中获得多少国际化程度的期望。

jvb*_*jvb 9

目前,大多数(非 .app)系统管理工具只有英文版。这有利于解析输出。

例如,您可以尝试检查这样的二进制文件:

strings /usr/bin/csrutil | less
Run Code Online (Sandbox Code Playgroud)

在这种情况下,二进制文件中不存在任何翻译

您可能会考虑设置$LANG$LC_MESSAGES区域设置(仅在脚本中使用本地env设置),例如

env LC_MESSAGES=C /usr/bin/csrutil
Run Code Online (Sandbox Code Playgroud)

envcsrutil将在环境变量设置为“C”的情况下启动LC_MESSAGES,这是一个特殊设置,翻译为“就好像该程序尚未本地化一样”。
这将导致此会话输出英语,但一般不会对您的系统产生影响。

  • 嗯,我不知道 macOS 是如何做到这一点的,但在 Linux 和 BSD 上,翻译不会出现在二进制文件本身中,而是出现在单独的 `<lang>.po` 文件中(如果程序使用 gettext/NLS,许多 CLI 应用程序都会这样做)。尽管如此,明确请求“LC_MESSAGES=C”确实比希望翻译情况不会改变要好...... (7认同)
  • @seagull 您正确使用了环境变量,只是 macOS 上的大多数 CLI 工具都没有翻译。从心态上来说,Apple 是一家“GUI 至上”的公司,他们认为普通用户永远不会接触终端或 CLI,因此他们并没有做太多事情来使其适合交互式使用。 (3认同)