多语言文本资源的访问(Windows:ini)
目标
本文要讨论对于开发多语言界面程序所需要解决的一个问题,即文本资源组织及访问的方法。
本文主要以Windows平台下讨论具现并提供处理代码。
Windows方案
Windows下界面开发,除DirectUI等第三方开发平台外,那么就是基于MFC/WTL、Windows API,我们将议题聚集在VC++开发中。
关于VC++中如何管理文本资源,要么使用VC环境下自带的资源编译模式,要么另想其他方式处理。
采用编译资源方式
即直接利用VC环境提供的字符资源形式操作,此法简单易操作。
即是将字符串当成资源编译在二进制文件中,提供一致资源API来访问,以标识符访问相应字符串。
可编辑文本文件的方式
我们希望文本资源脱离编译环境,则独立保存为程序外文件,由非程序员可编辑修改。
即是如此考虑,必先确证操作方法及组织规则。既要便于程序开发时编码应用,又要利于独立扩展修改(比如说新增语言资源,则效法仿生即可)。
对于这样的要求,那在程序开发中我当然希望是以某种标识来访问资源,按这种惯常习性不需要原程序员多持另念。另外又需要使文本存储有一定的依据及规则来组织。
因此,我们当可以考虑以行定位,按段组织的方式。这种文件巧又Windows本身就支持,ini文件。
文本资源管理ini实现
编译环境此就不赘述了,VS2008环境下,控制台工程即可。下面贴上代码
class LangModule
class LangModule
{
enum buffSize {maxSize = 0x7FFF};
TCHAR buffer[maxSize+];
CString iniPath;
public:
LangModule(LPCTSTR Path)
{
iniSwitch(Path);
}
void iniSwitch(LPCTSTR Path)
{
iniPath = Path;
memset(buffer, , sizeof(buffer));
} LPCTSTR readySection(LPCTSTR lpAppName/*section name*/)
{
DWORD c = ::GetPrivateProfileSection(lpAppName, buffer, maxSize, iniPath);
return (c) ? buffer : NULL;
}
DWORD StringSplit(LPCTSTR sStr, LPCTSTR array[], DWORD count)
{
DWORD n = ;
int len = ;
for (; n < count &&
(len = _tcslen(sStr)) > ; n++, sStr++)
{
array[n] = sStr;
sStr += len;
}
return n;
}
};
main
static LPCTSTR testIni = _T("E:\\CodeLab\\devExperiment\\Debug\\test.ini");
int main(void)
{
enum {Tx0, Tx1, Tx2, Tx3, Tx4, Tx5, Tx6, Tx7, TxCount};
LPCTSTR array[TxCount] = {NULL};
LangModule t(testIni);
printf("\n[test]\n");
DWORD count =
t.StringSplit(
t.readySection(_T("test")), array, _countof(array));
printf("Tx0: %s\n", array[Tx0]);
printf("Tx3: %s\n", array[Tx3]);
printf("Tx5: %s\n", array[Tx5]);
printf("\nlist String[%d]:\n", count);
for (DWORD i = ; i < count; i++)
printf(" >%s\n", array[i]);
//////////////////////////////////////////////////////////////////////////
// test2
printf("\n[test2]\n");
count = t.StringSplit(t.readySection(_T("test2")), array, _countof(array));
printf("Tx0: %s\n", array[Tx0]);
printf("Tx3: %s\n", array[Tx3]);
printf("Tx5: %s\n", array[Tx5]);
printf("\nlist String[%d]:\n", count);
for (DWORD i = ; i < count; i++)
printf(" >%s\n", array[i]);
return ;
}
#INI
[test]
api
test2
中文
测试
一下
string
ini
extend
[test2]
;Dear
同志
同学
朋友
hi,all
hello
调试输出

