📄 00000011.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: linuxrat (竹剑居士*习拳悟道*闭关苦修), 信区: Linux <BR>标 题: www.turbolinux.com.cn中文论坛文(4) <BR>发信站: BBS 水木清华站 (Fri Oct 1 22:14:33 1999) <BR> <BR>本文版权说明与前面所注一样. <BR>=========== BEGIN ================ <BR>Linux下的动态汉化技术 <BR>作者:于明俭(<A HREF="mailto:justiny@turbolinux.com.cn)">justiny@turbolinux.com.cn)</A> <BR>---------------------------------------------------------------- <BR> <BR>动态汉化, 指的是在使用了某一机制, 使原来为西文的软件的菜单,按钮的 <BR>组件上显示中文. 在 Linux 下, 这一技术可以通过 LD_PRELOAD 实现. 但是, <BR>这一技术在 Linux 这个开放源代码的系统上有些黯然失色, 主要原因是, <BR>我们几乎可以接触到任何软件的源码, 只要修改源码就可以使软件显示中文. <BR>另外Linux上提供的国际化机制 locale + gettext 本身就可以看作是动态汉化. <BR> <BR>动态汉化的实现并像在 M$Windows下那样容易实现, 因为在Linux下有无数的 <BR>用于 X 窗口系统的高层动态库, 比如 Xt/Xaw/Xview/Motif/forms/qt/gtk/gnome等. <BR> 如果实现全面动态汉化, 就必须对全部的函数库作"包装". <BR> <BR>下面以 gtk 的label组件为例, 提供这一技术的具体实现方法, 有兴趣的 <BR>可以仿照实现: <BR> <BR>初始化: <BR> 截取: gtk_init(), 初始化全局变量等. 截取函数地址 <BR> handle = dlopen("libgtk.so", 1); <BR> my_gtk_label_new = dlsym(handle, "gtk_label_new"); <BR> 其中, my_gtk_label_new 为原来的调用函数 <BR> <BR>替换函数: <BR> 书写 gtk_label_new: <BR> GtkWidget *gtk_label_new(char *label){ <BR> char *newlabel = find_chinese_label(label); <BR> return my_gtk_label_new(newlabel); <BR> } <BR>上述方法中可能有难以预料的问题, 如label的地址被改变了, <BR>这时就需要保存原地址, 必要的时候换回. <BR>=============== END ================================= <BR> <BR> <BR> <BR> <BR>-- <BR> <BR>| 以无法为有法 , | 拳本无法,有法也空; | 我爱GNU/Linux, | <BR>| 以无限为有限 。 | 一法不立,无法不容。 | 因为我爱自由! | <BR>| | | | <BR>| 截拳道宗师-李小龙 | 意拳宗师-王芗斋 | 土人 Linuxrat | <BR> <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.112.168.201] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -