iOS開發-功能篇-國際化|NSUserDefaults,iosnsuserdefaults
/*=========================================軟體國際化================================================*/
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;//資料同步