2017-03-25 6 views
0

strerror()によって返されるISO CおよびPOSIXエラーメッセージによれば、ファミリはロケール固有である必要があります。私の例(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部分を用いて適切な言語を選択します。

Error message : Aucun fichier ou dossier de ce type 

あなたはヘブライ語でエラーメッセージをしたい場合は、あなたが持っていることがあります。私はあなたのコードのために、次のエラーメッセージを生成し、私は私のシステムでfr_FR.UTF-8にロケールを変更することができることに気づく言っ

、それらを手作業でコーディングします。エラーメッセージを翻訳してはならないと多くの人が気づいています。 here is a SO questionを参照してください。

+0

あなたのものを含めていくつかのロケールを試しましたが、誰も動作しません。あなたのシステムは何ですか?私はいくつかのオンラインコンパイラをチェックし、誰もローカライズされた出力を示していません。 – Ariel

+0

私はLinux Mintを使用しています。 'locale -a'で示されるロケールのどれかを試すことができます。新しいロケールをインストールする必要があります。言語パックをインストールするにはソフトウェアマネージャーに入ることができます。 'language-pack-fr-base'にはいくつかのフランス語ロケールが含まれています。それらの中には' fr_FR.utf-8'があります。私はドイツ語のロケール( 'de_DE.utf-8')も働かせて、ドイツ語のエラーメッセージを出しました。しかし、 'he_IL.utf-8'ロケール(' locale -a 'で見ることができる)に 'language-pack-he-base'をインストールしました。私のエラーメッセージは英語ではありませんでした。 –

関連する問題