BBS水木清华站∶精华区

发信人: linuxrat (竹剑居士*习拳悟道*闭关苦修), 信区: Linux        
标  题: www.turbolinux.com.cn中文论坛文(4) 
发信站: BBS 水木清华站 (Fri Oct  1 22:14:33 1999) 
 
本文版权说明与前面所注一样. 
=========== BEGIN ================ 
Linux下的动态汉化技术  
作者:于明俭(justiny@turbolinux.com.cn) 
---------------------------------------------------------------- 
 
动态汉化, 指的是在使用了某一机制, 使原来为西文的软件的菜单,按钮的 
组件上显示中文. 在 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的地址被改变了, 
这时就需要保存原地址, 必要的时候换回. 
=============== END ================================= 
 
 
 
 
-- 
                                                                          
|  以无法为有法 ,       |  拳本无法,有法也空;  |  我爱GNU/Linux,     | 
|  以无限为有限 。       |  一法不立,无法不容。  |  因为我爱自由!     | 
|                        |                        |                     | 
|     截拳道宗师-李小龙  |        意拳宗师-王芗斋 |      土人  Linuxrat | 
                                                                          
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.112.168.201] 

BBS水木清华站∶精华区