1,首先在根目录新建文件夹 i18n,该文件夹下是 各种语言的js文件,如下图所示:
每个js文件内容和下面的图片类似;
2,新建base.js文件,位族腔磨置和app.js同级别即可,也可自行安排位置;里面内容如下
3,在页面中使用:
首先在页圆亮面 js文件中引入base.js
然后在onShow生命周期函数中 写入:
写在onShow生命周期函数中每次进入该页面,都加载数据,虽然降低了性能,但是保证切换语言之后,页面的文字能随时变化;(((切换语言主要是用了微信小程序的组件 radio-group ,改变缓存中的一个变量,该变量是用于确定当前选择的是何种语言的标志;在步骤1中有四个js文件,分别是“_hanyu.js”,“_riyu.js” ,“_ying.js”,“_zhong.js”,
通过单选按钮将对应的文件名放入缓存
这样页兆斗面js文件的data对象里就有了对应语言的数据,在wxml页面中可以通过双花括号获取数据;
例如:<text>{{_t["授权完成"]}}</text>
方法1:如果要切换,可以把资源都放到dll里,做一个简体的,比如XX0804.dll,繁体的XXX0404.dll,切换的时候用AfxSetResourceHandle选择不同的资源dll即可。实现多语言有很多种办法, 例如陵坦御楼上讲的将资源装入_DLL.你研究_MS_就会发现他也是这么做的.
如何实现多语言版本程序
实现多语言版本程序的一般方法是把要显示的文本以资源形式存在单独的动态链接库(DLL)中。在这些动态链接库里,相同的文本其资源ID也相同。这样,在运行时只要加载相应的 DLL 即可,然后用LoadString API函数获取文本资源,例如:
LPSTR szLang// 此变量表示要使用的语言
char szWindowTitle[256]
wsprintf(szDll, "%s.dll", szLang)
HMODULE hDll = LoadLibrary(szDll)
LoadString(hDll, IDS_WINDOW_TITLE, szWindowTitle, sizof(szWindowTitle))
通常会有多个DLLs文件,如:en.dll,cn.dll,jp.dll,fr.dll,it.dll等等尺岩,每一个语言拥有这样一个DLL支持文件。
如何去创建一个资源的实例Instance(我想问题的关键应该在这儿)
然后用Load。。()去导入
方法2:
还有另外一种方法, 就是采用文本语言包.现在很多软件都是采用这种方式.
由于在不同的语言环境下, 字体环境是不一样的, 也许你在简体中文环境下对话框看起来顺顺当当的,但切换到e文环境下,你会发现惨不忍睹.根据_MSDN的忠告, 对话信冲框等资源的字体采用_MS_SCAN_SERIF, 9pt比较好.
我说说文本语言包的实现.
1.一个语言就是一个文本文件.其中最原始的是英语文本文件, 可以用这样的格式: Englisht.txt
[lang]
Infomation_=_English
&File=
&Edit=
....
而中文语言包文件可以这样写
Chinese.txt [lang] Infomation_=_Chinese
&File=文件(&F) ...
&Edit=编辑(&E)
对于要翻译的文件, 左边是原始文字,右边是翻译后的文字.
2.程序启动时, 根据用户的选择定位到具体的语言包文件.
以后每次需要显示文本时, 就从这个文件中读, 用读取_ini_文件的那个函数:
GetPrivateProfileString获取字串.
当然每次都这么调用, 比较麻烦, 你可以写一个类,将_SetWindowText, MessageBox等_重载一下. 这个类还可以做很多其他事情, 例如根据用户当前的语言设定特定的语言包, 例如可以随时更换语言而不必重启程序等等.当然你也可以不用类.
3.要翻译的时候, 将这个文本文件直接发给翻译者就行了.
这种实现文式的缺点:
1.前期你要写一个简单但实用的类或API来封装一下.
2.对于所有的文本, 采用的都是动态翻译,因此每个对话框都要调用_SetWindowText_重设文本, 增加程序开销.
这种实现方式的优点:
1.分发语言包比较方便 2.翻译者翻译比较方便, 给他一个文本文件就行了.
3.做多国语言包不必重新编译程序. 4.一劳永逸.
方法3:动态加载资源文件
使用资源文件封装不同语言资源信息,包含字符串、图标等等,在应用程序运行时,载入资源就行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)