频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

informix支持中文问题汇总

来源: 作者: 出处:巧巧读书 2006-03-22 进入讨论组
上一页 1 2 


什么需要国际化/本地化? 


DataBlade  模块开发人员必须同时解决国际化问题与本地化问题。首先,您需要实现  UDR 以使其与语言无关。也就是说,对于其要处理的数据, DataBlade 模块不对在运行时使用的语言、地域或代码集做任何假定。因此您就需要将任何与语言有关的部分(如错误消息)移植到您希望支持的每一个 语言环境。本节概述了一些问题。 

文本  I/O 
Informix  GLS 库提供这样的函数,它们使用当前正在处理的语言环境中的信息来扫描和格式化多字节字符串、日期、数字和货币。使用这些函数来解析输入字符串或格式化输出字符串。它们在以下文档中有描述: 

Informix  Guide  to  GLS  Functionality 

Informix  GLS  Programmer's  Manual 


在何处将这一点应用到  UDR 的示例是对  opaque 类型外部(基于字符)格式的处理。 

DBDK 为  opaque 类型输入/输出支持函数生成代码,该代码在  GLS 文本与  opaque 类型内部二进制表示法之间进行转换。 


mi_get_string() 和  mi_put_string()  DataBlade  API 函数自动对字符串/文本数据执行代码集转换。 

(对于数值数据的二进制传送,mi_put_* 和  mi_get_* 函数 — 用于  opaque 类型发送/接收支持函数 — 也会自动执行代码集转换)。 

错误消息 
syserrors  系统目录表存储  DataBlade 异常消息,这些消息可以通过向  mi_db_error_raise() 传递   MT_SQL 消息类型来产生。每个错误消息项都有与之相关的语言环境。当错误被产生时,服务器会设法将  CLIENT_LOCALE 与  syserrors 中的一个错误匹配。它首先进行显式匹配,如果找不到匹配的对象,则以下列 次序进行搜索,尝试部分匹配: 

确切的客户机语言环境 
例如:es_es.8859-1 


客户机语言环境的语言 + 地域 
例如:es_es 


仅客户机语言环境的语言 
例如:es 


缺省(en_us)语言环境 
UNIX 上的  en_us.8859-1,以及  NT 上的  en_us.1252。 

解析出最终缺省  en_us 语言环境的方法取决于用户是否设置了  CLIENT_LOCALE: 

如果未设置  CLIENT_LOCALE,则根据语言环境的部分匹配得出缺省语言环境。 
如果  en_us.1252(NT)错误位于  UNIX 服务器上的  syserrors 表中,则根据  en_us 部分匹配查找消息。 


如果设置了  CLIENT_LOCALE,则根据对该平台的完全匹配解析出缺省语言环境。 
如果  en_us.1252(NT)错误位于  UNIX 服务器上的  syserrors 表中,则将根据  en_us.8859-1 的完全匹配查找语言环境,从而产生 "Message  cannot  be  found" 错误。 

服 务器的  9.2 发行版都将执行  en_us 语言环境的部分匹配,而不管是否设置了  CLIENT_LOCALE。同时,要意识到  BladeSmith 缺省时生成语言环境为  en_us.1252 的消息。如果您的目标是  UNIX 系统,请将语言环境更改为  en_us.8859- 1。如果您计划支持  NT 和  UNIX,请同时向两个语言环境注册同一错误消息。 

您还可以将   DataBlade 异常消息翻译成您打算支持的各种特定语言,并将这些消息存储在  syserrors 系统目录 表。(顺便说一下,如果您希望使用  UDR 插入本地化的消息,请参阅下面的“从  UDR 将本地化错误消息插入到   syserrors 中”一节)。 

请参阅  Informix  DataBlade  API  Programmer's  Manual 中“Exception  Raising”一节和下面的示例。 

跟踪消息 
systracemsgs 系统目录存储可以用  gl_tprintf() 输出的  DataBlade 跟踪消息。除了翻译所有要显示给最终用户的跟踪消息以外,请务必提供  en_us 缺省消息。 

请参阅  Informix  DataBlade  API  Programmer's  Manual 中的“DataBlade  API  Support  for  an  Internationalized  UDR”一节。 

查询处理 
Informix 支持用于数据库对象的名称(如表和列)的多字节字符。当然,表可以在  NCHAR 和  NVARCHAR 列中存储包含多字节字符的值。 

检 查使用  mi_exec() 或  mi_exec_prepared_statement() 执行  SQL 查询的任何  UDR。如果查询可以访问用户定义的数据库对象或获取用户提供的数据,则  UDR 应该在 创建  SQL 语句和获取查询结果时准备好处理非  ASCII 字符。 


示例 


错误消息 
RGBA  DataBlade 模块实现管理计算机颜色的  opaque 类型。 

用 于  RGBA 的输入函数将外部(文本)表示法转换成内部的  C 数据结构。当填充了  C 结构后, DataBlade 代码会检查每个元素是否在  0-255 内。如果用户输入  256,则根据用户的语言环境会产生与 下面相似的错误: 

语言环境 错误消息 
en_us.1252 (URGB1)  -  RGBAInput:  R value  256  is  not  within  the  valid  range  of  0-255. 
es_es.8859-1 (URGB1)  -  RGBAInput:  el  valor  R  256  no  calza  entre  los  limites  de  0-255. 

本节描述源代码需要做什么、要将什么消息存储在  syserrors 表中,以及数据库服务器如何决定输出哪个错误。 

下面的代码演示输入函数如何检查  RGBA 的红色部分以及如何产生错误。 

if(Gen_RetVal->red <  0 ||  Gen_RetVal->red >  255) 
mi_db_error_raise 

Gen_Con, /*  Connection  handle */ 
MI_SQL, /*  Message  type */ 
"URGB1", /*  SQLSTATE  in  syserrors */ 
"FUNCNAME%s", /*  token  takes  string */ 
"RGBAInput", /* value  for  FUNCNAME */ 
"value%d", /*  token  takes  an  integer */ 
(mi_integer)  Gen_RetVal->red, /* value  for value  token */ 
NULL /*  No  more  tokens */ 
); 
mi_db_error_raise () 调用中的  MI_SQL 消息类型表明应该根据第三个参数中的  SQLSTATE 值在  syserrors 系统目录表中查找错误。如果我们从  syserrors 系统目录进行选择,我们会看到有两个不同的 “URGB1”错误: 

>  select *  from  syserrors  where  sqlstate='URGB1'

sqlstate  URGB1 
locale  en_us.1252 
level  0 
seqno  1 
message %FUNCNAME%:  R value %value%  is  not  within  the  valid  range  of  0-255. 

sqlstate  URGB1 
locale  es_es.8859-1 
level  0 
seqno  1 
message %FUNCNAME%:  el  valor  R %value%  no  calza  entre  los  limites  de  0-255. 
用以下  SQL 插入(insert)语句将这些异常消息插入到  syserrors 系统目录表中: 

insert  into  informix.syserrors (level,  seqno,  sqlstate,  locale,  message) 
value

0, 
1, 
"URGB1"
"en_us.1252"
"%FUNCNAME%:  R value %value%  is  not  within  the  valid  range  of  0-255." 
); 

insert  into  informix.syserrors (level,  seqno,  sqlstate,  locale,  message) 
value

0, 
1, 
"URGB1"
"es_es.8859-1"
"%FUNCNAME%:  el  valor  R %value%  no  calza  entre  los  limites  de  0-255." 
); 
RGBA 

静态页面:http://www.qqread.com/informix/b962917705.html 更多文章 更多内容请看informixinformix故障专家答疑专题,或进入讨论组讨论。
上一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章