Linux 版 (精华区)

发信人: don (驿路梨花), 信区: Linux
标  题: Linux下的动态汉化技术
发信站: 紫 丁 香 (Tue May  9 10:24:09 2000), 转信

发信人: null (钠尔), 信区: LINUX
标  题: Linux下的动态汉化技术
发信站: 碧海青天 (Sun Apr 30 12:55:47 2000), 转信

Linux下的动态汉化技术
                                           作者:于明俭
动态汉化, 指的是在使用了某一机制, 使原来为西文的软件的菜单,按钮 的组件上显示
中文. 在 Linux 下,
这一技术可以通过 LD_PRELOAD 实现. 但是, 这一技术在 Linux 这个开放源代码的系统
上有些黯然失色, 主要
原因是, 我们几乎可以接触到任何软件的源码, 只要修改源码就可以使 软件显示中文.

另外Linux上提供的国际化机制 locale + gettext 本身 就可以看作是动态汉化.
动态汉化的实现并像在 M$Windows下那样容易实现, 因为在Linux下有无数 的用于 X 窗
口系统的高层动态库,
比如 Xt/Xaw/Xview/Motif/forms/qt/ gtk/gnome等. 如果实现全面动态汉化, 就必须对
全部的函数库作"包装".
下面以 gtk 的label组件为例, 提供这一技术的具体实现方法, 有兴趣的 可以仿照实现
:
初始化:
        截取: gtk_init(), 初始化全局变量等. 截取函数地址
        handle = dlopen("libgtk.so", 1);
        my_gtk_label_new = dlsym(handle, "gtk_label_new");
        其中, my_gtk_label_new 为原来的调用函数
替换函数:
        书写 gtk_label_new:
        GtkWidget *gtk_label_new(char *label){
                char *newlabel = find_chinese_label(label);
                return my_gtk_label_new(newlabel);
        }
上述方法中可能有难以预料的问题, 如label的地址被改变了,
这时就需要保存原地址, 必要的时候换回.

--

--
一条驿路,一种氛围。
一朵梨花,一种思考。
希望能在Linux这条驿路上与你同行!

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.63]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.338毫秒