请教图形界面使用多国语言显示, 其他国家语言字符怎么做?
本帖最后由 chen849928055 于 2017-2-14 16:10 编辑现在要做个4.3寸触摸屏项目,要求支持多国语言显示,自己以前只做过英语,汉字的显示,还是用的书图片的方式,
现在显示至少8个国家的语言,不适合用刷图片的方式了,想着用字符来显示,不知道其他国家的字符库,可以从哪里
得到。
大家做多国语言显示都是用的什么方法?知道的给个建议。
别人用emwin做的字符显示(如图),抗锯齿感觉挺好的 自己做字库 菜单名和字库应该分开做吧 mcu5i51 发表于 2017-2-14 15:44
自己做字库
有的国家,像法语,俄语。西班牙语,德语。自己都不会,做也不知道从哪里下手呢 菜单项用字符串ID,每个ID有多个语言版本的字符编码,显示的时候,根据语言版本取得ID对应的字符编码,再从对应的语言点阵取出字符绘图 多国语言一般是外贸要求的,找外贸要多国菜单,然后自己做字库就行。 菜包 发表于 2017-2-14 15:57
菜单项用字符串ID,每个ID有多个语言版本的字符编码,显示的时候,根据语言版本取得ID对应的字符编码,再从 ...
我明白你说的这个意思,想问一下字库有没有现成的,例如字模软件可以生成多国字符,用现在的字模软件自己把字库做出来,感觉锯齿有点严重,看到别人用emwin做的字符(如图),感觉看锯齿挺好的 FontCreator,或者可以用现有的字库,生成emWin可使用的字模,可生成.c以及.sif文件 chen849928055 发表于 2017-2-14 16:09
我明白你说的这个意思,想问一下字库有没有现成的,例如字模软件可以生成多国字符,用现在的字模软件自己 ...
就去抄 emWin 的吧。 建议在成熟的emWin菜单基础上做吧,移植一个 ,别一个一个自己扣了 磊磊映画 发表于 2017-2-14 16:39
建议在成熟的emWin菜单基础上做吧,移植一个 ,别一个一个自己扣了
是的,自己找找看吧,还没用过emwin,不知道多国语言字符编码在哪里找的呢 如果是同一语系的,例如欧文iso88591,那么相当于把ascii扩展到256个,
十进制 十六进制 缩写/字符 十进制 十六进制 缩写/字符 十进制 十六进制 缩写/字符 十进制 十六进制 缩写/字符
128 80 € 160 A0 (space) 192 C0 À 224 E0 à
129 81 161 A1 ¡ 193 C1 Á 225 E1 á
130 82 ‚ 162 A2 ¢ 194 C2 Â 226 E2 â
131 83 ƒ 163 A3 £ 195 C3 Ã 227 E3 ã
132 84 „ 164 A4 ¤ 196 C4 Ä 228 E4 ä
133 85 … 165 A5 ¥ 197 C5 Å 229 E5 å
134 86 † 166 A6 ¦ 198 C6 Æ 230 E6 æ
135 87 ‡ 167 A7 § 199 C7 Ç 231 E7 ç
136 88 ˆ 168 A8 ¨ 200 C8 È 232 E8 è
137 89 ‰ 169 A9 © 201 C9 É 233 E9 é
138 8A Š 170 AA ª 202 CA Ê 234 EA ê
139 8B ‹ 171 AB « 203 CB Ë 235 EB ë
140 8C Œ 172 AC ¬ 204 CC Ì 236 EC ì
141 8D 173 AD 205 CD Í 237 ED í
142 8E Ž 174 AE ® 206 CE Î 238 EE î
143 8F 175 AF ¯ 207 CF Ï 239 EF ï
144 90 176 B0 ° 208 D0 Ð 240 F0 ð
145 91 ‘ 177 B1 ± 209 D1 Ñ 241 F1 ñ
146 92 ’ 178 B2 ² 210 D2 Ò 242 F2 ò
147 93 “ 179 B3 ³ 211 D3 Ó 243 F3 ó
148 94 ” 180 B4 ´ 212 D4 Ô 244 F4 ô
149 95 • 181 B5 µ 213 D5 Õ 245 F5 õ
150 96 – 182 B6 ¶ 214 D6 Ö 246 F6 ö
151 97 — 183 B7 · 215 D7 × 247 F7 ÷
152 98 ˜ 184 B8 ¸ 216 D8 Ø 248 F8 ø
153 99 ™ 185 B9 ¹ 217 D9 Ù 249 F9 ù
154 9A š 186 BA º 218 DA Ú 250 FA ú
155 9B › 187 BB » 219 DB Û 251 FB û
156 9C œ 188 BC ¼ 220 DC Ü 252 FC ü
157 9D 189 BD ½ 221 DD Ý 253 FD ý
158 9E ž 190 BE ¾ 222 DE Þ 254 FE þ
159 9F Ÿ 191 BF ¿ 223 DF ß 255 FF ÿ
打的时候大于128的ascii按住Alt键输入ASCII值就行。
当然你的编译器需要支持多语言编码。 自己没用ST的片子,能用emwin的字符库吗? 本帖最后由 磊磊映画 于 2017-2-14 20:57 编辑
chen849928055 发表于 2017-2-14 17:29
自己没用ST的片子,能用emwin的字符库吗?
emwin是软件开源界面框架跟硬件cpu无关,前提你的单片机别太差ram rom 够用
https://www.segger.com/embos-ports.html
看看列表里有没有你的MCU选中型号再点进去就是源码了
磊磊映画 发表于 2017-2-14 20:45
emwin是软件开源界面框架跟硬件cpu无关,前提你的单片机别太差ram rom 够用
https://www.segger.com/emb ...
我看看去,用的合泰的32位MCU HT32F1656 LQFP64,领导和合泰的销售关系比较好 chun2495 发表于 2017-2-14 17:27
如果是同一语系的,例如欧文iso88591,那么相当于把ascii扩展到256个,
打的时候大于128的ascii按住Alt键 ...
用的MDK5支持吧,你也做过多语言的界面吧. chen849928055 发表于 2017-2-15 09:01
用的MDK5支持吧,你也做过多语言的界面吧.
嗯 只做过欧文 chun2495 发表于 2017-2-15 11:26
嗯 只做过欧文
菜单项用字符串ID,每个ID有多个语言版本的字符编码,显示的时候,根据语言版本取得ID对应的字符编码,再从对应的语言点阵取出字符绘图
你的菜单项是像5楼说的这么做的吗? 本帖最后由 chun2495 于 2017-2-15 17:03 编辑
1.生成256个ascii的字模,编写显示函数DrawString_8();
2.DrawString_8(35, 560, LanguageTranslate("Age"), COLOR_WHITE, COLOR_BACK_GROUND);
3. chun2495 发表于 2017-2-15 17:00
1.生成256个ascii的字模,编写显示函数DrawString_8();
2.
3.
你这看着好简洁呀,挺好的,发现我这几天看的触摸屏架构是你发的,看的有点迷糊,方便发一个完整点的demo不. chen849928055 发表于 2017-2-15 17:24
你这看着好简洁呀,挺好的,发现我这几天看的触摸屏架构是你发的,看的有点迷糊,方便发一个完整点的demo不. ...
这个是非开放的,有什么问题在论坛上交流吧! 学习一下 chen849928055 发表于 2017-2-14 15:57
有的国家,像法语,俄语。西班牙语,德语。自己都不会,做也不知道从哪里下手呢 ...
用UNICODE编码,这些显示和中英文显示一样 czg1411 发表于 2017-2-16 09:16
用UNICODE编码,这些显示和中英文显示一样
UNICODE编码,.是通过什么软件转换的? chen849928055 发表于 2017-2-16 09:21
UNICODE编码,.是通过什么软件转换的?
我是把多国语言放到excel里,然后用C#写的小软件转换成UNICODE编码格式的数组.
czg1411 发表于 2017-2-16 09:31
我是把多国语言放到excel里,然后用C#写的小软件转换成UNICODE编码格式的数组.
...
你的转换方法,和小软件可以发上来吗? chen849928055 发表于 2017-2-16 10:10
你的转换方法,和小软件可以发上来吗?
EXCEL 第一行是语言名,第一列是字符名.
czg1411 发表于 2017-2-16 10:32
EXCEL 第一行是语言名,第一列是字符名.
非常感谢czg1411坛友!
请问用小软件打开excel, 生成的UNICODE编码格式的数组在哪里? chen849928055 发表于 2017-2-16 11:35
非常感谢czg1411坛友!
请问用小软件打开excel, 生成的UNICODE编码格式的数组在哪里? ...
打开excel文件
转换后的数组
当前字体的文字,升序排序的. czg1411 发表于 2017-2-16 11:45
打开excel文件
转换后的数组
我的电脑windows764位操作系统,用那个小软件打开你压缩包里的excel文件没反应,是不是你的小软件针对的32位系统的,还是我操作的步骤不对 chen849928055 发表于 2017-2-16 13:34
我的电脑windows764位操作系统,用那个小软件打开你压缩包里的excel文件没反应,是不是你的小软件针对的3 ...
不是这个问题吧,我这里WIN7 X64WIN10 X64 都可以用.应该是要装.net framework 本帖最后由 chen849928055 于 2017-2-16 14:25 编辑
czg1411 发表于 2017-2-16 14:04
不是这个问题吧,我这里WIN7 X64WIN10 X64 都可以用.应该是要装.net framework
是不是你的excel里的文件,你做了不让编辑的原因导致的,我用小软件随便打开了其他的Excel文件,小软件上有转换结果,现在再怎么试也打不开了
我的电脑装了net framework也不行 chen849928055 发表于 2017-2-16 14:19
是不是你的excel里的文件,你做了不让编辑的原因导致的,我用小软件随便打开了其他的Excel文件,小软件上 ...
excel文件可以编辑,2003 2007都可以.你装个.net framework 4.5试试 本帖最后由 chen849928055 于 2017-2-16 14:56 编辑
czg1411 发表于 2017-2-16 14:26
excel文件可以编辑,2003 2007都可以.你装个.net framework 4.5试试
发现和excel版本有关系,我把excel另存为2003版,就可以正常那个生成各个国家的数组代码,
/*系统设置*/
static const char systemset_zh_CN={0x7C,0xFB,0x7E,0xDF,0x8B,0xBE,0x7F,0x6E,0x00,0x00};
static const char systemset_zh_TW={0x7C,0xFB,0x7D,0x71,0x8A,0x2D,0x7F,0x6E,0x00,0x00};
static const char systemset_en_US={0x00,0x53,0x00,0x79,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x6D,0x00,0x20,0x00,0x53,0x00,0x65,0x00,0x74,0x00,0x74,0x00,0x69,0x00,0x6E,0x00,0x67,0x00,0x73,0x00,0x00};
static const char systemset_de_DE={0x00,0x53,0x00,0x79,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x69,0x00,0x6E,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x6C,0x00,0x6C,0x00,0x75,0x00,0x6E,0x00,0x67,0x00,0x65,0x00,0x6E,0x00,0x00};
static const char systemset_ja_JP={0x30,0xB7,0x30,0xB9,0x30,0xC6,0x30,0xE0,0x8A,0x2D,0x5B,0x9A,0x00,0x00};
const char *string_systemset={systemset_zh_CN,systemset_zh_TW,systemset_en_US,systemset_de_DE,systemset_ja_JP};
/*时间和日期*/
static const char timedate_zh_CN={0x65,0xF6,0x95,0xF4,0x54,0x8C,0x65,0xE5,0x67,0x1F,0x00,0x00};
static const char timedate_zh_TW={0x66,0x42,0x95,0x93,0x54,0x8C,0x65,0xE5,0x67,0x1F,0x00,0x00};
static const char timedate_en_US={0x00,0x54,0x00,0x69,0x00,0x6D,0x00,0x65,0x00,0x20,0x00,0x61,0x00,0x6E,0x00,0x64,0x00,0x20,0x00,0x44,0x00,0x61,0x00,0x74,0x00,0x65,0x00,0x00};
static const char timedate_de_DE={0x00,0x5A,0x00,0x65,0x00,0x69,0x00,0x74,0x00,0x20,0x00,0x75,0x00,0x6E,0x00,0x64,0x00,0x20,0x00,0x44,0x00,0x61,0x00,0x74,0x00,0x75,0x00,0x6D,0x00,0x00};
static const char timedate_ja_JP={0x66,0x42,0x95,0x93,0x30,0x68,0x65,0xE5,0x4E,0xD8,0x00,0x00};
const char *string_timedate={timedate_zh_CN,timedate_zh_TW,timedate_en_US,timedate_de_DE,timedate_ja_JP};
/*屏幕显示*/
static const char videodisplay_zh_CN={0x5C,0x4F,0x5E,0x55,0x66,0x3E,0x79,0x3A,0x00,0x00};
static const char videodisplay_zh_TW={0x5C,0x4F,0x5E,0x55,0x98,0x6F,0x79,0x3A,0x00,0x00};
static const char videodisplay_en_US={0x00,0x53,0x00,0x63,0x00,0x72,0x00,0x65,0x00,0x65,0x00,0x6E,0x00,0x20,0x00,0x44,0x00,0x69,0x00,0x73,0x00,0x70,0x00,0x6C,0x00,0x61,0x00,0x79,0x00,0x00};
static const char videodisplay_de_DE={0x00,0x53,0x00,0x63,0x00,0x72,0x00,0x65,0x00,0x65,0x00,0x6E,0x00,0x20,0x00,0x44,0x00,0x69,0x00,0x73,0x00,0x70,0x00,0x6C,0x00,0x61,0x00,0x79,0x00,0x00};
static const char videodisplay_ja_JP={0x75,0x3B,0x97,0x62,0x30,0xC7,0x30,0xA3,0x30,0xB9,0x30,0xD7,0x30,0xEC,0x30,0xA4,0x00,0x00};
const char *string_videodisplay={videodisplay_zh_CN,videodisplay_zh_TW,videodisplay_en_US,videodisplay_de_DE,videodisplay_ja_JP};
/*语言和声音*/
static const char languagevoice_zh_CN={0x8B,0xED,0x8A,0x00,0x54,0x8C,0x58,0xF0,0x97,0xF3,0x00,0x00};
static const char languagevoice_zh_TW={0x8A,0x9E,0x8A,0x00,0x54,0x8C,0x80,0x72,0x97,0xF3,0x00,0x00};
static const char languagevoice_en_US={0x00,0x4C,0x00,0x61,0x00,0x6E,0x00,0x67,0x00,0x75,0x00,0x61,0x00,0x67,0x00,0x65,0x00,0x20,0x00,0x61,0x00,0x6E,0x00,0x64,0x00,0x20,0x00,0x53,0x00,0x6F,0x00,0x75,0x00,0x6E,0x00,0x64,0x00,0x00};
static const char languagevoice_de_DE={0x00,0x53,0x00,0x70,0x00,0x72,0x00,0x61,0x00,0x63,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x75,0x00,0x6E,0x00,0x64,0x00,0x20,0x00,0x53,0x00,0x6F,0x00,0x75,0x00,0x6E,0x00,0x64,0x00,0x00};
static const char languagevoice_ja_JP={0x8A,0x00,0x8A,0x9E,0x30,0x68,0x30,0xB5,0x30,0xA6,0x30,0xF3,0x30,0xC9,0x00,0x00};
const char *string_languagevoice={languagevoice_zh_CN,languagevoice_zh_TW,languagevoice_en_US,languagevoice_de_DE,languagevoice_ja_JP};
/*系统信息*/
static const char systeminfo_zh_CN={0x7C,0xFB,0x7E,0xDF,0x4F,0xE1,0x60,0x6F,0x00,0x00};
static const char systeminfo_zh_TW={0x7C,0xFB,0x7D,0x71,0x4F,0xE1,0x60,0x6F,0x00,0x00};
static const char systeminfo_en_US={0x00,0x53,0x00,0x79,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x6D,0x00,0x20,0x00,0x49,0x00,0x6E,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x6D,0x00,0x61,0x00,0x74,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x00};
static const char systeminfo_de_DE={0x00,0x53,0x00,0x79,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x6D,0x00,0x20,0x00,0x49,0x00,0x6E,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x6D,0x00,0x61,0x00,0x74,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x00};
static const char systeminfo_ja_JP={0x30,0xB7,0x30,0xB9,0x30,0xC6,0x30,0xE0,0x60,0xC5,0x58,0x31,0x00,0x00};
const char *string_systeminfo={systeminfo_zh_CN,systeminfo_zh_TW,systeminfo_en_US,systeminfo_de_DE,systeminfo_ja_JP};
/*触摸屏校准*/
static const char calibration_zh_CN={0x89,0xE6,0x64,0x78,0x5C,0x4F,0x68,0x21,0x51,0xC6,0x00,0x00};
static const char calibration_zh_TW={0x89,0xF8,0x64,0x78,0x5C,0x4F,0x68,0x21,0x6E,0x96,0x00,0x00};
static const char calibration_en_US={0x00,0x54,0x00,0x6F,0x00,0x75,0x00,0x63,0x00,0x68,0x00,0x2D,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x65,0x00,0x65,0x00,0x6E,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6C,0x00,0x69,0x00,0x62,0x00,0x72,0x00,0x61,0x00,0x74,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x00};
static const char calibration_de_DE={0x00,0x54,0x00,0x6F,0x00,0x75,0x00,0x63,0x00,0x68,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x65,0x00,0x65,0x00,0x6E,0x00,0x2D,0x00,0x4B,0x00,0x61,0x00,0x6C,0x00,0x69,0x00,0x62,0x00,0x72,0x00,0x69,0x00,0x65,0x00,0x72,0x00,0x75,0x00,0x6E,0x00,0x67,0x00,0x00};
static const char calibration_ja_JP={0x30,0xBF,0x30,0xC3,0x30,0xC1,0x30,0xD1,0x30,0xCD,0x30,0xEB,0x30,0x6E,0x30,0xAD,0x30,0xE3,0x30,0xEA,0x30,0xD6,0x00,0x00};
const char *string_calibration={calibration_zh_CN,calibration_zh_TW,calibration_en_US,calibration_de_DE,calibration_ja_JP};
extern const char *string_systemset;
extern const char *string_timedate;
extern const char *string_videodisplay;
extern const char *string_languagevoice;
extern const char *string_systeminfo;
extern const char *string_calibration;
这一下生成的是什么?
static const char _font_ya32_string={
0x00,0x20,0x00,0x2D,0x00,0x44,0x00,0x49,0x00,0x4B,0x00,0x4C,0x00,0x53,0x00,0x54,0x00,0x5A,0x00,0x61,
0x00,0x62,0x00,0x63,0x00,0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6C,0x00,0x6D,
0x00,0x6E,0x00,0x6F,0x00,0x70,0x00,0x72,0x00,0x73,0x00,0x74,0x00,0x75,0x00,0x79,0x30,0x68,0x30,0x6E,
0x30,0xA3,0x30,0xA4,0x30,0xA6,0x30,0xAD,0x30,0xB5,0x30,0xB7,0x30,0xB9,0x30,0xBF,0x30,0xC1,0x30,0xC3,
0x30,0xC6,0x30,0xC7,0x30,0xC9,0x30,0xCD,0x30,0xD1,0x30,0xD6,0x30,0xD7,0x30,0xE0,0x30,0xE3,0x30,0xEA,
0x30,0xEB,0x30,0xEC,0x30,0xF3,0x4E,0xD8,0x4F,0xE1,0x51,0xC6,0x54,0x8C,0x58,0x31,0x58,0xF0,0x5B,0x9A,
0x5C,0x4F,0x5E,0x55,0x60,0x6F,0x60,0xC5,0x64,0x78,0x65,0xE5,0x65,0xF6,0x66,0x3E,0x66,0x42,0x67,0x1F,
0x68,0x21,0x6E,0x96,0x75,0x3B,0x79,0x3A,0x7C,0xFB,0x7D,0x71,0x7E,0xDF,0x7F,0x6E,0x80,0x72,0x89,0xE6,
0x89,0xF8,0x8A,0x00,0x8A,0x2D,0x8A,0x9E,0x8B,0xBE,0x8B,0xED,0x95,0x93,0x95,0xF4,0x97,0x62,0x97,0xF3,
0x98,0x6F};
-DIKLSTZabcdefghilmnoprstuyとのィイウキサシスタチッテデドネパブプムャリルレン付信准和報声定屏幕息情摸日时显時期校準画示系統统置聲触觸言設語设语間间面音顯
数组 _font_ya32_string
是下面一行字符
-DIKLSTZabcdefghilmnoprstuyとのィイウキサシスタチッテデドネパブプムャリルレン付信准和報声定屏幕息情摸日时显時期校準画示系統统置聲触觸言設語设语間间面音顯
的十六进制码.
我也在用合泰的HT32H1654和1655。 czg1411 发表于 2017-2-16 15:32
数组 _font_ya32_string
是下面一行字符
-DIKLSTZabcdefghilmnoprstuyとのィイウキサシスタチッテデドネパ ...
excel好像没有那一行文字,怎么还生成个数组,那一行文字,是从哪里组合到一起的 anjiyifan 发表于 2017-2-16 15:44
我也在用合泰的HT32H1654和1655。
{:handshake:} ,大家一起交流交流 chen849928055 发表于 2017-2-16 15:47
,大家一起交流交流
嗯,总的来说合泰的M3和M0+还是比较好用的。比较喜欢的是看门狗使能后可以关闭。进入待机后一切都安静了,不用像别的厂家的那样还得考虑待机后看门狗的问题。 chen849928055 发表于 2017-2-16 15:45
excel好像没有那一行文字,怎么还生成个数组,那一行文字,是从哪里组合到一起的 ...
excel中这个字体的所有文字排序 czg1411 发表于 2017-2-16 15:56
excel中这个字体的所有文字排序
font_ya32_string 表示的是那些字体所有文字的排序?
"DIKLSTZabcdefghilmnoprstuyとのィイウキサシスタチッテデドネパブプムャリルレン付信准和報声定屏幕息情摸日时显時期校準画示系統统置聲触觸言設語设语間间面音顯"这一行字,excel里没有吧,还是没搞懂,font_ya32_string是excel里的哪些字 chen849928055 发表于 2017-2-16 17:52
font_ya32_string 表示的是那些字体所有文字的排序?
"DIKLSTZabcdefghilmnoprstuyとのィイウキサシスタ ...
这里的字,去重复排序。 czg1411 发表于 2017-2-16 19:30
这里的字,去重复排序。
明白了,非常感谢你耐心的解答.
页:
[1]