ここに依存するプログラムがありますnetstat
。netstat -apn
以下は通常の出力の例です。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
私の顧客の1人は異なる結果を持っています(例:)。
Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* OUÇA -
netstat
変更された出力(クライアント出力など)を使用してソフトウェアをテストしたいと思います。
だから質問は:netstat
クライアントが受け取るエラーを再現できるように出力言語をどのように変更する必要がありますか?
言語の変更を試しましたが、export LANG=pt_PT
出力は変更されません。
答え1
まず、コンピュータに必要な地域設定が指定されていることを確認する必要があります。を使用して利用可能なロケールを表示できますlocale -a
。たとえば、私のシステムでは次のようになります。
$ locale -a
C
C.UTF-8
el_GR.utf8
en_US.utf8
fr_FR.utf8
POSIX
上記のように、ポルトガル語のロケールはありません。私のDebianでは、sudo dpkg-reconfigure locales
関連ロケールを実行して選択して作成できます。
パッケージ構成
┌──────────────────────────┤ Configuring locales ├──────────────────────────┐
│ Locales are a framework to switch between multiple languages and allow │
│ users to use their language, country, characters, collation order, etc. │
│ │
│ Please choose which locales to generate. UTF-8 locales should be chosen │
│ by default, particularly for new installations. Other character sets may │
│ be useful for backwards compatibility with older systems and software. │
│ │
│ Locales to be generated: │
│ │
│ [ ] pt_BR.UTF-8 UTF-8 ↑ │
│ [ ] pt_PT ISO-8859-1 ▒ │
│ [*] pt_PT.UTF-8 UTF-8 ▮ │
│ [ ] pt_PT@euro ISO-8859-15 ▒ │
│ [ ] quz_PE UTF-8 ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
をクリックすると、次の情報がEnter表示されます。
$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
el_GR.UTF-8... done
en_US.UTF-8... done
fr_FR.UTF-8... done
pt_PT.UTF-8... done
Generation complete.
Debianベースのディストリビューションを使用していない場合は、これを手動で実行する必要があります。
に関連するロケール名を追加します
/etc/locale.gen
。例:pt_PT.UTF-8 UTF-8
走る
locale-gen
dpkg-reconfigre locales
上記の手順(手動または別の方法)を経た後、locale -a
ポルトガル語のロケールも一覧表示されます。
$ locale -a
C
C.UTF-8
el_GR.utf8
en_US.utf8
fr_FR.utf8
POSIX
pt_PT.utf8
これで、出力の表示言語を選択できます。
$ LC_ALL=el_GR.utf8 date
Τετ 14 Οκτ 2015 12:34:28 μμ EEST
$ LC_ALL=fr_FR.utf8 date
mercredi 14 octobre 2015, 12:35:07 (UTC+0300)
$ LC_ALL=pt_PT.utf8 date
Qua Out 14 12:35:11 EEST 2015
ただし、特定のプログラムが選択したロケールに出力を印刷できるかどうかは、そのプログラムが翻訳されているかどうか、関連する翻訳.mo
ファイルがソフトウェアパッケージに付属しているかどうかによって異なります。の場合netstat
です/usr/share/locale/${LANG%_*}/LC_MESSAGES/net-tools.mo
。私の Debian にはフランス語のロケールがありますが、ポルトガル語のロケールにはありません。
$ ls /usr/share/locale/{fr,pt}/LC_MESSAGES/net*
ls: cannot access /usr/share/locale/pt/LC_MESSAGES/net*: No such file or directory
/usr/share/locale/fr/LC_MESSAGES/net-tools.mo
これが私がnetstat
フランス語でプレイできる理由です。
$ LC_ALL=fr_FR.utf8 netstat -apn | head -n2
(Tous les processus ne peuvent être identifiés, les infos sur les processus
non possédés ne seront pas affichées, vous devez être root pour les voir toutes.)
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
しかし、ポルトガル語ではそうではありません。
$ LC_ALL=pt_PT.utf8 netstat -apn | head -n2
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
答え2
選択した言語の言語パックをインストールする必要があります。それ以外の場合は、テキスト翻訳ユーティリティ(文字を取得GNUシステムでは、メッセージを選択した言語に翻訳することはできません。
$ strace -fe trace=open sh -c 'LANGUAGE=fr_FR.utf8 netstat -tnlp'
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
Process 14847 attached
[pid 14847] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 14847] open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 14847] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid 14847] open("/proc/3690/cmdline", O_RDONLY) = 5
[pid 14847] open("/proc/8579/cmdline", O_RDONLY) = 5
[pid 14847] open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
[pid 14847] open("/usr/share/locale/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale-langpack/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale-langpack/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale-langpack/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 14847] open("/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
....
[pid 14847] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=14847, si_status=0, si_utime=0, si_stime=2} ---
+++ exited with 0 +++
プロセスが自分が属するパッケージの翻訳されたテキストを見つけてインポートしよ/usr/share/locale
う/usr/share/locale-langpack
としていることがわかります。net-tools
netstat
これで言語パックをインストールできます。 Ubuntuシステムの場合:
sudo apt-get install language-pack-fr
他のシステムでは、少なくとも Debian と Centos では、パッケージの関連言語パックをパッケージ自体に含めることができます。
$ apt-file search /usr/share/locale/fr/LC_MESSAGES/net-tools.mo
net-tools: /usr/share/locale/fr/LC_MESSAGES/net-tools.mo
(Centosでは利用可能ですyum whatprovides
)
それから:
$ strace -fe trace=open sh -c 'LANGUAGE=fr_FR.utf8 netstat -tnlp'
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
Process 15155 attached
[pid 15155] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 15155] open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 15155] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid 15155] open("/proc/3690/cmdline", O_RDONLY) = 5
[pid 15155] open("/proc/8579/cmdline", O_RDONLY) = 5
[pid 15155] open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
[pid 15155] open("/usr/share/locale/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale-langpack/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale-langpack/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale-langpack/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 15155] open("/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = 3
[pid 15155] open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
(Tous les processus ne peuvent être identifiés, les infos sur les processus
non possédés ne seront pas affichées, vous devez être root pour les voir toutes.)
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
....
[pid 15155] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=15155, si_status=0, si_utime=0, si_stime=3} ---
+++ exited with 0 +++
/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo
gettext()
メッセージが正常に翻訳されました。
vi_VN
をインストールしても、すべての単語を翻訳できるわけではありませんlanguage-pack-vi
。
LC_ALL
以下を使用して、他のすべてのローカライズ設定を上書きする必要があります。GNUシステムのLANGUAGEを除外上記のように。