这是我的代码:
class LocalizedStrings{
static let collect = NSLocalizedString("Collect %d coins", comment: "")
class func returnLocalizedStringWithFormat(text: String, value: Int) -> String{
return String.localizedStringWithFormat(text, value)
}
}
要使用格式获取变量collect,我需要调用:
LocalizedString.collect.returnLocalizedStringWithFormat(text: collect, value: 100)
那里有两次collect
。我想知道是否可以直接使用collect
作为'text'的参数。所以看起来应该是这样的:
LocalizedString.collect.returnLocalizedStringWithFormat(value: 100)
答案 0 :(得分:3)
制作自定义let objectA = {};
let objectB = {};
let dico = {};
dico[(<any>Object).id(objectA)] = "value1";
// or
dico[Object['id'](objectA);] = "value1";
// If you are not using typescript you don't need the casting
dico[Object.id(objectA)] = "value1"
结构。
LocalizedString
然后你的本地化字符串存储:
struct LocalizedString {
var text: String
var comment: String
}
extension LocalizedString {
func returnLocalizedStringWithFormat(value: Int) -> String {
let localizedStringOrigin = NSLocalizedString(text, comment: comment)
return String.localizedStringWithFormat(localizedStringOrigin, value)
}
}
用法:
struct LocalizedStrings{
static let collect = LocalizedString(text: "Collect %d coins", comment: "")
static let cook = LocalizedString(text: "Make %d cookies", comment: "")
}
打印:
LocalizedStrings.collect.returnLocalizedStringWithFormat(value: 100)
LocalizedStrings.cook.returnLocalizedStringWithFormat(value: 100)
__
<强> P.S。从技术上讲,您可以简单地扩展"Collect 100 coins"
"Make 100 cookies"
:
String
每当你有这样的课时:
extension String {
func localized(value: Int) -> String {
return String.localizedStringWithFormat(self, value)
}
}
只需致电:
class LocalizedStrings{
static let collect = NSLocalizedString("Collect %d coins", comment: "")
}
但这绝对是糟糕的设计,因为LocalizedStrings.collect.localized(value: 100)
可用于所有字符串,两者都可以本地化(由localized
返回)而不是。因此,更好的做法是使用封装方法的单独实体。
答案 1 :(得分:0)
我认为您的目标是通过UI本地化简化您的工作。如果是这样,我强烈建议您使用SwiftGen。它也适用于资产,颜色,字体,故事板。
使用它有很多好处:
String
所有这些都将由编译器确保。