我正在自动化一个进程,我使用GPG2.exe。 因为我需要解析控制台输出 - 可能来自不同的系统,我需要将语言设置为受控值。
我正在遵循the manual中的说明
LANGUAGE
除了GNU的使用之外,它在W32版本中用于覆盖 通过注册表完成语言选择。如果使用并设置为有效和 可用的语言名称(langid),从中加载带有翻译的文件 gpgdir / gnupg.nls / langid.mo。这里gpgdir是其中的目录 gpg二进制文件已加载。如果无法加载,则尝试使用注册表 最后使用本机Windows语言环境系统。
我发现thread from 2011更详细地介绍了这个问题,但这可能会涉及不同的版本。
我创建了一个批处理文件进行手动测试。
@echo off
REM C is meant to display untranslated messages according to one internet source
set LANGUAGE="C"
call "C:\Program Files (x86)\GNU\GnuPG\gpg2.exe" --version
pause
我将输出ecpext为英语,但它仍然是德语。
手册陈述了某处有一个“gnupg.nls”文件夹。 我无法找到这个文件夹,这让我想知道德语的加载位置。 手册页中是否有错误? 手册页的pdf版本显示的内容与安装附带的手册页相同。
有人可以对此有所了解吗?
答案 0 :(得分:2)
我遇到了同样的问题,即输出是瑞典语,但我想要的是英语。 Windows 显示语言设置为英语,我也尝试设置环境变量,但为我解决的是删除此处找到的 gnupg 文件的瑞典语翻译:
C:\Program Files (x86)\gnupg\share\locale
删除“sv”目录后,所有输出都是英文的。
答案 1 :(得分:0)
语言目录可以从注册表中提取,或者我认为它也可以有一个固定的路径,因为我在注册表中找不到这些信息。
在我的testsysten上,路径是'C:\ Program Files(x86)\ GNU \ GnuPG \ share \ locale'。 此路径包含每种语言的文件夹 - 据我所知,并非所有文件都包含gpg2的翻译文件。
语言的环境变量不是LANGUAGE而是LANG。将其设置为C会导致gpg2默认为英语。
我成功测试了以下电话。
@echo off
set LANG=C
call "C:\Program Files (x86)\GNU\GnuPG\gpg2.exe" --version
用户bignose在声明我应该使用API时仍然是正确的,但在我目前的限制范围内,我没有看到这样做的直接方式。
答案 2 :(得分:-2)
这不是一个编程问题,正如关闭的投票中所述。
回答可以从编程角度提出的另一个问题:当a well-defined library API具有相同的功能时,不要解析固有可更改的控制台输出。