|
发表于 2009-12-9 11:39:36
|
显示全部楼层
Post by athurg;2049229
话说回来,敢问,有多少程序准备识别其他程序的输出作为参数处理的?
我就不明白了,人家从PHP编译器到GNU,很多类型很多程序作者都在拼命的考虑如何能支持多国语言,人家都这样了,到底是哪党哪国的政治教育,把您教育成了这样。
简单的一个问题非要提到政治高度,有必要么?一个技术上清晰的论点论据,不会需要拿政治当挡箭牌。
支持多国语言跟翻译界面输出是两回事。一个即时通讯软件,能调出输入法,支持中文输入,能显示中文,能传中文文件名的文件,这就是支持中文。一个MP3播放器,能识别ID3TAG中的中文编码,就是支持中文的最重要部分。一个更加复杂的软件,至少保证热键不跟中文输入法冲突,不吃掉Ctrl-空格,这也很重要。——这些,都是“拼命考虑如何支持多国语言”需要做的事情,而翻译界面,在这个环节上,我不说它是重要还是次要,至少,不应当把软件输出搞出问题吧?
一个 CLI 程序可以根据 LANG 或者 LANGUAGE 环境变量来判断自己的输出语言,而自己的不同语言的字符串是用 .po 那些文件编译到自身的。例如,如果 gcc 输出需要输出 Error 为 错误,那么只有 gcc 自己知道,中文的时候输出错误,英文输出 Error,别的程序是不知道你 gcc 的一个特定字符串在某个特定语言中被翻译成什么的。
现在换到 vim ,我们使用 quickfix 模式编译,gcc 的输出是可以进入 vim 的 quickfix 列表。OK,你现在来看,假如 gcc 真的翻译了输出的错误信息标识,那么 vim 如何把错误和警告区别开?——首先,一个子shell进程可以以任何一个环境启动,甚至可能使用了缺省的 LOCALE=C,所以我们无法判断子进程gcc的 locale,其次,即使我们清楚的知道子进程gcc使用的是跟我们完全相同的 locale,由于 gcc 相关的 po 并没有编译到 vim 中,vim 也绝无可能知道 gcc 的某个版本翻译特定字符串是什么。
所以,现状就是:如果翻译了输出,就可能无法识别警告和错误的区别。——因为你在编译 gnu gettext 相关信息的时候根本不会知道可能有哪些程序去阅读它。不可能把相关的信息编译到所有可能阅读你程序输出的程序中去。
奉劝各位一句:即使你每天把gnu/linux的全部源代码编译一遍,也还不如写一个内核模块/写一个应用程序对Linux的体会来得深。 |
|