簡體   English   中英

從swift中的本地化數值中刪除千位分隔符

[英]Remove thousand separator from localized numerical values in swift

我試圖使用String.localizedStringWithFormat()方法從Localizable.stringsdictLocalizable.strings獲取本地化字符串以及單數/復數本地化。 但是這個方法返回帶有thousand separator/group separator字符串,這是我不想要的。 有沒有辦法獲得本地化字符串以及沒有千位分隔符的數字本地化? 以下是我的Localizable.stringsdict

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>v1_pineapples_count</key>
        <dict>
            <key>NSStringLocalizedFormatKey</key>
            <string>%#@variable@</string>
            <key>variable</key>
            <dict>
                <key>NSStringFormatSpecTypeKey</key>
                <string>NSStringPluralRuleType</string>
                <key>NSStringFormatValueTypeKey</key>
                <string>d</string>
                <key>zero</key>
                <string>John has no pineapples</string>
                <key>one</key>
                <string>John has 1 pineapple</string>
                <key>other</key>
                <string>John has %d pineapples</string>
            </dict>
        </dict>
    </dict>
</plist>

獲取本地化字符串的代碼是:

    let formatString : String = NSLocalizedString("v1_pineapples_count", comment: "")
    let resultString : String = String.localizedStringWithFormat(formatString, 1000)
 Current output is John has 1,000/١,٠٠٠ pineapples Expected output is John has 1000/١٠٠٠ pineapples 

由於我沒有找到任何方法來刪除千位分隔符,但保持數字本地化以及單數/復數本地化,我為我的項目編寫了此擴展。 現在它很好地為我服務。 希望它能幫助有相同要求的人。

extension String {
    func localizedStringOf(comment: String, args: CVarArg...) -> String {
        let formatter = NumberFormatter()
        formatter.locale = Locale.current

        let formattedString = NSLocalizedString(self, comment: comment)

        let pluralString = withVaList(args){_ in
            (String(format: formattedString, arguments: args) as String)
        }
        var resultString: String  = pluralString
        for arg in args {
            let locDigit = getLocalizedDigit(num: arg as! UInt, formatter:  formatter)
            resultString = replaceString(str: pluralString, num1: arg as! UInt, with: locDigit)
        }

        print(resultString)
        return resultString
    }

    func getLocalizedDigit(num: UInt, formatter: NumberFormatter)->String {
        let number = NSNumber(value: num)
        return formatter.string(from: number) ?? ""
    }

    func replaceString(str: String, num1: UInt, with num2: String ) -> String {
        return str.replacingOccurrences(of: String(num1), with: num2)
    }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM