我需要本地化以下所有可能性:
1年,
2年,然后...(不限数目)。

1个月,
2个月,然后打开...(最多为任意数量)。

在各种语言中,“年份”一词根据其前面的数字而变化。如法语:

22年= 22年

23年= 23年

因此,我不能在NSLocalizedString模式中使用字符串替换,例如:[NSString stringWithFormat:@“MY_KEY_NAME_%lu _%@”,amount,unitOfMeasure];
(因为度量单位取决于金额)。

我一直在看NSDateFormatter,但没有看到任何可以做的占位符:“#年”或“#月”。

你们知道一种简单的本地化方法吗?

提前致谢,
亚历克斯

最佳答案

您可以使用NSDateComponentsFormatter进行此操作,经过一些研究后,这里的显然不是而不是越野车,并且至少可以使用几种不同的语言来正确处理。

您可以使用以下方式创建格式化程序

let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = NSCalendarUnit.Year
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Full

然后进行简单的测试,例如
let now = NSDate()
for yearsAhead in (1...30) {
    let newDate = lendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.Year, value: yearsAhead, toDate: now, options: NSCalendarOptions.MatchNextTime)
    let duration = formatter.stringFromDate(now, toDate: newDate!)
    print("\(newDate): \(duration)")
}

将设备语言设置为法语时,对于所有> 1的值,都使用“ans”,这显然是正确的:
2017-02-24 17:39:53 +0000: 1 an
2018-02-24 17:39:53 +0000: 2 ans
2019-02-24 17:39:53 +0000: 3 ans
2020-02-24 17:39:53 +0000: 4 ans
2021-02-24 17:39:53 +0000: 5 ans
2022-02-24 17:39:53 +0000: 6 ans
....

如您所指出的,将设备语言设置为俄语时,它对不同的数字使用不同的复数,并使用西里尔字母:
2017-02-24 17:41:29 +0000: 1 год
2018-02-24 17:38:38 +0000: 2 года
2019-02-24 17:38:38 +0000: 3 года
2020-02-24 17:38:38 +0000: 4 года
2021-02-24 17:38:38 +0000: 5 лет
2022-02-24 17:38:38 +0000: 6 лет
....

关于ios - Objective-C如何定位持续时间:“1年”,“2年”,“3年”等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35584306/

10-12 02:41