mirror of https://github.com/iSoron/uhabits.git
parent
d463bb55d7
commit
fe4139e268
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.isoron.platform.time
|
||||||
|
|
||||||
|
import platform.Foundation.*
|
||||||
|
|
||||||
|
fun LocalDate.toNsDate(): NSDate {
|
||||||
|
val calendar = NSCalendar.calendarWithIdentifier(NSCalendarIdentifierGregorian)!!
|
||||||
|
val dc = NSDateComponents()
|
||||||
|
dc.year = year.toLong()
|
||||||
|
dc.month = month.toLong()
|
||||||
|
dc.day = day.toLong()
|
||||||
|
dc.hour = 13
|
||||||
|
dc.minute = 0
|
||||||
|
return calendar.dateFromComponents(dc)!!
|
||||||
|
}
|
||||||
|
|
||||||
|
class IosLocalDateFormatter(val locale: String) : LocalDateFormatter {
|
||||||
|
|
||||||
|
constructor() : this(NSLocale.preferredLanguages[0] as String)
|
||||||
|
|
||||||
|
private val fmt = NSDateFormatter()
|
||||||
|
|
||||||
|
init {
|
||||||
|
fmt.setLocale(NSLocale.localeWithLocaleIdentifier(locale))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun shortWeekdayName(date: LocalDate): String {
|
||||||
|
fmt.dateFormat = "EEE"
|
||||||
|
return fmt.stringFromDate(date.toNsDate())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun shortMonthName(date: LocalDate): String {
|
||||||
|
fmt.dateFormat = "MMM"
|
||||||
|
return fmt.stringFromDate(date.toNsDate())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("UNCHECKED_CAST")
|
||||||
|
|
||||||
|
package org.isoron.uhabits
|
||||||
|
|
||||||
|
import org.isoron.platform.io.*
|
||||||
|
import org.isoron.uhabits.i18n.*
|
||||||
|
import platform.Foundation.*
|
||||||
|
|
||||||
|
class IosLocaleHelper(private val log: Log) : LocaleHelper {
|
||||||
|
override fun getStringsForCurrentLocale(): Strings {
|
||||||
|
val pref = NSLocale.preferredLanguages as List<String>
|
||||||
|
val lang = if (pref.isEmpty()) "en-US" else pref[0]
|
||||||
|
log.info("IosLocaleHelper", lang)
|
||||||
|
return when {
|
||||||
|
lang.startsWith("ar") -> StringsArabic()
|
||||||
|
lang.startsWith("ca") -> StringsCatalan()
|
||||||
|
lang.startsWith("cs") -> StringsCzech()
|
||||||
|
lang.startsWith("da") -> StringsDanish()
|
||||||
|
lang.startsWith("de") -> StringsGerman()
|
||||||
|
lang.startsWith("el") -> StringsGreek()
|
||||||
|
lang.startsWith("es") -> StringsSpanish()
|
||||||
|
lang.startsWith("fi") -> StringsFinnish()
|
||||||
|
lang.startsWith("fr") -> StringsFrench()
|
||||||
|
lang.startsWith("he") -> StringsHebrew()
|
||||||
|
lang.startsWith("hi") -> StringsHindi()
|
||||||
|
lang.startsWith("hr") -> StringsCroatian()
|
||||||
|
lang.startsWith("hu") -> StringsHungarian()
|
||||||
|
lang.startsWith("id") -> StringsIndonesian()
|
||||||
|
lang.startsWith("it") -> StringsItalian()
|
||||||
|
lang.startsWith("ja") -> StringsJapanese()
|
||||||
|
lang.startsWith("ko") -> StringsKorean()
|
||||||
|
lang.startsWith("nb") -> StringsNorwegian()
|
||||||
|
lang.startsWith("nl") -> StringsDutch()
|
||||||
|
lang.startsWith("pl") -> StringsPolish()
|
||||||
|
lang.startsWith("pt-BR") -> StringsPortugueseBR()
|
||||||
|
lang.startsWith("pt") -> StringsPortuguesePT()
|
||||||
|
lang.startsWith("ro") -> StringsRomanian()
|
||||||
|
lang.startsWith("ru") -> StringsRussian()
|
||||||
|
lang.startsWith("sk") -> StringsSlovak()
|
||||||
|
lang.startsWith("sv") -> StringsSwedish()
|
||||||
|
lang.startsWith("tr") -> StringsTurkish()
|
||||||
|
lang.startsWith("vi") -> StringsVietnamese()
|
||||||
|
lang.startsWith("zh-Hans") -> StringsChineseCN()
|
||||||
|
lang.startsWith("zh-Hant") -> StringsChineseTW()
|
||||||
|
else -> Strings()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Loop Habit Tracker.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
extension LocalDate {
|
|
||||||
var iosDate : Date {
|
|
||||||
let calendar = Calendar(identifier: .gregorian)
|
|
||||||
var dc = DateComponents()
|
|
||||||
dc.year = Int(self.year)
|
|
||||||
dc.month = Int(self.month)
|
|
||||||
dc.day = Int(self.day)
|
|
||||||
dc.hour = 13
|
|
||||||
dc.minute = 0
|
|
||||||
return calendar.date(from: dc)!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Date {
|
|
||||||
var localDate : LocalDate {
|
|
||||||
let calendar = Calendar(identifier: .gregorian)
|
|
||||||
return LocalDate(year: Int32(calendar.component(.year, from: self)),
|
|
||||||
month: Int32(calendar.component(.month, from: self)),
|
|
||||||
day: Int32(calendar.component(.day, from: self)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class IosLocalDateFormatter : NSObject, LocalDateFormatter {
|
|
||||||
let fmt = DateFormatter()
|
|
||||||
|
|
||||||
override init() {
|
|
||||||
fmt.locale = Locale(identifier: NSLocale.preferredLanguages.first!)
|
|
||||||
}
|
|
||||||
|
|
||||||
func shortMonthName(date: LocalDate) -> String {
|
|
||||||
fmt.dateFormat = "MMM"
|
|
||||||
return fmt.string(from: date.iosDate)
|
|
||||||
}
|
|
||||||
|
|
||||||
func shortWeekdayName(date: LocalDate) -> String {
|
|
||||||
fmt.dateFormat = "EEE"
|
|
||||||
return fmt.string(from: date.iosDate)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Loop Habit Tracker.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
class IosLocaleHelper : NSObject, LocaleHelper {
|
|
||||||
var preferredLanguages: [String]
|
|
||||||
|
|
||||||
init(_ preferredLanguages: [String]) {
|
|
||||||
self.preferredLanguages = preferredLanguages
|
|
||||||
}
|
|
||||||
|
|
||||||
func getStringsForCurrentLocale() -> Strings {
|
|
||||||
let lang = preferredLanguages.first ?? "en-US"
|
|
||||||
StandardLog().debug(tag: "IosLocale", msg: lang)
|
|
||||||
if lang.hasPrefix("ar") { return StringsArabic() }
|
|
||||||
if lang.hasPrefix("fr") { return StringsFrench() }
|
|
||||||
if lang.hasPrefix("es") { return StringsSpanish() }
|
|
||||||
if lang.hasPrefix("pt-BR") { return StringsPortugueseBR() }
|
|
||||||
if lang.hasPrefix("pt") { return StringsPortuguesePT() }
|
|
||||||
if lang.hasPrefix("it") { return StringsItalian() }
|
|
||||||
if lang.hasPrefix("de") { return StringsGerman() }
|
|
||||||
if lang.hasPrefix("zh-Hans") { return StringsChineseCN() }
|
|
||||||
if lang.hasPrefix("zh-Hant") { return StringsChineseTW() }
|
|
||||||
if lang.hasPrefix("nl") { return StringsDutch() }
|
|
||||||
if lang.hasPrefix("ja") { return StringsJapanese() }
|
|
||||||
if lang.hasPrefix("ko") { return StringsKorean() }
|
|
||||||
if lang.hasPrefix("vi") { return StringsVietnamese() }
|
|
||||||
if lang.hasPrefix("ru") { return StringsRussian() }
|
|
||||||
if lang.hasPrefix("sv") { return StringsSwedish() }
|
|
||||||
if lang.hasPrefix("da") { return StringsDanish() }
|
|
||||||
if lang.hasPrefix("fi") { return StringsFinnish() }
|
|
||||||
if lang.hasPrefix("nb") { return StringsNorwegian() }
|
|
||||||
if lang.hasPrefix("tr") { return StringsTurkish() }
|
|
||||||
if lang.hasPrefix("el") { return StringsGreek() }
|
|
||||||
if lang.hasPrefix("id") { return StringsIndonesian() }
|
|
||||||
if lang.hasPrefix("hi") { return StringsHindi() }
|
|
||||||
if lang.hasPrefix("hu") { return StringsHungarian() }
|
|
||||||
if lang.hasPrefix("pl") { return StringsPolish() }
|
|
||||||
if lang.hasPrefix("cs") { return StringsCzech() }
|
|
||||||
if lang.hasPrefix("sk") { return StringsSlovak() }
|
|
||||||
if lang.hasPrefix("ca") { return StringsCatalan() }
|
|
||||||
if lang.hasPrefix("ro") { return StringsRomanian() }
|
|
||||||
if lang.hasPrefix("hr") { return StringsCroatian() }
|
|
||||||
if lang.hasPrefix("he") { return StringsHebrew() }
|
|
||||||
return Strings()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Loop Habit Tracker.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import XCTest
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
@testable import uhabits
|
|
||||||
|
|
||||||
class IosDateFormatterTest : XCTestCase {
|
|
||||||
func testShortMonthName() {
|
|
||||||
let fmt = IosLocalDateFormatter()
|
|
||||||
let d1 = LocalDate(year: 2019, month: 3, day: 25)
|
|
||||||
let d2 = LocalDate(year: 2019, month: 4, day: 4)
|
|
||||||
let d3 = LocalDate(year: 2019, month: 5, day: 12)
|
|
||||||
XCTAssertEqual(fmt.shortWeekdayName(date: d1), "Mon")
|
|
||||||
XCTAssertEqual(fmt.shortWeekdayName(date: d2), "Thu")
|
|
||||||
XCTAssertEqual(fmt.shortWeekdayName(date: d3), "Sun")
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue