1. 程式人生 > >iOS本地化對於字串可變內容支援的一個小技巧

iOS本地化對於字串可變內容支援的一個小技巧

我們知道iOS對於App本地化支援提供了較方便的介面,我們只需要在本地化支援檔案中設定好各種語言對應的字串就可以了,比如:

//英文
“NameString" = "Name";

//中文
"NameString" = "名稱";

呼叫時使用:

let nameString = NSLocalizedString("NameString",comment:"")

但是對於本地化中包括可變內容的字串該如何處理呢?

let content = "已存在 \(currentCount) 個備份(最多 \(MaxCount) 個備份)"
showMessage(content)

如上,iOS本地化對於字串嵌入語法是不支援的,你無法將其嵌入到本地化檔案中去。

一個簡單的方法是在本地化檔案中對於可變內容的位置放入佔位符,然後在執行時再加以處理:

//中文
"BackupInfoSectionFooterTitle" = "已存在 # 個備份(最多 # 個備份)";

//英文
"BackupInfoSectionFooterTitle" = "already has # backups(max # backups)";

然後寫一個對應的小方法來搞定:

private func setBackupSectionFooterTitleFor(backupCount:Int){
        let title = NSLocalizedString("BackupInfoSectionFooterTitle", comment: "")
        
        var titleCompents = title.split(separator: "#").map {String($0)}
        titleCompents.insert("\(backupCount)", at: 1)
        titleCompents.insert("\(MaxDBBackupCount)", at: 3)
        
        backupSection.footer?.title = titleCompents.joined()
    }

只需簡單的用佔位符分隔字串陣列,然後在相應位置插入可變內容即可,其實完全可以寫出一個通用的方法來完成可變本地化的功能,這裡本貓就不展開了,大家請自便。