iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0
Mobile Development

在 iOS 開發路上的大小事2系列 第 2

【在 iOS 開發路上的大小事2-Day02】多國語系的其他用法

  • 分享至 

  • xImage
  •  

在去年的時候,已經有介紹過多國語系的基本用法了
還沒看過的話,可以先去看一下~

【在 iOS 開發路上的大小事-Day08】讓你的 App 與世界接軌!

而今天這篇則是要介紹當你的文字中有特定文字是非固定的
會根據不同的選擇顯示不同的值
以往會更動的值如果在多國文字的最前方或是最後方
那我們可以用下面這種寫法來設定

var test: Int = 10
// 更動的值在最前方
label.text = "\(test)\(NSLocalizedString("Test", comment: ""))"

// 更動的值在最後方
label.text = "\(NSLocalizedString("Test", comment: ""))\(test)"

那如果會變動的值是在多國文字的中間呢,像是下面這樣

測試123一二三
測試456一二三
測試789一二三

這種雖然可以透過設定兩個多國文字,再將其串接在一起,像是下面這樣

var test1: Int = 123
label.text = "\(NSLocalizedString("Test", comment: ""))\(test1)\(NSLocalizedString("One Two Three", comment: ""))"

但是這樣在可讀性上可能不太好,那有沒有其他好的寫法呢,其實是有的
我們可以透過下面的這種寫法來達成

Swift API ↓

Objective-C API ↓

這邊由於我只會寫 Swift,所以我就只示範 Swift 的寫法
Objective-C 的寫法,可以參考 Apple Developer Documentation 裡面的寫法

首先,先打開 Localizable.strings 檔案,找到你要改的多國文字
以上面的為例,Key-Value 就會像下面的一樣

"Test" = "測試";
"One Two Three" = "一二三";

然後改用上面講到的 localizedStringWithFormat(__:_:) 這個方法
我們只需要將兩個多國文字改成一個 Key-Value,像是下面這樣

"Test One Two Three" = "測試%d一二三";

套用到 Label 上的話,就像下面這樣

var test12: Int = 123
label.text = String.localizedStringWithFormat(NSLocalizedString("Test", comment: ""), test12)

參考資料

  1. https://developer.apple.com/documentation/swift/string/1414192-localizedstringwithformat
  2. https://developer.apple.com/documentation/foundation/nsstring/1497301-localizedstringwithformat

上一篇
【在 iOS 開發路上的大小事2-Day01】前情提要,溫故知新?
下一篇
【在 iOS 開發路上的大小事2-Day03】工人智慧!JSON 轉起來
系列文
在 iOS 開發路上的大小事230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言