iOS开发-功能篇-国际化|NSUserDefaults

/*=========================================软件国际化================================================*/

1.简介:

软件国际化主要是在软件中添加多种语言,以实现不同国家的人群需求。

主要的应用方式有两种:1.根据系统的语言环境自动进行切换;2.人为的添加按钮等进行主动切换。

目前实现的主要方法有两种:1.Xcode可视化界面添加Localizations的操作。2.利用NSLocalizedString配合genstrings进行实现。这里主要介绍第二种方法。

2.实现:

2.1 NSUserDefaults:适合存储轻量级的本地数据,比如要保存一个登陆用户名、密码、语言环境之类的,使用NSUserDefaults是首选。

NSDictionary* defaultsee = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

NSLog(@"Defaults: %@", defaultsee);//利用字典查看一下所有NSUserDefaults的设置

2.2 NSLocalizedString:基础的国际化函数,查看一下定义

#define NSLocalizedString(key, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]//key-value,comment:注释

对上述函数进行拓展自定义,语言包存放在en.lproj(英),zh-Hans.lproj(汉)等,以key-value方式进行获取。

#define CustomLocalizedString(key, comment) \
    [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:@"" table:nil]//利用key取出相应地object

2.3 利用genstrings生成相应语言的.lproj语言文件Localizable.strings

genstrings -o ~/.../zh-Hans.lproj *.m//-o 生成的目标文件夹,扫描当前目录下的所有.m文件

genstrings -o ~/.../en.lproj *.m

2.4 然后在相应地Localizable.strings文件中添加"登陆" = "login";等

 [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];//添加语言文件
    NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];//获取系统当前的语言
    NSString *currentLanguage = [array objectAtIndex:0];

注意:1.生成的Localizable.strings文件名没有标识,所以在生成文件处可以加文件夹或者添加注释区分

2.一定要扫描所有需要国际化的.m文件

3.NSUserDefaults只是起到存储属性值和路径作用,利用类似字典方式获取数据

/*===========================================NSUserDefaults详解==========================================*/

1.简介:NSUserDefaults对象是用来保存应用程序相关的偏好设置,配置数据等等,主要用来恢复基础设置,记录密码和系统的一些语言和键盘等默认信息。数据则存放在<UUID for your App>\Library\Preferences\<your App"s bundle ID>.plist的文件中

2.功能:

2.1 NSUserDefaults只能存放5种数据格式:NSString, NSNumber, NSDate, NSArray, NSDictionary.

2.2 查看当前所有的配置数据:

 NSDictionary* defaultsee = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
    NSLog(@"Defaults: %@", defaultsee);

2.3 单例模式: +(NSUserDefaults *)standardUserDefaults//获取当前类的实例

2.4 key-value模式:

 -(void)setObject:(id)value forKey:(NSString *)defaultName;//设置数据
    - (id)objectForKey:(NSString *)defaultName;//取数据

2.5 因为NSUserDefaults是持久化数据存储方法,重启设备并不能将设置在里面的数据进行更改,只能通过两种方式进行删除:

    1.删除沙盒(重装)

    2.-(void)removeObjectForKey:(NSString *)defaultName;//函数方法

2.6 其他:- (NSDictionary *)dictionaryRepresentation;//利用字典进行配置查看

    - (BOOL)synchronize;//数据同步

时间: 2024-10-12 20:39:00

iOS开发-功能篇-国际化|NSUserDefaults的相关文章

iOS开发-功能篇-静态库

1.概述:apple的开发,主要提供了两种库:一种是静态库,系统自带的.framework和自己创建的.a文件,主要在编译时供调用;还有一种是动态库,主要以.dylib结尾(或直接为.o文件),在运行时创建成.o文件链接到工程文件中供调用.苹果目前只提供静态库的封装为主,接下来就介绍.a静态库的封装. 2.功能:主要有2大用途:1).功能模块化,便于重用;2).保密源文件内部实现,保护源文件隐私. 3.步骤:创建一个新的project工程文件->选择cocoa touch static libr

iOS开发UI篇—无限轮播(功能完善)

iOS开发UI篇—无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. 1 [self addNSTimer]; 2 } 3 4 -(void)addNSTimer 5 { 6 // NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repe

iOS开发网络篇—文件下载(五&#183;下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)

IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传) 网络ios文件管理器attributespathurl 在工程中,我们会常常遇到需要下载的程序,比如下载在线音乐.下载图片等等,今天我将介绍一下利用ASIHTTPRequest的下载示例,支持断点续传,利用ASIHTTPRequest下载以及断点续传的原理在我的博客:http://blog.csdn.net/pjk1129/article/details/6575588中有具体的介绍,今天重点介绍如何实现,废话少说,开始

iOS开发项目篇—08新版本特性&#183;SrollView

iOS开发项目篇—08新版本特性 一.简单说明 展示新版本的特性:第一次使用一些应用软件时,展示这个版本的软件的新特性,一般在第一次启动程序的时候显示. 1.什么情况下显示版本新特性: (1)第一次使用某个软件时(X) (2)第一次使用某个版本时,显示版本新特性(V) 2.怎么知道这个软件的版本呢? 在plist文件里,bundle version中显示版本号. 3.如何显示版本新特性? 应该在YYAppDelegate.m中进行判断: 如果是第一次使用这个版本,那么就显示版本新特性(设置为wi

iOS开发项目篇—21抽取工具类

iOS开发项目篇—21抽取工具类 一.抽取宏 把和应用相关的信息抽取出来 App Key:1972915028 App Secret:b255603c4dfd82b4785bf9a808ce2662 回调地址:http://www.cnblogs.com/wendingding/ (1)appkey和回调页面在很多地方都要用到 (2)如果是不同应用的话,只需要把这几个参数换掉就可以了.把它们抽取成一个宏,写到pch文件中. 项目的PCH文件 1 #import <Availability.h>

iOS开发UI篇—ios应用数据存储方式(偏好设置)

iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏好设置.比如,保存用户名.字体大小.是否自动登录 存储位置: 存储形式: 二.代码示例 1.storyboard 2.代码 1 // Created by 鑫 on 14-10-24. 2 // Copyright (c) 2014年 梁镋鑫.

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接) 这里推荐两款好用的Xcode插件,并提供下载链接. 一.插件和使用如下: 1.两款插件 对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master 提供快速创建自动注释:VVDocumenter-Xcode-master 2.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. (2)VVDocumenter-Xcode-master能提供

iOS开发拓展篇-XMPP简单介绍

iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已