每個遠端推送通知都包含乙個payload
。payload
包含系統要顯示給使用者的資訊,也包括你自定義的資料。有關payload key
可以看看這裡
看過上面這篇文章後,小夥伴應該知道了蘋果其實提供了實現語言國際化的方案,即通過loc-key
和loc-args
這兩個字段。其中loc-key
是格式化前的內容,loc-args
裡面放的是loc-key
格式化過程中需要用到的引數。比如要向小明同學推送一條訊息,內容是:
小明,你的包裹已出發!小明的手機語言設定成了英文,收到這條推送後,需要顯示為:
小明,your package has sent!那麼
loc-key
和loc-args
這兩個欄位就應該這樣寫:
"loc-key": "%@,你的包裹已出發!",
"loc-args": ["小明"]
「%@,你的包裹已出發!」="%@,your package has sent!";小明收到的推送就將顯示為
「小明,your package has sent! 」。首先,建立乙個
notification service extension
,建立方法自己搜一下哈。
然後,在系統自動生成的notificationservice.m
檔案裡修改payload
,**如下:
- (void)didreceivenotificationrequest:(unnotificationrequest *)request withcontenthandler:(void (^)(unnotificationcontent * _nonnull))contenthandler
nsstring *title = [alert objectforkey:@"title"];
self.bestattemptcontent.title = title;
self.contenthandler(self.bestattemptcontent);
}- (void)configlanguage
}[nsbundle setlanguage:language];
}
nsstring 不定引數格式化+ (nsstring *)stringwithformat:(nsstring *)format array:(nsarray *)arguments
nsbundle+language.m
#import "nsbundle+language.h"
#import static const char _bundle = 0;
@inte***ce bundleex : nsbundle
@end
@implementation bundleex
- (nsstring *)localizedstringforkey:(nsstring *)key value:(nsstring *)value table:(nsstring *)tablename
@end
@implementation nsbundle (language)
+ (void)setlanguage:(nsstring *)language );
objc_setassociatedobject([nsbundle mainbundle], &_bundle, language ? [nsbundle bundlewithpath:[[nsbundle mainbundle] pathforresource:language oftype:@"lproj"]] : nil, objc_association_retain_nonatomic);
}@end
nsbundle+language.h
#import @inte***ce nsbundle (language)
+ (void)setlanguage:(nsstring *)language;
@end
然後,在notificationservice.m
裡就可以讀取到language
了。
總結如果只是跟隨系統語言,那麼就使用 loc-key 和 loc-args,這兩個欄位名不可隨意更改。
如果是通過notification service extension
,就不是非要用loc-key
和loc-args
欄位了,甚至也不用在alert
結構裡設定,在payload
的任何地方都可以自行定義欄位哦,不要和蘋果的字段重複就好~
IOS程式國際化
1.2 新建後,可以看到工作目錄結構檔案如下,單擊infoplist.strings,檢視右邊的屬性,在localization欄新增語言。1.3 新增完成後開啟對應語言檔案,比如english的新增 cfbundledisplayname china chinese檔案新增 cfbundledis...
IOS程式國際化
1.2 新建後,可以看到工作目錄結構檔案如下,單擊infoplist.strings,檢視右邊的屬性,在localization欄新增語言。1.3 新增完成後開啟對應語言檔案,比如english的新增 cfbundledisplayname china chinese檔案新增 cfbundledis...
iOS語言國際化
參考 語言國際化 根據系統不同的語言自動切換 xcode6.2 一.在不同語言下工程名會變成對應的語言名 步驟 新建乙個singleview工程 再新建infoplist檔案 注意檔名不能改變還有大小寫 然後新增語言 經過以上,會出現 在各自的語言資料夾中分別新增 cfbundledisplayna...