IOS应用程序自身的本地化
来源:互联网 发布:移动销售软件 编辑:程序博客网 时间:2024/06/02 12:42
为啥要说应用程序自身?因为普通的本地化是根据设备当前的设置来完成的。而实际中一些应用往往需要与设备设置无关的本地化。例如一款游戏在游戏中,玩家可以选择游戏的语言,但是并不会改变所用设备的语言。
近期工作需要,尝试着实现一下这类需求,经测试还能使用,暂且记下,如大家有更好或者更简单的方法还望不吝赐教。
本例为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 do
- NSString *language_select;
- if (isLanguageSetted) {
- // todo get the language of config
- language_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 isSupported
- for(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 isSupported
- for(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_key
- value: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
0 0
- IOS应用程序自身的本地化
- IOS应用程序自身的本地化
- iOS简单的本地化应用程序
- iOS 本地化应用程序汇总
- iOS 应用程序本地化
- iOS 应用程序本地化
- iOS 本地化应用程序汇总
- iOS 应用程序本地化
- iOS—应用程序本地化
- IOS本地化应用程序
- iOS 本地化应用程序汇总
- IOS本地化应用程序
- IOS开发 应用程序本地化 总结
- iOS 本地化应用程序汇总 国际化
- iOS 本地化应用程序(NSLocalizedString)
- iOS 本地化应用程序汇总
- IOS应用程序多语言本地化的一点个人总结
- 删除应用程序自身的可执行文件
- objc系列译文(12.3):自定义View Controller容器转场
- Spring mvc UEditor jsp版本
- .net链接各种数据库代码
- Pascal's Triangle II
- 美团推荐算法实践
- IOS应用程序自身的本地化
- android给ListView动态设置高度
- C++之单目运算符重载
- Browser and its Emerging Trends
- android stroke
- php一致性hash
- Jquery easy UI 上中下三栏布局
- MapReduce程序执行过程和命令格式
- Custom Container View Controller