iOS 實現遠端推送通知國際化

2021-09-28 17:49:53 字數 2587 閱讀 8117

每個遠端推送通知都包含乙個payloadpayload包含系統要顯示給使用者的資訊,也包括你自定義的資料。有關payload key可以看看這裡

看過上面這篇文章後,小夥伴應該知道了蘋果其實提供了實現語言國際化的方案,即通過loc-keyloc-args這兩個字段。其中loc-key是格式化前的內容,loc-args裡面放的是loc-key格式化過程中需要用到的引數。比如要向小明同學推送一條訊息,內容是:

小明,你的包裹已出發!

小明的手機語言設定成了英文,收到這條推送後,需要顯示為:

小明,your package has sent!

那麼loc-keyloc-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-keyloc-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...