DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fansxs
今日帖子: 12
在线用户: 19
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/1 15:58:26
标题:
关于显示语言求助 浏览:484
加入我的收藏
楼主: 现在有个程序客户要翻译成土耳其语,但是在输入控件caption的时候,显示成了乱码。比如:

菜单名为:
   İşlem Yönetimi
结果:
   mnOperation.Caption := '??lem Y?netimi';

求助:请问这个要怎么才能解决,电脑系统是有土耳其语的,我试过
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/1 16:05:51
1楼: 你这是源码乱码。
请丢掉 D7。
新版本  PAS 输入区,右键,慢慢找吧。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/8/1 16:34:52
2楼: 可以将这些文本放到单独的文件中,然后在代码中加载,类似很多软件多语言支持的做法。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 earthsbest (全能中间件) ▲▲△△△ -
注册会员
2018/8/2 9:08:59
3楼: 看来楼主是用D7,D2009支持Unicode后没这种问题了。
D7只能用第三方的控件,比如 TntUnicode。
----------------------------------------------
全能中间件QQ:64445322 http://www.cnblogs.com/rtcmw
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/2 9:46:57
4楼: to wang_80919:
谢谢!


to iamdream:
谢谢,我试试看。


to earthsbest:
谢谢,实在不行我再用第三方控件。
----------------------------------------------
-
作者:
男 abencat (远离delphi的人) ★☆☆☆☆ -
盒子活跃会员
2018/8/3 22:25:43
5楼: 直接升级d10
----------------------------------------------
-
作者:
男 keymark (keymark) ▲△△△△ -
注册会员
2018/8/3 23:39:51
6楼: 首先
ansi格式系统 语言种类繁多 并不是你装了土耳其 语言 就知道给显示土耳其 字
(ansi)问题 所以你得把系统切换到 土耳其语言
另外 工程设置里面不是 可以设置 英语中文吗?这个试试。。我并不知道可行否。
有个 TNT 好象是被TMS收购了?。。?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/4 8:53:07
7楼: 如果 不得不用 D7,该怎么办呢?
知道 notepad++ 吗?
用这个工具,写 pas ,可以先切换 编码到 目标语言的 编码,例如 拉丁编码 或 斯拉夫编码,或东欧,或西欧编码,或 日韩编码 或 GB 编码 或 BIG5编码。
一般来说就这几种。
然后 一个 pas 内,只写一种语言的内容。
比如 xxx_chs.pas
xxx_cht.pas
xxx_jp.pas
xxx.kro.pas
保存的时候,选 ANSI 的格式。谁让你是垃圾 D7 呢。

接下来就是编译问题。
你代码虽然写完成了。
但是编译的时候,会因为编码问题,导致 字符串无法识别。

所以,你想要设置你的 计算机的 区域和语言的 管理 的非UNICODE 语言。
比如要编译 xxx_cht.pas ,就设置 非 unicode 语言为 中文繁体台湾。
以此类推,分别编译各个语言的 pas。

是不是很麻烦?
另一种写法。
将你要写的内容,换成如下格式

mnOperation.Caption := #3255#5454#4646;
这样的格式,编译就不需要你切换系统了。

还可以写成
mnOperation.Caption := #$A8DE#$A9B3;

反正就是要么切换系统,要么写字符串的数字编码。
D7 就是这么垃圾。

有一堆人说用 TNT。
TNT 只能解决 你 显示 多国语言的问题。
例如你想 中文系统,显示韩文。

还能解决,显示 unicode 字符问题。例如 版权符号 (C) 也就是 ©。
你不用 TNT 将显示一个 ?。

操蛋的 D7,用了 TNT 也只能显示 unicode 字符。
你编写代码的时候。
不能这样写
ATNTEdit.Text := '©';
这样还是显示 ?。
因为你  pas 是  ansi 编码的。在中文系统下,就没有这个字符。

