swift - 在 swift 中从本地化数值中删除千位分隔符

标签 swift localization stringwithformat plural

我正在尝试使用 String.localizedStringWithFormat( 从 Localized.stringsdictLocalized.strings 获取本地化字符串以及单数/复数本地化)方法。但此方法返回带有我不想要的 千位分隔符/组分隔符 的字符串。 有没有办法在没有千位分隔符的情况下获取本地化字符串和数字本地化?以下是我的Localized.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)
    }

 }

关于swift - 在 swift 中从本地化数值中删除千位分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866215/

相关文章:

swift - 静态方法只能在类型上声明

javascript - 如何在浏览器的 mailto href 中包含德语字符?

ruby-on-rails - 在 Rails 中同步语言环境 yml 文件工具

cocoa - 使用 stringWithFormat : as a file path in cocoa

swift - 如何循环嵌套字典以返回字符串?

ios - 如何从 react native 页面快速打开现有的ViewController?

arrays - 以编程方式为 DSP Split Complex 复数创建存储阵列

string - 在scala中使用本地化对字符串列表进行排序

ios - NSString 字符串格式 : Padding 2 strings with unknown length

objective-c - 为什么 %@ 在 predicateWithFormat 和 stringWithFormat 之间表现不同?