IOS应用程序自身的本地化
为啥要说应用程序自身?因为普通的本地化是根据设备当前的设置来完成的。而实际中一些应用往往需要与设备设置无关的本地化。例如一款游戏在游戏中,玩家可以选择游戏的语言,但是并不会改变所用设备的语言。
近期工作需要,尝试着实现一下这类需求,经测试还能使用,暂且记下,如大家有更好或者更简单的方法还望不吝赐教。
本例为Xcode 4.2版本
一个简易应用程序本地化类:
#import <Foundation/Foundation.h>@interface XUI_language_Base : NSObject{NSBundle *language_bundle;NSString *language_path;NSArray *language_array;
}@property (nonatomic,retain) NSBundle *language_bundle;
@property (nonatomic,retain) NSString *language_path;
@property (nonatomic,retain) NSArray *language_array;-(void)initialize;
-(void)setAppLanguage:(NSString *)language_temp;-(NSString *)getAppLanguageString:(NSString *)string_key;
-(UIImage *)getAppLanguageImage:(NSString *)imageName;@end
#import "XUI_language_Base.h"@implementation XUI_language_Base@synthesize language_array;
@synthesize language_path;
@synthesize language_bundle;-(void)dealloc{[language_bundle release];[language_array release];[language_path release];[super dealloc];
}-(void)initialize{self.language_array = [ [NSArray alloc] initWithObjects:@"en",@"zh-Hans",nil];BOOL isLanguageSetted = YES;//todo get app config find the switch//end doNSString *language_select;if (isLanguageSetted) {// todo get the language of configlanguage_select = [language_array objectAtIndex:0];//end do} else {NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; language_select = [languages objectAtIndex:0];BOOL isSupported = NO;//check the language of locale isSupportedfor(NSString *lan_temp in language_array){if ( [lan_temp isEqualToString:language_select] ) {isSupported = YES;break;}}if ( NO == isSupported ) {language_select = [language_array objectAtIndex:0];}}self.language_path = [ [NSBundle mainBundle] pathForResource:language_select ofType:@"lproj"];self.language_bundle = [NSBundle bundleWithPath:self.language_path];
}-(void)setAppLanguage:(NSString *)language_select{BOOL isSupported = NO;//check the language of locale isSupportedfor(NSString *lan_temp in language_array){if ( [lan_temp isEqualToString:language_select] ) {isSupported = YES;break;}}if ( NO == isSupported ) {language_select = [language_array objectAtIndex:0];}self.language_path = [ [NSBundle mainBundle] pathForResource:language_select ofType:@"lproj"]; self.language_bundle = [NSBundle bundleWithPath:self.language_path]; //todo set the app language and the switch value is yes//end do
}-(NSString *)getAppLanguageString:(NSString *)string_key{return [self.language_bundle localizedStringForKey:string_keyvalue:string_key table:nil];
}-(UIImage *)getAppLanguageImage:(NSString *)imageName{NSString *image_path = [ self.language_bundle pathForResource:imageName ofType:@"png"];// need the name with type// NSString *image_path = [ NSString stringWithFormat:@"%@/%@",self.language_path,imageName];NSLog(@"img path %@",image_path);return [UIImage imageWithContentsOfFile:image_path];
}@end
也许不用实例方法而用 类方法也可以实现一些功能,但个人觉得一些路径存起来用着舒服些。可以在应用初始化创建一个对象,并调用initialize方法。相关配置自行存储于应用程序本地文件,具体实现方法也是各种各样。笔者的项目为程序,一些设置的存取都是调用人家给的接口,即上面的各种todo。另外运行时设置语言后,自然也需要即时处理当前显示内容。
转载请注明来自:http://blog.csdn.net/zhao_yin
IOS应用程序自身的本地化相关推荐
- IOS应用程序多语言本地化解决方案
最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动 ...
- ios swiftui_ios swiftui中的本地化
ios swiftui 本土化 (Localisation) Localisation is the process of making your app support another langua ...
- 25个增强iOS应用程序性能的提示和技巧 — 中级篇
本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...
- iOS 11开发教程(三)运行第一个iOS 11程序
iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...
- Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化. ...
- 马上着手开发 iOS 应用程序-1.1设置
设置 <马上着手开发 iOS 应用程序> 给 iOS 开发带来一个完美开局.在 Mac 上,您可以创建在 iPad.iPhone 和 iPod touch 上运行的 iOS 应用程序.本指 ...
- 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 在内建了身份认证应用程序服务之 ...
- Qt for ios 设置程序显示名称
前言 Qt 开发 IOS 程序,编译出来软件的默认名称就是 Qt 的工程名,包括 Qt 开发 Android 也是一样,修改 android 的程序显示名称需要在 AndroidManifest文件中 ...
- [转]25个增强iOS应用程序性能的提示和技巧
在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程 ...
最新文章
- java大型wms架构设计_Java生鲜电商平台-库存管理设计与架构
- 2017中国大数据技术大会12月在京召开
- window.close() 关闭当前浏览器页
- python爬虫︱百度百科的requests请求、百度URL格式、网页保存、爬虫模块
- 六个让你的Ubuntu系统提速的方法
- Spring Cloud Alibaba Seata工作原理
- iOS,Core Graphics
- HTML渐变背景不重复,在身体上设置的CSS3渐变背景不会拉伸,而是重复?
- codeforces 129C - Statues 图论 DFS
- 如何使用Outlook创建带有超链接的图片签名
- 用python写一个恩格尔方格游戏
- uwb室内定位应用DW1000 TWR测距
- mysql出现core dumped_mysql 段错误 (core dumped)
- GICv3软件overview手册之GICv3基本功能(1)
- 高品质回音消除 模块 : F-23
- dns服务器配置(本地dns,自己当服务器,自己测试自己)
- 如何基于SSM设计实现一个学生学籍管理系统
- Ubuntu上让Firefox使用Chrome最新版PepperFlash插件
- Python+Selenium 实现新理念外语网络教学平台 自动答英语听力 -- 山东科技大学
- matlab画一个正弦波,在MATLAB画出一个正弦波