libc是否显示国际错误消息?

时间:2017-03-25 17:52:32

标签: c gcc error-handling libc

根据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

1 个答案:

答案 0 :(得分:1)

我在标准中看不到要求,错误消息包含非标准语言环境的翻译。此外,this manpage表示选择了错误消息字符串(强调我的):

  

可能使用当前区域设置的 LC_MESSAGES 部分   选择合适的语言。

那就是说,我注意到我可以在我的系统上将语言环境更改为fr_FR.UTF-8,为您的代码生成以下错误消息:

Error message : Aucun fichier ou dossier de ce type

如果您想要希伯来语中的错误消息,您可能需要手动编写代码。请记住,许多人认为不应翻译错误消息; here is a SO question讨论了这个主题。