js多语言切换什么实现?

JavaScript035

js多语言切换什么实现?,第1张

通常做法是制作语言文件,配置语言参数,

语言文件格式可以是 xml. 或者 是 json 或者 其他的格式...

例如:

cn : {title: '标题',info:'内容'},

en: {title: 'title',info:'info'},

然后通过参数调用相应的语言文字

lang : 'cn '或者 lang : 'en '

调用: lang.title

大概是这么个流程

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))

最简单的办法就是在你的所有中文页面上,一般在导航位置加一个英文页面首页的超链接。这样用户点英文那个链接就进入英文页面了。同样的,在所有的英文页面导航位置都加一个中文首页链接。推荐你用图片做这两个链接,这样不会因为用户没有装对应的语言系统而出现奇怪字符。比如欧美用户一般是不会装中文系统的,页面上有中文字符的时候必然显示为乱码。

网站目录当然要为中文和英文各建一个独立的目录,里面放置各自的页面了。

如果使用数据库的话,则思路是一样的。