多语言文本资源的访问(Windows:ini)的更多相关文章
- 【Windows 10 应用开发】细说文本资源文件(resw)
最近,小戏骨版<红楼梦>很是火热,老周一口气看完了9集,一直看到 Surface 的风扇呼呼响.林黛玉和薛宝钗这两个角色都演得不怎么样,倒是演史湘云的娃娃演得不错,老周甚是喜欢. 于是,昨 ...
- Linux怎样访问Windows共享文件和文件夹
常常使用Windows的人可能会发现,Windows计算机之前共享资料非常方便,但是有时候想玩玩Linux的时候,如Fedora.Ubuntu.CentOS等,该怎样才能访问Windows计算机上的文 ...
- Linux访问windows共享(samba/smbclient/smbfs/cifs)
samba是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件.●安装samba,samba-client和cifs-utils.x86_64此步将自动安装好相关依赖包:samba ...
- Linux使用笔记: 使用Samba访问windows的共享目录(转载)
转自:http://easwy.com/blog/archives/mount-a-windows-shared-folder-on-linux-with-samba/ 通常我们使用Samba都是在W ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- Mac OS X 访问 Windows 共享文件夹
Mac OS X 访问 Windows 共享文件夹 mac没有网络邻居,但可以使用finder访问局域网中windows共享的文件 1.点击 Finder 前往菜单中的「前往服务器」(或快捷键 com ...
- CentOS访问Windows共享文件夹的方法
CentOS访问Windows共享文件夹的方法 1 在地址栏中输入下面内容: smb://Windows IP/Share folder name,smb为Server Message Block协议 ...
- SpringMVC 部署项目静态资源文件访问问题
问题:采用SpringMVC 部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52:51,646 WARN [org.springframework.web.servle ...
- linux访问windows共享文件夹的方法
博客转自:http://www.01happy.com/linux-access-windows-shares-folders/ 有时需要在linux下需要访问windows的共享文件夹,可以使用mo ...
随机推荐
- Linux内存寻址之分页机制
在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...
- linuxmint获取root
1.进入系统à点击桌面左下角的菜单à点击系统设置 2. 在系统设置里面找到登陆窗口并进去 3.打入自己设置的开机登陆密码 4. 选择选项,并把运行root登陆的勾打上 5.重启生效
- linux安装svn服务器(yum方式)
1.查看yum是否安装 在终端中输入yum即可如果已经安装,会显示yum的参数 如果没有安装,会提示yum未安装或无效命令…… 2.安装svnyum -y instal ...
- ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况
公司的同事们在分析网页加载慢的问题,忽然使用到了Wireshark工具,我就像发现新大陆一样好奇,赶紧看了看,顺便复习了一下相关协议.上学时学的忘的差不多了,汗颜啊! 报文封装整体结构 mac帧头定义 ...
- github创建tag
最近在使用github给新的jQuery插件:滚动高亮 添加版本库的时候,看到很多github上的项目都有这个标签,可以清晰快速的找到每个不同的版本,非常方便以后查找以及使用.于是我就在继上一次的:将 ...
- 杭电ACM1218——Blurred Vision
题目有点长,并且比較难懂.看了非常久.也看的不是非常懂,仅仅知道输入输出的格式. 直到看了最后的一句话,也就是output那里的最后一句话,题目的意思就非常明白了,就是输出的每个点的像素是原始的四个像 ...
- [GIF] GIF Loop Coder - Animation Functions
Previous, we animate the item by passing an array to tell the start position and end position. To ma ...
- Android5.0常用颜色属性说明
在使用Eclipse的时代,我们很少去在style文件给整个应用或者Activity去设定颜色,那是因为即使设置也不会提升用户的视觉效果.但是材料设计号称让没有设计功底的人也能做出漂亮的App,那我们 ...
- javascript进击(七)Ajax
AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJA ...
- oracle根据pid查询出正在执行的执行语句
今天数据库访问突然很慢,通过top命令发现oracle的cpu使用率很高.同事建议查询一下看看是什么语句导致的oracle运行变慢.于是从网上查了一下,可以根据pid查询出正在执行的查询语句,发现是一 ...