2017-03-25 28 views
0

根據ISO C和POSIX錯誤消息返回的strerror()系列應該是特定於語言環境的。在我的例子中(Mac OS X 10.10.5/clang/c11),他們不是。我查了幾個平臺,他們都以相同的方式表現。libc是否顯示國際錯誤信息?

我已經通過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

我沒有看到一個要求在標準的錯誤消息對非標準語言環境翻譯。此外,this manpage說,錯誤消息的字符串被選擇(重點煤礦):使用LC_MESSAGES當前區域的一部分 選擇合適的語言

可能

這麼說,我注意到,我的語言環境改變fr_FR.UTF-8我的系統上,生成以下錯誤消息代碼:

Error message : Aucun fichier ou dossier de ce type 

如果你想在希伯來語中的錯誤信息,你可能有手工編碼。請記住,許多人認爲不應該翻譯錯誤信息; here is a SO question與本主題的討論。

+0

我嘗試了幾個地區,包括你的,但沒有人工作。你的系統是什麼?我查了幾個在線編譯器,沒有人顯示本地化輸出。 – Ariel

+0

我正在使用Linux Mint。您可以嘗試locale -a所顯示的任何語言環境。您可能需要安裝新的區域設置;在Mint上我可以進入軟件管理器來安裝語言包。 'language-pack-fr-base'包含幾個法語區域,其中包括'fr_FR.utf-8'。我還嘗試了一個德語區域設置('de_DE.utf-8'),它可以工作並提供德語錯誤消息。但是我爲'he_IL.utf-8'語言環境(我可以用'locale -a'查看)安裝'language-pack-he-base',正如你發現的那樣,我的錯誤信息是英文的。 –