你唯一可以用的办法就是
ATNTEdit.Text := UTF8转WideString(#$C2#$A9);;
怎么转,早就忘了。

看看吧。垃圾 D7 就是这么麻烦。

所以,请使用 新版本 吧。
一个鼠标右键,绝对解决问题。
而且,也可以扔掉 TNT。减少出 BUG 的潜在风险。


不过,我猜。楼主已 弃楼而逃。
这些是写给爱学习的网友的。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/8/4 9:36:00
8楼: 如果是Ansi版本的Delphi,那么不用Unicode组件的话,是显示不了Unicode字符的,但可以根据系统或程序的设置来显示不同的语言,只是需要设置Font.Name及Font.Charset。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/6 10:38:30
9楼: to abencat:
谢谢!装了XE5,因为另外一个项目需要高版本的dephi,但是D7的程序在XE5里出现了问题,而且我还没找出来原因在哪里,比如一个接口函数,传入的变量一模一样,D7返回OK了,但是XE5却Error,接口函数又是设备厂家提供的,没办法跟踪。

to keymark:
谢谢!在考虑要不要在安装另外一个版本的Delphi。

to iamdream:
谢谢,不用Unicode组件是没办法显示。
----------------------------------------------
-
作者:
男 hdcopy (hdcopy) ▲▲▲▲▲ -
普通会员
2018/8/6 10:48:12
10楼: 看看接口申明的调用方式是不是一样的吧。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/6 10:48:56
10楼: 楼主自己都歪自己的楼吗?
那我们就歪楼讨论 新 内容吧。
第三方给的接口,应该是 WIN API DLL 或者 DCU 才对。
否则就一定是垃圾 第三方。
DCU 是分版本的,所以 能跨版本的,就只能是WIN API DLL 了。
win api dll 的 接口,都是 C 语言标准的简单数据类型。
所以,不存在 D7 XE5 这种区别的。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/6 11:20:33
11楼: to hdcopy:
谢谢,我在查找中。


to wang_80919:
对,是dll,所以我在查找到底是什么原因导致结果不一样的。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/6 11:25:58
12楼: 保密局的无权知道原因。

能从 源码乱码 歪楼 到 DLL 错误。
楼主其实不关心如何解决问题。
楼主只是单纯的来发一下他遇到的问题而已。

多半是把这里当日志了。

反正,解决不解决不重要。
就算解决了,也不能说出来,否则违反了保密条例了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/6 11:53:52
13楼: to wang_80919:
问题是问题还没解决。一直用的是D7,D7虽然版本低,且以前客户要求的语言不是中文就是英文,D7可以满足,所以一直没用高的版本。这次是客户那边一定要改成土耳其语,D7不支持unicode,网上也没找到完美的用D7支持Unicode的方法,才来这里求助的。另外手头有个项目是跟WebService对接,D7版本也低了,装了XE5,只是没想到XE5跟D7兼容性不怎么好。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/6 12:01:03
14楼: 1 D7 支持土耳其语,是你不支持而已。否则人家 土耳其人不用 D7 了?
再说了,DELPHI 那么多支持多国语言的控件,人家 土耳其语也支持的好好的。就你不行而已。
2 多国语言不是UNICODE。
3 XE5 和 D7 是源码不兼容。 对于 可执行程序,没有互相兼容的说法。
特别是 第三方 API DLL,更没有不兼容的说法!
一个 XXX.DLL,你 D7 能用,我 VB VC VFP JAVA 和 XE5 D10.2.3 都可以调用。没有兼容性问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/8/6 13:12:23
15楼: 唉,都说了,你D7要支持土耳其语,改Font.Charset/Font.Name两个就可以了,你试过了吗?
DLL接口函数在D7下可以工作,说明是Ansi/UTF8的,我猜是Ansi的,而XE5默认是unicode了,你要调用Ansi类型的接口函数,那你得用AnsiString/PAnsiChar才行。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/6 13:16:14
16楼: 楼主是保密局的,不乐意告诉你 是不是 PChar 发生了问题。
但是 肯定是不是 string ,因为 api DLL 不支持 STRING。
至少我水平低,是不支持的。
我都是 PANSICHAR 或  PWIDECHAR 。

d7 或新版本 支持 土耳其语,界面显示 肯定得用 土耳其的字体。
但是, 楼主 0 楼 的内容是 xxx.xxx := 'xxx';
这是 代码 啊。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ds3000 (ds3000) ▲▲△△△ -
注册会员
2018/8/9 11:28:46
17楼: to wang_80919:
赞一个!你答对了,就是PChar的问题,XE5中PChar默认为PWideChar类型,而我的接口函数恰恰用到了PChar,我改为PAnsiChar就OK了。我开贴的句子是举个列子而已。

好了,这贴到此结束,程序查不多都调试完了,还有一个excel的问题我另外开贴请教。

谢谢楼上的朋友们!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行11.71875毫秒 RSS