VS2010下添加DLL多国语言包

①在VS,工程设置->General中,Multi-Byte和NotSet都是ASCI方式的。这里我们设置为Unicode。

②在Castle的source file->add->source->string table->new 这样产生Castle.rc,并在HeaderFiles里面自动产生resource.h. 点开Castle.rc,然后在stringtable中编辑,将ID项改成有意义的标示,如“IDS_STRING_1”,Caption那一项表示这个ID的内容,填上Floor:.

③修改Game.cpp中的Game::printInfoR这个函数里面的floor,改为

ATL::CString str;

str.LoadString( IDS_STRING_1);

USES_CONVERSION;

然后把下面cout中的"Floor"改为T2CA(str)

④重新编译工程,运行正确

MFC都用ATL的CString

⑤(加入中文语言包,生成Castle_zh_cn.dll)zh_cn代表中文简体。在solution中新建Castle_zh_cn这个project,然后手动的把之前产生的castle.rc和resource.h文件拷贝到castle_zh_cn文件夹中。然后Add这两个文件,修改castle.rc中的"Floor:"为"楼层:",同时需要修改rc属性中的langusge一栏为“中文”、“英语(美国)”等。build新建的Castle_zh_ch,产生Castle_zh_ch.dll.然后在main中(Castle.cpp中),用

HMODULE h = ::LoadLibrary(_T("Castle_zh_ch.dll"));

_pModule->SetResourceInstance(h);    //定位到中文的"Castle_zh_cn.dll"

然后再编译整个solution,发现原来的"Floor:"变成"楼层:"了。

⑥PS:在str中可以使用%d这样的,用法是在用到字符串的时候修改(Game.cpp, printInfoR这里):

ATL::CString str, strShow;

str.LoadString( IDS_STRING_1);

USES_CONVERSION;

for( size_t i=0; i<rooms.size(); i++ ){

   strShow.Format( str, rooms[i].getFloor() );

   cout << T2CA(strShow) << ........后面的不改变

}

当然在resouce.h中要把之前的floor: 改为 floor: %d,楼层: 改为 楼层:%d

PS:cout用的是ASCI方法,所以要用T2CA强制转换一下。今后要抛弃cout。

⑦这样一个一个改很麻烦,可以考虑自己做一个小工具,自动提取这些界面上的字符串,生成rc。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多国语言的 resx 文件可以编译到同一个 DLL(动态连接库)中。在 C# 中,使用 Visual Studio 提供的资源管理器可以轻松地将各国语言的资源文件添加到项目中。 首先,我们需要创建一个资源文件 (.resx) 来存储每种语言的翻译文本。在 Visual Studio 中,我们可以通过右键点击项目文件夹并选择 "添加",然后选择 "新建项" 来创建一个资源文件。 在资源管理器中,我们可以为每种语言创建不同的资源文件,例如:strings.resx(默认语言),strings.zh-CN.resx(简体中文)和 strings.en-US.resx(美式英文)。对于该 DLL,我们将为每种语言创建一个对应的资源文件。 每个资源文件都可以包含键值对,其中键是用于访问资源的唯一标识符,而值则是对该键所对应的文本的翻译。 一旦我们创建了所有所需的资源文件,我们需要设置每个文件的属性来指示它们的本地化语言。对于默认资源文件 strings.resx,我们可以将其属性 "Custom Tool" 设置为 "PublicResXFileCodeGenerator"。对于其他语言的资源文件,我们可以将其属性 "Custom Tool" 设置为 "GlobalResourceProxyGenerator"。 编译项目后,Visual Studio 将为每个资源文件生成相应的 .Designer.cs 文件。这些文件将包含对应语言资源的公共类和属性。 最后,我们可以在代码中使用 ResourceManager 类来访问这些本地化的资源。ResourceManager 初始化时需要指定主资源文件(在我们的例子中为 strings.resx)和程序集(DLL)的位置。然后,我们可以使用 GetString 方法根据键获取特定语言的翻译文本。 通过将多国语言的 resx 文件编译到同一个 DLL 中,我们可以实现在不同语言环境下运行时自动加载和使用正确的翻译资源,从而实现多语言支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值