@MwcsMacが彼の答えで指摘するように、これを解決する鍵はFormatter
です(一度NSFormatter
として知られている)、特に.spellOut
に.numberStyle
を設定することもできます。
これは現在のロケール(したがって言語)を選択しますが、英語よりも多くの言語で同じ「半分」「四半期」という用語を使用しないことが問題です。たとえば、ドイツ語10:30は "ハーフエルフ"、文字通り "半分(11)"です。 は、ロケールが英語/アメリカンであることを前提としていること
コードの記述は本当に悪い習慣あり、それはそれらの領域外で提供されている場合は、おそらくアプリが拒否されますので、実際に何ができる最良のものは、形式「10: 30 "を" ten thirty "、" zehndreißig "とする。 @MwcsMacへの謝罪と
コード:
import Foundation
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minute = calendar.component(.minute, from: date)
func spell(_ number: Int, _ localeID: String) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
// Specify the locale or you will inherit the current default locale
formatter.locale = Locale(identifier: localeID)
if let s = formatter.string(from: NSNumber(value: number)) {
// AVOID forced unwrapping at all times!
return s
} else {
return "<Invalid>" // or make return optional and return `nil`
}
}
spell(hour, "EN") + " " + spell(minute, "EN") // "nineteen thirty-three"
spell(hour, "FR") + " " + spell(minute, "FR") // ""dix-neuf trente-trois"
spell(hour, "AR") + " " + spell(minute, "AR") // "تسعة عشر ثلاثة و ثلاثون"
はフランスのシステム上で何が起こるのでしょうか?アラビア語のシステムでは? – matt
@matt –
どこにいらっしゃいましたか? ** [何を試しましたか?](http://whathaveyoutried.com/)** – holex