问题:
一套系统,多方共用,有英语用户、简体用户、繁体用户,各自用自己的语言输入所需数据,同时数据是共用的,即某一条记录,字段A存储的是简体,字段B存储的是繁体,分别由各语言用户输入自己的语言要求:
数据提取出来后,在一个界面(form)上显示多种语言,比如在简体用户的机器上也可以同时看到繁体和简体,不得讲繁体转为简体显示给客户。怎么实现?看了一些相关资料,似乎都是讲怎样转换的,而共用的,尤其是同时显示,似乎不太容易找到。谢谢各位大侠!
一套系统,多方共用,有英语用户、简体用户、繁体用户,各自用自己的语言输入所需数据,同时数据是共用的,即某一条记录,字段A存储的是简体,字段B存储的是繁体,分别由各语言用户输入自己的语言要求:
数据提取出来后,在一个界面(form)上显示多种语言,比如在简体用户的机器上也可以同时看到繁体和简体,不得讲繁体转为简体显示给客户。怎么实现?看了一些相关资料,似乎都是讲怎样转换的,而共用的,尤其是同时显示,似乎不太容易找到。谢谢各位大侠!
DELPHI/VB/API
SQL SERVER/INTERBASE任意方法实现即可
不要问为什么,你随便用中文做个页面生成可执行文件到98和2000还有xp下,试一下繁体的效果!!!根本不能实现
Author: Wnyu
Date: 2003-03-101. 做两个RC文件, 一个是简体的(LangJ.rc), 一个是繁体的(LangF.Rc), 其中这两个rc文件分别存放你要用到的繁简体字符串.字符串的ID分别相同.
2. 用Brcc32的Lang参数把它们分别设为繁简体Res文件. (Dos中输入Brcc32 /? 查一下),
3. 用Delphi把它们分别放入两个Dll中. (LangF.DLL, LangJ.DLL)
4. 在应用程序初始化时判断当前的操作系统是哪一种语言(Code Page). 可直接用GetACP API, 如果返回936就代表是简体, 调用简体LangJ.DLL,950是繁体, 调用繁体LangF.DLL.
5. 用LoadStr或LoadString(API)函数读出同一个ID的字符串(同一ID, 但读入的字符串是繁体还是简体已由步骤4中决定), 然后对每一个Caption动态赋值. (以上方法(1-5)可解决非Unicode操作平台的显示问题, Window2000和XP可省略以上步骤).
6. 至于要在控件上同时显示多国语言, 你可以用WideCharToMultiByte和MultiByteToWideChar进行转换或改写控件, 这样才能显示多种语言. 具体控件可从http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm下载!
图片说明:
里面的数据是简体和繁体共存的我在简体OS下输入GBK繁体可以直接看到只要相应的数据库字段采用UNICODE正在测试中欢迎各位大侠继续探讨
不知道GBK码有没有什么缺点?
GBK是在Gb2312的基础上包含了Big5的全部字符,但是编码不再是big5,就是说他是为了解决繁体字的显示问题,与big5本质区别。采用GBK的仍然是简体系统,只是能显示繁体字。你的要求可以用Unicode ,可惜delphi 对他支持的非常不好,7.0 的.net才开始采用unicode内核。
function EncodeWideString(Value:WideString):String;
var
I:Integer;
begin
for I:=1 to Length(Value) do begin
Result:=Result+IntToHex(WORD(Value[I]) shr 8,2);
Result:=Result+IntToHex(WORD(Value[I]) and $00ff,2);
end;
end;function DecodeWideString(Value:String):WideString;
var
I:Integer;
begin
for I:=0 to (Length(Value) div 4)-1 do begin
Result:=Result+
WideChar(WORD(StrToInt('$'+Value[I*4+1]+Value[I*4+2])) shl 8
+WORD(StrToInt('$'+Value[I*4+3]+Value[I*4+4])));
end;
end;
http://home.ccci.org/wolbrink/tntmpd/delphi_unicode_controls_project.htm
去下载,
我当时使用Sql2000数据库,只要将文字的字段设为VChar就可以了,在使用delphi的AdoTable进行读取操作时需要使用:
WideString(Table.Fields.AsVariant);来转一下.另,Unicode在win98下不支持,这样的程序只能在Win2000或WinXp下使用