为啥要说应用程序自身?因为普通的本地化是根据设备当前的设置来完成的。而实际中一些应用往往需要与设备设置无关的本地化。例如一款游戏在游戏中,玩家可以选择游戏的语言,但是并不会改变所用设备的语言。

近期工作需要,尝试着实现一下这类需求,经测试还能使用,暂且记下,如大家有更好或者更简单的方法还望不吝赐教。

本例为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应用程序自身的本地化相关推荐

  1. IOS应用程序多语言本地化解决方案

    最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动 ...

  2. ios swiftui_ios swiftui中的本地化

    ios swiftui 本土化 (Localisation) Localisation is the process of making your app support another langua ...

  3. 25个增强iOS应用程序性能的提示和技巧 — 中级篇

    本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...

  4. iOS 11开发教程(三)运行第一个iOS 11程序

    iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...

  5. Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

    Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化. ...

  6. 马上着手开发 iOS 应用程序-1.1设置

    设置 <马上着手开发 iOS 应用程序> 给 iOS 开发带来一个完美开局.在 Mac 上,您可以创建在 iPad.iPhone 和 iPod touch 上运行的 iOS 应用程序.本指 ...

  7. 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 在内建了身份认证应用程序服务之 ...

  8. Qt for ios 设置程序显示名称

    前言 Qt 开发 IOS 程序,编译出来软件的默认名称就是 Qt 的工程名,包括 Qt 开发 Android 也是一样,修改 android 的程序显示名称需要在 AndroidManifest文件中 ...

  9. [转]25个增强iOS应用程序性能的提示和技巧

    在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程 ...

最新文章

  1. java大型wms架构设计_Java生鲜电商平台-库存管理设计与架构
  2. 2017中国大数据技术大会12月在京召开
  3. window.close() 关闭当前浏览器页
  4. python爬虫︱百度百科的requests请求、百度URL格式、网页保存、爬虫模块
  5. 六个让你的Ubuntu系统提速的方法
  6. Spring Cloud Alibaba Seata工作原理
  7. iOS,Core Graphics
  8. HTML渐变背景不重复,在身体上设置的CSS3渐变背景不会拉伸,而是重复?
  9. codeforces 129C - Statues 图论 DFS
  10. 如何使用Outlook创建带有超链接的图片签名
  11. 用python写一个恩格尔方格游戏
  12. uwb室内定位应用DW1000 TWR测距
  13. mysql出现core dumped_mysql 段错误 (core dumped)
  14. GICv3软件overview手册之GICv3基本功能(1)
  15. 高品质回音消除 模块 : F-23
  16. dns服务器配置(本地dns,自己当服务器,自己测试自己)
  17. 如何基于SSM设计实现一个学生学籍管理系统
  18. Ubuntu上让Firefox使用Chrome最新版PepperFlash插件
  19. Python+Selenium 实现新理念外语网络教学平台 自动答英语听力 -- 山东科技大学
  20. matlab画一个正弦波,在MATLAB画出一个正弦波

热门文章

  1. 关于string头文件
  2. OpenGL像素格式
  3. 手机里的计算机冷知识,手机上这些超实用的“冷知识”,你可能很多都不知道!...
  4. Java类加载执行顺序
  5. java static加载顺序
  6. 山东大学Linux应用实验四
  7. 交换两个变量值的三种方法
  8. android open es录像,音频采集:Android基于OpenSL ES的实现
  9. SpringCloud简介与微服务架构
  10. 软件架构设计系列总结—7—设计箴言理解