根据ISO C和POSIX strerror()系列返回的错误消息应该是特定于语言环境的。虽然在我的例子中(Mac OS X 10.10.5 / clang / c11)它们不是。我检查了几个平台,所有平台的行为都是一样的。
我已按locale -a
检查了区域设置。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <locale.h>
#include <string.h>
int main(int argc, const char * argv[])
{
setlocale(LC_MESSAGES, "he_IL.UTF-8");
errno = 0;
// Generate unique filename.
FILE *file = fopen(tmpnam((char[L_tmpnam]){0}), "rb");
if (file) {
// Do something useful.
fclose(file);
}
else {
fprintf(stderr, "Error message : %s\n", strerror(errno));
}
return EXIT_SUCCESS;
}
显示:
Error message : No such file or directory
答案 0 :(得分:1)
我在标准中看不到要求,错误消息包含非标准语言环境的翻译。此外,this manpage表示选择了错误消息字符串(强调我的):
可能使用当前区域设置的 LC_MESSAGES 部分 选择合适的语言。
那就是说,我注意到我可以在我的系统上将语言环境更改为fr_FR.UTF-8
,为您的代码生成以下错误消息:
Error message : Aucun fichier ou dossier de ce type
如果您想要希伯来语中的错误消息,您可能需要手动编写代码。请记住,许多人认为不应翻译错误消息; here is a SO question讨论了这个主题。