在 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.
不知何故,互联网不包含我能找到的关于这个主题的任何知识,所以:
苹果在终端输出国际化方面有多积极?
这不是关于 Bash 或 ZSH 的问题,因为我知道它们总是英文的,但是 macOS 因创建不兼容的 Apple 特定的 POSIX 工具分支而臭名昭著;此外,如上所示,Apple 开发了许多用于管理 macOS 系统的命令行工具。我是否应该假设这些将至少被翻译成德语并购买安装了德语的 macOS 设备?还是一切都是英文的?
总的来说,我在问我应该从 Apple 伪造的命令行工具中获得多少国际化。
目前,大多数(非.app)系统管理工具都是英文的。这有助于解析输出。
例如,您可以尝试检查这样的二进制文件:
在这种情况下,二进制文件中不存在翻译
您可能会考虑设置
$LANG
或$LC_MESSAGES
区域设置(仅在您的脚本中使用本地env
),例如env
将csrutil
在LC_MESSAGES
环境变量设置为“C”的情况下启动,这是一个特殊设置,翻译为“就好像这个程序没有本地化一样”。这将导致此会话的英语输出,但一般不会对您的系统产生影响。