多语言文本资源的访问(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 ...
随机推荐
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
- autoSvn
#!/bin/bash dir="/svndata" name="puppet" user="test" passwd="t ...
- 简述configure、pkg-config、pkg_config_path三者的关系
简述configure.pkg-config.pkg_config_path三者的关系 一.什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一 ...
- hdoj 1898 Sempr == The Best Problem Solver?
Sempr == The Best Problem Solver? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/3276 ...
- JS 事件与事件对象小结
JavaScript与HTML之间的交互是通过事件来实现的.IE9,chrome,Firefox,Opera,Safari均实现了DOM2级规范中定义的标准DOM事件,而IE8和IE8以下版本仍然保留 ...
- MSSQLSERVER数据库- 游标
游标是属于级行操作,遍历一个表一行一行读,而SQL查询是基于数据集的,在数据量大的时候,使用游标会降低查询速度.这是很明显的.但是有些操作就用游标实现.所以游标又是不或缺少的.我很久都没用游标了,一时 ...
- java14 处理流
二.处理流 .引用类型,保留数据+类型 序列化:将对象保存到文件或者字节数组中保存起来,叫序列化.输出流:ObjectOutputStream.writeObject(). 反序列化:从文件或者字节数 ...
- 【转】hibernate.hbm.xml详解
在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具.配置文件的基本结构如下: Xml代码 <?xmlve ...
- iOS开发经验总结(上)
在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPhone Size 手机型号 屏幕尺寸 iPhone 4 4s 320 * 480 iPhone 5 5s ...
- Android(java)学习笔记151: SurfaceView使用
1.SurfaceView简介 在一般的情况下,应用程序的View都是在相同的GUI线程(UI主线程)中绘制的.这个主应用程序线程同时也用来处理所有的用户交互(例如,按钮单击或者文本输入) ...