【问题标题】:Does libc show international error messages?libc 是否显示国际错误消息?
【发布时间】:2017-08-18 14:16:46
【问题描述】:

根据strerror() 系列返回的 ISO C 和 POSIX 错误消息应该是特定于区域设置的。而在我的示例中(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

【问题讨论】:

    标签: c gcc error-handling libc


    【解决方案1】:

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

    可能使用当前语言环境的 LC_MESSAGES 部分 选择适当的语言。

    也就是说,我注意到我可以将系统上的区域设置更改为 fr_FR.UTF-8,从而为您的代码生成以下错误消息:

    Error message : Aucun fichier ou dossier de ce type
    

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

    【讨论】:

    • 我尝试了几种语言环境,包括您的语言环境,但没有一个有效。你的系统是什么?我检查了一些在线编译器,没有一个显示本地化输出。
    • 我正在使用 Linux Mint。您可以尝试locale -a 显示的任何语言环境。您可能需要安装新的语言环境;在 Mint 上,我可以进入软件管理器安装语言包。 language-pack-fr-base 包含几个法语语言环境,其中fr_FR.utf-8。我还尝试了一个有效的德语语言环境 (de_DE.utf-8),并给出了德语错误消息。但是我为he_IL.utf-8 语言环境安装了language-pack-he-base(我可以用locale -a 看到),而且,正如你所发现的,我的错误消息是英文的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2019-11-13
    • 2012-09-07
    相关资源
    最近更新 更多