更改 gpg2.exe 的输出语言
Changing the output language of gpg2.exe
我正在自动化一个流程,我使用了 GPG2.exe。
因为我需要解析控制台输出——可能来自不同的系统,所以我需要将语言设置为受控值。
我正在按照 the manual 的说明进行操作,其中指出
LANGUAGE
Apart from its use by GNU, it is used in the W32 version to override the
language selection done through the Registry. If used and set to a valid and
available language name (langid), the file with the translation is loaded from
gpgdir/gnupg.nls/langid.mo. Here gpgdir is the directory out of which the
gpg binary has been loaded. If it can’t be loaded the Registry is tried and as
last resort the native Windows locale system is used.
我找到了一个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版本显示与安装附带的手册页相同的内容。
有人可以解释一下吗?
这不是一个编程问题,如关闭投票中所述。
回答一个可以从编程角度提出的不同问题:当有 a well-defined library API 相同功能时,不要解析本质上可变的控制台输出。
语言目录可以从注册表中提取,或者我想它也可以有一个固定的路径,因为我在我的注册表中找不到信息。
在我的测试系统上,路径是 '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 时他仍然是正确的,但在我目前的限制范围内,我没有看到这样做的直接方法。
我遇到了同样的问题,输出是瑞典语,但我想要英语。 Windows 显示语言设置为英语,我也尝试设置环境变量,但为我解决的是删除此处找到的 gnupg 文件的瑞典语翻译:
C:\Program Files (x86)\gnupg\share\locale
删除“sv”目录后,所有输出都是英文的。
我正在自动化一个流程,我使用了 GPG2.exe。 因为我需要解析控制台输出——可能来自不同的系统,所以我需要将语言设置为受控值。
我正在按照 the manual 的说明进行操作,其中指出
LANGUAGE
Apart from its use by GNU, it is used in the W32 version to override the language selection done through the Registry. If used and set to a valid and available language name (langid), the file with the translation is loaded from gpgdir/gnupg.nls/langid.mo. Here gpgdir is the directory out of which the gpg binary has been loaded. If it can’t be loaded the Registry is tried and as last resort the native Windows locale system is used.
我找到了一个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版本显示与安装附带的手册页相同的内容。
有人可以解释一下吗?
这不是一个编程问题,如关闭投票中所述。
回答一个可以从编程角度提出的不同问题:当有 a well-defined library API 相同功能时,不要解析本质上可变的控制台输出。
语言目录可以从注册表中提取,或者我想它也可以有一个固定的路径,因为我在我的注册表中找不到信息。
在我的测试系统上,路径是 '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 时他仍然是正确的,但在我目前的限制范围内,我没有看到这样做的直接方法。
我遇到了同样的问题,输出是瑞典语,但我想要英语。 Windows 显示语言设置为英语,我也尝试设置环境变量,但为我解决的是删除此处找到的 gnupg 文件的瑞典语翻译:
C:\Program Files (x86)\gnupg\share\locale
删除“sv”目录后,所有输出都是英文的。