微信小程序实现多国语言的切换-简单

JavaScript016

微信小程序实现多国语言的切换-简单,第1张

实现步骤: 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>

unicode编码,直接输出后就是汉字,不需要额外解码。摘自网络一个编码解码方法:

<script type="text/javascript">

        var GB2312UnicodeConverter = {

            ToUnicode: function (str) {

                return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\u')

            }

            , ToGB2312: function (str) {

                return unescape(str.replace(/\\u/gi, '%u'))

            }

        }

        var str = '上海', unicode

        document.write(str + '<br/>')

        unicode = GB2312UnicodeConverter.ToUnicode(str)

        document.write('汉字转换为Unicode代码:' + unicode + '<br/><br/>')

        document.write('Unicode代码转换为汉字:' + GB2312UnicodeConverter.ToGB2312(unicode))

    </script>

你可以用这个方法编码或解码后就可以修改原来的文字了。

1在Project设置,添加中英两种语言

2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英

3.添加一个字段,

在English中,添加:SUBMIT_BTN_TITLE = Go

在Chinese中,添加:SUBMIT_BTN_TITLE = 开始

4.一个工具类GDLocalizableController,用来切换本地语言:

//

// GDLocalizableController.h

// guide-book

//

// Created by why on 7/16/14.

// Copyright (c) 2014 why. All rights reserved.

//

#import

@interface GDLocalizableController : NSObject

+(NSBundle *)bundle//获取当前资源文件

+(void)initUserLanguage//初始化语言文件

+(NSString *)userLanguage//获取应用当前语言

+(void)setUserlanguage:(NSString *)language//设置当前语言

@end

//

// GDLocalizableController.m

// guide-book

//

// Created by why on 7/16/14.

// Copyright (c) 2014 why. All rights reserved.

//

#import GDLocalizableController.h

@implementation GDLocalizableController

static NSBundle *bundle = nil

+ ( NSBundle * )bundle{

return bundle

}

+(void)initUserLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]

NSString *string = [def valueForKey:@userLanguage]

if(string.length == 0){

//获取系统当前语言版本

NSArray* languages = [def objectForKey:@AppleLanguages]

NSString *current = [languages objectAtIndex:0]

string = current

[def setValue:current forKey:@userLanguage]

[def synchronize]//持久化,不加的话不会保存

}

//获取文件路径

NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@lproj]

bundle = [NSBundle bundleWithPath:path]//生成bundle

}

+(NSString *)userLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]

NSString *language = [def valueForKey:@userLanguage]

return language

}

+(void)setUserlanguage:(NSString *)language{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]

//1.第一步改变bundle的值

NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@lproj ]

bundle = [NSBundle bundleWithPath:path]

//2.持久化

[def setValue:language forKey:@userLanguage]

[def synchronize]

}

@end

5. 自定义一个宏方便处理:

// ----- 多语言设置

#define CHINESE @zh-Hans

#define ENGLISH @en

#define GDLocalizedString(key) [[GDLocalizableController bundle] localizedStringForKey:(key) value:@ table:nil]

6.使用:

[GDLocalizableController setUserlanguage:CHINESE]

NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE))

[GDLocalizableController setUserlanguage:ENGLISH]

NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE))