多语言文本资源的访问(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 ...
随机推荐
- win7 下恢复“经典任务栏”/“快速启动栏”,关闭“窗口自动最大化” -摘自网络
1.自动放大窗口 鼠标把窗口拖到屏幕边缘时,win7会自做聪明的把窗口放大,有时候这个很烦人. 解决办法: 运行“REGEDIT”打开注册表,找到 “HKEY_CURRENT_USER\Control ...
- KMP学习总结
初学,理解可能不是那么准确~~ Next数组的含义:next[i]表示第0个元素到第i个元素组成的字符串的最大前缀后缀.Next[0]=0显然. 所以KMP的原理就是 通过找出每一阶段最大的相等的前缀 ...
- 问题-delphi 程序在某电脑中显示???问号 乱码
问题现象:delphi 程序在某电脑中显示???问号 乱码 问题原因:因为语言的原因.不同的国家可能显示的编码不一样. 问题处理:“控制面板”>“区域和语言选项”>“区域选项”>“标 ...
- Sqlite在Windows、Linux 和 Mac OS X 上的安装过程
一:在 Windows 上安装 SQLite 1,下载 请访问SQLite下载页面http://www.sqlite.org/download.html,从Windows 区下载预编译的二进制文件.需 ...
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- excel重复数据
=COUNTIF(H:H,H1)>1
- c++虚表的使用 通过虚表调用虚函数的演示代码
//演示一下c++如何找到虚表地址vptr以及如何通过虚表调用虚函数 //zhangpeng@myhexin.com 20130811 #include <iostream> using ...
- JSON数据的中文乱码问题
问题描述: 在firefox中返回的JSON数据没有出现乱码,但在GridPanel中显示乱码,而jsp页面和xml文件都是utf-8类型. 解决方案: 在 PrintWriter out = res ...
- android114 c转换成c++
##C向C++改造 . 把c文件后缀名换成cpp . Android.mk文件中的hello.c也要换成hello.cpp . c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全 ...
- 监控mysql索引使用效率的脚本
SELECT t.table_schema AS db, t.table_name AS tab_name, s.index_name AS index_name, s.colum ...