From c4e4d9d04e0676511dff838dd696faad28ab9d92 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 01:53:50 -0500 Subject: [PATCH 01/34] Don't use timezoneID, instead use timezone(). --- Clocker/Panel/Notes Popover/NotesPopover.swift | 4 ++-- Clocker/Preferences/General/PreferencesDataSource.swift | 2 +- Clocker/Preferences/General/PreferencesViewController.swift | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Clocker/Panel/Notes Popover/NotesPopover.swift b/Clocker/Panel/Notes Popover/NotesPopover.swift index 4ba1af1..1fad105 100644 --- a/Clocker/Panel/Notes Popover/NotesPopover.swift +++ b/Clocker/Panel/Notes Popover/NotesPopover.swift @@ -150,7 +150,7 @@ class NotesPopover: NSViewController { } private func getCurrentTimezoneDate(completionHandler: @escaping (_ response: Date?) -> Void) { - guard let timezoneID = dataObject?.timezoneID else { + guard let timezoneID = dataObject?.timezone() else { assertionFailure("Unable to retrieve timezoneID from the model") completionHandler(nil) return @@ -353,7 +353,7 @@ class NotesPopover: NSViewController { let alertIndex = alertPopupButton.indexOfSelectedItem if eventCenter.createReminder(with: model.customLabel!, - timezone: model.timezoneID!, + timezone: model.timezone(), alertIndex: alertIndex, reminderDate: reminderPicker.dateValue, additionalNotes: model.note) { diff --git a/Clocker/Preferences/General/PreferencesDataSource.swift b/Clocker/Preferences/General/PreferencesDataSource.swift index 97823cd..4b9978a 100644 --- a/Clocker/Preferences/General/PreferencesDataSource.swift +++ b/Clocker/Preferences/General/PreferencesDataSource.swift @@ -130,7 +130,7 @@ extension PreferencesDataSource: NSTableViewDataSource { return model.formattedAddress } - return model.timezoneID + return model.timezone() } func tableView(_: NSTableView, setObjectValue object: Any?, for _: NSTableColumn?, row: Int) { diff --git a/Clocker/Preferences/General/PreferencesViewController.swift b/Clocker/Preferences/General/PreferencesViewController.swift index 3cfff31..7dc6fea 100644 --- a/Clocker/Preferences/General/PreferencesViewController.swift +++ b/Clocker/Preferences/General/PreferencesViewController.swift @@ -633,7 +633,7 @@ extension PreferencesViewController { // Mark if the timezone is same as local timezone let timezoneObject = TimezoneData(with: newTimeZone) - timezoneObject.isSystemTimezone = timezoneObject.timezoneID == NSTimeZone.system.identifier + timezoneObject.isSystemTimezone = timezoneObject.timezone() == NSTimeZone.system.identifier let operationsObject = TimezoneDataOperations(with: timezoneObject) operationsObject.saveObject() @@ -950,8 +950,8 @@ extension PreferencesViewController { return false } - let timezone1 = NSTimeZone(name: object1.timezoneID!) - let timezone2 = NSTimeZone(name: object2.timezoneID!) + let timezone1 = NSTimeZone(name: object1.timezone()) + let timezone2 = NSTimeZone(name: object2.timezone()) let difference1 = system.secondsFromGMT() - timezone1!.secondsFromGMT let difference2 = system.secondsFromGMT() - timezone2!.secondsFromGMT From 987f987e3fe6fe605e3e6ed5c88b170365da2105 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:05:34 -0500 Subject: [PATCH 02/34] DST alert changes. --- .../Data Layer/TimezoneDataOperations.swift | 26 +++++++++++++++++++ Clocker/Panel/UI/TimezoneCellView.swift | 2 +- Clocker/Panel/UI/TimezoneDataSource.swift | 13 ++++++++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift index 8059dfb..9c78c07 100644 --- a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift +++ b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift @@ -33,6 +33,32 @@ extension TimezoneDataOperations { return dateFormatter.string(from: newDate) } + func nextDaylightSavingsTransitionIfAvailable(with sliderValue: Int) -> String? { + let currentTimezone = TimeZone(identifier: dataObject.timezone()) + guard let nextDaylightSavingsTransition = currentTimezone?.nextDaylightSavingTimeTransition else { + return nil + } + + guard let newDate = TimezoneDataOperations.gregorianCalendar?.date(byAdding: .minute, + value: sliderValue, + to: Date(), + options: .matchFirst) else { + assertionFailure("Data was unexpectedly nil") + return nil + } + + let calendar = Calendar.autoupdatingCurrent + let numberOfDays = nextDaylightSavingsTransition.days(from: newDate, calendar: calendar) + + // We'd like to show upcoming DST changes within the 7 day range. + // Using 8 as a fail-safe as timezones behind CDT can sometimes be wrongly attributed + if numberOfDays > 8 || numberOfDays <= 0 { + return nil + } + + return "Daylight Savings transition will occur in \(numberOfDays) days!" + } + private func checkForUpcomingEvents() -> (String, String)? { if DataStore.shared().shouldDisplay(.showMeetingInMenubar) { let filteredDates = EventCenter.sharedCenter().eventsForDate diff --git a/Clocker/Panel/UI/TimezoneCellView.swift b/Clocker/Panel/UI/TimezoneCellView.swift index 96013b4..92d2245 100644 --- a/Clocker/Panel/UI/TimezoneCellView.swift +++ b/Clocker/Panel/UI/TimezoneCellView.swift @@ -149,7 +149,7 @@ class TimezoneCellView: NSTableCellView { let timeWidth = timeString.size(withAttributes: [NSAttributedString.Key.font: customTimeFont]).width for constraint in time.constraints { - constraint.constant = constraint.identifier == "height" ? timeHeight : timeWidth + constraint.constant = constraint.identifier == "height" ? timeHeight : timeWidth } } diff --git a/Clocker/Panel/UI/TimezoneDataSource.swift b/Clocker/Panel/UI/TimezoneDataSource.swift index 4fb12dc..0c3e37c 100644 --- a/Clocker/Panel/UI/TimezoneDataSource.swift +++ b/Clocker/Panel/UI/TimezoneDataSource.swift @@ -58,11 +58,17 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { cellView.rowNumber = row cellView.customName.stringValue = currentModel.formattedTimezoneLabel() cellView.time.stringValue = operation.time(with: sliderValue) - cellView.noteLabel.stringValue = currentModel.note ?? CLEmptyString cellView.noteLabel.toolTip = currentModel.note ?? CLEmptyString cellView.currentLocationIndicator.isHidden = !currentModel.isSystemTimezone cellView.time.setAccessibilityIdentifier("ActualTime") cellView.relativeDate.setAccessibilityIdentifier("RelativeDate") + if let note = currentModel.note, !note.isEmpty { + cellView.noteLabel.stringValue = note + } else if let value = operation.nextDaylightSavingsTransitionIfAvailable(with: sliderValue) { + cellView.noteLabel.stringValue = value + } else { + cellView.noteLabel.stringValue = CLEmptyString + } cellView.layout(with: currentModel) cellView.setAccessibilityIdentifier(currentModel.formattedTimezoneLabel()) @@ -78,6 +84,7 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { if let userFontSize = DataStore.shared().retrieve(key: CLUserFontSizePreference) as? NSNumber, timezones.count > row, let relativeDisplay = DataStore.shared().retrieve(key: CLRelativeDateKey) as? NSNumber { let model = timezones[row] + let operation = TimezoneDataOperations(with: model) let shouldShowSunrise = DataStore.shared().shouldDisplay(.sunrise) var rowHeight: Int = userFontSize == 4 ? 60 : 65 @@ -91,7 +98,9 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { } if let note = model.note, !note.isEmpty { - rowHeight += userFontSize.intValue + 25 + rowHeight += userFontSize.intValue + 15 + } else if operation.nextDaylightSavingsTransitionIfAvailable(with: sliderValue) != nil { + rowHeight += userFontSize.intValue + 15 } if model.isSystemTimezone { From 267d1a5bdbb140b5eb481a730590c102b8777839 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:06:06 -0500 Subject: [PATCH 03/34] Height adjustments. --- Clocker/Panel/ParentPanelController.swift | 24 +++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index 82d4709..5054e9e 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -81,10 +81,11 @@ class ParentPanelController: NSWindowController { @IBOutlet var sliderDatePicker: NSDatePicker! - @IBOutlet var modernSlider: NSCollectionView! - @IBOutlet var roundedDateView: NSView! + // Modern Slider + @IBOutlet var modernSlider: NSCollectionView! + var defaultPreferences: [Data] { return DataStore.shared().timezones() } @@ -168,7 +169,7 @@ class ParentPanelController: NSWindowController { object: nil) if #available(OSX 11.0, *) { - mainTableView.style = .fullWidth +// mainTableView.style = .fullWidth } if modernSlider != nil { @@ -383,6 +384,8 @@ class ParentPanelController: NSWindowController { newHeight = userFontSize == 4 ? 68.0 : 68.0 if let note = object?.note, note.isEmpty == false { newHeight += 20 + } else if let obj = object, TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil { + newHeight += 20 } } @@ -390,7 +393,7 @@ class ParentPanelController: NSWindowController { // Set it to 90 expicity in case the row height is calculated be higher. newHeight = 88.0 - if let note = object?.note, note.isEmpty { + if let note = object?.note, note.isEmpty, let obj = object, TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) == nil { newHeight -= 20.0 } } @@ -560,6 +563,13 @@ class ParentPanelController: NSWindowController { cellView.relativeDate.stringValue = dataOperation.date(with: futureSliderValue, displayType: .panelDisplay) cellView.currentLocationIndicator.isHidden = !model.isSystemTimezone cellView.sunriseImage.image = model.isSunriseOrSunset ? Themer.shared().sunriseImage() : Themer.shared().sunsetImage() + if let note = model.note, !note.isEmpty { + cellView.noteLabel.stringValue = note + } else if let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) { + cellView.noteLabel.stringValue = value + } else { + cellView.noteLabel.stringValue = CLEmptyString + } cellView.layout(with: model) updateDatePicker() } @@ -1018,15 +1028,13 @@ extension ParentPanelController: NSSharingServicePickerDelegate { } extension ParentPanelController: NSCollectionViewDataSource, NSCollectionViewDelegate { - static let markerUserIdentifier = "HourMarkerViewItem" - func collectionView(_: NSCollectionView, numberOfItemsInSection _: Int) -> Int { return 24 } func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { - let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(ParentPanelController.markerUserIdentifier), for: indexPath) as! HourMarkerViewItem - item.setup(with: indexPath) + let item = collectionView.makeItem(withIdentifier: HourMarkerViewItem.reuseIdentifier, for: indexPath) as! HourMarkerViewItem + item.setup(with: indexPath.item) return item } From 8563c790fda28ab71dadf941b66d0af69e3162e7 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:06:26 -0500 Subject: [PATCH 04/34] Playing! --- Clocker/Panel/UI/HourMarkerViewItem.swift | 31 +++++++++++++++++++---- Clocker/Panel/UI/HourMarkerViewItem.xib | 4 +-- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Clocker/Panel/UI/HourMarkerViewItem.swift b/Clocker/Panel/UI/HourMarkerViewItem.swift index 8e8df43..bd60c52 100644 --- a/Clocker/Panel/UI/HourMarkerViewItem.swift +++ b/Clocker/Panel/UI/HourMarkerViewItem.swift @@ -3,13 +3,34 @@ import Cocoa class HourMarkerViewItem: NSCollectionViewItem { + static let reuseIdentifier = NSUserInterfaceItemIdentifier("HourMarkerViewItem") + @IBOutlet var hourLabel: NSTextField! - func setup(with indexPath: IndexPath) { - hourLabel.stringValue = "\(indexPath.item):00" - if indexPath.item == 2 { - highlightState = .forSelection - isSelected = true + func setup(with hour: Int) { + var dateComponents = DateComponents() + dateComponents.hour = hour + + if let newDate = Calendar.autoupdatingCurrent.date(byAdding: dateComponents, to: Date().nextHour) { + let dateFormatter = DateFormatterManager.dateFormatterWithFormat(with: .none, + format: "HH:mm", + timezoneIdentifier: TimeZone.current.identifier, + locale: Locale.autoupdatingCurrent) + + hourLabel.stringValue = dateFormatter.string(from: newDate) } } + + override var acceptsFirstResponder: Bool { + return false + } +} + +extension Date { + public var nextHour: Date { + let calendar = Calendar.current + let minutes = calendar.component(.minute, from: self) + let components = DateComponents(hour: 1, minute: -minutes) + return calendar.date(byAdding: components, to: self) ?? self + } } diff --git a/Clocker/Panel/UI/HourMarkerViewItem.xib b/Clocker/Panel/UI/HourMarkerViewItem.xib index 2c1f173..0944c07 100644 --- a/Clocker/Panel/UI/HourMarkerViewItem.xib +++ b/Clocker/Panel/UI/HourMarkerViewItem.xib @@ -1,8 +1,8 @@ - + - + From b3d8988f9f799fc501a7e1aac886c457a08fae69 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:06:32 -0500 Subject: [PATCH 05/34] Spacing! --- Clocker/Overall App/Themer.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Clocker/Overall App/Themer.swift b/Clocker/Overall App/Themer.swift index 3d8e639..66b2c27 100644 --- a/Clocker/Overall App/Themer.swift +++ b/Clocker/Overall App/Themer.swift @@ -187,8 +187,8 @@ extension Themer { return themeIndex == .light - ? NSImage(named: NSImage.Name("Settings"))! - : NSImage(named: NSImage.Name("Settings-White"))! + ? NSImage(named: NSImage.Name("Settings"))! + : NSImage(named: NSImage.Name("Settings-White"))! } func pinImage() -> NSImage { From 27a4f6f92ae2ec44ac48f4b8976dfbb39eec4bec Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:06:54 -0500 Subject: [PATCH 06/34] Roll back 11.0 comments. --- Clocker/Panel/ParentPanelController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index 5054e9e..7b2365d 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -169,7 +169,7 @@ class ParentPanelController: NSWindowController { object: nil) if #available(OSX 11.0, *) { -// mainTableView.style = .fullWidth + mainTableView.style = .fullWidth } if modernSlider != nil { From 66ad54442b312d76e05221f5c1157ca969ee770e Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:07:04 -0500 Subject: [PATCH 07/34] Hide modern slider. --- Clocker/Clocker/en.lproj/Panel.xib | 47 +++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Clocker/Clocker/en.lproj/Panel.xib b/Clocker/Clocker/en.lproj/Panel.xib index 8528ba6..6a6c035 100755 --- a/Clocker/Clocker/en.lproj/Panel.xib +++ b/Clocker/Clocker/en.lproj/Panel.xib @@ -16,6 +16,7 @@ + @@ -41,7 +42,7 @@ - + @@ -534,6 +535,48 @@ + @@ -551,6 +594,7 @@ + @@ -558,6 +602,7 @@ + From 966add5e67b3c6f7677cbc0bbe9066165e8f68c8 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:32:08 -0500 Subject: [PATCH 08/34] Localization. --- Clocker/Panel/Data Layer/TimezoneDataOperations.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift index 9c78c07..aa3fe05 100644 --- a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift +++ b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift @@ -52,11 +52,15 @@ extension TimezoneDataOperations { // We'd like to show upcoming DST changes within the 7 day range. // Using 8 as a fail-safe as timezones behind CDT can sometimes be wrongly attributed - if numberOfDays > 8 || numberOfDays <= 0 { + if numberOfDays > 8 || numberOfDays < 0 { return nil } - return "Daylight Savings transition will occur in \(numberOfDays) days!" + let suffix = numberOfDays == 1 ? "day" : "days" + return numberOfDays == 0 ? + NSLocalizedString("Daylights Saving transition will occur in < 24 hours", + comment: "Daylights Saving transition will occur in < 24 hours") : + "Daylight Savings transition will occur in \(numberOfDays) \(suffix)!" } private func checkForUpcomingEvents() -> (String, String)? { From 7a66d6285507c0f4b86251dc39d675f3d9f26a7d Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:32:22 -0500 Subject: [PATCH 09/34] Update German localization. --- Clocker/Clocker/de.lproj/Localizable.strings | 452 ++++++------------- 1 file changed, 139 insertions(+), 313 deletions(-) diff --git a/Clocker/Clocker/de.lproj/Localizable.strings b/Clocker/Clocker/de.lproj/Localizable.strings index f781fd0..d2c40cc 100644 --- a/Clocker/Clocker/de.lproj/Localizable.strings +++ b/Clocker/Clocker/de.lproj/Localizable.strings @@ -1,332 +1,158 @@ -/* (No Comment) */ -"About Tab" = "Über Clocker"; +/* + Localizable.strings + Clocker -"CFBundleDisplayName" = "Clocker"; + Created by Abhishek Banthia on 3/27/16. -/* Button to add a location */ -"Add Button Title" = "Hinzufügen"; +*/ -/* (No Comment) */ +"CFBundleDisplayName" = "Clocker"; +"Thank you for helping make Clocker even better!" = "Danke, dass du dabei geholfen hast, Clocker noch besser zu machen!"; +"iRateMessageTitle" = "%@ bewerten"; +"iRateAppMessage" = "Wenn dir %@ gefällt, dann bewerte uns doch im App Store. Das dauert kaum eine Minute und hilft uns sehr. Vielen Dank für deine Unterstützung!"; +"iRateGameMessage" = "Wenn du Spaß an %@ hast, dann bewerte uns doch im App Store. Das dauert kaum eine Minute und hilft uns sehr. Vielen Dank, für deine Unterstützung!"; +"iRateCancelButton" = "Nein, danke"; +"iRateRateButton" = "Jetzt bewerten"; +"iRateRemindButton" = "Später erinnern"; +"iRateUpdateMessage" = "Jetzt aktualisieren?"; +"ClockerVersion" = "Version %@"; +"CLFeedbackAlertTitle" = "Danke, dass Du hilfst Clocker noch besser zu machen!"; "app-name" = "Clocker"; - -/* (No Comment) */ -"Appearance Tab" = "Darstellungen"; - -/* Button title for going back to the previous screen */ -"Back" = "Zurück"; - -/* Calendar Permission Title */ +"start-at-login" = "Bei der Anmeldung starten"; +"setup-steps" = "In nur drei Schritten ist Clocker fertig eingerichtet"; +"Permissions-Header" = "Berechtigungen"; +"See your next Calendar event here." = "Hier Deinen nächsten Kalendereintrag anzeigen."; +"Click here to start." = "Hier klicken, um zu starten."; +"Reminders Access" = "Erinnerungen-Zugriff"; "Calendar Access" = "Kalender-Zugriff"; - -/* Title for Calendar access label */ -"Calendar Access Title" = "Kalender-Zugriff"; - -/* Calendar Detail Text */ -"Calendar Detail" = "Die nächsten Termine Ihrer persönlichen und geteilten Kalender können in der Menüleiste und im Panel angezeigt werden."; - -/* (No Comment) */ +"Permissions" = "Berechtigungen"; +"Calendar Detail" = "Anstehende Termine aus Deinem persönlichen und geteilten Kalendern können in der Menüleiste und im Fenster angezeigt werden."; +"Reminders Detail" = "Erinnerungen in der Zeitzone Deiner Wahl festlegen. Deine Erinnerungen werden in der Standard-Erinnerungs-App gespeichert."; +"Privacy Text" = "Du kannst das später im Bereich Datenschutz in den Systemeinstellungen ändern."; +"Granted Button Text" = "Gewährt"; +"Denied Button Text" = "Verweigert"; +"Grant Button Text" = "Gewähren"; + +// Welcome Onboarding +"It only takes 3 steps to setup Clocker." = "In nur drei Schritten ist Clocker fertig eingerichtet."; +"Get Started" = "Erste Schritte"; + +// Tab Item Titles +"Preferences Tab" = "Einstellungen"; +"Appearance Tab" = "Darstellung"; "Calendar Tab" = "Kalender"; - -/* (No Comment) */ -"characters" = "characters"; - -/* (No Comment) */ -"CLFeedbackAlertTitle" = "Vielen Dank, dass Sie Clocker noch besser machen!"; - -/* Button Title for no Calendar access */ -"Click here to start." = "Klicken Sie hier, um zu starten."; - -/* (No Comment) */ -"Clocker is more useful when it can display events from your calendars." = "Clocker ist nützlicher, wenn es Ereignisse von Ihren Kalender anzeigen kann."; - -/* (No Comment) */ -"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "Clocker ist nützlicher, wenn es Ereignisse von Ihren Kalender anzeigen kann. Sie können diese Einstellung in Systemeinstellungen › Sicherheit und Privatsphäre › Privatsphäre ändern."; - -/* (No Comment) */ -"ClockerVersion" = "Version %@"; - -/* Button to close the panel */ +"About Tab" = "Über"; +"Permissions Tab" = "Berechtigungen"; + +// General Preferences Screen +"Start at Login" = "Clocker bei der Anmeldung starten"; +"Sort by Time Difference" = "Nach Zeitdifferenz sortieren"; +"Sort by Name" = "Nach Namen sortieren"; +"Sort by Label" = "Nach Bezeichnung sortieren"; +"Search Field Placeholder" = "Gebe eine Stadt, ein Bundesland oder Land ein"; +"No Timezone Selected" = "Bitte wählen Sie eine Zeitzone!"; +"Max Timezones Selected" = "Es werden maximal 100 Zeitzonen unterstützt!"; +"Max Search Characters" = "Es sind nur 50 Zeichen erlaubt!"; +"Add Button Title" = "Hinzufügen"; "Close Button Title" = "Schließen"; -/* (No Comment) */ -"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Kontaktfelder sind optional! Ihre Kontaktinformationen läßt uns Sie kontaktieren, falls wir weitere Informationen benötigen oder helfen können!"; +// Onboarding +"Open Clocker At Login" = "Clocker bei der Anmeldung starten"; +"Launch Clocker" = "Clocker starten"; -/* (No Comment) */ -"Contact Information (Optional)" = "Kontaktinformationen (optional)"; +// Welcome Onboarding +"It only takes 3 steps to set up Clocker." = "In nur drei Schritten ist Clocker fertig eingerichtet."; +"Get Started" = "Erste Schritte"; -/* Continue Button Title */ +// Permissions +"Calendar Access Title" = "Kalender-Zugriff"; +"Reminders Access Title" = "Zugriff auf Erinnerungen"; +"Later Config Description" = "Dies kann später in den Clocker Einstellungen konfiguriert werden."; +"Back" = "Zurück"; "Continue" = "Fortfahren"; - -/* (No Comment) */ -"Day Display Options" = "Tagesanzeige Optionen"; - -/* (No Comment) */ +"Clocker is more useful when it can display events from your calendars." = "Clocker ist nützlicher, wenn es Ereignisse aus Deinem Kalendern anzeigen kann."; +"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "Clocker ist nützlicher, wenn es Ereignisse aus Deinem Kalendern anzeigen kann. Du kannst diese Einstellung in Systemeinstellungen › Sicherheit Privatsphäre › Privatsphäre ändern."; +"Launch Preferences" = "Einstellungen öffnen"; +"Grant Access" = "Zugriff erlauben"; +"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "Anstehende Termine aus Deinem persönlichen und geteilten Kalendern können in der Menüleiste und im Fenster angezeigt werden."; +"Granted" = "Gewährt"; "Denied" = "Abgelehnt"; - -/* Denied Button Text */ -"Denied Button Text" = "Abgelehnt"; - -/* (No Comment) */ -"Display the time in seconds" = "Zeit in Sekunden anzeigen"; - -/* Title asking users if they like the app */ -"Enjoy using Clocker" = "Gefällt Ihnen Clocker"; - -/* Review */ -"Enjoy using Clocker?" = "Gefällt Ihnen Clocker?"; - -/* (No Comment) */ -"Favourite a timezone to enable menubar display options." = "Favorisieren Sie eine Zeitzone, um die Menüleiste-Anzeigeoptionen zu aktivieren."; - -/* About View Screen */ -"Feedback is always welcome:" = "Feedback ist immer willkommen:"; - -/* (No Comment) */ -"Florida" = "Florida"; - -/* (No Comment) */ -"Future Slider Range" = "Zukünftige Slider-Bereich"; - -/* Title for Welcome View Controller's Continue Button */ -"Get Started" = "Jetzt Anfangen"; - -/* (No Comment) */ "Grant" = "Gewähren"; +"Unexpected" = "Unerwartet"; -/* (No Comment) */ -"Grant Access" = "Zugriff gewähren"; - -/* Grant Button Text */ -"Grant Button Text" = "Zulassen"; - -/* (No Comment) */ -"Granted" = "Zugelassen"; - -/* Granted Button Text */ -"Granted Button Text" = "Zugelassen"; - -/* (No Comment) */ -"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "Wenn der Besprechung Titel \"Meeting with Neel\" ist und die Kurzlänge auf fünf gesetzt ist, erscheint der Text in der Menüleiste als \"Meeti...\""; - -/* (No Comment) */ -"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "Wenn Sie uns helfen möchten, die App in Ihrer Sprache zu lokalisieren oder seltene app-bezogene Nachrichten erhalten wollen, geben Sie bitte Ihre E-Mail ein!"; - -/* (No Comment) */ -"Include Date" = "Datum Anzeigen"; - -/* (No Comment) */ -"Include Day" = "Tag Anzeigen"; - -/* (No Comment) */ -"Include Place Name" = "Ortsname Anzeigen"; - -/* (No Comment) */ -"iRateAppMessage" = "If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; - -/* (No Comment) */ -"iRateCancelButton" = "No, Thanks"; - -/* (No Comment) */ -"iRateGameMessage" = "If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; - -/* (No Comment) */ -"iRateMessageTitle" = "Rate %@"; - -/* (No Comment) */ -"iRateRateButton" = "Rate It Now"; - -/* (No Comment) */ -"iRateRemindButton" = "Remind Me Later"; - -/* (No Comment) */ -"iRateUpdateMessage" = "Update now?"; - -/* App Setup Description */ -"It only takes 3 steps to set up Clocker." = "Es sind nur 3 Schritte Clocker einzurichten."; - -/* Welcome Onboarding */ -"It only takes 3 steps to setup Clocker." = "Es sind nur 3 Schritte Clocker einzurichten."; - -/* (No Comment) */ +// Onboarding Search +"Quick Add Locations" = "Orte schnell hinzufügen"; +"More search options in Clocker Preferences." = "Weitere Suchoptionen in den Clocker Einstellungen."; +"Enter 3 or more characters for locations you'll like to add" = "Gebe 3 oder mehr Zeichen für den Orte ein, die Du hinzufügen möchtest"; + +// Start at Login +"Launch at Login" = "Bei der Anmelden starten"; +"This can be configured later in Clocker Preferences." = "Dies kann später in den Clocker Einstellungen konfiguriert werden."; +"Should Clocker open automatically on startup?" = "Soll Clocker beim Start automatisch geöffnet werden?"; + +// Final Onboarding Screen +"You're all set!" = "Du bist startklar!"; +"Thank you for the details." = "Vielen Dank für die Details."; +"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "Du wirst ein Uhr-Symbol in Ihrer Menüleiste sehen, wenn Du die App startest. Wenn Du ein Dock-Symbol sehen möchtest, gehe in die Einstellungen."; +"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "Wenn Du uns helfen möchtest die App in Deine Sprache zu übersetzen oder von Zeit zu Zeit Informationen zur App erhalten möchtest, gibt bitte hier Deine E-Mail ein!"; + +// Appearance Tab +"Panel Theme" = "Erscheinungsbild"; +"Favourite a timezone to enable menubar display options." = "Favorisiere eine Zeitzone, um diese in der Menüleiste zu zeigen."; +"Main Panel Options" = "Optionen für Programmfenster"; +"Time Format" = "Zeitformat"; +"Day Display Options" = "Anzeigeoptionen für den Tag"; +"Show Future Slider" = "\"Future Slider\" anzeigen"; +"Show Sunrise/Sunset" = "Sonnenaufgang/-untergang anzeigen"; +"Display the time in seconds" = "Zeit in Sekunden anzeigen"; "Larger Text" = "Größerer Text"; +"Future Slider Range" = "Bereich für den \"Future Slider\""; +"Include Date" = "Datum hinzufügen"; +"Include Day" = "Tag hinzufügen"; +"Include Place Name" = "Ortsname hinzufügen"; +"Menubar Display Options" = "Anzeigeoptionen für die Menüleiste"; +"Menubar Mode" = "Menüleisten-Modus"; +"Preview" = "Vorschau"; +"Miscellaneous" = "Verschiedenes"; + +// Empty View +"No places added" = "Keine Orte hinzugefügt"; + +// Panel +"No upcoming event." = "Kein anstehendes Ereignis."; +"You have no events scheduled for tomorrow." = "Du hast keine Kalendereinträge für morgen."; + +// Review +"Enjoy using Clocker?" = "Gefällt Dir Clocker?"; + +// App Feedback +"Tell us what you think!" = "Sag uns, was Du denkst!"; +"Contact Information (Optional)" = "Kontaktinformationen (optional)"; +"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Kontaktinformationen sind optional! Diese helfen uns jedoch Dich zu erreichen, falls wir weitere Informationen benötigen oder helfen können!"; -/* Describing we can change the options later in System Preferences */ -"Later Config Description" = "Diese können später in Systemeinstellungen konfiguriert werden."; - -/* Start at Login */ -"Launch at Login" = "Launch at Login"; - -/* (No Comment) */ -"Launch Clocker" = "Clocker Starten"; - -/* (No Comment) */ -"Launch Preferences" = "Launch Preferences"; - -/* (No Comment) */ -"Main Panel Options" = "Main Panel Options"; - -/* Max Character Count Allowed Error Message */ -"Max Search Characters" = "Only 50 characters allowed!"; - -/* Max Timezones Error Message */ -"Max Timezones Selected" = "Maximum 100 timezones allowed!"; - -/* (No Comment) */ -"Menubar Display Options" = "Menubar Display Options"; - -/* (No Comment) */ -"Menubar Mode" = "Menubar Mode"; - -/* (No Comment) */ -"More search options in Clocker Preferences." = "More search options in Clocker Preferences."; +// About View Screen +"Feedback is always welcome:" = "Feedback ist immer willkommen:"; -/* UI Tests */ +// Calendars View +"Upcoming Event View Options" = "Zukünftige Ereignisse zeigen"; +"Show Upcoming Event View" = "Anzeigeoptionen für zukünftige Ereignisse"; +"Show All Day Meetings" = "Ganztägige Ereignisse anzeigen"; +"Show Next Meeting Title in Menubar" = "Das nächste Ereignis in der Menüliste zeigen"; +"Truncate menubar text longer than" = "Text in der Menüleiste kürzen, der länger ist als"; +"characters" = "Zeichen"; +"Show events from" = "Zeige Ereignisse aus"; +"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "Wenn der Besprechungstitel \"Besprechung mit Neel\" ist und die Kürzungslänge auf 5 eingestellt wurde, dann erscheint der Text in der Menüleiste als \"Bespr...\""; + +// Notes Popover +"Reminder Set" = "Erinnerung gespeichert"; +"Successfully set." = "Erfolgreich gespeichert."; + +// Errors +"You're offline, maybe?" = "Bist Du eventuell offline?"; +"Try again, maybe?" = "Versuche es nochmal!"; +"The Internet connection appears to be offline." = "Scheinbar besteht keine Verbindung zum Internet."; + +// UI Tests "New Zealand" = "Neuseeland"; - -/* Subtitle for no places added */ -"No places added" = "No places added"; - -/* Message shown when the user taps on Add without selecting a timezone */ -"No Timezone Selected" = "Please select a timezone!"; - -/* Title when there's no upcoming event */ -"No upcoming event." = "No upcoming event."; - -/* Onboarding */ -"Open Clocker At Login" = "Open Clocker At Login"; - -/* Appearance Tab */ -"Panel Theme" = "Panel Theme"; - -/* Permissions Tab Titles */ -"Permissions" = "Permissions"; - -/* Title for Permissions screen */ -"Permissions Tab" = "Permissions"; - -/* (No Comment) */ -"Permissions-Header" = "Permissions"; - -/* Tab Item Titles */ -"Preferences Tab" = "Preferences"; - -/* Text explaining options can be changed in the future through System Preferences */ -"Privacy Text" = "You can change this later in the Privacy section of the System Preferences."; - -/* Onboarding Search */ -"Quick Add Locations" = "Quick Add Locations"; - -/* Notes Popover */ -"Reminder Set" = "Reminder Set"; - -/* Reminders Permission Title */ -"Reminders Access" = "Reminders Access"; - -/* Title for Reminders Access Label */ -"Reminders Access Title" = "Reminders Access"; - -/* Reminders Detail Text */ -"Reminders Detail" = "Set reminders in the timezone of the location of your choice. Your reminders are stored in the default Reminders app."; - -/* (No Comment) */ +"Florida" = "Florida"; "San Francisco" = "San Francisco"; - -/* Search Field Placeholder */ -"Search Field Placeholder" = "Enter a city, state or country name"; - -/* (No Comment) */ -"Enter 3 or more characters for locations you'll like to add" = "Enter 3 or more characters for locations you'll like to add"; - -/* Next Event Label for no Calendar access */ -"See your next Calendar event here." = "See your next Calendar event here."; - -/* (No Comment) */ -"setup-steps" = "It only takes 3 steps to set up Clocker"; - -/* (No Comment) */ -"Should Clocker open automatically on startup?" = "Should Clocker open automatically on startup?"; - -/* (No Comment) */ -"Show All Day Meetings" = "Show All Day Meetings"; - -/* (No Comment) */ -"Show events from" = "Show events from"; - -/* (No Comment) */ -"Show Future Slider" = "Show Future Slider"; - -/* (No Comment) */ -"Show Next Meeting Title in Menubar" = "Show Next Meeting Title in Menubar"; - -/* (No Comment) */ -"Show Sunrise/Sunset" = "Show Sunrise/Sunset"; - -/* (No Comment) */ -"Show Upcoming Event View" = "Show Upcoming Event View"; - -/* Start at Login */ -"Sort by Label" = "Sort by Label"; - -/* Start at Login */ -"Sort by Name" = "Sort by Name"; - -/* Start at Login */ -"Sort by Time Difference" = "Sort by Time Difference"; - -/* Start at Login */ -"Start at Login" = "Start Clocker at Login"; - -/* (No Comment) */ -"start-at-login" = "Start At Login"; - -/* (No Comment) */ -"Successfully set." = "Successfully set."; - -/* App Feedback */ -"Tell us what you think!" = "Tell us what you think!"; - -/* (No Comment) */ -"Thank you for helping make Clocker even better!" = "Thank you for helping make Clocker even better!"; - -/* (No Comment) */ -"Thank you for the details." = "Thank you for the details."; - -/* (No Comment) */ -"The Internet connection appears to be offline." = "The Internet connection appears to be offline."; - -/* (No Comment) */ -"This can be configured later in Clocker Preferences." = "This can be configured later in Clocker Preferences."; - -/* (No Comment) */ -"Time Format" = "Time Format"; - -/* (No Comment) */ -"Truncate menubar text longer than" = "Menüleisten Text kürzen länger als"; - -/* (No Comment) */ -"Try again, maybe?" = "Vielleicht erneut versuchen?"; - -/* (No Comment) */ -"Unexpected" = "Unerwartet"; - -/* Calendars View */ -"Upcoming Event View Options" = "Kommende Ereignis Anzeige Optionen"; - -/* (No Comment) */ -"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "Upcoming events from your personal and shared calendars can be shown in the menubar and the panel."; - -/* Title when there's no event scheduled for tomorrow */ -"You have no events scheduled for tomorrow." = "You have no events scheduled for tomorrow."; - -/* (No Comment) */ -"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences."; - -/* Final Onboarding Screen */ -"You're all set!" = "You're all set!"; - -/* Errors */ -"You're offline, maybe?" = "You're offline, maybe?"; - -"Preview" = "Preview"; - -"Miscellaneous" = "Miscellaneous"; From 69d2f3797a82522b5a3475e0bc28e83c04f00c7c Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:33:26 -0500 Subject: [PATCH 10/34] Add new strings + update DE translations. --- Clocker/Clocker/ca.lproj/Localizable.strings | 3 +++ Clocker/Clocker/de.lproj/Localizable.strings | 3 +++ Clocker/Clocker/en.lproj/Localizable.strings | 4 ++++ Clocker/Clocker/es.lproj/Localizable.strings | 3 +++ Clocker/Clocker/fr.lproj/Localizable.strings | 3 +++ Clocker/Clocker/hi.lproj/Localizable.strings | 3 +++ Clocker/Clocker/it.lproj/Localizable.strings | 3 +++ Clocker/Clocker/ja.lproj/Localizable.strings | 2 ++ Clocker/Clocker/ko.lproj/Localizable.strings | 3 +++ Clocker/Clocker/nl.lproj/Localizable.strings | 3 +++ Clocker/Clocker/ru.lproj/Localizable.strings | 3 +++ Clocker/Clocker/zh-Hans.lproj/Localizable.strings | 3 +++ 12 files changed, 36 insertions(+) diff --git a/Clocker/Clocker/ca.lproj/Localizable.strings b/Clocker/Clocker/ca.lproj/Localizable.strings index 79f22a8..48dbfd8 100644 --- a/Clocker/Clocker/ca.lproj/Localizable.strings +++ b/Clocker/Clocker/ca.lproj/Localizable.strings @@ -156,3 +156,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/de.lproj/Localizable.strings b/Clocker/Clocker/de.lproj/Localizable.strings index d2c40cc..1124da3 100644 --- a/Clocker/Clocker/de.lproj/Localizable.strings +++ b/Clocker/Clocker/de.lproj/Localizable.strings @@ -156,3 +156,6 @@ "New Zealand" = "Neuseeland"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/en.lproj/Localizable.strings b/Clocker/Clocker/en.lproj/Localizable.strings index 79f22a8..900bc89 100644 --- a/Clocker/Clocker/en.lproj/Localizable.strings +++ b/Clocker/Clocker/en.lproj/Localizable.strings @@ -156,3 +156,7 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; + diff --git a/Clocker/Clocker/es.lproj/Localizable.strings b/Clocker/Clocker/es.lproj/Localizable.strings index 79f22a8..48dbfd8 100644 --- a/Clocker/Clocker/es.lproj/Localizable.strings +++ b/Clocker/Clocker/es.lproj/Localizable.strings @@ -156,3 +156,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/fr.lproj/Localizable.strings b/Clocker/Clocker/fr.lproj/Localizable.strings index 79f22a8..48dbfd8 100644 --- a/Clocker/Clocker/fr.lproj/Localizable.strings +++ b/Clocker/Clocker/fr.lproj/Localizable.strings @@ -156,3 +156,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/hi.lproj/Localizable.strings b/Clocker/Clocker/hi.lproj/Localizable.strings index 27adc12..7dd021c 100644 --- a/Clocker/Clocker/hi.lproj/Localizable.strings +++ b/Clocker/Clocker/hi.lproj/Localizable.strings @@ -152,3 +152,6 @@ "New Zealand" = "न्यूज़ीलैंड"; "Florida" = "फ्लोरिडा"; "San Francisco" = "सान फ्रांसिस्को"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/it.lproj/Localizable.strings b/Clocker/Clocker/it.lproj/Localizable.strings index 5996d6e..b9a182e 100644 --- a/Clocker/Clocker/it.lproj/Localizable.strings +++ b/Clocker/Clocker/it.lproj/Localizable.strings @@ -157,3 +157,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/ja.lproj/Localizable.strings b/Clocker/Clocker/ja.lproj/Localizable.strings index c89196e..2ce2144 100644 --- a/Clocker/Clocker/ja.lproj/Localizable.strings +++ b/Clocker/Clocker/ja.lproj/Localizable.strings @@ -156,3 +156,5 @@ "Florida" = "Florida"; "San Francisco" = "San Francisco"; +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/ko.lproj/Localizable.strings b/Clocker/Clocker/ko.lproj/Localizable.strings index 6746fbf..2ce2144 100644 --- a/Clocker/Clocker/ko.lproj/Localizable.strings +++ b/Clocker/Clocker/ko.lproj/Localizable.strings @@ -155,3 +155,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/nl.lproj/Localizable.strings b/Clocker/Clocker/nl.lproj/Localizable.strings index 79f22a8..48dbfd8 100644 --- a/Clocker/Clocker/nl.lproj/Localizable.strings +++ b/Clocker/Clocker/nl.lproj/Localizable.strings @@ -156,3 +156,6 @@ "New Zealand" = "New Zealand"; "Florida" = "Florida"; "San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/ru.lproj/Localizable.strings b/Clocker/Clocker/ru.lproj/Localizable.strings index a1776b4..5686967 100644 --- a/Clocker/Clocker/ru.lproj/Localizable.strings +++ b/Clocker/Clocker/ru.lproj/Localizable.strings @@ -330,3 +330,6 @@ "Preview" = "Preview"; "Miscellaneous" = "Miscellaneous"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Clocker/zh-Hans.lproj/Localizable.strings b/Clocker/Clocker/zh-Hans.lproj/Localizable.strings index 43b7460..3510092 100644 --- a/Clocker/Clocker/zh-Hans.lproj/Localizable.strings +++ b/Clocker/Clocker/zh-Hans.lproj/Localizable.strings @@ -330,3 +330,6 @@ "Preview" = "Preview"; "Miscellaneous" = "Miscellaneous"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; From 98b1a2a5504dcea4bbab47db4c766403da45458c Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:35:09 -0500 Subject: [PATCH 11/34] Update Simplified Chinese translation. --- .../Clocker/zh-Hans.lproj/Localizable.strings | 466 ++++++------------ 1 file changed, 143 insertions(+), 323 deletions(-) diff --git a/Clocker/Clocker/zh-Hans.lproj/Localizable.strings b/Clocker/Clocker/zh-Hans.lproj/Localizable.strings index 3510092..e705d48 100644 --- a/Clocker/Clocker/zh-Hans.lproj/Localizable.strings +++ b/Clocker/Clocker/zh-Hans.lproj/Localizable.strings @@ -1,335 +1,155 @@ /* (No Comment) */ -"About Tab" = "About"; - -"CFBundleDisplayName" = "Clocker"; - -/* Button to add a location */ -"Add Button Title" = "Add"; - -/* (No Comment) */ +"CFBundleDisplayName" = "解锁器"; +"Thank you for helping make Clocker even better!" = "感谢您帮助 Clocker 做得更好!"; +"iRateMessageTitle" = "评价 %@"; +"iRateAppMessage" = "如果您喜欢使用 %@,能否请您抽出时间来对它进行评价?评价不会超过一分钟。感谢您的支持 !"; +"iRateGameMessage" = "如果您喜欢使用 %@,能否请您抽出时间来对它进行评价?评价不会超过一分钟。感谢您的支持 !"; +"iRateCancelButton" = "不用了,谢谢"; +"iRateRateButton" = "立即评分"; +"iRateRemindButton" = "稍后提醒我"; +"iRateUpdateMessage" = "现在更新?"; +"ClockerVersion" = "版本 %@"; +"CLFeedbackAlertTitle" = "感谢您帮助 Clocker 做得更好!"; "app-name" = "Clocker"; - -/* (No Comment) */ -"Appearance Tab" = "Appearance"; - -/* Button title for going back to the previous screen */ -"Back" = "Back"; - -/* Calendar Permission Title */ -"Calendar Access" = "Calendar Access"; - -/* Title for Calendar access label */ -"Calendar Access Title" = "Calendar Access"; - -/* Calendar Detail Text */ -"Calendar Detail" = "Upcoming events from your personal and shared calendars can be shown in the menubar and the panel."; - -/* (No Comment) */ -"Calendar Tab" = "Calendar"; - -/* (No Comment) */ -"characters" = "characters"; - -/* (No Comment) */ -"CLFeedbackAlertTitle" = "Thank you for helping make Clocker even better!"; - -/* Button Title for no Calendar access */ -"Click here to start." = "Click here to start."; - -/* (No Comment) */ -"Clocker is more useful when it can display events from your calendars." = "Clocker is more useful when it can display events from your calendars."; - -/* (No Comment) */ -"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy."; - -/* (No Comment) */ -"ClockerVersion" = "Version %@"; - -/* Button to close the panel */ -"Close Button Title" = "Close"; - -/* (No Comment) */ -"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!"; - -/* (No Comment) */ -"Contact Information (Optional)" = "Contact Information (Optional)"; - -/* Continue Button Title */ -"Continue" = "Continue"; - -/* (No Comment) */ -"Day Display Options" = "Day Display Options"; - -/* (No Comment) */ -"Denied" = "Denied"; - -/* Denied Button Text */ -"Denied Button Text" = "Denied"; - -/* (No Comment) */ -"Display the time in seconds" = "Display the time in seconds"; - -/* Title asking users if they like the app */ -"Enjoy using Clocker" = "Enjoy using Clocker"; - -/* Review */ -"Enjoy using Clocker?" = "Enjoy using Clocker?"; - -/* (No Comment) */ -"Favourite a timezone to enable menubar display options." = "Favourite a timezone to enable menubar display options."; - -/* About View Screen */ -"Feedback is always welcome:" = "Feedback is always welcome:"; - -/* (No Comment) */ -"Florida" = "Florida"; - -/* (No Comment) */ -"Future Slider Range" = "Future Slider Range"; - -/* Title for Welcome View Controller's Continue Button */ -"Get Started" = "立刻开始!"; - -/* (No Comment) */ -"Grant" = "授权"; - -/* (No Comment) */ -"Grant Access" = "授予访问权限"; - -/* Grant Button Text */ +"start-at-login" = "开启时启动"; +"setup-steps" = "只需要三步来设置 Clocker"; +"Permissions-Header" = "权限"; +"See your next Calendar event here." = "在这里查看你的下一个日历事件。"; +"Click here to start." = "点此开始。"; +"Reminders Access" = "提醒访问权限"; +"Calendar Access" = "日历访问权限"; +"Permissions" = "权限"; +"Calendar Detail" = "未来你个人和分享的日历事件将显示在菜单栏和面板上。"; +"Reminders Detail" = "在您选择的位置时区设置提醒。您的提醒存储在默认提醒应用中。"; +"Privacy Text" = "您稍后可以在「系统偏好设置」的隐私部分更改此内容。"; +"Granted Button Text" = "已授权"; +"Denied Button Text" = "已拒绝"; "Grant Button Text" = "授权"; -/* (No Comment) */ +// Welcome Onboarding +"It only takes 3 steps to setup Clocker." = "只需要 3 步来设置 Clocker。"; +"Get Started" = "开始"; + +// Tab Item Titles +"Preferences Tab" = "首选项"; +"Appearance Tab" = "外观"; +"Calendar Tab" = "日历"; +"About Tab" = "关于"; +"Permissions Tab" = "权限"; + +// General Preferences Screen +"Start at Login" = "登录时启动 Clocker"; +"Sort by Time Difference" = "按时间差排序"; +"Sort by Name" = "按名称排序"; +"Sort by Label" = "按标签排序"; +"Search Field Placeholder" = "输入城市、省/州或国家名称"; +"No Timezone Selected" = "请选择一个时区!"; +"Max Timezones Selected" = "最多允许 100 个时区!"; +"Max Search Characters" = "最多允许 50 个字符!"; +"Add Button Title" = "添加"; +"Close Button Title" = "关闭"; + +// Onboarding +"Open Clocker At Login" = "登录时启动 Clocker"; +"Launch Clocker" = "启动 Clocker"; + +// Welcome Onboarding +"It only takes 3 steps to set up Clocker." = "只需要三步来设置 Clocker。"; +"Get Started" = "现在开始"; + +// Permissions +"Calendar Access Title" = "访问日历"; +"Reminders Access Title" = "访问提醒"; +"Later Config Description" = "这些可以稍后在系统偏好设置中配置。"; +"Back" = "返回"; +"Continue" = "继续"; +"Clocker is more useful when it can display events from your calendars." = "Clocker 能显示日历中的事件时会更有用。"; +"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "Clocker 在能显示日历中的事件时更有用。你可以在「系统偏好设置 > 安全性与隐私 > 隐私」中更改设置。"; +"Launch Preferences" = "打开首选项"; +"Grant Access" = "授予访问权限"; +"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "你个人和共享日历的未来事件将显示在菜单栏和面板上。"; "Granted" = "已授权"; +"Denied" = "已拒绝"; +"Grant" = "授权"; +"Unexpected" = "意外的"; -/* Granted Button Text */ -"Granted Button Text" = "已授权"; - -/* (No Comment) */ -"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\""; - -/* (No Comment) */ -"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!"; - -/* (No Comment) */ -"Include Date" = "包含日期"; - -/* (No Comment) */ -"Include Day" = "Include Day"; - -/* (No Comment) */ -"Include Place Name" = "Include Place Name"; - -/* (No Comment) */ -"iRateAppMessage" = "If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; - -/* (No Comment) */ -"iRateCancelButton" = "No, Thanks"; - -/* (No Comment) */ -"iRateGameMessage" = "If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; - -/* (No Comment) */ -"iRateMessageTitle" = "Rate %@"; - -/* (No Comment) */ -"iRateRateButton" = "Rate It Now"; - -/* (No Comment) */ -"iRateRemindButton" = "稍后提醒"; - -/* (No Comment) */ -"iRateUpdateMessage" = "立即更新"; - -/* App Setup Description */ -"It only takes 3 steps to set up Clocker." = "It only takes 3 steps to setup Clocker."; - -/* Welcome Onboarding */ -"It only takes 3 steps to setup Clocker." = "It only takes 3 steps to setup Clocker."; - -/* (No Comment) */ -"Larger Text" = "Larger Text"; - -/* Describing we can change the options later in System Preferences */ -"Later Config Description" = "These can be configured later in System Preferences."; +// Onboarding Search +"Quick Add Locations" = "快速添加地点"; +"More search options in Clocker Preferences." = "Clocker 首选项中的更多搜索选项。"; +"Enter 3 or more characters for locations you'll like to add" = "为您想要添加的位置输入 3 个或更多字符"; -/* Start at Login */ +// Start at Login "Launch at Login" = "登录时启动"; +"This can be configured later in Clocker Preferences." = "这可以稍后在 Clocker 首选项中进行配置。"; +"Should Clocker open automatically on startup?" = "是否在启动时自动打开 Clocker?"; + +// Final Onboarding Screen +"You're all set!" = "已完成全部设置!"; +"Thank you for the details." = "感谢您的详细信息。"; +"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "当你启动应用时,会在菜单栏看到一个时钟图标。如果想在 Dock 上显示图标,请在首选项设置。"; +"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "如果您想帮助翻译本应用或收到不定时的应用更新,请输入您的电子邮箱!"; + +// Appearance Tab +"Panel Theme" = "面板主题"; +"Favourite a timezone to enable menubar display options." = "收藏一个时区以在菜单栏上显示可选项。"; +"Main Panel Options" = "主面板选项"; +"Time Format" = "时间格式"; +"Day Display Options" = "日显示选项"; +"Show Future Slider" = "显示未来滑块"; +"Show Sunrise/Sunset" = "显示日出/日落"; +"Display the time in seconds" = "显示秒数"; +"Larger Text" = "更大字号"; +"Future Slider Range" = "未来滑块范围"; +"Include Date" = "包含日期"; +"Include Day" = "包含日"; +"Include Place Name" = "包含地名"; +"Menubar Display Options" = "菜单栏显示选项"; +"Menubar Mode" = "菜单栏模式"; +"Preview" = "预览"; +"Miscellaneous" = "杂项设置"; + +// Empty View +"No places added" = "没有添加地点"; + +// Panel +"No upcoming event." = "暂无事项"; +"You have no events scheduled for tomorrow." = "您明天没有安排。"; + +// Review +"Enjoy using Clocker?" = "喜欢使用 Clocker 吗?"; + +// App Feedback +"Tell us what you think!" = "告诉我们您的想法!"; +"Contact Information (Optional)" = "联系信息 (可选)"; +"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "联系人字段是可选项!我们需要更多信息或帮助时,将使用联络信息联络您!"; + +// About View Screen +"Feedback is always welcome:" = "欢迎提供反馈:"; + +// Calendars View +"Upcoming Event View Options" = "即将到来的事件视图选项"; +"Show Upcoming Event View" = "显示即将到来的事件视图"; +"Show All Day Meetings" = "显示全天会议"; +"Show Next Meeting Title in Menubar" = "在菜单栏中显示下一个会议标题"; +"Truncate menubar text longer than" = "截断菜单栏文字长度大于"; +"characters" = "字符"; +"Show events from" = "显示事件来源"; +"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "如果会议标题是“Meeting with Neel”,并且截断长度设置为 5 ,菜单栏的文本将显示为“Meeti...”"; + +// Notes Popover +"Reminder Set" = "提醒设置"; +"Successfully set." = "设置成功"; + +// Errors +"You're offline, maybe?" = "您已经离线?"; +"Try again, maybe?" = "稍后再试?"; +"The Internet connection appears to be offline." = "网络连接已断开。"; + +// UI Tests +"New Zealand" = "新西兰"; +"Florida" = "佛罗里达"; +"San Francisco" = "旧金山"; -/* (No Comment) */ -"Launch Clocker" = "Launch Clocker"; - -/* (No Comment) */ -"Launch Preferences" = "Launch Preferences"; - -/* (No Comment) */ -"Main Panel Options" = "Main Panel Options"; - -/* Max Character Count Allowed Error Message */ -"Max Search Characters" = "Only 50 characters allowed!"; - -/* Max Timezones Error Message */ -"Max Timezones Selected" = "Maximum 100 timezones allowed!"; - -/* (No Comment) */ -"Menubar Display Options" = "Menubar Display Options"; - -/* (No Comment) */ -"Menubar Mode" = "Menubar Mode"; - -/* (No Comment) */ -"More search options in Clocker Preferences." = "More search options in Clocker Preferences."; - -/* UI Tests */ -"New Zealand" = "New Zealand"; - -/* Subtitle for no places added */ -"No places added" = "No places added"; - -/* Message shown when the user taps on Add without selecting a timezone */ -"No Timezone Selected" = "Please select a timezone!"; - -/* Title when there's no upcoming event */ -"No upcoming event." = "No upcoming event."; - -/* Onboarding */ -"Open Clocker At Login" = "Open Clocker At Login"; - -/* Appearance Tab */ -"Panel Theme" = "Panel Theme"; - -/* Permissions Tab Titles */ -"Permissions" = "Permissions"; - -/* Title for Permissions screen */ -"Permissions Tab" = "Permissions"; - -/* (No Comment) */ -"Permissions-Header" = "Permissions"; - -/* Tab Item Titles */ -"Preferences Tab" = "Preferences"; - -/* Text explaining options can be changed in the future through System Preferences */ -"Privacy Text" = "You can change this later in the Privacy section of the System Preferences."; - -/* Onboarding Search */ -"Quick Add Locations" = "Quick Add Locations"; - -/* Notes Popover */ -"Reminder Set" = "Reminder Set"; - -/* Reminders Permission Title */ -"Reminders Access" = "Reminders Access"; - -/* Title for Reminders Access Label */ -"Reminders Access Title" = "Reminders Access"; - -/* Reminders Detail Text */ -"Reminders Detail" = "Set reminders in the timezone of the location of your choice. Your reminders are stored in the default Reminders app."; - -/* (No Comment) */ -"San Francisco" = "San Francisco"; - -/* Search Field Placeholder */ -"Search Field Placeholder" = "Enter a city, state or country name"; - -/* (No Comment) */ -"Enter 3 or more characters for locations you'll like to add" = "Enter 3 or more characters for locations you'll like to add"; - -/* Next Event Label for no Calendar access */ -"See your next Calendar event here." = "See your next Calendar event here."; - -/* (No Comment) */ -"setup-steps" = "It only takes 3 steps to set up Clocker"; - -/* (No Comment) */ -"Should Clocker open automatically on startup?" = "Should Clocker open automatically on startup?"; - -/* (No Comment) */ -"Show All Day Meetings" = "Show All Day Meetings"; - -/* (No Comment) */ -"Show events from" = "Show events from"; - -/* (No Comment) */ -"Show Future Slider" = "Show Future Slider"; - -/* (No Comment) */ -"Show Next Meeting Title in Menubar" = "Show Next Meeting Title in Menubar"; - -/* (No Comment) */ -"Show Sunrise/Sunset" = "Show Sunrise/Sunset"; - -/* (No Comment) */ -"Show Upcoming Event View" = "Show Upcoming Event View"; - -/* Start at Login */ -"Sort by Label" = "Sort by Label"; - -/* Start at Login */ -"Sort by Name" = "Sort by Name"; - -/* Start at Login */ -"Sort by Time Difference" = "Sort by Time Difference"; - -/* Start at Login */ -"Start at Login" = "Start Clocker at Login"; - -/* (No Comment) */ -"start-at-login" = "登录时启动"; - -/* (No Comment) */ -"Successfully set." = "Successfully set."; - -/* App Feedback */ -"Tell us what you think!" = "Tell us what you think!"; - -/* (No Comment) */ -"Thank you for helping make Clocker even better!" = "Thank you for helping make Clocker even better!"; - -/* (No Comment) */ -"Thank you for the details." = "Thank you for the details."; - -/* (No Comment) */ -"The Internet connection appears to be offline." = "The Internet connection appears to be offline."; - -/* (No Comment) */ -"This can be configured later in Clocker Preferences." = "This can be configured later in Clocker Preferences."; - -/* (No Comment) */ -"Time Format" = "Time Format"; - -/* (No Comment) */ -"Truncate menubar text longer than" = "Truncate menubar text longer than"; - -/* (No Comment) */ -"Try again, maybe?" = "Try again, maybe?"; - -/* (No Comment) */ -"Unexpected" = "Unexpected"; - -/* Calendars View */ -"Upcoming Event View Options" = "Upcoming Event View Options"; - -/* (No Comment) */ -"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "Upcoming events from your personal and shared calendars can be shown in the menubar and the panel."; - -/* Title when there's no event scheduled for tomorrow */ -"You have no events scheduled for tomorrow." = "You have no events scheduled for tomorrow."; - -/* (No Comment) */ -"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences."; - -/* Final Onboarding Screen */ -"You're all set!" = "You're all set!"; - -/* Errors */ -"You're offline, maybe?" = "You're offline, maybe?"; - -"Preview" = "Preview"; - -"Miscellaneous" = "Miscellaneous"; // DST changes "Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; From b2850720eb65695e4d827295c78a9a136957f7c2 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:37:48 -0500 Subject: [PATCH 12/34] Add Portuguese Brazilian --- Clocker/Clocker.xcodeproj/project.pbxproj | 3 + .../Clocker/pt-BR.lproj/Localizable.strings | 162 ++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 Clocker/Clocker/pt-BR.lproj/Localizable.strings diff --git a/Clocker/Clocker.xcodeproj/project.pbxproj b/Clocker/Clocker.xcodeproj/project.pbxproj index 0e5b080..41ee8d3 100755 --- a/Clocker/Clocker.xcodeproj/project.pbxproj +++ b/Clocker/Clocker.xcodeproj/project.pbxproj @@ -228,6 +228,7 @@ 352AF497232E07B400D96FA7 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/InfoPlist.strings; sourceTree = ""; }; 352AF499232E07B400D96FA7 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; 3545C52A22612BCC00121E25 /* TimezoneDataEqualityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimezoneDataEqualityTests.swift; sourceTree = ""; }; + 3569A44E25441F320087E254 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 357391852507277500D30819 /* HourMarkerViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HourMarkerViewItem.swift; sourceTree = ""; }; 357391862507277500D30819 /* HourMarkerViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HourMarkerViewItem.xib; sourceTree = ""; }; 3595FACF227F88BC0044A12A /* UserDefaults + KVOExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults + KVOExtensions.swift"; sourceTree = ""; }; @@ -1038,6 +1039,7 @@ it, tr, ar, + "pt-BR", ); mainGroup = DD4F7BF913C30F9F00825C6E; productRefGroup = DD4F7C0513C30F9F00825C6E /* Products */; @@ -1362,6 +1364,7 @@ 9AA522D123416A0E00C9E005 /* es */, 9AA522D523416A6000C9E005 /* nl */, 9AA522D723416E6000C9E005 /* it */, + 3569A44E25441F320087E254 /* pt-BR */, ); name = Localizable.strings; path = Clocker; diff --git a/Clocker/Clocker/pt-BR.lproj/Localizable.strings b/Clocker/Clocker/pt-BR.lproj/Localizable.strings new file mode 100644 index 0000000..01b5822 --- /dev/null +++ b/Clocker/Clocker/pt-BR.lproj/Localizable.strings @@ -0,0 +1,162 @@ +/* + Localizable.strings + Clocker + + Created by Abhishek Banthia on 3/27/16. + +*/ + +"CFBundleDisplayName" = "Clocker"; +"Thank you for helping make Clocker even better!" = "Obrigado por ajudar a tornar o Clocker ainda melhor!"; +"iRateMessageTitle" = "Rate %@"; +"iRateAppMessage" = "If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; +"iRateGameMessage" = "If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; +"iRateCancelButton" = "Não, Obrigado"; +"iRateRateButton" = "Avaliar Agora"; +"iRateRemindButton" = "Lembrar mais tarde"; +"iRateUpdateMessage" = "Atualizar agora?"; +"ClockerVersion" = "Versão %@"; +"CLFeedbackAlertTitle" = "Obrigado por ajudar a tornar o Clocker ainda melhor!"; +"app-name" = "Clocker"; +"start-at-login" = "Iniciar ao iniciar sessão"; +"setup-steps" = "It only takes 3 steps to set up Clocker"; +"Permissions-Header" = "Permissões"; +"See your next Calendar event here." = "Veja seu próximo evento do Calendário aqui."; +"Click here to start." = "Clique aqui para iniciar."; +"Reminders Access" = "Acessos aos Lembretes"; +"Calendar Access" = "Acesso ao Calendário"; +"Permissions" = "Permissões"; +"Calendar Detail" = "Próximos eventos de seus calendários pessoais e compartilhados podem ser exibidos no menu e no painel."; +"Reminders Detail" = "Defina lembretes no fuso horário da localização de sua escolha. Seus lembretes são armazenados no aplicativo padrão Lembretes."; +"Privacy Text" = "Você pode alterar isso mais tarde na seção Privacidade das Preferências do Sistema."; +"Granted Button Text" = "Granted"; +"Denied Button Text" = "Denied"; +"Grant Button Text" = "Conceder"; + +// Welcome Onboarding +"It only takes 3 steps to setup Clocker." = "São apenas 3 passos para configurar o Clocker."; +"Get Started" = "Get Started"; + +// Tab Item Titles +"Preferences Tab" = "Preferências"; +"Appearance Tab" = "Aparência"; +"Calendar Tab" = "Calendário"; +"About Tab" = "Sobre"; +"Permissions Tab" = "Permissões"; + +// General Preferences Screen +"Start at Login" = "Start Clocker at Login"; +"Sort by Time Difference" = "Sort by Time Difference"; +"Sort by Name" = "Ordenar por nome"; +"Sort by Label" = "Ordenar por Etiqueta"; +"Search Field Placeholder" = "Insira uma cidade, estado ou país"; +"No Timezone Selected" = "Por favor, selecione um fuso horário!"; +"Max Timezones Selected" = "Maximum 100 timezones allowed!"; +"Max Search Characters" = "Só são permitidos até 50 caracteres!"; +"Add Button Title" = "Adicionar"; +"Close Button Title" = "Fechar"; + +// Onboarding +"Open Clocker At Login" = "Open Clocker At Login"; +"Launch Clocker" = "Launch Clocker"; + +// Welcome Onboarding +"It only takes 3 steps to set up Clocker." = "It only takes 3 steps to setup Clocker."; +"Get Started" = "Get Started"; + +// Permissions +"Calendar Access Title" = "Acesso ao Calendário"; +"Reminders Access Title" = "Reminders Access"; +"Later Config Description" = "These can be configured later in System Preferences."; +"Back" = "Voltar"; +"Continue" = "Continuar"; +"Clocker is more useful when it can display events from your calendars." = "O bloqueador é mais útil quando pode exibir eventos de seus calendários."; +"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "O bloqueador é mais útil quando pode exibir eventos de seus calendários. Você pode alterar essa configuração em Preferências do Sistema › Segurança e Privacidade › Privacidade."; +"Launch Preferences" = "Launch Preferences"; +"Grant Access" = "Grant Access"; +"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "Próximos eventos de seus calendários pessoais e compartilhados podem ser exibidos no menu e no painel."; +"Granted" = "Granted"; +"Denied" = "Denied"; +"Grant" = "Grant"; +"Unexpected" = "Inesperado"; + +// Onboarding Search +"Quick Add Locations" = "Quick Add Locations"; +"More search options in Clocker Preferences." = "Mais opções de busca em Preferências do Clocker."; +"Enter 3 or more characters for locations you'll like to add" = "Enter 3 or more characters for locations you'll like to add"; + +// Start at Login +"Launch at Login" = "Launch at Login"; +"This can be configured later in Clocker Preferences." = "Isso pode ser configurado mais tarde nas Preferências do Clocker."; +"Should Clocker open automatically on startup?" = "Should Clocker open automatically on startup?"; + +// Final Onboarding Screen +"You're all set!" = "Tudo pronto!"; +"Thank you for the details." = "Obrigado pelos detalhes."; +"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences."; +"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "Se você quiser nos ajudar a localizar o app no seu idioma ou receber atualizações pouco frequentes, digite seu e-mail!"; + +// Appearance Tab +"Panel Theme" = "Tema do painel"; +"Favourite a timezone to enable menubar display options." = "Favourite a timezone to enable menubar display options."; +"Main Panel Options" = "Main Panel Options"; +"Time Format" = "Time Format"; +"Day Display Options" = "Day Display Options"; +"Show Future Slider" = "Show Future Slider"; +"Show Sunrise/Sunset" = "Show Sunrise/Sunset"; +"Display the time in seconds" = "Exibir o tempo em segundos"; +"Larger Text" = "Texto Maior"; +"Future Slider Range" = "Future Slider Range"; +"Include Date" = "Incluir Data"; +"Include Day" = "Incluir Dia"; +"Include Place Name" = "Incluir Nome do Lugar"; +"Menubar Display Options" = "Menubar Display Options"; +"Menubar Mode" = "Menubar Mode"; +"Preview" = "Pré-visualizar"; +"Miscellaneous" = "Miscellaneous"; + +// Empty View +"No places added" = "Nenhum local adicionado"; + +// Panel +"No upcoming event." = "Sem eventos futuros."; +"You have no events scheduled for tomorrow." = "Você não tem eventos agendados para amanhã."; + +// Review +"Enjoy using Clocker?" = "Gostando de usar o Clocker?"; + +// App Feedback +"Tell us what you think!" = "Conte-nos o que você pensa!"; +"Contact Information (Optional)" = "Informações de Contato (Opcional)"; +"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Os campos de contato são opcionais! Suas informações de contato nos permitirão entrar em contato com você caso precisemos de mais informações ou possamos ajudar!"; + +// About View Screen +"Feedback is always welcome:" = "Feedback é sempre bem-vindo:"; + +// Calendars View +"Upcoming Event View Options" = "Upcoming Event View Options"; +"Show Upcoming Event View" = "Show Upcoming Event View"; +"Show All Day Meetings" = "Show All Day Meetings"; +"Show Next Meeting Title in Menubar" = "Show Next Meeting Title in Menubar"; +"Truncate menubar text longer than" = "Truncate menubar text longer than"; +"characters" = "characters"; +"Show events from" = "Show events from"; +"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\""; + +// Notes Popover +"Reminder Set" = "Reminder Set"; +"Successfully set." = "Successfully set."; + +// Errors +"You're offline, maybe?" = "You're offline, maybe?"; +"Try again, maybe?" = "Try again, maybe?"; +"The Internet connection appears to be offline." = "A conexão à Internet parece estar desligada."; + +// UI Tests +"New Zealand" = "Nova Zelândia"; +"Florida" = "Florida"; +"San Francisco" = "San Francisco"; + +// DST changes +"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; + From d9984f865772c324a9767f9d491b015afcb4e8fe Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:40:14 -0500 Subject: [PATCH 13/34] Minor height change for home timezones. --- Clocker/Panel/UI/TimezoneDataSource.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Clocker/Panel/UI/TimezoneDataSource.swift b/Clocker/Panel/UI/TimezoneDataSource.swift index 0c3e37c..1ada9b3 100644 --- a/Clocker/Panel/UI/TimezoneDataSource.swift +++ b/Clocker/Panel/UI/TimezoneDataSource.swift @@ -104,7 +104,7 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { } if model.isSystemTimezone { - rowHeight += 5 + rowHeight += 2 } rowHeight += (userFontSize.intValue * 2) From 27a4808fc6d5c826d93e4be08114729c65e53486 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:53:54 -0500 Subject: [PATCH 14/34] Gating dst transition info! --- Clocker/Overall App/AppDefaults.swift | 3 ++- Clocker/Overall App/DataStore.swift | 3 +++ Clocker/Overall App/Strings.swift | 1 + Clocker/Panel/Data Layer/TimezoneDataOperations.swift | 4 ++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Clocker/Overall App/AppDefaults.swift b/Clocker/Overall App/AppDefaults.swift index 86b52cb..a98c096 100644 --- a/Clocker/Overall App/AppDefaults.swift +++ b/Clocker/Overall App/AppDefaults.swift @@ -127,7 +127,8 @@ class AppDefaults { CLTruncateTextLength: 30, CLSelectedCalendars: [], CLAppDisplayOptions: 1, - CLMenubarCompactMode: 1] + CLMenubarCompactMode: 1, + CLDisplayDSTTransitionInfo: 0] } } diff --git a/Clocker/Overall App/DataStore.swift b/Clocker/Overall App/DataStore.swift index 3e18a7c..3fad483 100644 --- a/Clocker/Overall App/DataStore.swift +++ b/Clocker/Overall App/DataStore.swift @@ -16,6 +16,7 @@ enum ViewType { case placeInMenubar case dayInMenubar case menubarCompactMode + case dstTransitionInfo } class DataStore: NSObject { @@ -138,6 +139,8 @@ class DataStore: NSObject { return shouldDisplayHelper(CLShowDayInMenu) case .appDisplayOptions: return shouldDisplayHelper(CLAppDisplayOptions) + case .dstTransitionInfo: + return shouldDisplayHelper(CLDisplayDSTTransitionInfo) case .menubarCompactMode: guard let value = retrieve(key: CLMenubarCompactMode) as? Int else { return false diff --git a/Clocker/Overall App/Strings.swift b/Clocker/Overall App/Strings.swift index 3faaf11..aa2305b 100644 --- a/Clocker/Overall App/Strings.swift +++ b/Clocker/Overall App/Strings.swift @@ -37,3 +37,4 @@ let CLDefaultMenubarMode = "com.abhishek.shouldDefaultToCompactMode" let CLInstallHomeIndicatorObject = "installHomeIndicatorObject" let CLDefaultThemeOnMojave = "com.abhishek.defaultHasBeenSetOnMacOsMojave" let CLSwitchToCompactModeAlert = "com.abhishek.switchToCompactMode" +let CLDisplayDSTTransitionInfo = "com.abhishek.showDSTTransitionInfo" diff --git a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift index aa3fe05..bc61bee 100644 --- a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift +++ b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift @@ -34,6 +34,10 @@ extension TimezoneDataOperations { } func nextDaylightSavingsTransitionIfAvailable(with sliderValue: Int) -> String? { + if DataStore.shared().shouldDisplay(.dstTransitionInfo) == false { + return nil + } + let currentTimezone = TimeZone(identifier: dataObject.timezone()) guard let nextDaylightSavingsTransition = currentTimezone?.nextDaylightSavingTimeTransition else { return nil From b00bd13423aa36ce5d755c6f4d6f1e00444df018 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 03:54:24 -0500 Subject: [PATCH 15/34] Customization option for enabling DST transition info. --- Clocker/Preferences/Preferences.storyboard | 91 +++++++++++++++------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/Clocker/Preferences/Preferences.storyboard b/Clocker/Preferences/Preferences.storyboard index 9254c98..83b0a78 100644 --- a/Clocker/Preferences/Preferences.storyboard +++ b/Clocker/Preferences/Preferences.storyboard @@ -1,8 +1,8 @@ - + - + @@ -781,7 +781,7 @@ - + @@ -795,7 +795,7 @@ - + @@ -809,7 +809,7 @@ - + @@ -820,7 +820,7 @@ - + @@ -831,7 +831,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -872,7 +872,7 @@ - + @@ -880,7 +880,7 @@ - + @@ -888,7 +888,7 @@ - + @@ -898,8 +898,21 @@ + + + + + + + + + + + + + - + @@ -914,7 +927,7 @@ - + @@ -925,7 +938,7 @@ - + @@ -933,12 +946,12 @@ - - + + - + @@ -1110,7 +1123,7 @@ - + @@ -1121,27 +1134,41 @@ + + + + + + + + + + + + - + + - + + @@ -1149,11 +1176,12 @@ - - + + + @@ -1493,7 +1521,7 @@ - + @@ -1550,13 +1578,13 @@ DQ - + - + - + @@ -1646,14 +1674,14 @@ DQ - + - + @@ -1973,6 +2001,11 @@ CA + + + + + From 187101e70977bf9aed0f81a9080deb6ea33cc297 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 14:48:25 -0500 Subject: [PATCH 16/34] Only create TimezoneDataOperations if DST transition option is enabled. --- Clocker/Panel/Data Layer/TimezoneDataOperations.swift | 4 ---- Clocker/Panel/ParentPanelController.swift | 11 +++++++---- Clocker/Panel/UI/TimezoneDataSource.swift | 5 ++--- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift index bc61bee..aa3fe05 100644 --- a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift +++ b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift @@ -34,10 +34,6 @@ extension TimezoneDataOperations { } func nextDaylightSavingsTransitionIfAvailable(with sliderValue: Int) -> String? { - if DataStore.shared().shouldDisplay(.dstTransitionInfo) == false { - return nil - } - let currentTimezone = TimeZone(identifier: dataObject.timezone()) guard let nextDaylightSavingsTransition = currentTimezone?.nextDaylightSavingTimeTransition else { return nil diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index 7b2365d..b6f5295 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -169,7 +169,7 @@ class ParentPanelController: NSWindowController { object: nil) if #available(OSX 11.0, *) { - mainTableView.style = .fullWidth +// mainTableView.style = .fullWidth } if modernSlider != nil { @@ -384,7 +384,9 @@ class ParentPanelController: NSWindowController { newHeight = userFontSize == 4 ? 68.0 : 68.0 if let note = object?.note, note.isEmpty == false { newHeight += 20 - } else if let obj = object, TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil { + } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), + let obj = object, + TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil { newHeight += 20 } } @@ -393,7 +395,7 @@ class ParentPanelController: NSWindowController { // Set it to 90 expicity in case the row height is calculated be higher. newHeight = 88.0 - if let note = object?.note, note.isEmpty, let obj = object, TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) == nil { + if let note = object?.note, note.isEmpty, DataStore.shared().shouldDisplay(.dstTransitionInfo) == false, let obj = object, TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) == nil { newHeight -= 20.0 } } @@ -565,7 +567,8 @@ class ParentPanelController: NSWindowController { cellView.sunriseImage.image = model.isSunriseOrSunset ? Themer.shared().sunriseImage() : Themer.shared().sunsetImage() if let note = model.note, !note.isEmpty { cellView.noteLabel.stringValue = note - } else if let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) { + } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), + let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) { cellView.noteLabel.stringValue = value } else { cellView.noteLabel.stringValue = CLEmptyString diff --git a/Clocker/Panel/UI/TimezoneDataSource.swift b/Clocker/Panel/UI/TimezoneDataSource.swift index 1ada9b3..7686e39 100644 --- a/Clocker/Panel/UI/TimezoneDataSource.swift +++ b/Clocker/Panel/UI/TimezoneDataSource.swift @@ -64,7 +64,7 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { cellView.relativeDate.setAccessibilityIdentifier("RelativeDate") if let note = currentModel.note, !note.isEmpty { cellView.noteLabel.stringValue = note - } else if let value = operation.nextDaylightSavingsTransitionIfAvailable(with: sliderValue) { + } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), let value = operation.nextDaylightSavingsTransitionIfAvailable(with: sliderValue) { cellView.noteLabel.stringValue = value } else { cellView.noteLabel.stringValue = CLEmptyString @@ -84,7 +84,6 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { if let userFontSize = DataStore.shared().retrieve(key: CLUserFontSizePreference) as? NSNumber, timezones.count > row, let relativeDisplay = DataStore.shared().retrieve(key: CLRelativeDateKey) as? NSNumber { let model = timezones[row] - let operation = TimezoneDataOperations(with: model) let shouldShowSunrise = DataStore.shared().shouldDisplay(.sunrise) var rowHeight: Int = userFontSize == 4 ? 60 : 65 @@ -99,7 +98,7 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate { if let note = model.note, !note.isEmpty { rowHeight += userFontSize.intValue + 15 - } else if operation.nextDaylightSavingsTransitionIfAvailable(with: sliderValue) != nil { + } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: sliderValue) != nil { rowHeight += userFontSize.intValue + 15 } From e5816f6f1d6edfa33ce6e8eeda5eda7e75996eec Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 14:48:40 -0500 Subject: [PATCH 17/34] Rollback to 11.0 changes. --- Clocker/Panel/ParentPanelController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index b6f5295..24866fa 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -169,7 +169,7 @@ class ParentPanelController: NSWindowController { object: nil) if #available(OSX 11.0, *) { -// mainTableView.style = .fullWidth + mainTableView.style = .fullWidth } if modernSlider != nil { From c8be5b1001ac763b46dbe7a74e92716a983e14e4 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 14:55:16 -0500 Subject: [PATCH 18/34] Finer granularity! --- Clocker/Panel/Data Layer/TimezoneDataOperations.swift | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift index aa3fe05..e16031f 100644 --- a/Clocker/Panel/Data Layer/TimezoneDataOperations.swift +++ b/Clocker/Panel/Data Layer/TimezoneDataOperations.swift @@ -56,11 +56,14 @@ extension TimezoneDataOperations { return nil } + if numberOfDays == 0 { + let hoursLeft = nextDaylightSavingsTransition.hours(from: newDate) + let suffix = hoursLeft == 1 ? "hour" : "hours" + return "Heads up! DST transition will occur in \(hoursLeft) \(suffix)." + } + let suffix = numberOfDays == 1 ? "day" : "days" - return numberOfDays == 0 ? - NSLocalizedString("Daylights Saving transition will occur in < 24 hours", - comment: "Daylights Saving transition will occur in < 24 hours") : - "Daylight Savings transition will occur in \(numberOfDays) \(suffix)!" + return "Heads up! DST transition will occur in \(numberOfDays) \(suffix)." } private func checkForUpcomingEvents() -> (String, String)? { From c36d73b91c96ea46b26160139ba644bc3761ceb9 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 24 Oct 2020 14:55:30 -0500 Subject: [PATCH 19/34] Spacing! --- Clocker/Panel/ParentPanelController.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index 24866fa..d67aa36 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -385,8 +385,8 @@ class ParentPanelController: NSWindowController { if let note = object?.note, note.isEmpty == false { newHeight += 20 } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), - let obj = object, - TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil { + let obj = object, + TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil { newHeight += 20 } } @@ -568,7 +568,7 @@ class ParentPanelController: NSWindowController { if let note = model.note, !note.isEmpty { cellView.noteLabel.stringValue = note } else if DataStore.shared().shouldDisplay(.dstTransitionInfo), - let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) { + let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) { cellView.noteLabel.stringValue = value } else { cellView.noteLabel.stringValue = CLEmptyString From 92311d2e72542a9e1988f003bbac6fd19ec6bc42 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sun, 25 Oct 2020 11:22:07 -0500 Subject: [PATCH 20/34] Introduce korean translations --- Clocker/Clocker/ko.lproj/Localizable.strings | 126 +++++++++--------- .../OnboardingParentViewController.swift | 10 +- .../OnboardingSearchController.swift | 6 +- Clocker/Panel/ParentPanelController.swift | 6 +- 4 files changed, 76 insertions(+), 72 deletions(-) diff --git a/Clocker/Clocker/ko.lproj/Localizable.strings b/Clocker/Clocker/ko.lproj/Localizable.strings index 2ce2144..2c49183 100644 --- a/Clocker/Clocker/ko.lproj/Localizable.strings +++ b/Clocker/Clocker/ko.lproj/Localizable.strings @@ -6,26 +6,27 @@ */ -"Thank you for helping make Clocker even better!" = "Thank you for helping make Clocker even better!"; -"iRateMessageTitle" = "Rate %@"; -"iRateAppMessage" = "If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; -"iRateGameMessage" = "If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; -"iRateCancelButton" = "No, Thanks"; -"iRateRateButton" = "Rate It Now"; -"iRateRemindButton" = "Remind Me Later"; -"iRateUpdateMessage" = "Update now?"; -"ClockerVersion" = "Version %@"; -"CLFeedbackAlertTitle" = "Thank you for helping make Clocker even better!"; -"app-name" = "Clocker"; -"start-at-login" = "Start At Login"; -"setup-steps" = "It only takes 3 steps to set up Clocker"; -"Permissions-Header" = "Permissions"; -"See your next Calendar event here." = "See your next Calendar event here."; -"Click here to start." = "Click here to start."; -"Reminders Access" = "Reminders Access"; -"Calendar Access" = "Calendar Access"; -"Permissions" = "Permissions"; -"Calendar Detail" = "Upcoming events from your personal and shared calendars can be shown in the menubar and the panel."; +"CFBundleDisplayName" = "시계"; +"Thank you for helping make Clocker even better!" = "Clocker가 더 발전할 수 있도록 도와주셔서 정말 감사합니다!"; +"iRateMessageTitle" = "비율 %@ "; +"iRateAppMessage" = "%@을 즐기고 계신다면, 잠시 평가를 위해 시간을 내주시겠습니까? 단 1분도 걸리지 않겠습니다. 지원해주셔서 감사합니다!"; +"iRateGameMessage" = "%@을 즐기고 계신다면, 잠시 평가를 위해 시간을 내주시겠습니까? 단 1분도 걸리지 않겠습니다. 지원해주셔서 감사합니다!"; +"iRateCancelButton" = "나중에 할게요"; +"iRateRateButton" = "지금 평가하기"; +"iRateRemindButton" = "나중에 다시 알리기"; +"iRateUpdateMessage" = "지금 업데이트를 진행할까요?"; +"ClockerVersion" = "버전 %@"; +"CLFeedbackAlertTitle" = "Clocker가 더 발전할 수 있도록 도와주셔서 정말 감사합니다!"; +"app-name" = "시계"; +"start-at-login" = "로그인을 해주세요"; +"setup-steps" = "시계를 설정하는데 3가지만 하시면 됩니다"; +"Permissions-Header" = "권한"; +"See your next Calendar event here." = "당신의 다음 일정을 여기서 보세요"; +"Click here to start." = "여기를 눌러서 시작합니다."; +"Reminders Access" = "리마인더 권한"; +"Calendar Access" = "캘린더 권한"; +"Permissions" = "권한"; +"Calendar Detail" = "여러분의 개인&공유 캘린더에서 다가오는 이벤트들은 메뉴바와 패널에서 보여질 수 있습니다."; "Reminders Detail" = "Set reminders in the timezone of the location of your choice. Your reminders are stored in the default Reminders app."; "Privacy Text" = "You can change this later in the Privacy section of the System Preferences."; "Granted Button Text" = "Granted"; @@ -51,22 +52,22 @@ "Search Field Placeholder" = "Enter a city, state or country name"; "No Timezone Selected" = "Please select a timezone!"; "Max Timezones Selected" = "Maximum 100 timezones allowed!"; -"Max Search Characters" = "Only 50 characters allowed!"; -"Add Button Title" = "Add"; -"Close Button Title" = "Close"; +"Max Search Characters" = "50 문자까지만 허용됩니다!"; +"Add Button Title" = "추가"; +"Close Button Title" = "닫기"; // Onboarding -"Open Clocker At Login" = "Open Clocker At Login"; -"Launch Clocker" = "Launch Clocker"; +"Open Clocker At Login" = "로그인해서 Clocker 열기"; +"Launch Clocker" = "Clocker 실행하기"; // Welcome Onboarding "It only takes 3 steps to set up Clocker." = "It only takes 3 steps to setup Clocker."; "Get Started" = "Get Started"; // Permissions -"Calendar Access Title" = "Calendar Access"; -"Reminders Access Title" = "Reminders Access"; -"Later Config Description" = "These can be configured later in System Preferences."; +"Calendar Access Title" = "캘린더 접근"; +"Reminders Access Title" = "리마인더 권한"; +"Later Config Description" = "이것들은 나중에 설정에서 바꾸실 수 있습니다"; "Back" = "Back"; "Continue" = "Continue"; "Clocker is more useful when it can display events from your calendars." = "Clocker is more useful when it can display events from your calendars."; @@ -104,57 +105,60 @@ "Show Future Slider" = "Show Future Slider"; "Show Sunrise/Sunset" = "Show Sunrise/Sunset"; "Display the time in seconds" = "Display the time in seconds"; -"Larger Text" = "Larger Text"; -"Future Slider Range" = "Future Slider Range"; -"Include Date" = "Include Date"; -"Include Day" = "Include Day"; -"Include Place Name" = "Include Place Name"; -"Menubar Display Options" = "Menubar Display Options"; -"Menubar Mode" = "Menubar Mode"; -"Preview" = "Preview"; -"Miscellaneous" = "Miscellaneous"; +"Larger Text" = "글씨를 크게하기"; +"Future Slider Range" = "미래 슬라이더 범위"; +"Include Date" = "날짜 추가하기"; +"Include Day" = "시간 추가하기"; +"Include Place Name" = "장소 이름"; +"Menubar Display Options" = "메뉴바 화면표시 설정"; +"Menubar Mode" = "메뉴바 모드"; +"Preview" = "미리보기"; +"Miscellaneous" = "기타"; // Empty View -"No places added" = "No places added"; +"No places added" = "추가된 장소가 없음"; // Panel -"No upcoming event." = "No upcoming event."; -"You have no events scheduled for tomorrow." = "You have no events scheduled for tomorrow."; +"No upcoming event." = "예정된 이벤트 없음"; +"You have no events scheduled for tomorrow." = "내일 일정이 없어요!"; // Review -"Enjoy using Clocker?" = "Enjoy using Clocker?"; +"Enjoy using Clocker?" = "Clocker 사용에 만족하십니까?"; // App Feedback -"Tell us what you think!" = "Tell us what you think!"; -"Contact Information (Optional)" = "Contact Information (Optional)"; -"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!"; +"Tell us what you think!" = "여러분의 의견을 들려주세요."; +"Contact Information (Optional)" = "연락처 정보 (선택)"; +"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "연락처 필드는 선택 사항입니다! 귀하의 연락처 정보는 추가 정보가 필요하거나 도움이 필요한 경우 연락을 드릴 것입니다!"; // About View Screen -"Feedback is always welcome:" = "Feedback is always welcome:"; +"Feedback is always welcome:" = "피드백은 언제나 환영입니다:"; // Calendars View -"Upcoming Event View Options" = "Upcoming Event View Options"; -"Show Upcoming Event View" = "Show Upcoming Event View"; -"Show All Day Meetings" = "Show All Day Meetings"; -"Show Next Meeting Title in Menubar" = "Show Next Meeting Title in Menubar"; -"Truncate menubar text longer than" = "Truncate menubar text longer than"; -"characters" = "characters"; -"Show events from" = "Show events from"; -"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\""; +"Upcoming Event View Options" = "다가오는 이벤트 보기 옵션"; +"Show Upcoming Event View" = "다가오는 일정 보기"; +"Show All Day Meetings" = "모든 일정 보기"; +"Show Next Meeting Title in Menubar" = "다음 일정을 메뉴바에서 보기"; +"Truncate menubar text longer than" = "다음보다 긴 메뉴 표시 줄 텍스트를 자릅니다. + +"; +"characters" = "글자"; +"Show events from" = "오늘부터 이벤트 표시"; +"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "만약 미팅 제목이 \"Meeting with Neel\" 이면 5글자만 보여지기 때문에 주의해주세요. (\"Meeti...\")"; // Notes Popover -"Reminder Set" = "Reminder Set"; -"Successfully set." = "Successfully set."; +"Reminder Set" = "알림 설정"; +"Successfully set." = "설정이 완료되었습니다"; // Errors -"You're offline, maybe?" = "You're offline, maybe?"; -"Try again, maybe?" = "Try again, maybe?"; -"The Internet connection appears to be offline." = "The Internet connection appears to be offline."; +"You're offline, maybe?" = "당신은 오프라인입니다. 아마도?"; +"Try again, maybe?" = "다시 시도 해보세요"; +"The Internet connection appears to be offline." = "인터넷 연결이 오프라인 상태입니다."; // UI Tests -"New Zealand" = "New Zealand"; -"Florida" = "Florida"; -"San Francisco" = "San Francisco"; +"New Zealand" = "뉴질랜드"; +"Florida" = "플로리다"; +"San Francisco" = "샌프란시스코"; + // DST changes "Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours"; diff --git a/Clocker/Onboarding/OnboardingParentViewController.swift b/Clocker/Onboarding/OnboardingParentViewController.swift index ff3a70a..2c76bd3 100644 --- a/Clocker/Onboarding/OnboardingParentViewController.swift +++ b/Clocker/Onboarding/OnboardingParentViewController.swift @@ -68,11 +68,11 @@ class OnboardingParentViewController: NSViewController { [negativeButton, backButton].forEach { $0?.isHidden = true } - if #available(OSX 11.0, *) { - negativeButton.controlSize = .large - positiveButton.controlSize = .large - backButton.controlSize = .large - } +// if #available(OSX 11.0, *) { +// negativeButton.controlSize = .large +// positiveButton.controlSize = .large +// backButton.controlSize = .large +// } backButton.title = NSLocalizedString("Back", comment: "Button title for going back to the previous screen") diff --git a/Clocker/Onboarding/OnboardingSearchController.swift b/Clocker/Onboarding/OnboardingSearchController.swift index 85f1824..bdbb07d 100644 --- a/Clocker/Onboarding/OnboardingSearchController.swift +++ b/Clocker/Onboarding/OnboardingSearchController.swift @@ -34,9 +34,9 @@ class OnboardingSearchController: NSViewController { resultsTableView.dataSource = self resultsTableView.target = self resultsTableView.doubleAction = #selector(doubleClickAction(_:)) - if #available(OSX 11.0, *) { - resultsTableView.style = .fullWidth - } +// if #available(OSX 11.0, *) { +// resultsTableView.style = .fullWidth +// } setup() diff --git a/Clocker/Panel/ParentPanelController.swift b/Clocker/Panel/ParentPanelController.swift index d67aa36..b621911 100644 --- a/Clocker/Panel/ParentPanelController.swift +++ b/Clocker/Panel/ParentPanelController.swift @@ -168,9 +168,9 @@ class ParentPanelController: NSWindowController { name: NSNotification.Name.NSSystemTimeZoneDidChange, object: nil) - if #available(OSX 11.0, *) { - mainTableView.style = .fullWidth - } +// if #available(OSX 11.0, *) { +// mainTableView.style = .fullWidth +// } if modernSlider != nil { modernSlider.enclosingScrollView?.scrollerInsets = NSEdgeInsets(top: 0, left: 0, bottom: 100, right: 0) From 96c1e5b915e677b8c53b6577f915880c9af5134c Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sun, 25 Oct 2020 11:31:49 -0500 Subject: [PATCH 21/34] Preview DST Transition info. --- .../Appearance/AppearanceViewController.swift | 15 +++++++++-- Clocker/Preferences/Preferences.storyboard | 25 ++++++++++--------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Clocker/Preferences/Appearance/AppearanceViewController.swift b/Clocker/Preferences/Appearance/AppearanceViewController.swift index ac15a5c..9842891 100644 --- a/Clocker/Preferences/Appearance/AppearanceViewController.swift +++ b/Clocker/Preferences/Appearance/AppearanceViewController.swift @@ -330,6 +330,10 @@ class AppearanceViewController: ParentViewController { @IBAction func fontSliderChanged(_: Any) { previewPanelTableView.reloadData() } + + @IBAction func toggleDSTTransitionOption(_: Any) { + previewPanelTableView.reloadData() + } } extension AppearanceViewController: NSTableViewDataSource, NSTableViewDelegate { @@ -356,8 +360,13 @@ extension AppearanceViewController: NSTableViewDataSource, NSTableViewDelegate { cellView.rowNumber = row cellView.customName.stringValue = currentModel.formattedTimezoneLabel() cellView.time.stringValue = operation.time(with: 0) - cellView.noteLabel.stringValue = currentModel.note ?? CLEmptyString - cellView.noteLabel.toolTip = currentModel.note ?? CLEmptyString + if DataStore.shared().shouldDisplay(.dstTransitionInfo) { + cellView.noteLabel.stringValue = "Heads up! DST Transition will occur in 3 days." + } else if let note = currentModel.note, !note.isEmpty { + cellView.noteLabel.stringValue = note + } else { + cellView.noteLabel.stringValue = CLEmptyString + } cellView.currentLocationIndicator.isHidden = !currentModel.isSystemTimezone cellView.time.setAccessibilityIdentifier("ActualTime") cellView.layout(with: currentModel) @@ -375,6 +384,8 @@ extension AppearanceViewController: NSTableViewDataSource, NSTableViewDelegate { let rowHeight: Int = userFontSize == 4 ? 60 : 65 if let note = model.note, !note.isEmpty { return CGFloat(rowHeight + userFontSize.intValue + 25) + } else if DataStore.shared().shouldDisplay(.dstTransitionInfo) { + return CGFloat(rowHeight + userFontSize.intValue + 25) } return CGFloat(rowHeight + (userFontSize.intValue * 2)) diff --git a/Clocker/Preferences/Preferences.storyboard b/Clocker/Preferences/Preferences.storyboard index 83b0a78..e4e3863 100644 --- a/Clocker/Preferences/Preferences.storyboard +++ b/Clocker/Preferences/Preferences.storyboard @@ -908,6 +908,7 @@ + @@ -947,11 +948,11 @@ - + - + @@ -1521,7 +1522,7 @@ - + @@ -1578,13 +1579,13 @@ DQ - + - + - + @@ -1674,14 +1675,14 @@ DQ - + - + @@ -1729,7 +1730,7 @@ DQ - + @@ -291,7 +291,7 @@ DQ - + @@ -314,7 +314,7 @@ DQ - + @@ -361,24 +361,16 @@ DQ - - - - - - - - - - + + - + @@ -386,25 +378,35 @@ DQ - + + + + + + + + + - - - + + + - + + + @@ -412,13 +414,13 @@ DQ - + - + @@ -646,11 +648,11 @@ DQ - + - + @@ -658,7 +660,7 @@ DQ - + @@ -669,7 +671,7 @@ DQ