From be604337546c0264d5f530db73f21740d198d9f4 Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Wed, 13 Dec 2023 21:06:28 +0200 Subject: [PATCH 1/6] Remove RuuviLocalization file from repo Codegenerate it on the fly --- Apps/RuuviStation/target.yml | 17 - Common/RuuviLocalization/.gitignore | 1 + .../RuuviLocalization/RuuviLocalization.swift | 2659 ----------------- Common/RuuviLocalization/target.yml | 15 + 4 files changed, 16 insertions(+), 2676 deletions(-) delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift diff --git a/Apps/RuuviStation/target.yml b/Apps/RuuviStation/target.yml index d897952f5..c1a2e69df 100644 --- a/Apps/RuuviStation/target.yml +++ b/Apps/RuuviStation/target.yml @@ -9,11 +9,6 @@ targets: excludes: - "*.entitlements" - Info.plist - # - path: Widgets/Sources/Widgets.entitlements - # name: Widgets - # - path: Intents/Sources/Intents.entitlements - # name: Intents - # - path: NotificationService/Sources/NotificationService.entitlements dependencies: - target: "station.widgets" - target: "station.intents" @@ -107,18 +102,6 @@ targets: EXCLUDED_SOURCE_FILE_NAMES: "FLEX*" CODE_SIGN_IDENTITY: "iPhone Distribution" PROVISIONING_PROFILE_SPECIFIER: "match AdHoc com.ruuvi.station" - preBuildScripts: - - path: ../../scripts/build/generate_l10n.sh - name: Generate L10N - inputFiles: - - $(SRCROOT)/station.localization/station.localization.json - outputFiles: - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/en.lproj/Localizable.strings - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/sv.lproj/Localizable.strings - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/ru.lproj/Localizable.strings - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/fi.lproj/Localizable.strings - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/fr.lproj/Localizable.strings - - $(SRCROOT)/Apps/RuuviStation/Sources/Resources/Strings/de.lproj/Localizable.strings postCompileScripts: - path: ../../scripts/build/lint.sh name: Lint diff --git a/Common/RuuviLocalization/.gitignore b/Common/RuuviLocalization/.gitignore index bb460e7be..e35470fe1 100644 --- a/Common/RuuviLocalization/.gitignore +++ b/Common/RuuviLocalization/.gitignore @@ -5,3 +5,4 @@ xcuserdata/ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +RuuviLocalization.swift \ No newline at end of file diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift b/Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift deleted file mode 100644 index 3d3ae71ea..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift +++ /dev/null @@ -1,2659 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -import Foundation - -// swiftlint:disable superfluous_disable_command file_length implicit_return prefer_self_in_static_references - -// MARK: - Strings - -// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -public enum RuuviLocalization { - /// Operation failed. - public static let activityFailedGeneric = RuuviLocalization.tr("Localizable", "activity_failed_generic", fallback: "Operation failed.") - /// Please wait... - public static let activityOngoingGeneric = RuuviLocalization.tr("Localizable", "activity_ongoing_generic", fallback: "Please wait...") - /// Couldn't save changes to cloud. - public static let activitySavingFail = RuuviLocalization.tr("Localizable", "activity_saving_fail", fallback: "Couldn't save changes to cloud.") - /// Saved successfully. - public static let activitySavingSuccess = RuuviLocalization.tr("Localizable", "activity_saving_success", fallback: "Saved successfully.") - /// Saving to cloud...please wait. - public static let activitySavingToCloud = RuuviLocalization.tr("Localizable", "activity_saving_to_cloud", fallback: "Saving to cloud...please wait.") - /// Operation successful. - public static let activitySuccessGeneric = RuuviLocalization.tr("Localizable", "activity_success_generic", fallback: "Operation successful.") - /// Add a Sensor - public static let addASensor = RuuviLocalization.tr("Localizable", "add_a_sensor", fallback: "Add a Sensor") - /// Add Sensor - public static let addSensor = RuuviLocalization.tr("Localizable", "add_sensor", fallback: "Add Sensor") - /// This page shows nearby Ruuvi sensors not yet added to the app. Tap a sensor to add it. - public static let addSensorDescription = RuuviLocalization.tr("Localizable", "add_sensor_description", fallback: "This page shows nearby Ruuvi sensors not yet added to the app. Tap a sensor to add it.") - /// This sensor cannot be added with NFC due to old firmware. Please add the sensor with Bluetooth and update firmware. - public static let addSensorNfcDf3Error = RuuviLocalization.tr("Localizable", "add_sensor_nfc_df3_error", fallback: "This sensor cannot be added with NFC due to old firmware. Please add the sensor with Bluetooth and update firmware.") - /// Alternatively, you can add a sensor using NFC by selecting Add with NFC and touching it with your phone. - public static let addSensorViaNfc = RuuviLocalization.tr("Localizable", "add_sensor_via_nfc", fallback: "Alternatively, you can add a sensor using NFC by selecting Add with NFC and touching it with your phone.") - /// Add with NFC - public static let addWithNfc = RuuviLocalization.tr("Localizable", "add_with_nfc", fallback: "Add with NFC") - /// ago - public static let ago = RuuviLocalization.tr("Localizable", "ago", fallback: "ago") - /// Alert if sensor data hasn't been updated to the cloud for longer than %d minutes. - public static func alertCloudConnectionDescription(_ p1: Int) -> String { - RuuviLocalization.tr("Localizable", "alert_cloud_connection_description", p1, fallback: "Alert if sensor data hasn't been updated to the cloud for longer than %d minutes.") - } - /// Enter the desired delay to be used in minutes before alert is triggered. Minimum value is 2 minutes. - public static let alertCloudConnectionDialogDescription = RuuviLocalization.tr("Localizable", "alert_cloud_connection_dialog_description", fallback: "Enter the desired delay to be used in minutes before alert is triggered. Minimum value is 2 minutes.") - /// Set cloud connection alert - public static let alertCloudConnectionDialogTitle = RuuviLocalization.tr("Localizable", "alert_cloud_connection_dialog_title", fallback: "Set cloud connection alert") - /// Cloud Connection - public static let alertCloudConnectionTitle = RuuviLocalization.tr("Localizable", "alert_cloud_connection_title", fallback: "Cloud Connection") - /// Air Humidity is above %@ - public static func alertNotificationHumidityHighThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_humidity_high_threshold", String(describing: p1), fallback: "Air Humidity is above %@") - } - /// Air Humidity is below %@ - public static func alertNotificationHumidityLowThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_humidity_low_threshold", String(describing: p1), fallback: "Air Humidity is below %@") - } - /// Air Pressure is above %@ - public static func alertNotificationPressureHighThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_pressure_high_threshold", String(describing: p1), fallback: "Air Pressure is above %@") - } - /// Air Pressure is below %@ - public static func alertNotificationPressureLowThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_pressure_low_threshold", String(describing: p1), fallback: "Air Pressure is below %@") - } - /// Signal strength is above %@ - public static func alertNotificationRssiHighThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_rssi_high_threshold", String(describing: p1), fallback: "Signal strength is above %@") - } - /// Signal strength is below %@ - public static func alertNotificationRssiLowThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_rssi_low_threshold", String(describing: p1), fallback: "Signal strength is below %@") - } - /// Temperature is above %@ - public static func alertNotificationTemperatureHighThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_temperature_high_threshold", String(describing: p1), fallback: "Temperature is above %@") - } - /// Temperature is below %@ - public static func alertNotificationTemperatureLowThreshold(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "alert_notification_temperature_low_threshold", String(describing: p1), fallback: "Temperature is below %@") - } - /// All - public static let all = RuuviLocalization.tr("Localizable", "all", fallback: "All") - /// App Theme - public static let appTheme = RuuviLocalization.tr("Localizable", "app_theme", fallback: "App Theme") - /// Read more about Ruuvi account benefits or sign in later - public static let benefitsSignIn = RuuviLocalization.tr("Localizable", "benefits_sign_in", fallback: "Read more about Ruuvi account benefits or sign in later") - /// Bluetooth download - public static let bluetoothDownload = RuuviLocalization.tr("Localizable", "bluetooth_download", fallback: "Bluetooth download") - /// Local sensor data can be downloaded, when you're within its Bluetooth range. - public static let bluetoothDownloadDescription = RuuviLocalization.tr("Localizable", "bluetooth_download_description", fallback: "Local sensor data can be downloaded, when you're within its Bluetooth range.") - /// Cancel - public static let cancel = RuuviLocalization.tr("Localizable", "Cancel", fallback: "Cancel") - /// Card action - public static let cardAction = RuuviLocalization.tr("Localizable", "card_action", fallback: "Card action") - /// Card type - public static let cardType = RuuviLocalization.tr("Localizable", "card_type", fallback: "Card type") - /// Change background - public static let changeBackground = RuuviLocalization.tr("Localizable", "change_background", fallback: "Change background") - /// Change background image - public static let changeBackgroundImage = RuuviLocalization.tr("Localizable", "change_background_image", fallback: "Change background image") - /// Select background image. If you're not signed in, you'll lose the image in case of app reinstall. - public static let changeBackgroundMessage = RuuviLocalization.tr("Localizable", "change_background_message", fallback: "Select background image. If you're not signed in, you'll lose the image in case of app reinstall.") - /// (changelog) - public static let changelog = RuuviLocalization.tr("Localizable", "changelog", fallback: "(changelog)") - /// https://f.ruuvi.com/t/3192 - public static let changelogIosUrl = RuuviLocalization.tr("Localizable", "changelog_ios_url", fallback: "https://f.ruuvi.com/t/3192") - /// Average - public static let chartStatAvg = RuuviLocalization.tr("Localizable", "chart_stat_avg", fallback: "Average") - /// Hide min/max/avg - public static let chartStatHide = RuuviLocalization.tr("Localizable", "chart_stat_hide", fallback: "Hide min/max/avg") - /// Max - public static let chartStatMax = RuuviLocalization.tr("Localizable", "chart_stat_max", fallback: "Max") - /// Min - public static let chartStatMin = RuuviLocalization.tr("Localizable", "chart_stat_min", fallback: "Min") - /// Show min/max/avg - public static let chartStatShow = RuuviLocalization.tr("Localizable", "chart_stat_show", fallback: "Show min/max/avg") - /// Checking claim state - public static let checkClaimState = RuuviLocalization.tr("Localizable", "check_claim_state", fallback: "Checking claim state") - /// Claiming in progress - public static let claimInProgress = RuuviLocalization.tr("Localizable", "claim_in_progress", fallback: "Claiming in progress") - /// Claim sensor ownership - public static let claimSensorOwnership = RuuviLocalization.tr("Localizable", "claim_sensor_ownership", fallback: "Claim sensor ownership") - /// Secure the ownership information of your sensors by claiming their ownerships in the app. - public static let claimWarning = RuuviLocalization.tr("Localizable", "claim_warning", fallback: "Secure the ownership information of your sensors by claiming their ownerships in the app.") - /// You are scanning different RuuviTag - public static let claimWrongSensorScanned = RuuviLocalization.tr("Localizable", "claim_wrong_sensor_scanned", fallback: "You are scanning different RuuviTag") - /// Clear local history - public static let clearLocalHistory = RuuviLocalization.tr("Localizable", "clear_local_history", fallback: "Clear local history") - /// Do you want to clear locally stored history data from the app? This won't clear internally stored history from the sensor or history data stored on the Ruuvi Cloud service. - public static let clearLocalHistoryDescription = RuuviLocalization.tr("Localizable", "clear_local_history_description", fallback: "Do you want to clear locally stored history data from the app? This won't clear internally stored history from the sensor or history data stored on the Ruuvi Cloud service.") - /// Clear history view - public static let clearView = RuuviLocalization.tr("Localizable", "clear_view", fallback: "Clear history view") - /// Close - public static let close = RuuviLocalization.tr("Localizable", "Close", fallback: "Close") - /// ● Background images - public static let cloudStoredAlerts = RuuviLocalization.tr("Localizable", "cloud_stored_alerts", fallback: "● Background images") - /// ● Alert settings - public static let cloudStoredBackgrounds = RuuviLocalization.tr("Localizable", "cloud_stored_backgrounds", fallback: "● Alert settings") - /// ● Calibration settings - public static let cloudStoredCalibration = RuuviLocalization.tr("Localizable", "cloud_stored_calibration", fallback: "● Calibration settings") - /// ● Custom names - public static let cloudStoredNames = RuuviLocalization.tr("Localizable", "cloud_stored_names", fallback: "● Custom names") - /// ● Sensor ownerships - public static let cloudStoredOwnerships = RuuviLocalization.tr("Localizable", "cloud_stored_ownerships", fallback: "● Sensor ownerships") - /// ● App settings - public static let cloudStoredSharing = RuuviLocalization.tr("Localizable", "cloud_stored_sharing", fallback: "● App settings") - /// Confirm - public static let confirm = RuuviLocalization.tr("Localizable", "Confirm", fallback: "Confirm") - /// Copy - public static let copy = RuuviLocalization.tr("Localizable", "Copy", fallback: "Copy") - /// Copy MAC Address - public static let copyMacAddress = RuuviLocalization.tr("Localizable", "copy_mac_address", fallback: "Copy MAC Address") - /// Copy Unique ID - public static let copyUniqueId = RuuviLocalization.tr("Localizable", "copy_unique_id", fallback: "Copy Unique ID") - /// Dark theme - public static let darkTheme = RuuviLocalization.tr("Localizable", "dark_theme", fallback: "Dark theme") - /// Seems that you don't have any Ruuvi sensors added yet. - public static let dashboardNoSensorsMessage = RuuviLocalization.tr("Localizable", "dashboard_no_sensors_message", fallback: "Seems that you don't have any Ruuvi sensors added yet.") - /// You are not signed in. - /// - /// If you have an account and have already added Ruuvi sensors to it, they will automatically synchronise with Ruuvi Station mobile app when you sign in. - public static let dashboardNoSensorsMessageSignedOut = RuuviLocalization.tr("Localizable", "dashboard_no_sensors_message_signed_out", fallback: "You are not signed in.\n\nIf you have an account and have already added Ruuvi sensors to it, they will automatically synchronise with Ruuvi Station mobile app when you sign in.") - /// 1 day - public static let day1 = RuuviLocalization.tr("Localizable", "day_1", fallback: "1 day") - /// 10 days - public static let day10 = RuuviLocalization.tr("Localizable", "day_10", fallback: "10 days") - /// 2 days - public static let day2 = RuuviLocalization.tr("Localizable", "day_2", fallback: "2 days") - /// 3 days - public static let day3 = RuuviLocalization.tr("Localizable", "day_3", fallback: "3 days") - /// 4 days - public static let day4 = RuuviLocalization.tr("Localizable", "day_4", fallback: "4 days") - /// 5 days - public static let day5 = RuuviLocalization.tr("Localizable", "day_5", fallback: "5 days") - /// 6 days - public static let day6 = RuuviLocalization.tr("Localizable", "day_6", fallback: "6 days") - /// 7 days - public static let day7 = RuuviLocalization.tr("Localizable", "day_7", fallback: "7 days") - /// 8 days - public static let day8 = RuuviLocalization.tr("Localizable", "day_8", fallback: "8 days") - /// 9 days - public static let day9 = RuuviLocalization.tr("Localizable", "day_9", fallback: "9 days") - /// %.0f days - public static func dayX(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "day_x", p1, fallback: "%.0f days") - } - /// dBm - public static let dBm = RuuviLocalization.tr("Localizable", "dBm", fallback: "dBm") - /// Are you sure? - public static let dialogAreYouSure = RuuviLocalization.tr("Localizable", "dialog_are_you_sure", fallback: "Are you sure?") - /// This operation cannot be undone. - public static let dialogOperationUndone = RuuviLocalization.tr("Localizable", "dialog_operation_undone", fallback: "This operation cannot be undone.") - /// Don't show this again - public static let doNotShowAgain = RuuviLocalization.tr("Localizable", "do_not_show_again", fallback: "Don't show this again") - /// Do you own this sensor? - public static let doYouOwnSensor = RuuviLocalization.tr("Localizable", "do_you_own_sensor", fallback: "Do you own this sensor?") - /// Done - public static let done = RuuviLocalization.tr("Localizable", "Done", fallback: "Done") - /// Download - public static let download = RuuviLocalization.tr("Localizable", "download", fallback: "Download") - /// No data available - /// in the selected history window. - public static let emptyChartMessage = RuuviLocalization.tr("Localizable", "empty_chart_message", fallback: "No data available \nin the selected history window.") - /// Enter Code - public static let enterCode = RuuviLocalization.tr("Localizable", "enter_code", fallback: "Enter Code") - /// You can export a sensor's history from its history graph page. Tap the three dots menu icon in the top right corner, and then select "Export history (csv)". - public static let exportCsvFeatureLocation = RuuviLocalization.tr("Localizable", "export_csv_feature_location", fallback: "You can export a sensor's history from its history graph page. Tap the three dots menu icon in the top right corner, and then select \"Export history (csv)\".") - /// Export history (csv) - public static let exportHistory = RuuviLocalization.tr("Localizable", "export_history", fallback: "Export history (csv)") - /// Firmware Version: - public static let firmwareVersion = RuuviLocalization.tr("Localizable", "firmware_version", fallback: "Firmware Version:") - /// System theme - public static let followSystemTheme = RuuviLocalization.tr("Localizable", "follow_system_theme", fallback: "System theme") - /// Force Claim - public static let forceClaim = RuuviLocalization.tr("Localizable", "force_claim", fallback: "Force Claim") - /// Force Claim Sensor - public static let forceClaimSensor = RuuviLocalization.tr("Localizable", "force_claim_sensor", fallback: "Force Claim Sensor") - /// This sensor has been claimed by another user. You can force the ownership to your account if you have physical access to this sensor. Each Ruuvi sensor can have only one owner. - public static let forceClaimSensorDescription1 = RuuviLocalization.tr("Localizable", "force_claim_sensor_description1", fallback: "This sensor has been claimed by another user. You can force the ownership to your account if you have physical access to this sensor. Each Ruuvi sensor can have only one owner.") - /// Force Claim is done by using Near-Field Communication (NFC). Make sure NFC is enabled on your mobile device. - /// - /// 1. Touch your Ruuvi sensor with your mobile device to start the claiming process. - /// - /// 2. When successfully claimed, you will be sent back to Sensor Settings. - /// - /// If claiming was unsuccessful or NFC is not available on your device: - /// - /// 1. Open the cover of your Ruuvi sensor. - /// - /// 2. Locate the round black button (or button "B" in case your sensor has 2 buttons) on the white circuit board and press it briefly, then tap on Use BT button to start the claiming process. - /// - /// 3. When successfully claimed you will be sent back to Sensor Settings. - public static let forceClaimSensorDescription2 = RuuviLocalization.tr("Localizable", "force_claim_sensor_description2", fallback: "Force Claim is done by using Near-Field Communication (NFC). Make sure NFC is enabled on your mobile device.\n\n\t1. Touch your Ruuvi sensor with your mobile device to start the claiming process.\n\n\t2. When successfully claimed, you will be sent back to Sensor Settings.\n\nIf claiming was unsuccessful or NFC is not available on your device:\n\n\t1. Open the cover of your Ruuvi sensor.\n\n\t2. Locate the round black button (or button \"B\" in case your sensor has 2 buttons) on the white circuit board and press it briefly, then tap on Use BT button to start the claiming process.\n\n\t3. When successfully claimed you will be sent back to Sensor Settings.") - /// Full image view - public static let fullImageView = RuuviLocalization.tr("Localizable", "full_image_view", fallback: "Full image view") - /// g - public static let g = RuuviLocalization.tr("Localizable", "g", fallback: "g") - /// g/m³ - public static let gm³ = RuuviLocalization.tr("Localizable", "g/m³", fallback: "g/m³") - /// Ruuvi Station downloads the internal history of the sensor for the last 10 days if the measurement history is available. - /// - /// The history is downloaded using a Bluetooth connection. Make sure you are near the sensor. - public static let gattSyncDescription = RuuviLocalization.tr("Localizable", "gatt_sync_description", fallback: "Ruuvi Station downloads the internal history of the sensor for the last 10 days if the measurement history is available.\n\nThe history is downloaded using a Bluetooth connection. Make sure you are near the sensor.") - /// Go to sensor card - public static let goToSensor = RuuviLocalization.tr("Localizable", "go_to_sensor", fallback: "Go to sensor card") - /// h - public static let h = RuuviLocalization.tr("Localizable", "h", fallback: "h") - /// History view - public static let historyView = RuuviLocalization.tr("Localizable", "history_view", fallback: "History view") - /// Hour - public static let hour = RuuviLocalization.tr("Localizable", "hour", fallback: "Hour") - /// Hours - public static let hours = RuuviLocalization.tr("Localizable", "hours", fallback: "Hours") - /// hPa - public static let hPa = RuuviLocalization.tr("Localizable", "hPa", fallback: "hPa") - /// Image cards - public static let imageCards = RuuviLocalization.tr("Localizable", "image_cards", fallback: "Image cards") - /// Internet connection problem - public static let internetConnectionProblem = RuuviLocalization.tr("Localizable", "internet_connection_problem", fallback: "Internet connection problem") - /// Let's Sign In - public static let letsDoIt = RuuviLocalization.tr("Localizable", "lets_do_it", fallback: "Let's Sign In") - /// Light theme - public static let lightTheme = RuuviLocalization.tr("Localizable", "light_theme", fallback: "Light theme") - /// Ruuvi Station mobile app supports maximum 10 days of history. Ruuvi Cloud subscribers are able to view up to 2 years of historical data using web app at ruuvi.com/station (requires Ruuvi Gateway router). - public static let longerHistoryMessage = RuuviLocalization.tr("Localizable", "longer_history_message", fallback: "Ruuvi Station mobile app supports maximum 10 days of history. Ruuvi Cloud subscribers are able to view up to 2 years of historical data using web app at ruuvi.com/station (requires Ruuvi Gateway router).") - /// Longer history - public static let longerHistoryTitle = RuuviLocalization.tr("Localizable", "longer_history_title", fallback: "Longer history") - /// Low battery - public static let lowBattery = RuuviLocalization.tr("Localizable", "low_battery", fallback: "Low battery") - /// Mac Address: - public static let macAddress = RuuviLocalization.tr("Localizable", "mac_address", fallback: "Mac Address:") - /// min - public static let min = RuuviLocalization.tr("Localizable", "min", fallback: "min") - /// Minutes - public static let minutes = RuuviLocalization.tr("Localizable", "minutes", fallback: "Minutes") - /// More... - public static let more = RuuviLocalization.tr("Localizable", "more", fallback: "More...") - /// - - public static let na = RuuviLocalization.tr("Localizable", "N/A", fallback: "-") - /// Name: - public static let name = RuuviLocalization.tr("Localizable", "name", fallback: "Name:") - /// Only sensors within range of your Ruuvi Gateway can be shared. - public static let networkSharingDisabled = RuuviLocalization.tr("Localizable", "network_sharing_disabled", fallback: "Only sensors within range of your Ruuvi Gateway can be shared.") - /// No - public static let no = RuuviLocalization.tr("Localizable", "No", fallback: "No") - /// A free account will be created for this email if you don't already have one. Only email address is required. We keep your information safe. - public static let noPasswordNeeded = RuuviLocalization.tr("Localizable", "no_password_needed", fallback: "A free account will be created for this email if you don't already have one. Only email address is required. We keep your information safe.") - /// Note! - public static let note = RuuviLocalization.tr("Localizable", "note", fallback: "Note!") - /// Off - public static let off = RuuviLocalization.tr("Localizable", "Off", fallback: "Off") - /// OK - public static let ok = RuuviLocalization.tr("Localizable", "OK", fallback: "OK") - /// On - public static let on = RuuviLocalization.tr("Localizable", "On", fallback: "On") - /// Bring your favorite sensors to your Home Screen and Lock Screen as - public static let onboardingAccessWidgets = RuuviLocalization.tr("Localizable", "onboarding_access_widgets", fallback: "Bring your favorite sensors to your Home Screen and Lock Screen as") - /// Alerts - public static let onboardingAlerts = RuuviLocalization.tr("Localizable", "onboarding_alerts", fallback: "Alerts") - /// Next - public static let onboardingContinue = RuuviLocalization.tr("Localizable", "onboarding_continue", fallback: "Next") - /// Dashboard - public static let onboardingDashboard = RuuviLocalization.tr("Localizable", "onboarding_dashboard", fallback: "Dashboard") - /// Explore your measurement - public static let onboardingExploreDetailed = RuuviLocalization.tr("Localizable", "onboarding_explore_detailed", fallback: "Explore your measurement") - /// View all sensors at a glance on your - public static let onboardingFollowMeasurement = RuuviLocalization.tr("Localizable", "onboarding_follow_measurement", fallback: "View all sensors at a glance on your") - /// A Ruuvi Gateway router is required. - public static let onboardingGatewayRequired = RuuviLocalization.tr("Localizable", "onboarding_gateway_required", fallback: "A Ruuvi Gateway router is required.") - /// Ruuvi experience is better when you're signed in. Do it now or continue without cloud features. - public static let onboardingGoToSignIn = RuuviLocalization.tr("Localizable", "onboarding_go_to_sign_in", fallback: "Ruuvi experience is better when you're signed in. Do it now or continue without cloud features.") - /// Let's start measuring! - public static let onboardingGoToSignInAlreadySignedIn = RuuviLocalization.tr("Localizable", "onboarding_go_to_sign_in_already_signed_in", fallback: "Let's start measuring!") - /// Widgets - public static let onboardingHandyWidgets = RuuviLocalization.tr("Localizable", "onboarding_handy_widgets", fallback: "Widgets") - /// History - public static let onboardingHistory = RuuviLocalization.tr("Localizable", "onboarding_history", fallback: "History") - /// Measure Your World - public static let onboardingMeasureYourWorld = RuuviLocalization.tr("Localizable", "onboarding_measure_your_world", fallback: "Measure Your World") - /// Personalise - public static let onboardingPersonalise = RuuviLocalization.tr("Localizable", "onboarding_personalise", fallback: "Personalise") - /// Read Your Ruuvi Sensors - public static let onboardingReadSensorsData = RuuviLocalization.tr("Localizable", "onboarding_read_sensors_data", fallback: "Read Your Ruuvi Sensors") - /// Set and customise your - public static let onboardingSetCustom = RuuviLocalization.tr("Localizable", "onboarding_set_custom", fallback: "Set and customise your") - /// to measure together with your friends and family. - public static let onboardingShareYourSensors = RuuviLocalization.tr("Localizable", "onboarding_share_your_sensors", fallback: "to measure together with your friends and family.") - /// Share Sensors - public static let onboardingShareesCanUse = RuuviLocalization.tr("Localizable", "onboarding_sharees_can_use", fallback: "Share Sensors") - /// Skip - public static let onboardingSkip = RuuviLocalization.tr("Localizable", "onboarding_skip", fallback: "Skip") - /// Ruuvi Web App - public static let onboardingStationWeb = RuuviLocalization.tr("Localizable", "onboarding_station_web", fallback: "Ruuvi Web App") - /// Swipe to continue → - public static let onboardingSwipeToContinue = RuuviLocalization.tr("Localizable", "onboarding_swipe_to_continue", fallback: "Swipe to continue →") - /// Almost there! - public static let onboardingThatsIt = RuuviLocalization.tr("Localizable", "onboarding_thats_it", fallback: "Almost there!") - /// Let's get started! - public static let onboardingThatsItAlreadySignedIn = RuuviLocalization.tr("Localizable", "onboarding_thats_it_already_signed_in", fallback: "Let's get started!") - /// using Bluetooth or Ruuvi Cloud - public static let onboardingViaBluetoothOrCloud = RuuviLocalization.tr("Localizable", "onboarding_via_bluetooth_or_cloud", fallback: "using Bluetooth or Ruuvi Cloud") - /// Large dashboard, multi-year history, email alerts and more on - public static let onboardingWebPros = RuuviLocalization.tr("Localizable", "onboarding_web_pros", fallback: "Large dashboard, multi-year history, email alerts and more on") - /// Let's get to know your Ruuvi Station app. - public static let onboardingWithRuuviSensors = RuuviLocalization.tr("Localizable", "onboarding_with_ruuvi_sensors", fallback: "Let's get to know your Ruuvi Station app.") - /// your app with custom names and backgrounds. - public static let onboardingYourSensors = RuuviLocalization.tr("Localizable", "onboarding_your_sensors", fallback: "your app with custom names and backgrounds.") - /// Open history view - public static let openHistoryView = RuuviLocalization.tr("Localizable", "open_history_view", fallback: "Open history view") - /// Open sensor view - public static let openSensorView = RuuviLocalization.tr("Localizable", "open_sensor_view", fallback: "Open sensor view") - /// Owner's Ruuvi Plan - public static let ownersPlan = RuuviLocalization.tr("Localizable", "owners_plan", fallback: "Owner's Ruuvi Plan") - /// Reading Bluetooth: %.0f - public static func readingHistoryX(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "reading_history_x", p1, fallback: "Reading Bluetooth: %.0f") - } - /// Remove - public static let remove = RuuviLocalization.tr("Localizable", "Remove", fallback: "Remove") - /// By removing the sensor, your sensor ownership status will be revoked and sensor settings, such as name, background image, calibration settings and alert settings will be removed. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner. - public static let removeClaimedSensorDescription = RuuviLocalization.tr("Localizable", "remove_claimed_sensor_description", fallback: "By removing the sensor, your sensor ownership status will be revoked and sensor settings, such as name, background image, calibration settings and alert settings will be removed. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner.") - /// I also want to remove sensor history data from Ruuvi Cloud. - public static let removeCloudHistoryDescription = RuuviLocalization.tr("Localizable", "remove_cloud_history_description", fallback: "I also want to remove sensor history data from Ruuvi Cloud.") - /// Remove cloud history - public static let removeCloudHistoryTitle = RuuviLocalization.tr("Localizable", "remove_cloud_history_title", fallback: "Remove cloud history") - /// If you choose to remove this sensor, it will result in the deletion of your locally stored measurement history, along with the removal of any related sensor settings like name, background image, calibration, and alert configurations. - /// - /// You can add this sensor later again, if needed. - public static let removeLocalSensorDescription = RuuviLocalization.tr("Localizable", "remove_local_sensor_description", fallback: "If you choose to remove this sensor, it will result in the deletion of your locally stored measurement history, along with the removal of any related sensor settings like name, background image, calibration, and alert configurations.\n\nYou can add this sensor later again, if needed.") - /// If you choose to remove this shared sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore. - /// - /// You will also lose any related sensor settings like name, background image and alert configurations. - public static let removeSharedSensorDescription = RuuviLocalization.tr("Localizable", "remove_shared_sensor_description", fallback: "If you choose to remove this shared sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore.\n\nYou will also lose any related sensor settings like name, background image and alert configurations.") - /// Rename - public static let rename = RuuviLocalization.tr("Localizable", "rename", fallback: "Rename") - /// Request Code - public static let requestCode = RuuviLocalization.tr("Localizable", "request_code", fallback: "Request Code") - /// Using this alert requires you to be signed in to the app, and that you have claimed the ownership of this sensor and it's in the range of Ruuvi Gateway router. iOS devices are unable to indicate signal strength information of received data sent by Ruuvi sensor when sensor is paired and measurements are being received in the background. Realtime Bluetooth signal strength is shown in the app but doesn't affect this alert. - public static let rssiAlertDescription = RuuviLocalization.tr("Localizable", "rssi_alert_description", fallback: "Using this alert requires you to be signed in to the app, and that you have claimed the ownership of this sensor and it's in the range of Ruuvi Gateway router. iOS devices are unable to indicate signal strength information of received data sent by Ruuvi sensor when sensor is paired and measurements are being received in the background. Realtime Bluetooth signal strength is shown in the app but doesn't affect this alert.") - /// Ruuvi Cloud - public static let ruuviCloud = RuuviLocalization.tr("Localizable", "ruuvi_cloud", fallback: "Ruuvi Cloud") - /// s - public static let s = RuuviLocalization.tr("Localizable", "s", fallback: "s") - /// Select from default images - public static let selectDefaultImage = RuuviLocalization.tr("Localizable", "select_default_image", fallback: "Select from default images") - /// Select from phone gallery - public static let selectFromGallery = RuuviLocalization.tr("Localizable", "select_from_gallery", fallback: "Select from phone gallery") - /// Sensor Details - public static let sensorDetails = RuuviLocalization.tr("Localizable", "sensor_details", fallback: "Sensor Details") - /// Sensor not found. Try again. - public static let sensorNotFoundError = RuuviLocalization.tr("Localizable", "sensor_not_found_error", fallback: "Sensor not found. Try again.") - /// Signing in to the app has many advantages. Settings will be safely stored to your account: - public static let sensorsOwnershipAndSettingsStoredInCloud = RuuviLocalization.tr("Localizable", "sensors_ownership_and_settings_stored_in_cloud", fallback: "Signing in to the app has many advantages. Settings will be safely stored to your account:") - /// Limit alert notifications - public static let settingsAlertLimitNotification = RuuviLocalization.tr("Localizable", "settings_alert_limit_notification", fallback: "Limit alert notifications") - /// Trigger Bluetooth alert notification only once per hour even if alert was retriggered. - public static let settingsAlertLimitNotificationDescription = RuuviLocalization.tr("Localizable", "settings_alert_limit_notification_description", fallback: "Trigger Bluetooth alert notification only once per hour even if alert was retriggered.") - /// Alert Notifications - public static let settingsAlertNotifications = RuuviLocalization.tr("Localizable", "settings_alert_notifications", fallback: "Alert Notifications") - /// Alert Sound - public static let settingsAlertSound = RuuviLocalization.tr("Localizable", "settings_alert_sound", fallback: "Alert Sound") - /// System Default - public static let settingsAlertSoundDefault = RuuviLocalization.tr("Localizable", "settings_alert_sound_default", fallback: "System Default") - /// Select push notification alert sound. - public static let settingsAlertSoundDescription = RuuviLocalization.tr("Localizable", "settings_alert_sound_description", fallback: "Select push notification alert sound.") - /// Ruuvi Alert - public static let settingsAlertSoundRuuviSpeak = RuuviLocalization.tr("Localizable", "settings_alert_sound_ruuvi_speak", fallback: "Ruuvi Alert") - /// You can also adjust Notification settings under iOS Settings -> Notifications - public static let settingsAlertsFooterDescription = RuuviLocalization.tr("Localizable", "settings_alerts_footer_description", fallback: "You can also adjust Notification settings under iOS Settings -> Notifications") - /// iOS Settings -> Notifications - public static let settingsAlertsFooterDescriptionLinkMask = RuuviLocalization.tr("Localizable", "settings_alerts_footer_description_link_mask", fallback: "iOS Settings -> Notifications") - /// Settings & alerts - public static let settingsAndAlerts = RuuviLocalization.tr("Localizable", "settings_and_alerts", fallback: "Settings & alerts") - /// Appearance - public static let settingsAppearance = RuuviLocalization.tr("Localizable", "settings_appearance", fallback: "Appearance") - /// Email Alerts - public static let settingsEmailAlerts = RuuviLocalization.tr("Localizable", "settings_email_alerts", fallback: "Email Alerts") - /// If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive email alerts by enabling this. - public static let settingsEmailAlertsDescription = RuuviLocalization.tr("Localizable", "settings_email_alerts_description", fallback: "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive email alerts by enabling this.") - /// Push Alerts - public static let settingsPushAlerts = RuuviLocalization.tr("Localizable", "settings_push_alerts", fallback: "Push Alerts") - /// If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive push alerts by enabling this. - public static let settingsPushAlertsDescription = RuuviLocalization.tr("Localizable", "settings_push_alerts_description", fallback: "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive push alerts by enabling this.") - /// Share pending - public static let sharePending = RuuviLocalization.tr("Localizable", "share_pending", fallback: "Share pending") - /// Shared successfully! This email address isn't linked to a Ruuvi account yet. An invite to create a free account has been sent. Once created, you'll see it in the sharee listing. - public static let sharePendingMessage = RuuviLocalization.tr("Localizable", "share_pending_message", fallback: "Shared successfully! This email address isn't linked to a Ruuvi account yet. An invite to create a free account has been sent. Once created, you'll see it in the sharee listing.") - /// Shared to %d/%d - public static func sharedToX(_ p1: Int, _ p2: Int) -> String { - RuuviLocalization.tr("Localizable", "shared_to_x", p1, p2, fallback: "Shared to %d/%d") - } - /// Continue - public static let signInContinue = RuuviLocalization.tr("Localizable", "sign_in_continue", fallback: "Continue") - /// Sign in or create a free Ruuvi account - public static let signInOrCreateFreeAccount = RuuviLocalization.tr("Localizable", "sign_in_or_create_free_account", fallback: "Sign in or create a free Ruuvi account") - /// Signal Strength (dBm) - public static let signalStrengthDbm = RuuviLocalization.tr("Localizable", "signal_strength_dbm", fallback: "Signal Strength (dBm)") - /// (Signing in is optional) - public static let signingInIsOptional = RuuviLocalization.tr("Localizable", "signing_in_is_optional", fallback: "(Signing in is optional)") - /// Simple cards - public static let simpleCards = RuuviLocalization.tr("Localizable", "simple_cards", fallback: "Simple cards") - /// Support - public static let support = RuuviLocalization.tr("Localizable", "support", fallback: "Support") - /// Synchronisation - public static let synchronisation = RuuviLocalization.tr("Localizable", "synchronisation", fallback: "Synchronisation") - /// Synchronised - public static let synchronized = RuuviLocalization.tr("Localizable", "Synchronized", fallback: "Synchronised") - /// Loading history from the cloud... - public static let syncing = RuuviLocalization.tr("Localizable", "Syncing...", fallback: "Loading history from the cloud...") - /// Take a photo - public static let takePhoto = RuuviLocalization.tr("Localizable", "take_photo", fallback: "Take a photo") - /// No password needed. - public static let toUseAllAppFeatures = RuuviLocalization.tr("Localizable", "to_use_all_app_features", fallback: "No password needed.") - /// Type your email.. - public static let typeYourEmail = RuuviLocalization.tr("Localizable", "type_your_email", fallback: "Type your email..") - /// Unclaim - public static let unclaim = RuuviLocalization.tr("Localizable", "unclaim", fallback: "Unclaim") - /// Unclaim sensor - public static let unclaimSensor = RuuviLocalization.tr("Localizable", "unclaim_sensor", fallback: "Unclaim sensor") - /// Ownership of this sensor has been claimed to your Ruuvi account. Press Unclaim to remove this sensor's settings and related data from your Ruuvi account. - public static let unclaimSensorDescription = RuuviLocalization.tr("Localizable", "unclaim_sensor_description", fallback: "Ownership of this sensor has been claimed to your Ruuvi account. Press Unclaim to remove this sensor's settings and related data from your Ruuvi account.") - /// Unique ID: - public static let uniqueId = RuuviLocalization.tr("Localizable", "unique_id", fallback: "Unique ID:") - /// Updated - public static let updated = RuuviLocalization.tr("Localizable", "Updated", fallback: "Updated") - /// Uploading: %.0f - public static func uploadingProgress(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "uploading_progress", p1, fallback: "Uploading: %.0f") - } - /// Use BT - public static let useBluetooth = RuuviLocalization.tr("Localizable", "use_bluetooth", fallback: "Use BT") - /// Use NFC - public static let useNfc = RuuviLocalization.tr("Localizable", "use_nfc", fallback: "Use NFC") - /// No thanks, skip - public static let useWithoutAccount = RuuviLocalization.tr("Localizable", "use_without_account", fallback: "No thanks, skip") - /// V - public static let v = RuuviLocalization.tr("Localizable", "V", fallback: "V") - /// View - public static let view = RuuviLocalization.tr("Localizable", "view", fallback: "View") - /// Benefits - public static let whyShouldSignIn = RuuviLocalization.tr("Localizable", "why_should_sign_in", fallback: "Benefits") - /// Yes - public static let yes = RuuviLocalization.tr("Localizable", "Yes", fallback: "Yes") - /// °C - public static let ºC = RuuviLocalization.tr("Localizable", "ºC", fallback: "°C") - /// °F - public static let ºF = RuuviLocalization.tr("Localizable", "ºF", fallback: "°F") - public enum About { - public enum AboutHelp { - /// Ruuvi Station is an easy-to-use application that allows you to monitor the measurement data of Ruuvi sensors. - public static let contents = RuuviLocalization.tr("Localizable", "About.AboutHelp.contents", fallback: "Ruuvi Station is an easy-to-use application that allows you to monitor the measurement data of Ruuvi sensors.") - /// About / Help - public static let header = RuuviLocalization.tr("Localizable", "About.AboutHelp.header", fallback: "About / Help") - } - public enum DatabaseSize { - /// Database size: %@ - public static func text(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "About.DatabaseSize.text", String(describing: p1), fallback: "Database size: %@") - } - } - public enum MeasurementsCount { - /// Number of locally stored measurements: %d - public static func text(_ p1: Int) -> String { - RuuviLocalization.tr("Localizable", "About.MeasurementsCount.text", p1, fallback: "Number of locally stored measurements: %d") - } - } - public enum More { - /// Ruuvi's website: ruuvi.com - /// Ruuvi Forum: f.ruuvi.com - /// Ruuvi Blog: ruuvi.com/blog - /// Ruuvi on Twitter: twitter.com/ruuvicom - public static let contents = RuuviLocalization.tr("Localizable", "About.More.contents", fallback: "Ruuvi's website: ruuvi.com\nRuuvi Forum: f.ruuvi.com\nRuuvi Blog: ruuvi.com/blog\nRuuvi on Twitter: twitter.com/ruuvicom") - /// More to read - public static let header = RuuviLocalization.tr("Localizable", "About.More.header", fallback: "More to read") - } - public enum OpenSource { - /// Just like Ruuvi sensors, Ruuvi Station apps are open source. Follow the development and contribute at: github.com/ruuvi - public static let contents = RuuviLocalization.tr("Localizable", "About.OpenSource.contents", fallback: "Just like Ruuvi sensors, Ruuvi Station apps are open source. Follow the development and contribute at: github.com/ruuvi") - /// Open-source - public static let header = RuuviLocalization.tr("Localizable", "About.OpenSource.header", fallback: "Open-source") - } - public enum OperationsManual { - /// Get started using the Ruuvi Station mobile application with our online guides: ruuvi.com/support/station-mobile - public static let contents = RuuviLocalization.tr("Localizable", "About.OperationsManual.contents", fallback: "Get started using the Ruuvi Station mobile application with our online guides: ruuvi.com/support/station-mobile") - /// Operations manual - public static let header = RuuviLocalization.tr("Localizable", "About.OperationsManual.header", fallback: "Operations manual") - } - public enum Privacy { - /// By using the application, you accept Ruuvi's standard terms and conditions: ruuvi.com/terms - public static let contents = RuuviLocalization.tr("Localizable", "About.Privacy.contents", fallback: "By using the application, you accept Ruuvi's standard terms and conditions: ruuvi.com/terms") - /// Privacy policy - public static let header = RuuviLocalization.tr("Localizable", "About.Privacy.header", fallback: "Privacy policy") - } - public enum TagsCount { - /// Added sensors: %d - public static func text(_ p1: Int) -> String { - RuuviLocalization.tr("Localizable", "About.TagsCount.text", p1, fallback: "Added sensors: %d") - } - } - public enum Troubleshooting { - /// Find help using the Ruuvi Station apps, Ruuvi products and Ruuvi Cloud service from our support center: ruuvi.com/support - public static let contents = RuuviLocalization.tr("Localizable", "About.Troubleshooting.contents", fallback: "Find help using the Ruuvi Station apps, Ruuvi products and Ruuvi Cloud service from our support center: ruuvi.com/support") - /// Troubleshooting - public static let header = RuuviLocalization.tr("Localizable", "About.Troubleshooting.header", fallback: "Troubleshooting") - } - public enum Version { - /// Version - public static let text = RuuviLocalization.tr("Localizable", "About.Version.text", fallback: "Version") - } - } - public enum Background { - public enum Interval { - public enum Every { - /// every - public static let string = RuuviLocalization.tr("Localizable", "Background.Interval.Every.string", fallback: "every") - } - public enum Min { - /// min - public static let string = RuuviLocalization.tr("Localizable", "Background.Interval.Min.string", fallback: "min") - } - public enum Sec { - /// sec - public static let string = RuuviLocalization.tr("Localizable", "Background.Interval.Sec.string", fallback: "sec") - } - } - public enum KeepConnection { - /// Keep the Connection - public static let title = RuuviLocalization.tr("Localizable", "Background.KeepConnection.title", fallback: "Keep the Connection") - } - public enum PresentNotifications { - /// Show Notifications - public static let title = RuuviLocalization.tr("Localizable", "Background.PresentNotifications.title", fallback: "Show Notifications") - } - public enum ReadRSSITitle { - /// Read RSSI - public static let title = RuuviLocalization.tr("Localizable", "Background.readRSSITitle.title", fallback: "Read RSSI") - } - } - public enum BluetoothError { - /// Disconnected - public static let disconnected = RuuviLocalization.tr("Localizable", "BluetoothError.disconnected", fallback: "Disconnected") - } - public enum Cards { - public enum Alert { - public enum AlreadyLoggedIn { - /// User %@ is already signed in. If you'd like to use a different account, please sign out first and then try again. - public static func message(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "Cards.Alert.AlreadyLoggedIn.message", String(describing: p1), fallback: "User %@ is already signed in. If you'd like to use a different account, please sign out first and then try again.") - } - } - } - public enum BluetoothDisabledAlert { - /// Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on. - public static let message = RuuviLocalization.tr("Localizable", "Cards.BluetoothDisabledAlert.message", fallback: "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on.") - /// Bluetooth is not enabled - public static let title = RuuviLocalization.tr("Localizable", "Cards.BluetoothDisabledAlert.title", fallback: "Bluetooth is not enabled") - } - public enum Connected { - /// Connected - public static let title = RuuviLocalization.tr("Localizable", "Cards.Connected.title", fallback: "Connected") - } - public enum Error { - public enum ReverseGeocodingFailed { - /// Failed to load data for Virtual Sensor. Reverse geocode operation limit exceeded. - public static let message = RuuviLocalization.tr("Localizable", "Cards.Error.ReverseGeocodingFailed.message", fallback: "Failed to load data for Virtual Sensor. Reverse geocode operation limit exceeded.") - } - } - public enum KeepConnectionDialog { - /// Seems like you are running a connectable firmware on your Ruuvi device. Would you like to keep the connection open to this Ruuvi device in the background? This will allow histograms and alerts to work even when the application is minimised. - public static let message = RuuviLocalization.tr("Localizable", "Cards.KeepConnectionDialog.message", fallback: "Seems like you are running a connectable firmware on your Ruuvi device. Would you like to keep the connection open to this Ruuvi device in the background? This will allow histograms and alerts to work even when the application is minimised.") - public enum Dismiss { - /// Cancel - public static let title = RuuviLocalization.tr("Localizable", "Cards.KeepConnectionDialog.Dismiss.title", fallback: "Cancel") - } - public enum KeepConnection { - /// Keep the Connection - public static let title = RuuviLocalization.tr("Localizable", "Cards.KeepConnectionDialog.KeepConnection.title", fallback: "Keep the Connection") - } - } - public enum LegacyFirmwareUpdateDialog { - /// Looks like your sensor is using an old firmware software version. To access new features such as history graphs, alerts and cloud services, updating is mandatory. - public static let message = RuuviLocalization.tr("Localizable", "Cards.LegacyFirmwareUpdateDialog.message", fallback: "Looks like your sensor is using an old firmware software version. To access new features such as history graphs, alerts and cloud services, updating is mandatory.") - public enum CancelConfirmation { - /// Are you sure? Without updating, you won't be able to claim ownership of the sensor, download history graphs and set alerts. The update also includes bug fixes. If you cancel now, you can start the update process again from the sensor's settings page. - public static let message = RuuviLocalization.tr("Localizable", "Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message", fallback: "Are you sure? Without updating, you won't be able to claim ownership of the sensor, download history graphs and set alerts. The update also includes bug fixes. If you cancel now, you can start the update process again from the sensor's settings page.") - } - public enum CheckForUpdate { - /// Check for update - public static let title = RuuviLocalization.tr("Localizable", "Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title", fallback: "Check for update") - } - } - public enum Movements { - /// movements - public static let title = RuuviLocalization.tr("Localizable", "Cards.Movements.title", fallback: "movements") - } - public enum NoSensors { - /// No sensors added - /// Press here to add sensors - public static let title = RuuviLocalization.tr("Localizable", "Cards.NoSensors.title", fallback: "No sensors added\nPress here to add sensors") - } - public enum UpdatedLabel { - public enum NoData { - /// No data during the last 10 days - public static let message = RuuviLocalization.tr("Localizable", "Cards.UpdatedLabel.NoData.message", fallback: "No data during the last 10 days") - } - } - public enum WebTagAPILimitExcededError { - public enum Alert { - /// Please try again in 5 minutes - public static let message = RuuviLocalization.tr("Localizable", "Cards.WebTagAPILimitExcededError.Alert.message", fallback: "Please try again in 5 minutes") - /// Too many requests - public static let title = RuuviLocalization.tr("Localizable", "Cards.WebTagAPILimitExcededError.Alert.title", fallback: "Too many requests") - } - } - } - public enum ChartSettings { - public enum AllPoints { - /// Charts may be updated slowly when enabled. - public static let description = RuuviLocalization.tr("Localizable", "ChartSettings.AllPoints.description", fallback: "Charts may be updated slowly when enabled.") - /// Show all measurements - public static let title = RuuviLocalization.tr("Localizable", "ChartSettings.AllPoints.title", fallback: "Show all measurements") - } - public enum DrawDots { - /// Small dots will help to understand when measurements were collected. - public static let description = RuuviLocalization.tr("Localizable", "ChartSettings.DrawDots.description", fallback: "Small dots will help to understand when measurements were collected.") - /// Show datapoints - public static let title = RuuviLocalization.tr("Localizable", "ChartSettings.DrawDots.title", fallback: "Show datapoints") - } - public enum Duration { - /// Configure the period of history to be shown on chart from 1 to 10 days. - public static let description = RuuviLocalization.tr("Localizable", "ChartSettings.Duration.description", fallback: "Configure the period of history to be shown on chart from 1 to 10 days.") - /// Chart History View Period - public static let title = RuuviLocalization.tr("Localizable", "ChartSettings.Duration.title", fallback: "Chart History View Period") - } - } - public enum CoreError { - /// Failed to get current location - public static let failedToGetCurrentLocation = RuuviLocalization.tr("Localizable", "CoreError.failedToGetCurrentLocation", fallback: "Failed to get current location") - /// Failed to get data from response - public static let failedToGetDataFromResponse = RuuviLocalization.tr("Localizable", "CoreError.failedToGetDataFromResponse", fallback: "Failed to get data from response") - /// Failed to get background directory - public static let failedToGetDocumentsDirectory = RuuviLocalization.tr("Localizable", "CoreError.failedToGetDocumentsDirectory", fallback: "Failed to get background directory") - /// Failed to get PNG representation - public static let failedToGetPngRepresentation = RuuviLocalization.tr("Localizable", "CoreError.failedToGetPngRepresentation", fallback: "Failed to get PNG representation") - /// Missing permission for Location Services - public static let locationPermissionDenied = RuuviLocalization.tr("Localizable", "CoreError.locationPermissionDenied", fallback: "Missing permission for Location Services") - /// Location permission authorisation status is not determined - public static let locationPermissionNotDetermined = RuuviLocalization.tr("Localizable", "CoreError.locationPermissionNotDetermined", fallback: "Location permission authorisation status is not determined") - /// Object invalidated - public static let objectInvalidated = RuuviLocalization.tr("Localizable", "CoreError.objectInvalidated", fallback: "Object invalidated") - /// Object not found - public static let objectNotFound = RuuviLocalization.tr("Localizable", "CoreError.objectNotFound", fallback: "Object not found") - /// Unable to send email - public static let unableToSendEmail = RuuviLocalization.tr("Localizable", "CoreError.unableToSendEmail", fallback: "Unable to send email") - } - public enum DFUUIView { - /// You are running the latest firmware version, no need to update - public static let alreadyOnLatest = RuuviLocalization.tr("Localizable", "DFUUIView.alreadyOnLatest", fallback: "You are running the latest firmware version, no need to update") - /// Current version: - public static let currentTitle = RuuviLocalization.tr("Localizable", "DFUUIView.currentTitle", fallback: "Current version:") - /// Do not close the app or power off the sensor during the update. - public static let doNotCloseTitle = RuuviLocalization.tr("Localizable", "DFUUIView.doNotCloseTitle", fallback: "Do not close the app or power off the sensor during the update.") - /// Downloading the latest firmware to be updated... - public static let downloadingTitle = RuuviLocalization.tr("Localizable", "DFUUIView.downloadingTitle", fallback: "Downloading the latest firmware to be updated...") - /// Latest available Ruuvi Firmware version: - public static let latestTitle = RuuviLocalization.tr("Localizable", "DFUUIView.latestTitle", fallback: "Latest available Ruuvi Firmware version:") - /// 2. Locate the small round black buttons on the white circuit board; older Ruuvi sensors have 2 buttons labelled “R” and “B” while newer ones have only one button without a label. - public static let locateBootButtonTitle = RuuviLocalization.tr("Localizable", "DFUUIView.locateBootButtonTitle", fallback: "2. Locate the small round black buttons on the white circuit board; older Ruuvi sensors have 2 buttons labelled “R” and “B” while newer ones have only one button without a label.") - /// Firmware Update - public static let navigationTitle = RuuviLocalization.tr("Localizable", "DFUUIView.navigationTitle", fallback: "Firmware Update") - /// Your sensor doesn't report its current firmware version. Either you're not in its Bluetooth range, it's connected to another phone, or it's running a very old firmware version. - public static let notReportingDescription = RuuviLocalization.tr("Localizable", "DFUUIView.notReportingDescription", fallback: "Your sensor doesn't report its current firmware version. Either you're not in its Bluetooth range, it's connected to another phone, or it's running a very old firmware version.") - /// 1. Open the cover of your Ruuvi sensor - public static let openCoverTitle = RuuviLocalization.tr("Localizable", "DFUUIView.openCoverTitle", fallback: "1. Open the cover of your Ruuvi sensor") - /// Prepare your sensor - public static let prepareTitle = RuuviLocalization.tr("Localizable", "DFUUIView.prepareTitle", fallback: "Prepare your sensor") - /// Searching for a sensor - public static let searchingTitle = RuuviLocalization.tr("Localizable", "DFUUIView.searchingTitle", fallback: "Searching for a sensor") - /// 3. Set the sensor to updating mode: - public static let setUpdatingModeTitle = RuuviLocalization.tr("Localizable", "DFUUIView.setUpdatingModeTitle", fallback: "3. Set the sensor to updating mode:") - /// Start the update - public static let startTitle = RuuviLocalization.tr("Localizable", "DFUUIView.startTitle", fallback: "Start the update") - /// Start update process - public static let startUpdateProcess = RuuviLocalization.tr("Localizable", "DFUUIView.startUpdateProcess", fallback: "Start update process") - /// Update successful - public static let successfulTitle = RuuviLocalization.tr("Localizable", "DFUUIView.successfulTitle", fallback: "Update successful") - /// 3.2. If your sensor has a single button: keep the button pressed for 10 seconds. - public static let toBootModeOneButtonDescription = RuuviLocalization.tr("Localizable", "DFUUIView.toBootModeOneButtonDescription", fallback: "3.2. If your sensor has a single button: keep the button pressed for 10 seconds.") - /// 4. If set successfully, you will see a solid red light lit on the circuit board and the button in the app will change to “Start the update”. - public static let toBootModeSuccessTitle = RuuviLocalization.tr("Localizable", "DFUUIView.toBootModeSuccessTitle", fallback: "4. If set successfully, you will see a solid red light lit on the circuit board and the button in the app will change to “Start the update”.") - /// 3.1. If your sensor has 2 buttons: keep “B” button pressed while tapping button “R” momentarily. Release button “B”. - public static let toBootModeTwoButtonsDescription = RuuviLocalization.tr("Localizable", "DFUUIView.toBootModeTwoButtonsDescription", fallback: "3.1. If your sensor has 2 buttons: keep “B” button pressed while tapping button “R” momentarily. Release button “B”.") - /// Updating... - public static let updatingTitle = RuuviLocalization.tr("Localizable", "DFUUIView.updatingTitle", fallback: "Updating...") - public enum DBMigration { - public enum Error { - /// The update was successful, but an unexpected database migration error occurred. To continue using this sensor, please remove it from the app and then add it again. - public static let message = RuuviLocalization.tr("Localizable", "DFUUIView.DBMigration.Error.message", fallback: "The update was successful, but an unexpected database migration error occurred. To continue using this sensor, please remove it from the app and then add it again.") - } - } - public enum LowBattery { - public enum Warning { - /// Sensor's battery voltage seems to be low and the firmware update process may fail. We recommend to replace the battery before updating. - public static let message = RuuviLocalization.tr("Localizable", "DFUUIView.lowBattery.warning.message", fallback: "Sensor's battery voltage seems to be low and the firmware update process may fail. We recommend to replace the battery before updating.") - } - } - } - public enum Defaults { - public enum AlertsMuteInterval { - /// Alerts Mute Interval - public static let title = RuuviLocalization.tr("Localizable", "Defaults.AlertsMuteInterval.title", fallback: "Alerts Mute Interval") - } - public enum AlertsRepeatInterval { - /// Alerts Interval - public static let title = RuuviLocalization.tr("Localizable", "Defaults.AlertsRepeatInterval.title", fallback: "Alerts Interval") - } - public enum AppLaunchRequiredForReview { - public enum Count { - /// App launch count to ask for review for the first time - public static let title = RuuviLocalization.tr("Localizable", "Defaults.AppLaunchRequiredForReview.Count.title", fallback: "App launch count to ask for review for the first time") - } - } - public enum AskReviewIfLaunchDivisibleBy { - public enum Count { - /// Ask review if app launch divisible by - public static let title = RuuviLocalization.tr("Localizable", "Defaults.AskReviewIfLaunchDivisibleBy.Count.title", fallback: "Ask review if app launch divisible by") - } - } - public enum CardsSwipeHint { - /// Cards Swipe Hint Was Shown - public static let title = RuuviLocalization.tr("Localizable", "Defaults.CardsSwipeHint.title", fallback: "Cards Swipe Hint Was Shown") - } - public enum ChartDurationHours { - /// Chart Duration - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ChartDurationHours.title", fallback: "Chart Duration") - } - public enum ChartIntervalSeconds { - /// Chart Interval - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ChartIntervalSeconds.title", fallback: "Chart Interval") - } - public enum ChartsSwipeInstructionWasShown { - /// Charts Swipe Hint Was Shown - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ChartsSwipeInstructionWasShown.title", fallback: "Charts Swipe Hint Was Shown") - } - public enum ConnectionTimeout { - /// Connection Timeout - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ConnectionTimeout.title", fallback: "Connection Timeout") - } - public enum DashboardTapActionChart { - /// Show Chart on Dashboard Card Tap - public static let title = RuuviLocalization.tr("Localizable", "Defaults.DashboardTapActionChart.title", fallback: "Show Chart on Dashboard Card Tap") - } - public enum DevServer { - /// Changing Ruuvi Cloud endpoint requires signing out from current session and restart the app. Are you sure? - public static let message = RuuviLocalization.tr("Localizable", "Defaults.DevServer.message", fallback: "Changing Ruuvi Cloud endpoint requires signing out from current session and restart the app. Are you sure?") - /// Use Dev Server - public static let title = RuuviLocalization.tr("Localizable", "Defaults.DevServer.title", fallback: "Use Dev Server") - } - public enum HideNFC { - /// Hide NFC Option for sensor contest - public static let title = RuuviLocalization.tr("Localizable", "Defaults.HideNFC.title", fallback: "Hide NFC Option for sensor contest") - } - public enum Interval { - public enum Hour { - /// h - public static let string = RuuviLocalization.tr("Localizable", "Defaults.Interval.Hour.string", fallback: "h") - } - public enum Min { - /// min - public static let string = RuuviLocalization.tr("Localizable", "Defaults.Interval.Min.string", fallback: "min") - } - public enum Sec { - /// sec - public static let string = RuuviLocalization.tr("Localizable", "Defaults.Interval.Sec.string", fallback: "sec") - } - } - public enum PruningOffsetHours { - /// Pruning Offset Hours - public static let title = RuuviLocalization.tr("Localizable", "Defaults.PruningOffsetHours.title", fallback: "Pruning Offset Hours") - } - public enum ServiceTimeout { - /// Service Timeout - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ServiceTimeout.title", fallback: "Service Timeout") - } - public enum ShowEmailAlertsSettings { - /// Show email alerts settings - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ShowEmailAlertsSettings.title", fallback: "Show email alerts settings") - } - public enum ShowPushAlertsSettings { - /// Show push alerts settings - public static let title = RuuviLocalization.tr("Localizable", "Defaults.ShowPushAlertsSettings.title", fallback: "Show push alerts settings") - } - public enum UserAuthorized { - /// User Authorized - public static let title = RuuviLocalization.tr("Localizable", "Defaults.UserAuthorized.title", fallback: "User Authorized") - } - public enum WebPullInterval { - /// Web Alerts Interval - public static let title = RuuviLocalization.tr("Localizable", "Defaults.WebPullInterval.title", fallback: "Web Alerts Interval") - } - public enum WelcomeShown { - /// Welcome Displayed - public static let title = RuuviLocalization.tr("Localizable", "Defaults.WelcomeShown.title", fallback: "Welcome Displayed") - } - public enum NavigationItem { - /// Defaults - public static let title = RuuviLocalization.tr("Localizable", "Defaults.navigationItem.title", fallback: "Defaults") - } - } - public enum Devices { - /// Token Id - public static let tokenId = RuuviLocalization.tr("Localizable", "Devices.tokenId", fallback: "Token Id") - } - public enum DfuDevicesScanner { - public enum BluetoothDisabled { - /// (Bluetooth is disabled) - public static let text = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.BluetoothDisabled.text", fallback: "(Bluetooth is disabled)") - } - public enum BluetoothDisabledAlert { - /// Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on. - public static let message = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.BluetoothDisabledAlert.message", fallback: "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on.") - /// Bluetooth is not enabled - public static let title = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.BluetoothDisabledAlert.title", fallback: "Bluetooth is not enabled") - } - public enum Description { - /// Find and select sensor "RuuviBoot". - public static let text = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.Description.text", fallback: "Find and select sensor \"RuuviBoot\".") - } - public enum NoDevice { - /// (No sensors in Bluetooth range) - public static let text = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.NoDevice.text", fallback: "(No sensors in Bluetooth range)") - } - public enum Title { - /// Devices - public static let text = RuuviLocalization.tr("Localizable", "DfuDevicesScanner.Title.text", fallback: "Devices") - } - } - public enum DfuFlash { - public enum Cancel { - /// CANCEL - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Cancel.text", fallback: "CANCEL") - } - public enum CancelAlert { - /// Are you sure you want to cancel the firmware update process? - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.CancelAlert.text", fallback: "Are you sure you want to cancel the firmware update process?") - } - public enum Finish { - /// FINISH - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Finish.text", fallback: "FINISH") - } - public enum FinishGuide { - /// Firmware update process has been completed successfully. - /// Your RuuviTag sensor is ready for use! - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.FinishGuide.text", fallback: "Firmware update process has been completed successfully.\nYour RuuviTag sensor is ready for use!") - } - public enum Firmware { - public enum BootloaderSize { - /// Bootloader size - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Firmware.BootloaderSize.text", fallback: "Bootloader size") - } - public enum FileName { - /// File name - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Firmware.FileName.text", fallback: "File name") - } - public enum Parts { - /// Parts - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Firmware.Parts.text", fallback: "Parts") - } - public enum Size { - /// Size - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Firmware.Size.text", fallback: "Size") - } - public enum SoftDeviceSize { - /// Soft Device size - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Firmware.SoftDeviceSize.text", fallback: "Soft Device size") - } - } - public enum FirmwareSelectionGuide { - /// Locate the previously downloaded ZIP file on your mobile device. - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.FirmwareSelectionGuide.text", fallback: "Locate the previously downloaded ZIP file on your mobile device.") - } - public enum OpenDocumentPicker { - /// OPEN DOCUMENT PICKER - public static let title = RuuviLocalization.tr("Localizable", "DfuFlash.OpenDocumentPicker.title", fallback: "OPEN DOCUMENT PICKER") - } - public enum Progress { - /// Progress - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Progress.text", fallback: "Progress") - } - public enum Start { - /// Start - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Start.text", fallback: "Start") - } - public enum Step { - /// Step - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Step.text", fallback: "Step") - } - public enum Steps { - public enum Completed { - /// Completed - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Steps.Completed.text", fallback: "Completed") - } - public enum PackageSelection { - /// Package selection - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Steps.PackageSelection.text", fallback: "Package selection") - } - public enum ReadyForUpload { - /// Ready For upload - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Steps.ReadyForUpload.text", fallback: "Ready For upload") - } - public enum Uploading { - /// Uploading - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Steps.Uploading.text", fallback: "Uploading") - } - } - public enum Title { - /// DFU Flash - public static let text = RuuviLocalization.tr("Localizable", "DfuFlash.Title.text", fallback: "DFU Flash") - } - } - public enum DiscoverTable { - public enum BluetoothDisabledAlert { - /// Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on. - public static let message = RuuviLocalization.tr("Localizable", "DiscoverTable.BluetoothDisabledAlert.message", fallback: "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on.") - /// Bluetooth is not enabled - public static let title = RuuviLocalization.tr("Localizable", "DiscoverTable.BluetoothDisabledAlert.title", fallback: "Bluetooth is not enabled") - } - public enum GetMoreSensors { - public enum Button { - /// Buy Ruuvi Sensors - public static let title = RuuviLocalization.tr("Localizable", "DiscoverTable.GetMoreSensors.button.title", fallback: "Buy Ruuvi Sensors") - } - } - public enum NavigationItem { - /// Add a New Sensor - public static let title = RuuviLocalization.tr("Localizable", "DiscoverTable.NavigationItem.title", fallback: "Add a New Sensor") - } - public enum NoDevicesSection { - public enum BluetoothDisabled { - /// (Bluetooth is disabled) - public static let text = RuuviLocalization.tr("Localizable", "DiscoverTable.NoDevicesSection.BluetoothDisabled.text", fallback: "(Bluetooth is disabled)") - } - public enum NotFound { - /// (No sensors in Bluetooth range) - public static let text = RuuviLocalization.tr("Localizable", "DiscoverTable.NoDevicesSection.NotFound.text", fallback: "(No sensors in Bluetooth range)") - } - } - public enum RuuviDevice { - /// Ruuvi - public static let `prefix` = RuuviLocalization.tr("Localizable", "DiscoverTable.RuuviDevice.prefix", fallback: "Ruuvi") - } - public enum SectionTitle { - /// Nearby Ruuvi sensors - public static let devices = RuuviLocalization.tr("Localizable", "DiscoverTable.SectionTitle.Devices", fallback: "Nearby Ruuvi sensors") - /// Virtual sensors - public static let webTags = RuuviLocalization.tr("Localizable", "DiscoverTable.SectionTitle.WebTags", fallback: "Virtual sensors") - } - public enum WebTagsInfoDialog { - /// Virtual Sensors show public weather data provided by local weather stations. - public static let message = RuuviLocalization.tr("Localizable", "DiscoverTable.WebTagsInfoDialog.message", fallback: "Virtual Sensors show public weather data provided by local weather stations.") - } - } - public enum ErrorPresenterAlert { - /// Error - public static let error = RuuviLocalization.tr("Localizable", "ErrorPresenterAlert.Error", fallback: "Error") - /// OK - public static let ok = RuuviLocalization.tr("Localizable", "ErrorPresenterAlert.OK", fallback: "OK") - } - public enum ExpectedError { - /// Unable to remove a connected device that is not reachable. Please check your Bluetooth connection. - public static let failedToDeleteTag = RuuviLocalization.tr("Localizable", "ExpectedError.failedToDeleteTag", fallback: "Unable to remove a connected device that is not reachable. Please check your Bluetooth connection.") - /// App is already in the process of syncing logs with this sensor - public static let isAlreadySyncingLogsWithThisTag = RuuviLocalization.tr("Localizable", "ExpectedError.isAlreadySyncingLogsWithThisTag", fallback: "App is already in the process of syncing logs with this sensor") - /// Missing OpenWeatherMap API Key. Please get one from openweathermap.org website and enter it in the station/Classes/Networking/Assembly/Networking.plist file - public static let missingOpenWeatherMapAPIKey = RuuviLocalization.tr("Localizable", "ExpectedError.missingOpenWeatherMapAPIKey", fallback: "Missing OpenWeatherMap API Key. Please get one from openweathermap.org website and enter it in the station/Classes/Networking/Assembly/Networking.plist file") - } - public enum ExportService { - /// Acceleration X - public static let accelerationX = RuuviLocalization.tr("Localizable", "ExportService.AccelerationX", fallback: "Acceleration X") - /// Acceleration Y - public static let accelerationY = RuuviLocalization.tr("Localizable", "ExportService.AccelerationY", fallback: "Acceleration Y") - /// Acceleration Z - public static let accelerationZ = RuuviLocalization.tr("Localizable", "ExportService.AccelerationZ", fallback: "Acceleration Z") - /// Date - public static let date = RuuviLocalization.tr("Localizable", "ExportService.Date", fallback: "Date") - /// Dew point (%@) - public static func dewPoint(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "ExportService.DewPoint", String(describing: p1), fallback: "Dew point (%@)") - } - /// Humidity (%@) - public static func humidity(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "ExportService.Humidity", String(describing: p1), fallback: "Humidity (%@)") - } - /// ISO8601 - public static let iso8601 = RuuviLocalization.tr("Localizable", "ExportService.ISO8601", fallback: "ISO8601") - /// Measurement Sequence Number - public static let measurementSequenceNumber = RuuviLocalization.tr("Localizable", "ExportService.MeasurementSequenceNumber", fallback: "Measurement Sequence Number") - /// Movement Counter - public static let movementCounter = RuuviLocalization.tr("Localizable", "ExportService.MovementCounter", fallback: "Movement Counter") - /// Pressure (%@) - public static func pressure(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "ExportService.Pressure", String(describing: p1), fallback: "Pressure (%@)") - } - /// Temperature (%@) - public static func temperature(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "ExportService.Temperature", String(describing: p1), fallback: "Temperature (%@)") - } - /// TX Power - public static let txPower = RuuviLocalization.tr("Localizable", "ExportService.TXPower", fallback: "TX Power") - /// Voltage (V) - public static let voltage = RuuviLocalization.tr("Localizable", "ExportService.Voltage", fallback: "Voltage (V)") - } - public enum Foreground { - public enum Interval { - public enum All { - /// All - public static let string = RuuviLocalization.tr("Localizable", "Foreground.Interval.All.string", fallback: "All") - } - public enum Every { - /// Every - public static let string = RuuviLocalization.tr("Localizable", "Foreground.Interval.Every.string", fallback: "Every") - } - public enum Min { - /// min - public static let string = RuuviLocalization.tr("Localizable", "Foreground.Interval.Min.string", fallback: "min") - } - } - public enum NavigationItem { - /// Foreground - public static let title = RuuviLocalization.tr("Localizable", "Foreground.navigationItem.title", fallback: "Foreground") - } - } - public enum ForegroundRow { - public enum Advertisement { - /// ADVERTISEMENTS - public static let section = RuuviLocalization.tr("Localizable", "ForegroundRow.advertisement.section", fallback: "ADVERTISEMENTS") - /// Save advertisements - public static let title = RuuviLocalization.tr("Localizable", "ForegroundRow.advertisement.title", fallback: "Save advertisements") - } - public enum Connection { - /// LOGS - public static let section = RuuviLocalization.tr("Localizable", "ForegroundRow.connection.section", fallback: "LOGS") - /// Connect and sync logs - public static let title = RuuviLocalization.tr("Localizable", "ForegroundRow.connection.title", fallback: "Connect and sync logs") - } - public enum WebTags { - /// VIRTUAL SENSORS - public static let section = RuuviLocalization.tr("Localizable", "ForegroundRow.webTags.section", fallback: "VIRTUAL SENSORS") - /// Load and save from web - public static let title = RuuviLocalization.tr("Localizable", "ForegroundRow.webTags.title", fallback: "Load and save from web") - } - } - public enum Heartbeat { - public enum Interval { - public enum All { - /// All - public static let string = RuuviLocalization.tr("Localizable", "Heartbeat.Interval.All.string", fallback: "All") - } - public enum Every { - /// every - public static let string = RuuviLocalization.tr("Localizable", "Heartbeat.Interval.Every.string", fallback: "every") - } - public enum Min { - /// min - public static let string = RuuviLocalization.tr("Localizable", "Heartbeat.Interval.Min.string", fallback: "min") - } - public enum Sec { - /// sec - public static let string = RuuviLocalization.tr("Localizable", "Heartbeat.Interval.Sec.string", fallback: "sec") - } - } - public enum ReadRSSITitle { - /// Read RSSI - public static let title = RuuviLocalization.tr("Localizable", "Heartbeat.readRSSITitle.title", fallback: "Read RSSI") - } - } - public enum HumidityCalibration { - public enum Button { - public enum Calibrate { - /// Calibrate - public static let title = RuuviLocalization.tr("Localizable", "HumidityCalibration.Button.Calibrate.title", fallback: "Calibrate") - } - public enum Clear { - /// Clear - public static let title = RuuviLocalization.tr("Localizable", "HumidityCalibration.Button.Clear.title", fallback: "Clear") - } - public enum Close { - /// Close - public static let title = RuuviLocalization.tr("Localizable", "HumidityCalibration.Button.Close.title", fallback: "Close") - } - } - public enum CalibrationConfirmationAlert { - /// You are going to calibrate humidity offset. Tap "Confirm" to continue - public static let message = RuuviLocalization.tr("Localizable", "HumidityCalibration.CalibrationConfirmationAlert.message", fallback: "You are going to calibrate humidity offset. Tap \"Confirm\" to continue") - /// Are you sure? - public static let title = RuuviLocalization.tr("Localizable", "HumidityCalibration.CalibrationConfirmationAlert.title", fallback: "Are you sure?") - } - public enum ClearCalibrationConfirmationAlert { - /// You are going to clear humidity offset. This can't be undone. Tap "Confirm" to continue. - public static let message = RuuviLocalization.tr("Localizable", "HumidityCalibration.ClearCalibrationConfirmationAlert.message", fallback: "You are going to clear humidity offset. This can't be undone. Tap \"Confirm\" to continue.") - /// Are you sure? - public static let title = RuuviLocalization.tr("Localizable", "HumidityCalibration.ClearCalibrationConfirmationAlert.title", fallback: "Are you sure?") - } - public enum Description { - /// In order to measure relative humidity as accurately as possible, a sodium chloride (salt) calibration is recommended. See video tutorials on how to easily do this at home. - public static let text = RuuviLocalization.tr("Localizable", "HumidityCalibration.Description.text", fallback: "In order to measure relative humidity as accurately as possible, a sodium chloride (salt) calibration is recommended. See video tutorials on how to easily do this at home.") - } - public enum Label { - public enum Note { - /// Note that calibration data will be stored locally in your mobile device. After Ruuvi Station uninstall and install, you may need to recalibrate. - public static let text = RuuviLocalization.tr("Localizable", "HumidityCalibration.Label.note.text", fallback: "Note that calibration data will be stored locally in your mobile device. After Ruuvi Station uninstall and install, you may need to recalibrate.") - } - } - public enum VideoTutorials { - /// video tutorials - public static let link = RuuviLocalization.tr("Localizable", "HumidityCalibration.VideoTutorials.link", fallback: "video tutorials") - } - public enum LastCalibrationDate { - /// Calibrated: %@ - public static func format(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "HumidityCalibration.lastCalibrationDate.format", String(describing: p1), fallback: "Calibrated: %@") - } - } - } - public enum HumidityUnit { - public enum Dew { - /// Dew point (%@) - public static func title(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "HumidityUnit.Dew.title", String(describing: p1), fallback: "Dew point (%@)") - } - } - public enum Percent { - /// Relative (%) - public static let title = RuuviLocalization.tr("Localizable", "HumidityUnit.Percent.title", fallback: "Relative (%)") - } - public enum Gm3 { - /// Absolute (g/m³) - public static let title = RuuviLocalization.tr("Localizable", "HumidityUnit.gm3.title", fallback: "Absolute (g/m³)") - } - } - public enum Interval { - public enum Day { - /// Day - public static let string = RuuviLocalization.tr("Localizable", "Interval.Day.string", fallback: "Day") - } - public enum Days { - /// Days - public static let string = RuuviLocalization.tr("Localizable", "Interval.Days.string", fallback: "Days") - } - } - public enum Language { - /// English - public static let english = RuuviLocalization.tr("Localizable", "Language.English", fallback: "English") - /// Suomi - public static let finnish = RuuviLocalization.tr("Localizable", "Language.Finnish", fallback: "Suomi") - /// Français - public static let french = RuuviLocalization.tr("Localizable", "Language.French", fallback: "Français") - /// Deutsch - public static let german = RuuviLocalization.tr("Localizable", "Language.German", fallback: "Deutsch") - /// Русский - public static let russian = RuuviLocalization.tr("Localizable", "Language.Russian", fallback: "Русский") - /// Svenska - public static let swedish = RuuviLocalization.tr("Localizable", "Language.Swedish", fallback: "Svenska") - } - public enum LocalNotificationsManager { - public enum DidConnect { - /// Connected - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.DidConnect.title", fallback: "Connected") - } - public enum DidDisconnect { - /// Disconnected - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.DidDisconnect.title", fallback: "Disconnected") - } - public enum DidMove { - /// Movement detected! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.DidMove.title", fallback: "Movement detected!") - } - public enum Disable { - /// Turn off - public static let button = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.Disable.button", fallback: "Turn off") - } - public enum HighDewPoint { - /// Dew Point is too high! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.HighDewPoint.title", fallback: "Dew Point is too high!") - } - public enum HighHumidity { - /// Air Humidity is too high! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.HighHumidity.title", fallback: "Air Humidity is too high!") - } - public enum HighPressure { - /// Air Pressure is too high! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.HighPressure.title", fallback: "Air Pressure is too high!") - } - public enum HighSignal { - /// Signal strength is too high! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.HighSignal.title", fallback: "Signal strength is too high!") - } - public enum HighTemperature { - /// Temperature is too high! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.HighTemperature.title", fallback: "Temperature is too high!") - } - public enum LowDewPoint { - /// Dew Point is too low! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.LowDewPoint.title", fallback: "Dew Point is too low!") - } - public enum LowHumidity { - /// Air Humidity is too low! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.LowHumidity.title", fallback: "Air Humidity is too low!") - } - public enum LowPressure { - /// Air Pressure is too low! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.LowPressure.title", fallback: "Air Pressure is too low!") - } - public enum LowSignal { - /// Signal strength is too low! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.LowSignal.title", fallback: "Signal strength is too low!") - } - public enum LowTemperature { - /// Temperature is too low! - public static let title = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.LowTemperature.title", fallback: "Temperature is too low!") - } - public enum Mute { - /// Mute for an hour - public static let button = RuuviLocalization.tr("Localizable", "LocalNotificationsManager.Mute.button", fallback: "Mute for an hour") - } - } - public enum Menu { - public enum BuyGateway { - public enum Url { - /// https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios - public static let ios = RuuviLocalization.tr("Localizable", "Menu.BuyGateway.URL.IOS", fallback: "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios") - } - } - public enum Label { - public enum AboutHelp { - /// About / Help - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.AboutHelp.text", fallback: "About / Help") - } - public enum AddAnNewSensor { - /// Add a New Sensor - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.AddAnNewSensor.text", fallback: "Add a New Sensor") - } - public enum AppSettings { - /// App Settings - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.AppSettings.text", fallback: "App Settings") - } - public enum BuyRuuviGateway { - /// Buy Ruuvi Gateway - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.BuyRuuviGateway.text", fallback: "Buy Ruuvi Gateway") - } - public enum Feedback { - /// Send Feedback - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.Feedback.text", fallback: "Send Feedback") - } - public enum GetMoreSensors { - /// Buy Ruuvi Sensors - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.GetMoreSensors.text", fallback: "Buy Ruuvi Sensors") - } - public enum MyRuuviAccount { - /// My Ruuvi Account - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.MyRuuviAccount.text", fallback: "My Ruuvi Account") - } - public enum WhatToMeasure { - /// What to measure with Ruuvi? - public static let text = RuuviLocalization.tr("Localizable", "Menu.Label.WhatToMeasure.text", fallback: "What to measure with Ruuvi?") - } - } - public enum LoggedIn { - /// Signed in: - public static let title = RuuviLocalization.tr("Localizable", "Menu.LoggedIn.title", fallback: "Signed in:") - } - public enum Measure { - public enum Url { - /// https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios - public static let ios = RuuviLocalization.tr("Localizable", "Menu.Measure.URL.IOS", fallback: "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios") - } - } - public enum RuuviNetworkStatus { - /// Ruuvi Cloud status - public static let text = RuuviLocalization.tr("Localizable", "Menu.RuuviNetworkStatus.text", fallback: "Ruuvi Cloud status") - } - public enum SignOut { - /// Sign out - public static let text = RuuviLocalization.tr("Localizable", "Menu.SignOut.text", fallback: "Sign out") - } - } - public enum MenuTableViewController { - /// none - public static let `none` = RuuviLocalization.tr("Localizable", "MenuTableViewController.None", fallback: "none") - /// User: %@ - public static func user(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "MenuTableViewController.User", String(describing: p1), fallback: "User: %@") - } - } - public enum MyRuuvi { - public enum Settings { - public enum DeleteAccount { - /// Delete Account - public static let title = RuuviLocalization.tr("Localizable", "MyRuuvi.Settings.DeleteAccount.title", fallback: "Delete Account") - public enum Confirmation { - /// A confirmation has been sent to your email. To proceed with the deletion, please check your inbox and follow the instructions. - public static let message = RuuviLocalization.tr("Localizable", "MyRuuvi.Settings.DeleteAccount.Confirmation.message", fallback: "A confirmation has been sent to your email. To proceed with the deletion, please check your inbox and follow the instructions.") - } - } - } - } - public enum OWMError { - /// API limit exceeded - public static let apiLimitExceeded = RuuviLocalization.tr("Localizable", "OWMError.apiLimitExceeded", fallback: "API limit exceeded") - /// Failed to parse Open Weather Map response - public static let failedToParseOpenWeatherMapResponse = RuuviLocalization.tr("Localizable", "OWMError.failedToParseOpenWeatherMapResponse", fallback: "Failed to parse Open Weather Map response") - /// Invalid API Key - public static let invalidApiKey = RuuviLocalization.tr("Localizable", "OWMError.invalidApiKey", fallback: "Invalid API Key") - /// Not an HTTP response - public static let notAHttpResponse = RuuviLocalization.tr("Localizable", "OWMError.notAHttpResponse", fallback: "Not an HTTP response") - } - public enum OffsetCorrection { - public enum Calibrate { - /// Offset correction - public static let button = RuuviLocalization.tr("Localizable", "OffsetCorrection.Calibrate.button", fallback: "Offset correction") - } - public enum CalibrationDescription { - /// In normal use, it's not necessary to adjust the offset. - /// - /// If you're an advanced user and you'd like to manually configure the factory calibrated sensors, it's possible to do so. - /// - /// Calibration tips are available on ruuvi.com/support - public static let text = RuuviLocalization.tr("Localizable", "OffsetCorrection.CalibrationDescription.text", fallback: "In normal use, it's not necessary to adjust the offset.\n\nIf you're an advanced user and you'd like to manually configure the factory calibrated sensors, it's possible to do so.\n\nCalibration tips are available on ruuvi.com/support") - } - public enum CorrectedValue { - /// Corrected value - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.CorrectedValue.title", fallback: "Corrected value") - } - public enum Dialog { - public enum Calibration { - /// Clear calibration settings? - public static let clearConfirm = RuuviLocalization.tr("Localizable", "OffsetCorrection.Dialog.Calibration.ClearConfirm", fallback: "Clear calibration settings?") - /// Enter the expected humidity value from sensor under current conditions (%@): - public static func enterHumidity(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "OffsetCorrection.Dialog.Calibration.EnterHumidity", String(describing: p1), fallback: "Enter the expected humidity value from sensor under current conditions (%@): ") - } - /// Enter the expected pressure value from sensor under current conditions (%@): - public static func enterPressure(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "OffsetCorrection.Dialog.Calibration.EnterPressure", String(describing: p1), fallback: "Enter the expected pressure value from sensor under current conditions (%@): ") - } - /// Enter the expected temperature value from sensor under current conditions (%@): - public static func enterTemperature(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "OffsetCorrection.Dialog.Calibration.EnterTemperature", String(describing: p1), fallback: "Enter the expected temperature value from sensor under current conditions (%@): ") - } - /// Calibration setup - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.Dialog.Calibration.Title", fallback: "Calibration setup") - } - } - public enum Humidity { - /// Humidity offset - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.Humidity.Title", fallback: "Humidity offset") - } - public enum OriginalValue { - /// Original measured value - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.OriginalValue.title", fallback: "Original measured value") - } - public enum Pressure { - /// Pressure offset - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.Pressure.Title", fallback: "Pressure offset") - } - public enum Temperature { - /// Temperature offset - public static let title = RuuviLocalization.tr("Localizable", "OffsetCorrection.Temperature.Title", fallback: "Temperature offset") - } - } - public enum Owner { - /// Claim sensor - public static let title = RuuviLocalization.tr("Localizable", "Owner.title", fallback: "Claim sensor") - public enum Claim { - /// Do you own this sensor? If yes, please claim ownership of the sensor and it'll be added to your Ruuvi account. Each Ruuvi sensor can have only one owner. To claim ownership, you need to be signed in. - /// - /// Benefits: - /// - /// ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud - /// - /// ● Access sensors remotely over the Internet (requires a Ruuvi Gateway) - /// - /// ● Share sensors with friends and family (requires a Ruuvi Gateway) - /// - /// ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway) - public static let description = RuuviLocalization.tr("Localizable", "Owner.Claim.description", fallback: "Do you own this sensor? If yes, please claim ownership of the sensor and it'll be added to your Ruuvi account. Each Ruuvi sensor can have only one owner. To claim ownership, you need to be signed in.\n\nBenefits:\n\n ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud\n\n ● Access sensors remotely over the Internet (requires a Ruuvi Gateway)\n\n ● Share sensors with friends and family (requires a Ruuvi Gateway)\n\n ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway)") - } - public enum ClaimOwnership { - /// Claim ownership - public static let button = RuuviLocalization.tr("Localizable", "Owner.ClaimOwnership.button", fallback: "Claim ownership") - } - } - public enum PermissionPresenter { - /// Settings - public static let settings = RuuviLocalization.tr("Localizable", "PermissionPresenter.settings", fallback: "Settings") - public enum NoCameraAccess { - /// Ruuvi Station needs to access your camera to enable this feature. - public static let message = RuuviLocalization.tr("Localizable", "PermissionPresenter.NoCameraAccess.message", fallback: "Ruuvi Station needs to access your camera to enable this feature.") - } - public enum NoLocationAccess { - /// Ruuvi Station needs to access your location to enable this feature. - public static let message = RuuviLocalization.tr("Localizable", "PermissionPresenter.NoLocationAccess.message", fallback: "Ruuvi Station needs to access your location to enable this feature.") - } - public enum NoPhotoLibraryAccess { - /// Ruuvi Station needs to access your camera library to enable this feature. - public static let message = RuuviLocalization.tr("Localizable", "PermissionPresenter.NoPhotoLibraryAccess.message", fallback: "Ruuvi Station needs to access your camera library to enable this feature.") - } - public enum NoPushNotificationsPermission { - /// Ruuvi Station needs push notifications permission to enable this feature - public static let message = RuuviLocalization.tr("Localizable", "PermissionPresenter.NoPushNotificationsPermission.message", fallback: "Ruuvi Station needs push notifications permission to enable this feature") - } - } - public enum PhotoPicker { - public enum Sheet { - /// Take photo - public static let camera = RuuviLocalization.tr("Localizable", "PhotoPicker.Sheet.camera", fallback: "Take photo") - /// Choose from files - public static let files = RuuviLocalization.tr("Localizable", "PhotoPicker.Sheet.files", fallback: "Choose from files") - /// Choose from the library - public static let library = RuuviLocalization.tr("Localizable", "PhotoPicker.Sheet.library", fallback: "Choose from the library") - /// Pick a photo - public static let message = RuuviLocalization.tr("Localizable", "PhotoPicker.Sheet.message", fallback: "Pick a photo") - } - } - public enum Ruuvi { - public enum BuySensors { - public enum Menu { - public enum Url { - /// https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios - public static let ios = RuuviLocalization.tr("Localizable", "Ruuvi.BuySensors.Menu.URL.IOS", fallback: "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios") - } - } - public enum Url { - /// https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios - public static let ios = RuuviLocalization.tr("Localizable", "Ruuvi.BuySensors.URL.IOS", fallback: "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios") - } - } - } - public enum RuuviCloudApiError { - /// Empty response - public static let emptyResponse = RuuviLocalization.tr("Localizable", "RuuviCloudApiError.emptyResponse", fallback: "Empty response") - /// Failed to get data from response - public static let failedToGetDataFromResponse = RuuviLocalization.tr("Localizable", "RuuviCloudApiError.failedToGetDataFromResponse", fallback: "Failed to get data from response") - /// Unexpected HTTP status code - public static let unexpectedHTTPStatusCode = RuuviLocalization.tr("Localizable", "RuuviCloudApiError.unexpectedHTTPStatusCode", fallback: "Unexpected HTTP status code") - } - public enum RuuviCloudError { - /// Not authorised - public static let notAuthorized = RuuviLocalization.tr("Localizable", "RuuviCloudError.NotAuthorized", fallback: "Not authorised") - } - public enum RuuviDfuError { - /// Failed to construct UUID - public static let failedToConstructUUID = RuuviLocalization.tr("Localizable", "RuuviDfuError.failedToConstructUUID", fallback: "Failed to construct UUID") - /// Invalid firmware file - public static let invalidFirmwareFile = RuuviLocalization.tr("Localizable", "RuuviDfuError.invalidFirmwareFile", fallback: "Invalid firmware file") - } - public enum RuuviLocalError { - /// Failed to get background directory - public static let failedToGetDocumentsDirectory = RuuviLocalization.tr("Localizable", "RuuviLocalError.failedToGetDocumentsDirectory", fallback: "Failed to get background directory") - /// Failed to get JPG representation - public static let failedToGetJpegRepresentation = RuuviLocalization.tr("Localizable", "RuuviLocalError.failedToGetJpegRepresentation", fallback: "Failed to get JPG representation") - } - public enum RuuviOnboard { - public enum Access { - /// Access data for each linked sensor in real time and explore history graphs. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Access.title", fallback: "Access data for each linked sensor in real time and explore history graphs.") - } - public enum Alerts { - /// Set alerts and get notified whenever your limits are hit. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Alerts.title", fallback: "Set alerts and get notified whenever your limits are hit.") - } - public enum Cloud { - /// Claim ownership of your sensors with a free Ruuvi Cloud account. - public static let subtitle = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.subtitle", fallback: "Claim ownership of your sensors with a free Ruuvi Cloud account.") - /// Sign in to use the full potential of the app. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.title", fallback: "Sign in to use the full potential of the app.") - public enum Benefits { - /// Benefits: - /// - /// ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud - /// - /// ● Access sensors remotely over the Internet (requires a Ruuvi Gateway) - /// - /// ● Share sensors with friends and family (requires a Ruuvi Gateway) - /// - /// ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway) - public static let message = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.Benefits.message", fallback: "Benefits:\n\n ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud\n\n ● Access sensors remotely over the Internet (requires a Ruuvi Gateway)\n\n ● Share sensors with friends and family (requires a Ruuvi Gateway)\n\n ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway)") - } - public enum Details { - /// Details - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.Details.title", fallback: "Details") - } - public enum Skip { - /// Are you sure you want to skip sign in? - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.Skip.title", fallback: "Are you sure you want to skip sign in?") - public enum GoBack { - /// Go back - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.Skip.GoBack.title", fallback: "Go back") - } - public enum Yes { - /// Yes, skip - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.Skip.Yes.title", fallback: "Yes, skip") - } - } - public enum Subtitle { - /// Great! You already signed in! - public static let signed = RuuviLocalization.tr("Localizable", "RuuviOnboard.Cloud.subtitle.signed", fallback: "Great! You already signed in!") - } - } - public enum Measure { - /// Measure environmental data: temperature, relative humidity and air pressure. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Measure.title", fallback: "Measure environmental data: temperature, relative humidity and air pressure.") - } - public enum Start { - /// Press SCAN to find and add nearby sensors to your Ruuvi Station. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Start.title", fallback: "Press SCAN to find and add nearby sensors to your Ruuvi Station.") - } - public enum Welcome { - /// Swipe to see what Ruuvi Station can do for you. - public static let title = RuuviLocalization.tr("Localizable", "RuuviOnboard.Welcome.title", fallback: "Swipe to see what Ruuvi Station can do for you.") - } - } - public enum RuuviPersistenceError { - /// Failed to find sensor - public static let failedToFindRuuviTag = RuuviLocalization.tr("Localizable", "RuuviPersistenceError.failedToFindRuuviTag", fallback: "Failed to find sensor") - } - public enum RuuviServiceError { - /// Both local and MAC identifiers are nil - public static let bothLuidAndMacAreNil = RuuviLocalization.tr("Localizable", "RuuviServiceError.bothLuidAndMacAreNil", fallback: "Both local and MAC identifiers are nil") - /// Failed to find or generate background image - public static let failedToFindOrGenerateBackgroundImage = RuuviLocalization.tr("Localizable", "RuuviServiceError.failedToFindOrGenerateBackgroundImage", fallback: "Failed to find or generate background image") - /// Failed to get JPG representation - public static let failedToGetJpegRepresentation = RuuviLocalization.tr("Localizable", "RuuviServiceError.failedToGetJpegRepresentation", fallback: "Failed to get JPG representation") - /// Failed to parse response. - public static let failedToParseNetworkResponse = RuuviLocalization.tr("Localizable", "RuuviServiceError.failedToParseNetworkResponse", fallback: "Failed to parse response.") - /// MAC identifier is nil - public static let macIdIsNil = RuuviLocalization.tr("Localizable", "RuuviServiceError.macIdIsNil", fallback: "MAC identifier is nil") - /// Photo URL is nil - public static let pictureUrlIsNil = RuuviLocalization.tr("Localizable", "RuuviServiceError.pictureUrlIsNil", fallback: "Photo URL is nil") - } - public enum Settings { - public enum BackgroundScanning { - /// Data logging interval - public static let interval = RuuviLocalization.tr("Localizable", "Settings.BackgroundScanning.interval", fallback: "Data logging interval") - /// Background Scanning - public static let title = RuuviLocalization.tr("Localizable", "Settings.BackgroundScanning.title", fallback: "Background Scanning") - public enum Footer { - /// Important note: Bluetooth background history logging and Bluetooth alerts work only when background scanning is enabled. If you disable the background scanning, all paired Ruuvi sensors will be automatically unpaired and you need to pair them again from their settings pages. - public static let message = RuuviLocalization.tr("Localizable", "Settings.BackgroundScanning.Footer.message", fallback: "Important note: Bluetooth background history logging and Bluetooth alerts work only when background scanning is enabled. If you disable the background scanning, all paired Ruuvi sensors will be automatically unpaired and you need to pair them again from their settings pages.") - } - } - public enum ChooseHumidityUnit { - /// Choose the humidity unit you want to be displayed. - public static let text = RuuviLocalization.tr("Localizable", "Settings.ChooseHumidityUnit.text", fallback: "Choose the humidity unit you want to be displayed.") - } - public enum ChoosePressureUnit { - /// Choose the pressure unit you want to be displayed. - public static let text = RuuviLocalization.tr("Localizable", "Settings.ChoosePressureUnit.text", fallback: "Choose the pressure unit you want to be displayed.") - } - public enum ChooseTemperatureUnit { - /// Choose the temperature unit you want to be displayed. - public static let text = RuuviLocalization.tr("Localizable", "Settings.ChooseTemperatureUnit.text", fallback: "Choose the temperature unit you want to be displayed.") - } - public enum Humidity { - public enum Resolution { - /// Humidity Resolution - public static let title = RuuviLocalization.tr("Localizable", "Settings.Humidity.Resolution.title", fallback: "Humidity Resolution") - } - } - public enum Label { - /// Chart Settings - public static let chart = RuuviLocalization.tr("Localizable", "Settings.Label.Chart", fallback: "Chart Settings") - /// Cloud mode - public static let cloudMode = RuuviLocalization.tr("Localizable", "Settings.Label.CloudMode", fallback: "Cloud mode") - /// Defaults - public static let defaults = RuuviLocalization.tr("Localizable", "Settings.Label.Defaults", fallback: "Defaults") - /// Foreground - public static let foreground = RuuviLocalization.tr("Localizable", "Settings.Label.Foreground", fallback: "Foreground") - /// Humidity - public static let humidity = RuuviLocalization.tr("Localizable", "Settings.Label.Humidity", fallback: "Humidity") - /// Pressure - public static let pressure = RuuviLocalization.tr("Localizable", "Settings.Label.Pressure", fallback: "Pressure") - /// Temperature - public static let temperature = RuuviLocalization.tr("Localizable", "Settings.Label.Temperature", fallback: "Temperature") - public enum CloudMode { - /// Refresh nearby cloud sensors only from the cloud by ignoring their Bluetooth messages and receiving alerts only by email. Requires a Ruuvi Gateway router. - public static let description = RuuviLocalization.tr("Localizable", "Settings.Label.CloudMode.description", fallback: "Refresh nearby cloud sensors only from the cloud by ignoring their Bluetooth messages and receiving alerts only by email. Requires a Ruuvi Gateway router.") - } - public enum HumidityUnit { - /// Humidity Unit - public static let text = RuuviLocalization.tr("Localizable", "Settings.Label.HumidityUnit.text", fallback: "Humidity Unit") - } - public enum Language { - /// Language - public static let text = RuuviLocalization.tr("Localizable", "Settings.Label.Language.text", fallback: "Language") - } - public enum PressureUnit { - /// Pressure Unit - public static let text = RuuviLocalization.tr("Localizable", "Settings.Label.PressureUnit.text", fallback: "Pressure Unit") - } - public enum TemperatureUnit { - /// Temperature Unit - public static let text = RuuviLocalization.tr("Localizable", "Settings.Label.TemperatureUnit.text", fallback: "Temperature Unit") - } - } - public enum Language { - public enum Dialog { - /// Open settings and tap Language to change language of the app. - /// If you cannot see the Language option in the settings, make sure that you have at least one preferred language added in system settings: Settings -> General -> Language & Region. - public static let message = RuuviLocalization.tr("Localizable", "Settings.Language.Dialog.message", fallback: "Open settings and tap Language to change language of the app.\nIf you cannot see the Language option in the settings, make sure that you have at least one preferred language added in system settings: Settings -> General -> Language & Region.") - /// Select Language - public static let title = RuuviLocalization.tr("Localizable", "Settings.Language.Dialog.title", fallback: "Select Language") - } - } - public enum Measurement { - public enum Resolution { - /// Select how accurately you'd like to see the sensors' live measurement values in the app. This setting doesn't affect history charts or alerts. - public static let description = RuuviLocalization.tr("Localizable", "Settings.Measurement.Resolution.description", fallback: "Select how accurately you'd like to see the sensors' live measurement values in the app. This setting doesn't affect history charts or alerts.") - /// Resolution - public static let title = RuuviLocalization.tr("Localizable", "Settings.Measurement.Resolution.title", fallback: "Resolution") - } - public enum Unit { - /// Unit - public static let title = RuuviLocalization.tr("Localizable", "Settings.Measurement.Unit.title", fallback: "Unit") - } - } - public enum Pressure { - public enum Resolution { - /// Pressure Resolution - public static let title = RuuviLocalization.tr("Localizable", "Settings.Pressure.Resolution.title", fallback: "Pressure Resolution") - } - } - public enum SectionHeader { - public enum Application { - /// APPLICATION - public static let title = RuuviLocalization.tr("Localizable", "Settings.SectionHeader.Application.title", fallback: "APPLICATION") - } - public enum General { - /// GENERAL - public static let title = RuuviLocalization.tr("Localizable", "Settings.SectionHeader.General.title", fallback: "GENERAL") - } - } - public enum SegmentedControl { - public enum Humidity { - public enum Absolute { - /// Abs - public static let title = RuuviLocalization.tr("Localizable", "Settings.SegmentedControl.Humidity.Absolute.title", fallback: "Abs") - } - public enum DewPoint { - /// Dew - public static let title = RuuviLocalization.tr("Localizable", "Settings.SegmentedControl.Humidity.DewPoint.title", fallback: "Dew") - } - public enum Relative { - /// Rel - public static let title = RuuviLocalization.tr("Localizable", "Settings.SegmentedControl.Humidity.Relative.title", fallback: "Rel") - } - } - } - public enum Temperature { - public enum Resolution { - /// Temperature Resolution - public static let title = RuuviLocalization.tr("Localizable", "Settings.Temperature.Resolution.title", fallback: "Temperature Resolution") - } - } - public enum NavigationItem { - /// Settings - public static let title = RuuviLocalization.tr("Localizable", "Settings.navigationItem.title", fallback: "Settings") - } - } - public enum Share { - public enum Send { - /// Send - public static let button = RuuviLocalization.tr("Localizable", "Share.Send.button", fallback: "Send") - } - public enum Success { - /// Successfully shared sensor - public static let message = RuuviLocalization.tr("Localizable", "Share.Success.message", fallback: "Successfully shared sensor") - } - } - public enum SharePresenter { - public enum UnshareSensor { - /// Do you want to unshare sensor for %@? - public static func message(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "SharePresenter.UnshareSensor.Message", String(describing: p1), fallback: "Do you want to unshare sensor for %@?") - } - } - } - public enum ShareViewController { - /// You can share the sensor with friends and family if it's in range of a Ruuvi Gateway. - /// - /// Receiver will be notified by email. If the receiver doesn't have a Ruuvi account, a free Ruuvi account will automatically be created at first log in. - /// - /// Note that the sensor's custom name and background image will be shared. The name and image sync is one time only, and after this, they can be privately customised by the receiver. Offset values (if any) set by the owner, will be automatically synced, and the receiver will always see the final corrected values. - public static let description = RuuviLocalization.tr("Localizable", "ShareViewController.Description", fallback: "You can share the sensor with friends and family if it's in range of a Ruuvi Gateway.\n\nReceiver will be notified by email. If the receiver doesn't have a Ruuvi account, a free Ruuvi account will automatically be created at first log in.\n\nNote that the sensor's custom name and background image will be shared. The name and image sync is one time only, and after this, they can be privately customised by the receiver. Offset values (if any) set by the owner, will be automatically synced, and the receiver will always see the final corrected values.") - /// Share sensor - public static let title = RuuviLocalization.tr("Localizable", "ShareViewController.Title", fallback: "Share sensor") - public enum AddFriend { - /// Add friend - public static let title = RuuviLocalization.tr("Localizable", "ShareViewController.addFriend.Title", fallback: "Add friend") - } - public enum EmailTextField { - /// Type email - public static let placeholder = RuuviLocalization.tr("Localizable", "ShareViewController.emailTextField.placeholder", fallback: "Type email") - } - public enum SharedEmails { - /// You have used %d/%d of maximum shares of this sensor. The sensor has been shared to following users: - public static func title(_ p1: Int, _ p2: Int) -> String { - RuuviLocalization.tr("Localizable", "ShareViewController.sharedEmails.Title", p1, p2, fallback: "You have used %d/%d of maximum shares of this sensor. The sensor has been shared to following users:") - } - } - } - public enum SignIn { - /// We've sent a one-time password to your email %@. Sign in by entering it here: - public static func checkMailbox(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "SignIn.CheckMailbox", String(describing: p1), fallback: "We've sent a one-time password to your email %@. Sign in by entering it here:") - } - /// Code - public static let codeHint = RuuviLocalization.tr("Localizable", "SignIn.CodeHint", fallback: "Code") - /// Email - public static let emailPlaceholder = RuuviLocalization.tr("Localizable", "SignIn.EmailPlaceholder", fallback: "Email") - /// Email sent - public static let emailSent = RuuviLocalization.tr("Localizable", "SignIn.EmailSent", fallback: "Email sent") - /// Please enter verification code - public static let enterVerificationCode = RuuviLocalization.tr("Localizable", "SignIn.EnterVerificationCode", fallback: "Please enter verification code") - /// Request a code - public static let requestCode = RuuviLocalization.tr("Localizable", "SignIn.RequestCode", fallback: "Request a code") - /// Submit - public static let submitCode = RuuviLocalization.tr("Localizable", "SignIn.SubmitCode", fallback: "Submit") - /// verification code in format: CJSM - public static let verificationCodePlaceholder = RuuviLocalization.tr("Localizable", "SignIn.VerificationCodePlaceholder", fallback: "verification code in format: CJSM") - public enum EmailMismatch { - public enum Alert { - /// Oops, you've requested the code for %@, but used the code for %@. Please double check that you are using the code for %@ - public static func message(_ p1: Any, _ p2: Any, _ p3: Any) -> String { - RuuviLocalization.tr("Localizable", "SignIn.EmailMismatch.Alert.message", String(describing: p1), String(describing: p2), String(describing: p3), fallback: "Oops, you've requested the code for %@, but used the code for %@. Please double check that you are using the code for %@") - } - } - } - public enum EmailMissing { - public enum Alert { - /// Oops, the email you've used to get the code was not saved. Please try to sign in again. - public static let message = RuuviLocalization.tr("Localizable", "SignIn.EmailMissing.Alert.message", fallback: "Oops, the email you've used to get the code was not saved. Please try to sign in again.") - } - } - public enum SubtitleLabel { - /// To enjoy all the features, create a free account or sign in to your existing Ruuvi account by entering your email address. - public static let text = RuuviLocalization.tr("Localizable", "SignIn.SubtitleLabel.text", fallback: "To enjoy all the features, create a free account or sign in to your existing Ruuvi account by entering your email address.") - } - public enum Sync { - /// Downloading content from the cloud. Please wait. - public static let message = RuuviLocalization.tr("Localizable", "SignIn.Sync.message", fallback: "Downloading content from the cloud. Please wait.") - } - public enum Title { - /// Sign in - public static let text = RuuviLocalization.tr("Localizable", "SignIn.Title.text", fallback: "Sign in") - } - public enum TitleLabel { - /// Sign in to - /// Ruuvi - /// Station - public static let text = RuuviLocalization.tr("Localizable", "SignIn.TitleLabel.text", fallback: "Sign in to\nRuuvi\nStation") - } - } - public enum TagCharts { - public enum AbortSync { - public enum Alert { - /// Sometimes the history download is slow due to the Bluetooth connectivity. Please wait a moment. - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.AbortSync.Alert.message", fallback: "Sometimes the history download is slow due to the Bluetooth connectivity. Please wait a moment.") - } - public enum Button { - /// Abort download - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.AbortSync.Button.title", fallback: "Abort download") - } - } - public enum BluetoothDisabledAlert { - /// Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on. - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.BluetoothDisabledAlert.message", fallback: "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on.") - /// Bluetooth is not enabled - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.BluetoothDisabledAlert.title", fallback: "Bluetooth is not enabled") - } - public enum Clear { - /// Clear - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.Clear.title", fallback: "Clear") - } - public enum DeleteHistoryConfirmationDialog { - /// Clear the local history data from the app? - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.DeleteHistoryConfirmationDialog.message", fallback: "Clear the local history data from the app?") - /// Are you sure? - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.DeleteHistoryConfirmationDialog.title", fallback: "Are you sure?") - public enum Button { - public enum Delete { - /// Delete - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.DeleteHistoryConfirmationDialog.button.delete.title", fallback: "Delete") - } - } - } - public enum Dismiss { - public enum Alert { - /// The history download via Bluetooth connection is in progress. Please wait. - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.Dismiss.Alert.message", fallback: "The history download via Bluetooth connection is in progress. Please wait.") - } - } - public enum Export { - /// EXPORT - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.Export.title", fallback: "EXPORT") - } - public enum FailedToSyncDialog { - /// Bluetooth history download failed. Check that you're within Bluetooth range, your sensor has firmware that supports downloading and that the sensor is not simultaneously connected to another iOS device. Sensor connection is reserved for Ruuvi Station when using connected mode in iOS. - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.FailedToSyncDialog.message", fallback: "Bluetooth history download failed. Check that you're within Bluetooth range, your sensor has firmware that supports downloading and that the sensor is not simultaneously connected to another iOS device. Sensor connection is reserved for Ruuvi Station when using connected mode in iOS.") - /// Download failed - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.FailedToSyncDialog.title", fallback: "Download failed") - } - public enum NoChartData { - /// No chart data available - public static let text = RuuviLocalization.tr("Localizable", "TagCharts.NoChartData.text", fallback: "No chart data available") - } - public enum Status { - /// Connecting... - public static let connecting = RuuviLocalization.tr("Localizable", "TagCharts.Status.Connecting", fallback: "Connecting...") - /// Disconnecting... - public static let disconnecting = RuuviLocalization.tr("Localizable", "TagCharts.Status.Disconnecting", fallback: "Disconnecting...") - /// Error - public static let error = RuuviLocalization.tr("Localizable", "TagCharts.Status.Error", fallback: "Error") - /// Reading history - public static let readingHistory = RuuviLocalization.tr("Localizable", "TagCharts.Status.ReadingHistory", fallback: "Reading history") - /// Synchronising... - public static let serving = RuuviLocalization.tr("Localizable", "TagCharts.Status.Serving", fallback: "Synchronising...") - /// Success - public static let success = RuuviLocalization.tr("Localizable", "TagCharts.Status.Success", fallback: "Success") - } - public enum Sync { - /// Sync - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.Sync.title", fallback: "Sync") - } - public enum SyncConfirmationDialog { - /// Download history data from the sensor? - public static let message = RuuviLocalization.tr("Localizable", "TagCharts.SyncConfirmationDialog.message", fallback: "Download history data from the sensor?") - /// Are you sure? - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.SyncConfirmationDialog.title", fallback: "Are you sure?") - } - public enum TryAgain { - /// Try again - public static let title = RuuviLocalization.tr("Localizable", "TagCharts.TryAgain.title", fallback: "Try again") - } - } - public enum TagChartsPresenter { - /// Synchronised: %@ - public static func numberOfPointsSynchronizedOverNetwork(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork", String(describing: p1), fallback: "Synchronised: %@") - } - } - public enum TagSettings { - /// Share - public static let shareButton = RuuviLocalization.tr("Localizable", "TagSettings.ShareButton", fallback: "Share") - public enum AirHumidityAlert { - /// Air Humidity (%@) - public static func title(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.AirHumidityAlert.title", String(describing: p1), fallback: "Air Humidity (%@)") - } - } - public enum Alert { - public enum CustomDescription { - /// Set custom description... - public static let placeholder = RuuviLocalization.tr("Localizable", "TagSettings.Alert.CustomDescription.placeholder", fallback: "Set custom description...") - /// Alert custom description - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Alert.CustomDescription.title", fallback: "Alert custom description") - } - public enum SetHumidity { - /// Set humidity alert - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Alert.SetHumidity.title", fallback: "Set humidity alert") - } - public enum SetPressure { - /// Set pressure alert - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Alert.SetPressure.title", fallback: "Set pressure alert") - } - public enum SetRSSI { - /// Set signal strength alert - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Alert.SetRSSI.title", fallback: "Set signal strength alert") - } - public enum SetTemperature { - /// Set temperature alert - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Alert.SetTemperature.title", fallback: "Set temperature alert") - } - } - public enum AlertSettings { - public enum Dialog { - /// Max (%.0f) - public static func max(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.AlertSettings.Dialog.Max", p1, fallback: "Max (%.0f)") - } - /// Min (%.0f) - public static func min(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.AlertSettings.Dialog.Min", p1, fallback: "Min (%.0f)") - } - } - } - public enum Alerts { - /// Off - public static let off = RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Off", fallback: "Off") - public enum Connection { - /// Alert when connected/disconnected - public static let description = RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Connection.description", fallback: "Alert when connected/disconnected") - } - public enum DewPoint { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.Alerts.DewPoint.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Humidity { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Humidity.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Movement { - /// Alert when sensor is moved - public static let description = RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Movement.description", fallback: "Alert when sensor is moved") - } - public enum Pressure { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Pressure.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Temperature { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.Alerts.Temperature.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - } - public enum AlertsAreDisabled { - public enum Dialog { - public enum BothNotConnectedAndNoPNPermission { - /// Alerts are disabled because the device is not connected and missing push notification permission. Please connect to the device first. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message", fallback: "Alerts are disabled because the device is not connected and missing push notification permission. Please connect to the device first.") - } - public enum Connect { - /// Connect - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.AlertsAreDisabled.Dialog.Connect.title", fallback: "Connect") - } - public enum NotConnected { - /// Alerts are disabled because you are not connected to the device. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.AlertsAreDisabled.Dialog.NotConnected.message", fallback: "Alerts are disabled because you are not connected to the device.") - } - } - } - public enum BatteryStatusLabel { - public enum Ok { - /// Battery OK - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.BatteryStatusLabel.Ok.message", fallback: "Battery OK") - } - public enum Replace { - /// Low battery - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.BatteryStatusLabel.Replace.message", fallback: "Low battery") - } - } - public enum ClaimTagButton { - /// Claim ownership - public static let claim = RuuviLocalization.tr("Localizable", "TagSettings.ClaimTagButton.Claim", fallback: "Claim ownership") - } - public enum ConnectStatus { - /// Disconnected - public static let disconnected = RuuviLocalization.tr("Localizable", "TagSettings.ConnectStatus.Disconnected", fallback: "Disconnected") - } - public enum ConnectionAlert { - /// Connection - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.ConnectionAlert.title", fallback: "Connection") - } - public enum DataSource { - public enum Advertisement { - /// Advertisement - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.DataSource.Advertisement.title", fallback: "Advertisement") - } - public enum Heartbeat { - /// Heartbeat - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.DataSource.Heartbeat.title", fallback: "Heartbeat") - } - public enum Network { - /// Cloud - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.DataSource.Network.title", fallback: "Cloud") - } - } - public enum EmptyValue { - /// - - public static let sign = RuuviLocalization.tr("Localizable", "TagSettings.EmptyValue.sign", fallback: "-") - } - public enum Firmware { - /// Current version - public static let currentVersion = RuuviLocalization.tr("Localizable", "TagSettings.Firmware.CurrentVersion", fallback: "Current version") - /// Update - public static let updateFirmware = RuuviLocalization.tr("Localizable", "TagSettings.Firmware.UpdateFirmware", fallback: "Update") - public enum CurrentVersion { - /// Very old - public static let veryOld = RuuviLocalization.tr("Localizable", "TagSettings.Firmware.CurrentVersion.VeryOld", fallback: "Very old") - } - } - public enum General { - public enum Owner { - /// No owner - public static let `none` = RuuviLocalization.tr("Localizable", "TagSettings.General.Owner.none", fallback: "No owner") - } - } - public enum HumidityIsClipped { - public enum Alert { - /// Humidity value is greater than 100% after calibration. This value doesn't make sense, so the value has been adjusted to 100%. - public static func message(_ p1: Float) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.HumidityIsClipped.Alert.message", p1, fallback: "Humidity value is greater than 100% after calibration. This value doesn't make sense, so the value has been adjusted to 100%.") - } - /// Humidity is adjusted - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.HumidityIsClipped.Alert.title", fallback: "Humidity is adjusted") - public enum Fix { - /// Fix - public static let button = RuuviLocalization.tr("Localizable", "TagSettings.HumidityIsClipped.Alert.Fix.button", fallback: "Fix") - } - } - } - public enum Label { - public enum Alerts { - /// Alerts - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.Label.alerts.text", fallback: "Alerts") - } - public enum Disabled { - /// DISABLED? - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.Label.disabled.text", fallback: "DISABLED?") - } - public enum MoreInfo { - /// More info - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.Label.moreInfo.text", fallback: "More info") - } - public enum NoValues { - /// NO VALUES? - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.Label.noValues.text", fallback: "NO VALUES?") - } - } - public enum Mac { - public enum Alert { - /// MAC Address - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Mac.Alert.title", fallback: "MAC Address") - } - } - public enum MovementAlert { - /// Movement - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.MovementAlert.title", fallback: "Movement") - } - public enum NetworkInfo { - /// Owner - public static let owner = RuuviLocalization.tr("Localizable", "TagSettings.NetworkInfo.Owner", fallback: "Owner") - } - public enum NotShared { - /// Not shared - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.NotShared.title", fallback: "Not shared") - } - public enum OffsetCorrection { - /// Humidity - public static let humidity = RuuviLocalization.tr("Localizable", "TagSettings.OffsetCorrection.Humidity", fallback: "Humidity") - /// Pressure - public static let pressure = RuuviLocalization.tr("Localizable", "TagSettings.OffsetCorrection.Pressure", fallback: "Pressure") - /// Temperature - public static let temperature = RuuviLocalization.tr("Localizable", "TagSettings.OffsetCorrection.Temperature", fallback: "Temperature") - } - public enum PairAndBackgroundScan { - /// Alerts are not available over Bluetooth connection if background scanning is not enabled. Only one iOS device can be paired to a Ruuvi sensor at a time. - public static let description = RuuviLocalization.tr("Localizable", "TagSettings.PairAndBackgroundScan.description", fallback: "Alerts are not available over Bluetooth connection if background scanning is not enabled. Only one iOS device can be paired to a Ruuvi sensor at a time.") - public enum Paired { - /// Paired and background scan is on - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.PairAndBackgroundScan.Paired.title", fallback: "Paired and background scan is on") - } - public enum Pairing { - /// Connecting to the sensor - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.PairAndBackgroundScan.Pairing.title", fallback: "Connecting to the sensor") - } - public enum Unpaired { - /// Pair and use background scan - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.PairAndBackgroundScan.Unpaired.title", fallback: "Pair and use background scan") - } - } - public enum PairError { - public enum CloudMode { - /// The sensor cannot be connected to via Bluetooth when the cloud mode is active. You can re-enable the Bluetooth connection for the cloud sensors by disabling cloud mode in the app settings. - public static let description = RuuviLocalization.tr("Localizable", "TagSettings.PairError.CloudMode.description", fallback: "The sensor cannot be connected to via Bluetooth when the cloud mode is active. You can re-enable the Bluetooth connection for the cloud sensors by disabling cloud mode in the app settings.") - } - public enum Timeout { - /// Connection timed out. Pairing was unsuccessful. Please try again. - public static let description = RuuviLocalization.tr("Localizable", "TagSettings.PairError.Timeout.description", fallback: "Connection timed out. Pairing was unsuccessful. Please try again.") - } - } - public enum PressureAlert { - /// Air Pressure (%@) - public static func title(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.PressureAlert.title", String(describing: p1), fallback: "Air Pressure (%@)") - } - } - public enum RemoveThisSensor { - /// Remove this sensor - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.RemoveThisSensor.title", fallback: "Remove this sensor") - } - public enum SectionHeader { - public enum BTConnection { - /// BLUETOOTH CONNECTION - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.BTConnection.title", fallback: "BLUETOOTH CONNECTION") - } - public enum Calibration { - /// CALIBRATION - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.Calibration.title", fallback: "CALIBRATION") - } - public enum Firmware { - /// Firmware - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.Firmware.title", fallback: "Firmware") - } - public enum General { - /// General - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.General.title", fallback: "General") - } - public enum Name { - /// NAME - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.Name.title", fallback: "NAME") - } - public enum NetworkInfo { - /// NETWORK INFO - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.NetworkInfo.title", fallback: "NETWORK INFO") - } - public enum OffsetCorrection { - /// OFFSET CORRECTION - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.OffsetCorrection.Title", fallback: "OFFSET CORRECTION") - } - public enum Remove { - /// REMOVE - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.SectionHeader.Remove.title", fallback: "REMOVE") - } - } - public enum Share { - /// Share - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Share.title", fallback: "Share") - } - public enum Shared { - /// Shared - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.Shared.title", fallback: "Shared") - } - public enum Uuid { - public enum Alert { - /// UUID - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.UUID.Alert.title", fallback: "UUID") - } - } - public enum UpdateFirmware { - public enum Alert { - /// In order to see missing values: - /// If you are using the latest firmware, set RAWv2 mode by pressing "B" on a sensor. - /// Or update your sensor with the latest firmware. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.UpdateFirmware.Alert.message", fallback: "In order to see missing values:\nIf you are using the latest firmware, set RAWv2 mode by pressing \"B\" on a sensor.\nOr update your sensor with the latest firmware.") - /// RAWv2 mode is required - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.UpdateFirmware.Alert.title", fallback: "RAWv2 mode is required") - public enum Buttons { - public enum LearnMore { - /// Learn more - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title", fallback: "Learn more") - } - } - } - } - public enum AccelerationXTitleLabel { - /// Acceleration X - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.accelerationXTitleLabel.text", fallback: "Acceleration X") - } - public enum AccelerationYTitleLabel { - /// Acceleration Y - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.accelerationYTitleLabel.text", fallback: "Acceleration Y") - } - public enum AccelerationZTitleLabel { - /// Acceleration Z - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.accelerationZTitleLabel.text", fallback: "Acceleration Z") - } - public enum BackgroundImageLabel { - /// Background image - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.backgroundImageLabel.text", fallback: "Background image") - } - public enum BatteryVoltageTitleLabel { - /// Battery Voltage - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.batteryVoltageTitleLabel.text", fallback: "Battery Voltage") - } - public enum ConfirmSharedTagRemovalDialog { - /// If you remove the sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.confirmSharedTagRemovalDialog.message", fallback: "If you remove the sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore.") - } - public enum ConfirmTagRemovalDialog { - /// Do you want to remove the sensor? You can add it again later, if needed. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.confirmTagRemovalDialog.message", fallback: "Do you want to remove the sensor? You can add it again later, if needed.") - /// Remove sensor - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.confirmTagRemovalDialog.title", fallback: "Remove sensor") - } - public enum ConfirmTagUnclaimAndRemoveDialog { - /// By removing the sensor, your sensor ownership status will be revoked. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner. - public static let message = RuuviLocalization.tr("Localizable", "TagSettings.confirmTagUnclaimAndRemoveDialog.message", fallback: "By removing the sensor, your sensor ownership status will be revoked. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner.") - } - public enum DataFormatTitleLabel { - /// Data Format - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.dataFormatTitleLabel.text", fallback: "Data Format") - } - public enum DataSourceTitleLabel { - /// Data Received Via - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.dataSourceTitleLabel.text", fallback: "Data Received Via") - } - public enum DewPointAlertTitleLabel { - /// Dew Point - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.dewPointAlertTitleLabel.text", fallback: "Dew Point") - } - public enum HumidityTitleLabel { - /// Humidity - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.humidityTitleLabel.text", fallback: "Humidity") - } - public enum MacAddressTitleLabel { - /// MAC Address - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.macAddressTitleLabel.text", fallback: "MAC Address") - } - public enum McTitleLabel { - /// Movement Counter - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.mcTitleLabel.text", fallback: "Movement Counter") - } - public enum MsnTitleLabel { - /// Measurement Sequence Number - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.msnTitleLabel.text", fallback: "Measurement Sequence Number") - } - public enum NavigationItem { - /// Sensor Settings - public static let title = RuuviLocalization.tr("Localizable", "TagSettings.navigationItem.title", fallback: "Sensor Settings") - } - public enum RssiTitleLabel { - /// Signal Strength (RSSI) - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.rssiTitleLabel.text", fallback: "Signal Strength (RSSI)") - } - public enum TagNameTitleLabel { - /// Name - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.tagNameTitleLabel.text", fallback: "Name") - public enum Rename { - /// Your sensors are displayed in alphabetical order. - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.tagNameTitleLabel.rename.text", fallback: "Your sensors are displayed in alphabetical order.") - } - } - public enum TemperatureAlertTitleLabel { - /// Temperature (%@) - public static func text(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "TagSettings.temperatureAlertTitleLabel.text", String(describing: p1), fallback: "Temperature (%@)") - } - } - public enum TxPowerTitleLabel { - /// Tx Power - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.txPowerTitleLabel.text", fallback: "Tx Power") - } - public enum UuidTitleLabel { - /// UUID - public static let text = RuuviLocalization.tr("Localizable", "TagSettings.uuidTitleLabel.text", fallback: "UUID") - } - } - public enum TagsManagerPresenter { - public enum SignOutConfirmAlert { - /// When you sign out, sensors the ownerships of which you've claimed on the sensor Settings page will be automatically removed from the app. When you sign in again using the same email address, the sensors will be returned from the cloud. - /// - /// Do you want to sign out? - public static let message = RuuviLocalization.tr("Localizable", "TagsManagerPresenter.SignOutConfirmAlert.Message", fallback: "When you sign out, sensors the ownerships of which you've claimed on the sensor Settings page will be automatically removed from the app. When you sign in again using the same email address, the sensors will be returned from the cloud.\n\nDo you want to sign out?") - } - } - public enum TemperatureUnit { - public enum Celsius { - /// Celsius (℃) - public static let title = RuuviLocalization.tr("Localizable", "TemperatureUnit.Celsius.title", fallback: "Celsius (℃)") - } - public enum Fahrenheit { - /// Fahrenheit (℉) - public static let title = RuuviLocalization.tr("Localizable", "TemperatureUnit.Fahrenheit.title", fallback: "Fahrenheit (℉)") - } - public enum Kelvin { - /// Kelvin (K) - public static let title = RuuviLocalization.tr("Localizable", "TemperatureUnit.Kelvin.title", fallback: "Kelvin (K)") - } - } - public enum UnexpectedError { - /// Attempt to read data from Realm without LUID - public static let attemptToReadDataFromRealmWithoutLUID = RuuviLocalization.tr("Localizable", "UnexpectedError.attemptToReadDataFromRealmWithoutLUID", fallback: "Attempt to read data from Realm without LUID") - /// Both local and MAC identifiers are nil - public static let bothLuidAndMacAreNil = RuuviLocalization.tr("Localizable", "UnexpectedError.bothLuidAndMacAreNil", fallback: "Both local and MAC identifiers are nil") - /// Both callback result and error are nil - public static let callbackErrorAndResultAreNil = RuuviLocalization.tr("Localizable", "UnexpectedError.callbackErrorAndResultAreNil", fallback: "Both callback result and error are nil") - /// Caller was deallocated during operation - public static let callerDeinitedDuringOperation = RuuviLocalization.tr("Localizable", "UnexpectedError.callerDeinitedDuringOperation", fallback: "Caller was deallocated during operation") - /// Failed to find logs for the sensor - public static let failedToFindLogsForTheTag = RuuviLocalization.tr("Localizable", "UnexpectedError.failedToFindLogsForTheTag", fallback: "Failed to find logs for the sensor") - /// Failed to find or generate background image - public static let failedToFindOrGenerateBackgroundImage = RuuviLocalization.tr("Localizable", "UnexpectedError.failedToFindOrGenerateBackgroundImage", fallback: "Failed to find or generate background image") - /// Failed to find sensor - public static let failedToFindRuuviTag = RuuviLocalization.tr("Localizable", "UnexpectedError.failedToFindRuuviTag", fallback: "Failed to find sensor") - /// Failed to find virtual sensor - public static let failedToFindVirtualTag = RuuviLocalization.tr("Localizable", "UnexpectedError.failedToFindVirtualTag", fallback: "Failed to find virtual sensor") - /// Failed to reverse geocode location - public static let failedToReverseGeocodeCoordinate = RuuviLocalization.tr("Localizable", "UnexpectedError.failedToReverseGeocodeCoordinate", fallback: "Failed to reverse geocode location") - /// View Model UUID is nil - public static let viewModelUUIDIsNil = RuuviLocalization.tr("Localizable", "UnexpectedError.viewModelUUIDIsNil", fallback: "View Model UUID is nil") - } - public enum UnitPressure { - public enum Hectopascal { - /// Hectopascal (hPa) - public static let title = RuuviLocalization.tr("Localizable", "UnitPressure.hectopascal.title", fallback: "Hectopascal (hPa)") - } - public enum InchOfMercury { - /// Inch of mercury (inHg) - public static let title = RuuviLocalization.tr("Localizable", "UnitPressure.inchOfMercury.title", fallback: "Inch of mercury (inHg)") - } - public enum MillimetreOfMercury { - /// Millimetre of mercury (mmHg) - public static let title = RuuviLocalization.tr("Localizable", "UnitPressure.millimetreOfMercury.title", fallback: "Millimetre of mercury (mmHg)") - } - } - public enum UpdateFirmware { - public enum Download { - /// To start with the update process, first download the latest software package on the device you're going to use for updates. Latest version is available on ruuvi.com/software-update - public static let content = RuuviLocalization.tr("Localizable", "UpdateFirmware.Download.content", fallback: "To start with the update process, first download the latest software package on the device you're going to use for updates. Latest version is available on ruuvi.com/software-update") - /// DOWNLOAD LATEST FIRMWARE - public static let header = RuuviLocalization.tr("Localizable", "UpdateFirmware.Download.header", fallback: "DOWNLOAD LATEST FIRMWARE") - } - public enum NextButton { - /// NEXT - public static let title = RuuviLocalization.tr("Localizable", "UpdateFirmware.NextButton.title", fallback: "NEXT") - } - public enum SetDfu { - /// Open the RuuviTag's enclosure by pulling it open with your fingers or gently with a flat head screw driver. - /// - /// Set RuuviTag to bootloader mode by holding down button B and pressing reset button R. Red indicator LED light will light up and stay on. If your device has only 1 button, keep it pressed 10 seconds to enter the bootloader. - public static let content = RuuviLocalization.tr("Localizable", "UpdateFirmware.SetDfu.content", fallback: "Open the RuuviTag's enclosure by pulling it open with your fingers or gently with a flat head screw driver.\n\nSet RuuviTag to bootloader mode by holding down button B and pressing reset button R. Red indicator LED light will light up and stay on. If your device has only 1 button, keep it pressed 10 seconds to enter the bootloader.") - /// SET RUUVI TAG TO DFU MODE - public static let header = RuuviLocalization.tr("Localizable", "UpdateFirmware.SetDfu.header", fallback: "SET RUUVI TAG TO DFU MODE") - } - public enum Title { - /// Update Firmware - public static let text = RuuviLocalization.tr("Localizable", "UpdateFirmware.Title.text", fallback: "Update Firmware") - } - } - public enum UserApiError { - /// Maximum claim count for the user reached - public static let erClaimCountReached = RuuviLocalization.tr("Localizable", "UserApiError.ER_CLAIM_COUNT_REACHED", fallback: "Maximum claim count for the user reached") - /// Data already exists, cannot update - public static let erConflict = RuuviLocalization.tr("Localizable", "UserApiError.ER_CONFLICT", fallback: "Data already exists, cannot update") - /// Forbidden - public static let erForbidden = RuuviLocalization.tr("Localizable", "UserApiError.ER_FORBIDDEN", fallback: "Forbidden") - /// Gateway already whitelisted - public static let erGatewayAlreadyWhitelisted = RuuviLocalization.tr("Localizable", "UserApiError.ER_GATEWAY_ALREADY_WHITELISTED", fallback: "Gateway already whitelisted") - /// Gateway not found - public static let erGatewayNotFound = RuuviLocalization.tr("Localizable", "UserApiError.ER_GATEWAY_NOT_FOUND", fallback: "Gateway not found") - /// Gateway status report failed - public static let erGatewayStatusReportFailed = RuuviLocalization.tr("Localizable", "UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED", fallback: "Gateway status report failed") - /// Internal error - public static let erInternal = RuuviLocalization.tr("Localizable", "UserApiError.ER_INTERNAL", fallback: "Internal error") - /// Invalid density mode - public static let erInvalidDensityMode = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_DENSITY_MODE", fallback: "Invalid density mode") - /// Invalid email address - public static let erInvalidEmailAddress = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_EMAIL_ADDRESS", fallback: "Invalid email address") - /// Invalid ENUM value given - public static let erInvalidEnumValue = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_ENUM_VALUE", fallback: "Invalid ENUM value given") - /// Invalid request format - public static let erInvalidFormat = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_FORMAT", fallback: "Invalid request format") - /// Invalid MAC-address - public static let erInvalidMacAddress = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_MAC_ADDRESS", fallback: "Invalid MAC-address") - /// Invalid sort mode - public static let erInvalidSortMode = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_SORT_MODE", fallback: "Invalid sort mode") - /// Invalid time range - public static let erInvalidTimeRange = RuuviLocalization.tr("Localizable", "UserApiError.ER_INVALID_TIME_RANGE", fallback: "Invalid time range") - /// Missing argument - public static let erMissingArgument = RuuviLocalization.tr("Localizable", "UserApiError.ER_MISSING_ARGUMENT", fallback: "Missing argument") - /// In order to share a sensor, it must have data - public static let erNoDataToShare = RuuviLocalization.tr("Localizable", "UserApiError.ER_NO_DATA_TO_SHARE", fallback: "In order to share a sensor, it must have data") - /// Newer data already exists, cannot update - public static let erOldEntry = RuuviLocalization.tr("Localizable", "UserApiError.ER_OLD_ENTRY", fallback: "Newer data already exists, cannot update") - /// Sensor already claimed by %@ - public static func erSensorAlreadyClaimed(_ p1: Any) -> String { - RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_ALREADY_CLAIMED", String(describing: p1), fallback: "Sensor already claimed by %@") - } - /// Sensor already claimed - public static let erSensorAlreadyClaimedNoEmail = RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL", fallback: "Sensor already claimed") - /// The sensor has already been registered - public static let erSensorAlreadyRegistered = RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_ALREADY_REGISTERED", fallback: "The sensor has already been registered") - /// This sensor is already shared - public static let erSensorAlreadyShared = RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_ALREADY_SHARED", fallback: "This sensor is already shared") - /// Sensor not found - public static let erSensorNotFound = RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_NOT_FOUND", fallback: "Sensor not found") - /// Maximum share count for the sensor reached - public static let erSensorShareCountReached = RuuviLocalization.tr("Localizable", "UserApiError.ER_SENSOR_SHARE_COUNT_REACHED", fallback: "Maximum share count for the sensor reached") - /// The share limit is reached - public static let erShareCountReached = RuuviLocalization.tr("Localizable", "UserApiError.ER_SHARE_COUNT_REACHED", fallback: "The share limit is reached") - /// Data storage error - public static let erSubDataStorageError = RuuviLocalization.tr("Localizable", "UserApiError.ER_SUB_DATA_STORAGE_ERROR", fallback: "Data storage error") - /// No user - public static let erSubNoUser = RuuviLocalization.tr("Localizable", "UserApiError.ER_SUB_NO_USER", fallback: "No user") - /// Tried to add duplicate subscription to a code - public static let erSubscriptionCodeExists = RuuviLocalization.tr("Localizable", "UserApiError.ER_SUBSCRIPTION_CODE_EXISTS", fallback: "Tried to add duplicate subscription to a code") - /// Tried to claim already used code - public static let erSubscriptionCodeUsed = RuuviLocalization.tr("Localizable", "UserApiError.ER_SUBSCRIPTION_CODE_USED", fallback: "Tried to claim already used code") - /// Subscription is not found - public static let erSubscriptionNotFound = RuuviLocalization.tr("Localizable", "UserApiError.ER_SUBSCRIPTION_NOT_FOUND", fallback: "Subscription is not found") - /// Too many requests - public static let erThrottled = RuuviLocalization.tr("Localizable", "UserApiError.ER_THROTTLED", fallback: "Too many requests") - /// Token is expired - public static let erTokenExpired = RuuviLocalization.tr("Localizable", "UserApiError.ER_TOKEN_EXPIRED", fallback: "Token is expired") - /// Unable to send email - public static let erUnableToSendEmail = RuuviLocalization.tr("Localizable", "UserApiError.ER_UNABLE_TO_SEND_EMAIL", fallback: "Unable to send email") - /// Unauthorised - public static let erUnauthorized = RuuviLocalization.tr("Localizable", "UserApiError.ER_UNAUTHORIZED", fallback: "Unauthorised") - /// User not found - public static let erUserNotFound = RuuviLocalization.tr("Localizable", "UserApiError.ER_USER_NOT_FOUND", fallback: "User not found") - /// Operation was successful - public static let ok = RuuviLocalization.tr("Localizable", "UserApiError.OK", fallback: "Operation was successful") - } - public enum WebTagLocationSource { - /// Your location - public static let current = RuuviLocalization.tr("Localizable", "WebTagLocationSource.current", fallback: "Your location") - /// Pick from the map - public static let manual = RuuviLocalization.tr("Localizable", "WebTagLocationSource.manual", fallback: "Pick from the map") - } - public enum WebTagSettings { - public enum AirHumidityAlert { - /// Air Humidity - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.AirHumidityAlert.title", fallback: "Air Humidity") - } - public enum Alerts { - /// Off - public static let off = RuuviLocalization.tr("Localizable", "WebTagSettings.Alerts.Off", fallback: "Off") - public enum DewPoint { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "WebTagSettings.Alerts.DewPoint.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Humidity { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "WebTagSettings.Alerts.Humidity.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Pressure { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "WebTagSettings.Alerts.Pressure.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - public enum Temperature { - /// Alert when less than %.0f or more than %.0f - public static func description(_ p1: Float, _ p2: Float) -> String { - RuuviLocalization.tr("Localizable", "WebTagSettings.Alerts.Temperature.description", p1, p2, fallback: "Alert when less than %.0f or more than %.0f") - } - } - } - public enum AlertsAreDisabled { - public enum Dialog { - public enum BothNoPNPermissionAndNoLocationPermission { - /// In order to enable virtual sensor alerts please always grant location and notification permissions in Settings. - public static let message = RuuviLocalization.tr("Localizable", "WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message", fallback: "In order to enable virtual sensor alerts please always grant location and notification permissions in Settings.") - } - public enum Settings { - /// Settings - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.AlertsAreDisabled.Dialog.Settings.title", fallback: "Settings") - } - } - } - public enum Button { - public enum Remove { - /// REMOVE THIS VIRTUAL SENSOR - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.Button.Remove.title", fallback: "REMOVE THIS VIRTUAL SENSOR") - } - } - public enum Label { - public enum BackgroundImage { - /// BACKGROUND - /// IMAGE - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.Label.BackgroundImage.text", fallback: "BACKGROUND\nIMAGE") - } - public enum Location { - /// Location - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.Label.Location.text", fallback: "Location") - } - public enum TagName { - /// Sensor Name - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.Label.TagName.text", fallback: "Sensor Name") - } - public enum Alerts { - /// ALERTS - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.Label.alerts.text", fallback: "ALERTS") - } - public enum Disabled { - /// DISABLED? - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.Label.disabled.text", fallback: "DISABLED?") - } - } - public enum Location { - /// Your location - public static let current = RuuviLocalization.tr("Localizable", "WebTagSettings.Location.Current", fallback: "Your location") - } - public enum PressureAlert { - /// Air Pressure - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.PressureAlert.title", fallback: "Air Pressure") - } - public enum SectionHeader { - public enum MoreInfo { - /// MORE INFO - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.SectionHeader.MoreInfo.title", fallback: "MORE INFO") - } - public enum Name { - /// NAME - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.SectionHeader.Name.title", fallback: "NAME") - } - } - public enum ConfirmClearLocationDialog { - /// Are you sure you want to clear location for this virtual sensor? Current location will be used instead. - public static let message = RuuviLocalization.tr("Localizable", "WebTagSettings.confirmClearLocationDialog.message", fallback: "Are you sure you want to clear location for this virtual sensor? Current location will be used instead.") - /// Clear Location - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.confirmClearLocationDialog.title", fallback: "Clear Location") - } - public enum ConfirmTagRemovalDialog { - /// Are you sure you want to remove this virtual sensor? - public static let message = RuuviLocalization.tr("Localizable", "WebTagSettings.confirmTagRemovalDialog.message", fallback: "Are you sure you want to remove this virtual sensor?") - /// Remove virtual sensor - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.confirmTagRemovalDialog.title", fallback: "Remove virtual sensor") - } - public enum DewPointAlertTitleLabel { - /// Dew Point - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.dewPointAlertTitleLabel.text", fallback: "Dew Point") - } - public enum NavigationItem { - /// Virtual Sensor Settings - public static let title = RuuviLocalization.tr("Localizable", "WebTagSettings.navigationItem.title", fallback: "Virtual Sensor Settings") - } - public enum TemperatureAlertTitleLabel { - /// Temperature - public static let text = RuuviLocalization.tr("Localizable", "WebTagSettings.temperatureAlertTitleLabel.text", fallback: "Temperature") - } - } - public enum Welcome { - public enum Description { - /// To find nearby sensors and receive live sensor data, press 'scan'. - public static let text = RuuviLocalization.tr("Localizable", "Welcome.description.text", fallback: "To find nearby sensors and receive live sensor data, press 'scan'.") - } - public enum Scan { - /// SCAN - public static let title = RuuviLocalization.tr("Localizable", "Welcome.scan.title", fallback: "SCAN") - } - } - public enum Widgets { - public enum Description { - /// Create widgets of your favourite Ruuvi sensors. Widgets update from the Ruuvi Cloud. A Ruuvi Gateway router is required. - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Description.message", fallback: "Create widgets of your favourite Ruuvi sensors. Widgets update from the Ruuvi Cloud. A Ruuvi Gateway router is required.") - } - public enum Loading { - /// loading... - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Loading.message", fallback: "loading...") - } - public enum Select { - public enum Sensor { - /// Selected Ruuvi sensor - public static let title = RuuviLocalization.tr("Localizable", "Widgets.Select.Sensor.title", fallback: "Selected Ruuvi sensor") - } - } - public enum Sensor { - public enum `Type` { - /// Selected sensor type - public static let title = RuuviLocalization.tr("Localizable", "Widgets.Sensor.Type.title", fallback: "Selected sensor type") - } - } - public enum Unauthorized { - public enum Inline { - /// Sign in to Ruuvi Station - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unauthorized.Inline.message", fallback: "Sign in to Ruuvi Station") - } - public enum Regular { - /// Sign in to use the widget. - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unauthorized.Regular.message", fallback: "Sign in to use the widget.") - } - } - public enum Unconfigured { - public enum Circular { - /// +Add - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unconfigured.Circular.message", fallback: "+Add") - } - public enum Inline { - /// Add sensor to use Ruuvi Widget - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unconfigured.Inline.message", fallback: "Add sensor to use Ruuvi Widget") - } - public enum Rectangular { - /// Add sensor to use Ruuvi Widget - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unconfigured.Rectangular.message", fallback: "Add sensor to use Ruuvi Widget") - } - public enum Simple { - /// Force tap to edit the widget. - public static let message = RuuviLocalization.tr("Localizable", "Widgets.Unconfigured.Simple.message", fallback: "Force tap to edit the widget.") - } - } - } -} -// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -extension RuuviLocalization { - private static func tr(_ table: String, _ key: String, _ args: CVarArg..., fallback value: String) -> String { - let format = BundleToken.bundle.localizedString(forKey: key, value: value, table: table) - return String(format: format, locale: Locale.current, arguments: args) - } -} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -// swiftlint:enable all diff --git a/Common/RuuviLocalization/target.yml b/Common/RuuviLocalization/target.yml index 0dab3ce6f..ce9e46494 100644 --- a/Common/RuuviLocalization/target.yml +++ b/Common/RuuviLocalization/target.yml @@ -6,3 +6,18 @@ targets: sources: - path: Sources name: Localization + - path: Sources/RuuviLocalization/RuuviLocalization.swift + optional: true + preBuildScripts: + - path: ../../scripts/build/generate_l10n.sh + name: Generate L10N + inputFiles: + - $(SRCROOT)/station.localization/station.localization.json + outputFiles: + - $(SRCROOT)/Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings \ No newline at end of file From b06c9f306825a8e7d4b282c86895685fc82dad42 Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Wed, 13 Dec 2023 22:30:57 +0200 Subject: [PATCH 2/6] add colors to generated code --- .swiftgen.assets.yml | 19 + .swiftgen.localizable.yml | 25 + .../Resources}/Colors.xcassets/Contents.json | 0 .../RuuviDashboardBG.colorset/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../RuuviDustyBlue.colorset/Contents.json | 0 .../RuuviGraphBGColor.colorset/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../RuuviGreen.colorset/Contents.json | 0 .../RuuviLineColor.colorset/Contents.json | 0 .../RuuviLogoTintColor.colorset/Contents.json | 0 .../RuuviMenuTextColor.colorset/Contents.json | 0 .../RuuviMenuTintColor.colorset/Contents.json | 0 .../RuuviOrangeColor.colorset/Contents.json | 0 .../RuuviPrimary.colorset/Contents.json | 0 .../RuuviPurple.colorset/Contents.json | 0 .../RuuviSecondary.colorset/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../RuuviTextColor.colorset/Contents.json | 0 .../RuuviTintColor.colorset/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Resources/de.lproj/Localizable.strings | 0 .../Resources/en.lproj/Localizable.strings | 0 .../Resources/fi.lproj/Localizable.strings | 0 .../Resources/fr.lproj/Localizable.strings | 0 .../Resources/ru.lproj/Localizable.strings | 0 .../Resources/sv.lproj/Localizable.strings | 0 .../Resources/de.lproj/Localizable.strings | 772 ------------------ .../Resources/en.lproj/Localizable.strings | 767 ----------------- .../Resources/fi.lproj/Localizable.strings | 767 ----------------- .../Resources/fr.lproj/Localizable.strings | 769 ----------------- .../Resources/ru.lproj/Localizable.strings | 767 ----------------- .../Resources/sv.lproj/Localizable.strings | 767 ----------------- ...-swift5.stencil => strings-swift5.stencil} | 0 .../Templates/xcassets-swift5.stencil | 438 ++++++++++ Common/RuuviLocalization/target.yml | 14 +- Makefile | 2 +- ...generate_l10n.sh => generate_resources.sh} | 3 +- scripts/generate_project.sh | 26 + swiftgen.yml | 34 - 47 files changed, 520 insertions(+), 4650 deletions(-) create mode 100644 .swiftgen.assets.yml create mode 100644 .swiftgen.localizable.yml rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviGreen.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviLineColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviPrimary.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviPurple.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviSecondary.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviTextColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/RuuviTintColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json (100%) rename {Apps/RuuviStation/Sources/Resources/Colors => Common/RuuviLocalization/Sources/Resources}/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json (100%) create mode 100644 Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings create mode 100644 Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings create mode 100644 Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings create mode 100644 Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings create mode 100644 Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings create mode 100644 Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/de.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fi.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fr.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/ru.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/RuuviLocalization/Resources/sv.lproj/Localizable.strings rename Common/RuuviLocalization/Templates/{structured-swift5.stencil => strings-swift5.stencil} (100%) create mode 100644 Common/RuuviLocalization/Templates/xcassets-swift5.stencil rename scripts/build/{generate_l10n.sh => generate_resources.sh} (57%) create mode 100755 scripts/generate_project.sh delete mode 100644 swiftgen.yml diff --git a/.swiftgen.assets.yml b/.swiftgen.assets.yml new file mode 100644 index 000000000..9fd7f006b --- /dev/null +++ b/.swiftgen.assets.yml @@ -0,0 +1,19 @@ +xcassets: + - inputs: ./Common/RuuviLocalization/Sources/Resources/Colors.xcassets + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/xcassets-swift5.stencil + output: ./Common/RuuviLocalization/Sources/RuuviColor.swift + params: + forceProvidesNamespaces: true + publicAccess: true + enumName: RuuviColor + +strings: + - inputs: ./Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/strings-swift5.stencil + output: ./Common/RuuviLocalization/Sources/RuuviLocalization.swift + params: + forceProvidesNamespaces: true + publicAccess: true + enumName: RuuviLocalization \ No newline at end of file diff --git a/.swiftgen.localizable.yml b/.swiftgen.localizable.yml new file mode 100644 index 000000000..dcb738514 --- /dev/null +++ b/.swiftgen.localizable.yml @@ -0,0 +1,25 @@ +json: + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_en.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_sv.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_ru.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_fi.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_fr.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings + - inputs: ./station.localization/station.localization.json + outputs: + - templatePath: ./Common/RuuviLocalization/Templates/Localizable_de.strings.stencil + output: ./Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings \ No newline at end of file diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGreen.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGreen.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviGreen.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGreen.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviLineColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLineColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviLineColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLineColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviPrimary.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPrimary.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviPrimary.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPrimary.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviPurple.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPurple.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviPurple.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPurple.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSecondary.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSecondary.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSecondary.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSecondary.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviTextColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTextColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviTextColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTextColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTintColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/RuuviTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTintColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json diff --git a/Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json similarity index 100% rename from Apps/RuuviStation/Sources/Resources/Colors/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings new file mode 100644 index 000000000..e69de29bb diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/de.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/de.lproj/Localizable.strings deleted file mode 100644 index 3be9a37ef..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/de.lproj/Localizable.strings +++ /dev/null @@ -1,772 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Fertig"; -"Copy" = "Kopieren"; -"Confirm" = "Bestätige"; -"Remove" = "Löschen"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Version"; -"Background.PresentNotifications.title" = "Zeige Benachrichtigungen"; -"Background.KeepConnection.title" = " Verbindung behalten"; -"Background.Interval.Every.string" = "Jeder"; -"Background.Interval.Min.string" = "min"; -"Background.readRSSITitle.title" = "Lese RSSI"; -"BluetoothError.disconnected" = "Getrennt"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth ist nicht aktiviert"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station benötigt Bluetooth, um Sensoren zu verbinden. Gehe zu Einstellungen und schalte Bluetooth ein."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "Zu viele Anfragen"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Versuche es in 5 minuten nochmal"; -"Cards.KeepConnectionDialog.message" = "Scheint, als ob Sie eine verbindbare Firmware auf Ihrem Ruuvi-Gerät ausführen. Möchten Sie die Verbindung zu diesem Ruuvi-Gerät im Hintergrund offen halten? Dadurch können Histogramme und Warnungen auch dann angezeigt werden, wenn die Anwendung minimiert ist."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Abbrechen"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Verbindung aufrecht erhalten"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Scheint, dass Ihr Sensor eine alte Firmware-Softwareversion verwendet. Um auf neue Funktionen wie Verlaufsdiagramme, Warnungen und Cloud-Dienste zugreifen zu können, ist eine Aktualisierung obligatorisch."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Bist du sicher? Ohne Aktualisierung können Sie den Besitz des Sensors nicht beanspruchen, Verlaufsdiagramme herunterladen und Warnungen einstellen. Das Update enthält auch Fehlerbehebungen. Wenn Sie jetzt abbrechen, können Sie den Update-Vorgang erneut von der Einstellungsseite des Sensors starten."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Überprüfe auf Updates"; -"Cards.Connected.title" = "Verbunden"; -"Cards.Error.ReverseGeocodingFailed.message" = "Fehler beim Laden der Daten für den virtuellen Sensor. Das Betriebslimit für umgekehrte Geokodierung wurde überschritten."; -"Cards.UpdatedLabel.NoData.message" = "Keine Daten in den letzten 10 Tagen"; -"CoreError.failedToGetPngRepresentation" = "PNG-Darstellung konnte nicht abgerufen werden"; -"CoreError.failedToGetDocumentsDirectory" = "Fehler beim Abrufen des Hintergrundverzeichnisses"; -"CoreError.failedToGetCurrentLocation" = "Fehler beim Abrufen des aktuellen Standorts"; -"CoreError.failedToGetDataFromResponse" = "Fehler beim Abrufen der Daten"; -"CoreError.locationPermissionDenied" = "Fehlende Berechtigung für Ortungsdienste"; -"CoreError.locationPermissionNotDetermined" = "Autorisierungsstatus der Standortberechtigung ist unbestimmt"; -"CoreError.objectNotFound" = "Objekt nicht gefunden"; -"CoreError.objectInvalidated" = "Objekt ungültig"; -"CoreError.unableToSendEmail" = "Email kann nicht gesendet werden"; -"Defaults.navigationItem.title" = "Standardeinstellungen"; -"Defaults.WelcomeShown.title" = "Willkommen angezeigt"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Charts-Swipe-Hinweis wurde angezeigt"; -"Defaults.Interval.Sec.string" = "sek"; -"Defaults.Interval.Min.string" = "min"; -"Defaults.ConnectionTimeout.title" = "Verbindungszeitüberschreitung"; -"Defaults.ServiceTimeout.title" = "Service Unterbrechung"; -"Defaults.CardsSwipeHint.title" = "Karten-Swipe-Hinweis wurde angezeigt"; -"Defaults.AlertsRepeatInterval.title" = "Benachrichtigungsintervall"; -"Defaults.WebPullInterval.title" = "Intervall für Web-Benachrichtigungen"; -"Defaults.PruningOffsetHours.title" = "Versatzstunden beschneiden"; -"Defaults.Interval.Hour.string" = "h"; -"Defaults.ChartDurationHours.title" = "Diagrammdauer"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "Anzahl der App-Starts, um zum ersten Mal eine Überprüfung anzufordern"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Überprüfung fragen, ob App-Start teilbar durch"; -"DiscoverTable.SectionTitle.WebTags" = "Virtuelle Sensoren"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth ist nicht aktiviert"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Die Ruuvi Station benötigt Bluetooth, um die Sensoren zu verbinden. Gehen Sie zu Einstellungen und schalten Sie Bluetooth ein."; -"DiscoverTable.NavigationItem.title" = "Neuen Sensor hinzufügen"; -"DiscoverTable.GetMoreSensors.button.title" = "Ruuvi Sensoren kaufen"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(Keine Sensoren in Bluetooth-Reichweite)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth ist deaktiviert)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Virtuelle Sensoren zeigen öffentliche Wetterdaten an, die von lokalen Wetterstationen bereitgestellt werden."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Fehler"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "Fehlender OpenWeatherMap-API-Schlüssel. Bitte holen Sie einen von openweathermap.org und fügen Sie sie diesen in die Datei station/Classes/Networking/Assembly/Networking.plist ein"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "Die App ist bereits dabei, Protokolle mit diesem Sensor zu synchronisieren"; -"ExpectedError.failedToDeleteTag" = "Das nicht erreichbare Gerät kann nicht entfernt werden. Bitte überprüfen Sie Ihre Bluetooth-Verbindung."; -"ExportService.Date" = "Datum"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Temperatur (%@)"; -"ExportService.Humidity" = "Feuchtigkeit (%@)"; -"ExportService.DewPoint" = "Taupunkt (%@)"; -"ExportService.Pressure" = "Druck (%@)"; -"ExportService.Voltage" = "Spannung (V)"; -"ExportService.MovementCounter" = "Bewegungszähler"; -"ExportService.MeasurementSequenceNumber" = "Messsequenznummer"; -"ExportService.TXPower" = "TX-Leistung"; -"ForegroundRow.advertisement.section" = "ANZEIGE"; -"ForegroundRow.advertisement.title" = "Werbung speichern"; -"ForegroundRow.connection.section" = "PROTOKOLL"; -"ForegroundRow.connection.title" = "Protokolle verbinden und synchronisieren"; -"Foreground.navigationItem.title" = "Vordergrund"; -"Foreground.Interval.Every.string" = "Jeder"; -"Foreground.Interval.Min.string" = "min"; -"ForegroundRow.webTags.title" = "Laden und speichern aus dem Web"; -"ForegroundRow.webTags.section" = "VIRTUELLE SENSOREN"; -"Foreground.Interval.All.string" = "Alle"; -"Heartbeat.Interval.Every.string" = "jeder"; -"Heartbeat.Interval.Min.string" = "min"; -"Heartbeat.readRSSITitle.title" = "Lese RSSI"; -"Heartbeat.Interval.Sec.string" = "sek"; -"Heartbeat.Interval.All.string" = "Alle"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Sind Sie sicher?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "Feuchtigkeits-Offset wird gelöscht. Dies kann nicht rückgängig gemacht werden. Tippen Sie auf \"Bestätigen\", um fortzufahren."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Sind Sie sicher?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "Feuchtigkeits-Offset wird kalibriert. Tippen Sie auf \"Bestätigen\", um fortzufahren."; -"Language.English" = "Englisch"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Verbunden"; -"LocalNotificationsManager.DidDisconnect.title" = "Unterbrochen"; -"LocalNotificationsManager.Disable.button" = "Ausschalten"; -"LocalNotificationsManager.LowDewPoint.title" = "Taupunkt ist zu niedrig!"; -"LocalNotificationsManager.HighDewPoint.title" = "Taupunkt ist zu hoch!,"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Ruuvi Station muss auf Ihre Kamera zugreifen, um diese Funktion zu aktivieren."; -"PermissionPresenter.NoCameraAccess.message" = "Ruuvi Station muss auf Ihre Kamera zugreifen, um diese Funktion zu aktivieren."; -"PermissionPresenter.NoLocationAccess.message" = "Ruuvi Station muss auf Ihren Standort zugreifen, um diese Funktion zu aktivieren."; -"PermissionPresenter.settings" = "Einstellungen"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Ruuvi Station benötigt die Berechtigung für Push-Benachrichtigungen, um diese Funktion zu aktivieren."; -"PhotoPicker.Sheet.message" = "Wähle ein Foto"; -"PhotoPicker.Sheet.library" = "Aus der Bibliothek auswählen"; -"PhotoPicker.Sheet.camera" = "Foto aufnehmen"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Rel"; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Abs"; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "Tau"; -"Settings.Label.Language.text" = "Sprache"; -"Settings.Language.Dialog.title" = "Sprache auswählen"; -"Settings.Language.Dialog.message" = "Öffnen Sie die Einstellungen und tippen Sie auf Sprache, um die Sprache der App zu ändern. Wenn Sie die Option Sprache in den Einstellungen nicht sehen können, stellen Sie sicher, dass Sie mindestens eine bevorzugte Sprache in den Systemeinstellungen hinzugefügt haben: Einstellungen -> Allgemein -> Sprache & Region."; -"Settings.Label.Foreground" = "Vordergrund"; -"Settings.Label.Defaults" = "Standardeinstellungen"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Fehler beim Parsen der Open Weather Map-Antwort"; -"OWMError.apiLimitExceeded" = "API-Limit überschritten"; -"OWMError.notAHttpResponse" = "Keine HTTP-Antwort"; -"OWMError.invalidApiKey" = "Ungültiger API-Schlüssel"; -"TagCharts.NoChartData.text" = "Keine Kartendaten verfügbar"; -"TagCharts.BluetoothDisabledAlert.title" = "Bluetooth ist nicht aktiviert"; -"TagCharts.BluetoothDisabledAlert.message" = "Die Ruuvi Station benötigt Bluetooth, um Sensoren zu verbinden. Gehen Sie zu Einstellungen und schalten Sie Bluetooth ein."; -"TagCharts.Clear.title" = "Löschen"; -"TagCharts.SyncConfirmationDialog.title" = "Sind Sie sicher?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Löschen"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Sind Sie sicher?"; -"TagCharts.Status.Disconnecting" = "Trennen..."; -"TagCharts.Status.Success" = "Erfolgreich"; -"TagCharts.Status.Error" = "Fehler"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "RAWv2-Modus ist erforderlich"; -"TagSettings.UpdateFirmware.Alert.message" = "Um fehlende Werte anzuzeigen:\n Wenn Sie die neueste Firmware verwenden, stellen Sie den RAWv2-Modus ein, indem Sie auf einem Sensor \"B\" drücken.\ oder aktualisieren Sie Ihren Sensor mit der neuesten Firmware."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Mehr erfahren"; -"TagCharts.Dismiss.Alert.message" = "Der Download des Protokolls über die Bluetooth-Verbindung wird gerade durchgeführt. Bitte warten Sie."; -"TagCharts.AbortSync.Alert.message" = "Manchmal ist der Download des Protokolls aufgrund der Bluetooth-Verbindung langsam. Bitte warten Sie einen Moment."; -"TagCharts.AbortSync.Button.title" = "Download abbrechen"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "Luftfeuchtigkeit wird angepasst"; -"TagSettings.HumidityIsClipped.Alert.message" = "Der Feuchtigkeitswert ist nach der Kalibrierung größer als 100 %. Dieser Wert ist nicht sinnvoll, daher wird der Wert auf 100 % angepasst."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Reparieren"; -"TagSettings.navigationItem.title" = "Sensoreinstellungen"; -"TagSettings.tagNameTitleLabel.text" = "Name"; -"TagSettings.humidityTitleLabel.text" = "Feuchtigkeit"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "MAC-Adresse"; -"TagSettings.dataFormatTitleLabel.text" = "Datei Format"; -"TagSettings.accelerationXTitleLabel.text" = "Beschleunigung X"; -"TagSettings.accelerationYTitleLabel.text" = "Beschleunigung Y"; -"TagSettings.accelerationZTitleLabel.text" = "Beschleunigung Z"; -"TagSettings.txPowerTitleLabel.text" = "Sendeleistung"; -"TagSettings.mcTitleLabel.text" = "Bewegungszähler"; -"TagSettings.msnTitleLabel.text" = "Messsequenznummer"; -"TagSettings.SectionHeader.Remove.title" = "LÖSCHEN"; -"TagSettings.Label.noValues.text" = "KEINE WERTE?"; -"TagSettings.SectionHeader.Calibration.title" = "KALIBRIERUNG"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH VERBINDUNG"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Koppeln und Hintergrundsuche verwenden"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Anschließen an den Sensor"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Gekoppelt und aktiviert"; -"TagSettings.PairAndBackgroundScan.description" = "Warnungen sind über die Bluetooth-Verbindung nicht verfügbar, wenn die Hintergrundsuche nicht aktiviert ist. Es kann jeweils nur ein iOS-Gerät mit einem Ruuvi-Sensor gekoppelt werden."; -"TagSettings.PairError.CloudMode.description" = "Der Sensor kann nicht über Bluetooth verbunden werden, wenn der Cloud-Modus aktiv ist. Sie können die Bluetooth-Verbindung für die Cloud-Sensoren wieder aktivieren, indem Sie den Cloud-Modus in den App-Einstellungen deaktivieren."; -"TagSettings.PairError.Timeout.description" = "Die Verbindung wurde unterbrochen. Das Pairing war nicht erfolgreich. Bitte versuchen Sie es erneut."; -"TagSettings.dataSourceTitleLabel.text" = "Daten empfangen über"; -"TagSettings.DataSource.Heartbeat.title" = "Herzschlag"; -"TagSettings.DataSource.Advertisement.title" = "Advertisement"; -"TagSettings.DataSource.Network.title" = "Cloud"; -"TagSettings.Label.disabled.text" = "AUSGESCHALTEN?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Warnungen sind deaktiviert, weil das Gerät nicht verbunden ist und die Berechtigung für Push-Benachrichtigungen fehlt. Bitte verbinden Sie sich zuerst mit dem Gerät."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Verbinden"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Warnungen sind deaktiviert, weil Sie nicht mit dem Gerät verbunden sind."; -"TagSettings.Alert.CustomDescription.placeholder" = "Benutzerdefinierte Beschreibung festlegen..."; -"TagSettings.Alert.CustomDescription.title" = "Benutzerdefinierte Beschreibung des Alarms"; -"TagSettings.Alerts.Humidity.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Taupunkt"; -"TagSettings.Alerts.Pressure.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"TagSettings.Alerts.Connection.description" = "Warnung, wenn verbunden/getrennt"; -"TagSettings.ConnectionAlert.title" = "Verbindung"; -"TagSettings.SectionHeader.Firmware.title" = "Firmware"; -"TagSettings.Firmware.CurrentVersion" = "Aktuelle Version"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Sehr alt"; -"TagSettings.Firmware.UpdateFirmware" = "Aktualisiere"; -"UnexpectedError.callbackErrorAndResultAreNil" = "Sowohl das Rückrufergebnis als auch der Fehler sind null"; -"UnexpectedError.callerDeinitedDuringOperation" = "Anrufer wurde während des Betriebs freigegeben"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Fehler beim Umkehren der Geokodierung des Standorts"; -"UnexpectedError.failedToFindRuuviTag" = "Sensor konnte nicht gefunden werden"; -"UnexpectedError.failedToFindLogsForTheTag" = "Protokolle für den Sensor konnten nicht gefunden werden"; -"UnexpectedError.viewModelUUIDIsNil" = "Modell-UUID Anzeige ist null"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Versuch, Daten aus Realm ohne LUID zu lesen"; -"UnexpectedError.failedToFindVirtualTag" = "Virtueller Sensor konnte nicht gefunden werden"; -"HumidityUnit.Dew.title" = "Taupunkt (%@)"; -"WebTagLocationSource.current" = "Ihr Standort"; -"WebTagLocationSource.manual" = "Wählen Sie aus der Karte"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Virtuellen Sensor entfernen"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Möchten Sie diesen virtuellen Sensor wirklich entfernen?"; -"WebTagSettings.Location.Current" = "Ihr Standort"; -"WebTagSettings.confirmClearLocationDialog.title" = "Standort löschen"; -"WebTagSettings.confirmClearLocationDialog.message" = "Möchten Sie den Standort dieses virtuellen Sensors wirklich löschen? Stattdessen wird der aktuelle Standort verwendet."; -"WebTagSettings.navigationItem.title" = "Virtuelle Sensoreinstellungen"; -"WebTagSettings.Label.BackgroundImage.text" = "HINTERGRUND BILD"; -"WebTagSettings.Label.Location.text" = "Standort"; -"WebTagSettings.Button.Remove.title" = "ENTFERNEN SIE DIESEN VIRTUELLEN SENSOR"; -"WebTagSettings.SectionHeader.Name.title" = "NAME"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "MEHR INFO"; -"WebTagSettings.Alerts.Temperature.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"WebTagSettings.Alerts.Off" = "Aus"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Temperatur"; -"WebTagSettings.Label.disabled.text" = "AUSGESCHALTET?"; -"WebTagSettings.Label.alerts.text" = "WARNUNGEN"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "Um virtuelle Sensorwarnungen zu aktivieren, erteilen Sie bitte immer Standort- und Benachrichtigungsberechtigungen in den Einstellungen."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Einstellungen"; -"WebTagSettings.AirHumidityAlert.title" = "Luftfeuchtigkeit"; -"WebTagSettings.Alerts.Humidity.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Taupunkt"; -"WebTagSettings.PressureAlert.title" = "Luftdruck"; -"WebTagSettings.Alerts.Pressure.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"Welcome.description.text" = "Um Sensoren in der Nähe zu finden und Live-Sensordaten zu empfangen, drücken Sie Scannen."; -"ExportService.AccelerationX" = "Beschleunigung X"; -"ExportService.AccelerationY" = "Beschleunigung Y"; -"ExportService.AccelerationZ" = "Beschleunigung Z"; -"DiscoverTable.SectionTitle.Devices" = "Ruuvi-Sensoren in der Nähe"; -"ago" = "vor"; -"TagSettings.MovementAlert.title" = "Bewegung"; -"TagSettings.Alerts.Movement.description" = "Warnung, wenn der Sensor bewegt wird"; -"LocalNotificationsManager.HighHumidity.title" = "Luftfeuchtigkeit ist zu hoch!"; -"LocalNotificationsManager.LowHumidity.title" = "Luftfeuchtigkeit ist zu niedrig!"; -"LocalNotificationsManager.DidMove.title" = "Bewegung erkannt!"; -"LocalNotificationsManager.HighPressure.title" = "Luftdruck ist zu hoch!"; -"LocalNotificationsManager.LowPressure.title" = "Luftdruck ist zu niedrig!"; -"LocalNotificationsManager.HighSignal.title" = "Signalstärke ist zu hoch!"; -"LocalNotificationsManager.LowSignal.title" = "Signalstärke ist zu gering!"; -"LocalNotificationsManager.HighTemperature.title" = "Temperatur ist zu hoch!"; -"LocalNotificationsManager.LowTemperature.title" = "Temperatur zu niedrig!"; -"TagSettings.Alerts.Off" = "Aus"; -"TagSettings.Alerts.Temperature.description" = "Warnung bei weniger als %.0f oder mehr als %.0f"; -"TagSettings.Label.alerts.text" = "Warnungen"; -"TagSettings.backgroundImageLabel.text" = "Hintergrund bild"; -"TagSettings.batteryVoltageTitleLabel.text" = "Batteriespannung"; -"HumidityCalibration.Button.Calibrate.title" = "Kalibrieren"; -"HumidityCalibration.lastCalibrationDate.format" = "Kalibriert: %@"; -"HumidityCalibration.Description.text" = "Um die relative Luftfeuchtigkeit so genau wie möglich zu messen, wird eine Natriumchlorid-(Salz-)Kalibrierung empfohlen. Sehen Sie sich Video-Tutorials an, wie Sie dies ganz einfach zu Hause tun können."; -"HumidityCalibration.Label.note.text" = "Beachten Sie, dass die Kalibrierungsdaten lokal auf Ihrem Mobilgerät gespeichert werden. Nach der Deinstallation und Installation von Ruuvi Station müssen Sie möglicherweise eine Neukalibrierung durchführen."; -"HumidityCalibration.VideoTutorials.link" = "Videoanleitungen"; -"Cancel" = "Abbrechen"; -"HumidityCalibration.Button.Clear.title" = "Löschen"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Die lokalen historischen Daten aus der App löschen?"; -"HumidityCalibration.Button.Close.title" = "Schließen"; -"TagCharts.Status.Serving" = "Synchronisieren..."; -"TagCharts.Status.Connecting" = "Verbinden..."; -"TagSettings.ConnectStatus.Disconnected" = "Getrennt"; -"TagCharts.Export.title" = "EXPORT"; -"h" = "h"; -"About.AboutHelp.contents" = "Ruuvi Station ist eine benutzerfreundliche Anwendung, mit der Sie die Messdaten von Ruuvi-Sensoren überwachen können."; -"About.AboutHelp.header" = "Über / Hilfe"; -"About.TagsCount.text" = "Sensoren hinzugefügt: %d"; -"About.MeasurementsCount.text" = "Anzahl lokal gespeicherter Messungen: %d"; -"About.DatabaseSize.text" = "Datenbankgröße: %@"; -"About.More.contents" = "Ruuvi-Website: ruuvi.com\nRuuvi-Forum: f.ruuvi.com\nRuuvi-Blog: ruuvi.com/blog\nRuuvi auf Twitter: twitter.com/ruuvicom"; -"About.More.header" = "Mehr erfahren"; -"About.OpenSource.contents" = "Genau wie Ruuvi-Sensoren sind auch die Ruuvi Station-Apps Open Source. Verfolgen Sie die Entwicklung und leisten Sie einen Beitrag unter: github.com/ruuvi"; -"About.OpenSource.header" = "Open-source"; -"About.OperationsManual.contents" = "Beginnen Sie mit der Nutzung der mobilen Anwendung Ruuvi Station mit unseren Online-Anleitungen: ruuvi.com/support/station-mobile"; -"About.OperationsManual.header" = "Anleitung"; -"About.Privacy.contents" = "Durch die Nutzung der Anwendung akzeptieren Sie die allgemeinen Geschäftsbedingungen von Ruuvi: ruuvi.com/terms"; -"About.Privacy.header" = "Datenschutz-bestimmungen"; -"About.Troubleshooting.contents" = "Hilfe bei der Verwendung der Ruuvi Station-Apps, Ruuvi-Produkte und des Ruuvi Cloud-Dienstes finden Sie in unserem Support-Center: ruuvi.com/support"; -"About.Troubleshooting.header" = "Fehlerbehebung"; -"hours" = "Stunden"; -"Interval.Days.string" = "Tage"; -"TagSettings.AirHumidityAlert.title" = "Luftfeuchtigkeit (%@)"; -"HumidityUnit.gm3.title" = "Absolut (g/m³)"; -"g/m³" = "g/m³"; -"HumidityUnit.Percent.title" = "Relative (%)"; -"TagSettings.Mac.Alert.title" = "MAC-Adresse"; -"Menu.Label.AboutHelp.text" = "Über / Hilfe"; -"Menu.Label.AddAnNewSensor.text" = "Neuen Sensor hinzufügen"; -"Menu.Label.AppSettings.text" = "App Einstellungen"; -"Menu.Label.GetMoreSensors.text" = "Sensoren kaufen"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Ruuvi Gateway kaufen"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "Was mit Ruuvi messen?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Feedback schicken"; -"Menu.Label.MyRuuviAccount.text" = "Mein Ruuvi Konto"; -"min" = "min"; -"minutes" = "Minuten"; -"TagSettings.Label.moreInfo.text" = "Mehr info"; -"TagSettings.SectionHeader.Name.title" = "NAME"; -"No" = "Nein"; -"OK" = "OK"; -"Cards.NoSensors.title" = "Keine Sensoren hinzugefügt\nKlicken Sie hier, um Sensoren hinzuzufügen"; -"TagSettings.PressureAlert.title" = "Luftdruck (%@)"; -"UnitPressure.hectopascal.title" = "Hektopascal (hPa)"; -"hPa" = "hPa"; -"UnitPressure.inchOfMercury.title" = "Zoll Quecksilber (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Millimeter Quecksilbersäule (mmHg)"; -"TagCharts.Status.ReadingHistory" = "History wird gelesen"; -"TagSettings.rssiTitleLabel.text" = "Signalstärke (RSSI)"; -"signal_strength_dbm" = "Signalstärke (dBm)"; -"s" = "s"; -"Welcome.scan.title" = "SCANNEN"; -"Background.Interval.Sec.string" = "sek"; -"Settings.navigationItem.title" = "Einstellungen"; -"Settings.BackgroundScanning.title" = "Scannen im Hintergrund"; -"Settings.BackgroundScanning.Footer.message" = "Wichtiger Hinweis: Die Bluetooth-Hintergrundprotokollierung und Bluetooth-Warnungen funktionieren nur, wenn die Hintergrundsuche aktiviert ist. Wenn Sie die Hintergrundabtastung deaktivieren, werden alle gekoppelten Ruuvi-Sensoren automatisch entkoppelt und Sie müssen sie auf ihren Einstellungsseiten erneut koppeln."; -"Settings.BackgroundScanning.interval" = "Datenprotokollierungsintervall"; -"Settings.Label.Chart" = "Diagramm Einstellungen"; -"ChartSettings.AllPoints.title" = "Alle Messungen anzeigen"; -"ChartSettings.AllPoints.description" = "Die Aktivierung kann dazu führen, dass Diagramme langsam aktualisiert werden."; -"ChartSettings.DrawDots.title" = "Datenpunkte anzeigen"; -"ChartSettings.DrawDots.description" = "Kleine Punkte helfen zu verstehen, wann Messungen erfasst wurden."; -"Defaults.ChartIntervalSeconds.title" = "Diagrammintervall"; -"ChartSettings.Duration.title" = "Anzeigezeitraum des Diagrammverlaufs"; -"ChartSettings.Duration.description" = "Konfigurieren Sie den Zeitraum, der im Diagramm angezeigt werden soll, von 1 bis 10 Tagen."; -"Settings.Label.HumidityUnit.text" = "Feuchtigkeitseinheit"; -"Settings.Label.Temperature" = "Temperatur"; -"Settings.Label.Humidity" = "Feuchtigkeit"; -"Settings.Label.Pressure" = "Druck"; -"Settings.ChooseHumidityUnit.text" = "Wählen Sie die Luftfeuchtigkeitseinheit aus, die angezeigt werden soll."; -"Settings.Label.PressureUnit.text" = "Druckeinheit"; -"Settings.ChoosePressureUnit.text" = "Wählen Sie die Druckeinheit, die angezeigt werden soll."; -"Settings.Label.TemperatureUnit.text" = "Temperatureinheit"; -"Settings.ChooseTemperatureUnit.text" = "Wählen Sie die Temperatureinheit, die angezeigt werden soll."; -"dBm" = "dBm"; -"TagCharts.Sync.title" = "Sync"; -"TagCharts.SyncConfirmationDialog.message" = "Daten vom Sensor herunterladen?"; -"WebTagSettings.Label.TagName.text" = "Sensor Name"; -"TagSettings.confirmTagRemovalDialog.title" = "Sensor entfernen"; -"TagSettings.confirmTagRemovalDialog.message" = "Möchten Sie den Sensor entfernen? Sie können ihn später bei Bedarf wieder hinzufügen."; -"TagSettings.temperatureAlertTitleLabel.text" = "Temperatur (%@)"; -"TemperatureUnit.Celsius.title" = "Celsius (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Fahrenheit (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Kelvin (K)"; -"Updated" = "Aktuaisiert"; -"V" = "V"; -"RuuviOnboard.Welcome.title" = "Wischen Sie, um zu sehen, was Ruuvi Station für Sie tun kann."; -"RuuviOnboard.Measure.title" = "Umweltdaten messen: Temperatur, relative Luftfeuchtigkeit und Luftdruck."; -"RuuviOnboard.Access.title" = "Greifen Sie in Echtzeit auf Daten für jeden verknüpften Sensor zu und erkunden Sie Verlaufsdiagramme."; -"RuuviOnboard.Alerts.title" = "Legen Sie Benachrichtigungen fest und lassen Sie sich benachrichtigen, wenn Ihre Grenzen erreicht sind."; -"RuuviOnboard.Cloud.title" = "Melden Sie sich an, um das volle Potenzial der App zu nutzen."; -"RuuviOnboard.Cloud.subtitle" = "Beanspruchen Sie das Eigentum an Ihren Sensoren mit einem kostenlosen Ruuvi Cloud-Konto."; -"RuuviOnboard.Cloud.subtitle.signed" = "Super! Sie haben sich bereits angemeldet!"; -"RuuviOnboard.Start.title" = "Drücken Sie SCAN, um Sensoren in der Nähe zu finden und zu Ihrer Ruuvi Station hinzuzufügen."; -"Yes" = "Ja"; -"LocalNotificationsManager.Mute.button" = "Stumm schalten für eine Stunde"; -"Defaults.AlertsMuteInterval.title" = "Alarmstummschaltintervall"; -"SignIn.Title.text" = "Einloggen"; -"Menu.SignOut.text" = "Ausloggen"; -"RuuviOnboard.Cloud.Benefits.message" = "Vorteile:\n\n ● Sensornamen, Hintergrundbilder, Offsets und Alarmeinstellungen werden sicher in der Cloud gespeichert\n\n ● Fernzugriff auf Sensoren über das Internet (erfordert ein Ruuvi Gateway)\n\n ● Teilen Sie Sensoren mit Freunden und Familie (erfordert ein Ruuvi Gateway)\n\n ● Sehen Sie bis zu 2 Jahre Geschichtsdaten auf station.ruuvi.com (erfordert ein Ruuvi-Gateway)"; -"RuuviOnboard.Cloud.Details.title" = "Einzelheiten"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Sind Sie sicher, dass Sie die Anmeldung überspringen wollen?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Ja, überspringen"; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Zurückgehen"; -"SignIn.EmailPlaceholder" = "Email"; -"SignIn.RequestCode" = "Fordern Sie einen Code an"; -"SignIn.SubmitCode" = "Abschicken"; -"SignIn.EmailSent" = "E-Mail gesendet"; -"SignIn.CheckMailbox" = "Wir haben ein Einmalpasswort an Ihre E-Mail gesendet %@. Melden Sie sich an, indem Sie es hier eingeben:"; -"SignIn.CodeHint" = "Code"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "Wenn Sie sich abmelden, werden Sensoren, deren Eigentum Sie mit den Sensoreinstellungen bestätigt haben, automatisch aus der App entfernt. Wenn Sie sich erneut mit derselben E-Mail-Adresse anmelden, werden die Sensoren aus der Cloud zurückgegeben.\n\nMöchten Sie sich abmelden?"; -"TagSettings.ClaimTagButton.Claim" = "Inhaberschaft beanspruchen"; -"TagSettings.ShareButton" = "Teilen"; -"Syncing..." = "Synchronisierung..."; -"Synchronized" = "Synchronisiert"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Synchronisiert: %@"; -"MenuTableViewController.None" = "keiner"; -"MenuTableViewController.User" = "Benutzer: %@"; -"ShareViewController.Title" = "Sensor teilen"; -"ShareViewController.Description" = "Sie können den Sensor mit Freunden und Familie teilen, wenn er sich in Reichweite eines Ruuvi Gateways befindet.\n\nDer Empfänger wird per E-Mail benachrichtigt. Wenn der Empfänger kein Ruuvi-Konto hat, wird beim ersten Anmelden automatisch ein kostenloses Ruuvi-Konto erstellt.\n\nBeachten Sie, dass der benutzerdefinierte Name und das Hintergrundbild des Sensors geteilt werden. Der Name und das Bild werden nur einmal synchronisiert und können danach vom Empfänger privat angepasst werden. Vom Besitzer eingestellte Offset-Werte (sofern vorhanden) werden automatisch synchronisiert und der Empfänger sieht immer die endgültigen korrigierten Werte."; -"ShareViewController.addFriend.Title" = "Freund hinzufügen"; -"ShareViewController.emailTextField.placeholder" = "E-Mail eingeben"; -"ShareViewController.sharedEmails.Title" = "Sie haben %d/%d der maximalen Teilungszahl für diesen Sensor verwendet. Der Sensor wird mit den folgenden Benutzern geteilt:"; -"Share.Send.button" = "Senden"; -"SharePresenter.UnshareSensor.Message" = "Möchten Sie die Freigabe des Sensors für %@ aufheben?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "NETZWERK INFORMATION"; -"TagSettings.NetworkInfo.Owner" = "Eigentümer"; -"Menu.RuuviNetworkStatus.text" = "Ruuvi-Cloud-Status"; -"SignIn.TitleLabel.text" = "Login zur\nRuuvi\nStation"; -"SignIn.SubtitleLabel.text" = "Um alle Funktionen nutzen zu können, erstellen Sie ein kostenloses Konto oder melden Sie sich bei Ihrem bestehenden Ruuvi-Konto an, indem Sie Ihre E-Mail-Adresse eingeben."; -"SignIn.VerificationCodePlaceholder" = "Verifizierungscode im Format: CJSM"; -"UserApiError.ER_FORBIDDEN" = "Verboten"; -"UserApiError.ER_UNAUTHORIZED" = "Nicht autorisiert"; -"UserApiError.ER_INTERNAL" = "Interner Fehler"; -"UserApiError.ER_INVALID_FORMAT" = "Ungültiges Anfrageformat"; -"UserApiError.ER_USER_NOT_FOUND" = "Benutzer wurde nicht gefunden"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Sensor nicht gefunden"; -"UserApiError.ER_TOKEN_EXPIRED" = "Token ist abgelaufen"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "Abonnement wurde nicht gefunden"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "Das Teilen Limit ist erreicht"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Sensor Teilen Limit ist erreicht"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "Um den Sensor zu teilen, benötigen Sie einen Ruuvi Gateway-Router in der Nähe des Sensors"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "Dieser Sensor wurde bereits geteilt"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Sensor bereits beansprucht von %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Sensor bereits beansprucht"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Die Email kann nicht gesendet werden"; -"UserApiError.ER_MISSING_ARGUMENT" = "Fehlendes Argument"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Ungültiger Dichtemodus"; -"UserApiError.ER_INVALID_SORT_MODE" = "Ungültiger Sortiermodus"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Ungültiger Zeitraum"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Ungültige E-Mail-Adresse"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Ungültige MAC-Adresse"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Datenspeicherfehler"; -"UserApiError.ER_SUB_NO_USER" = "Kein Benutzer"; -"UserApiError.ER_THROTTLED" = "Zu viele Anfragen"; -"OffsetCorrection.CalibrationDescription.text" = "Bei normalem Gebrauch ist es nicht erforderlich, den Offset anzupassen.\n\nWenn Sie ein fortgeschrittener Benutzer sind und die werkseitig kalibrierten Sensoren manuell konfigurieren möchten, ist dies möglich.\n\nTipps zur Kalibrierung sind auf ruuvi.com/support verfügbar"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Kalibrierungseinstellungen löschen?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Kalibriereinrichtung"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Geben Sie den erwarteten Temperaturwert des Sensors unter aktuellen Bedingungen ein (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Geben Sie den erwarteten Druckwert vom Sensor unter aktuellen Bedingungen ein (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Geben Sie den erwarteten Feuchtigkeitswert des Sensors unter den aktuellen Bedingungen ein (%@): "; -"OffsetCorrection.OriginalValue.title" = "Ursprünglicher Messwert"; -"OffsetCorrection.CorrectedValue.title" = "Korrigierter Wert"; -"OffsetCorrection.Temperature.Title" = "Temperatur-Offset"; -"OffsetCorrection.Humidity.Title" = "Feuchtigkeits-Offset"; -"OffsetCorrection.Pressure.Title" = "Druckoffset"; -"OffsetCorrection.Calibrate.button" = "Offset-Korrektur"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "OFFSET-KORREKTUR"; -"TagSettings.OffsetCorrection.Temperature" = "Temperatur"; -"TagSettings.OffsetCorrection.Humidity" = "Feuchtigkeit"; -"TagSettings.OffsetCorrection.Pressure" = "Druck"; -"PhotoPicker.Sheet.files" = "Aus Dateien auswählen"; -"SignIn.EnterVerificationCode" = "Bitte Bestätigungscode eingeben"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Hintergrundbild konnte nicht gefunden oder generiert werden"; -"UnexpectedError.bothLuidAndMacAreNil" = "Sowohl lokale als auch MAC-Identifikatoren sind null"; -"RuuviCloudApiError.emptyResponse" = "Leere Antwort"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "Fehler beim Abrufen der Daten aus der Antwort"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Unerwarteter HTTP-Statuscode"; -"RuuviCloudError.NotAuthorized" = "Nicht autorisiert"; -"RuuviLocalError.failedToGetJpegRepresentation" = "Fehler beim Abrufen der JPG-Darstellung"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Fehler beim Abrufen des Hintergrundverzeichnisses"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Sensor konnte nicht gefunden werden"; -"RuuviServiceError.pictureUrlIsNil" = "Bild-URL ist null"; -"RuuviServiceError.macIdIsNil" = "MAC-Kennung ist null"; -"network_sharing_disabled" = "Nur Sensoren in Reichweite Ihres Ruuvi Gateways können geteilt werden."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Sowohl lokale als auch MAC-Identifikatoren sind null"; -"RuuviServiceError.failedToParseNetworkResponse" = "Fehler beim Parsen der Antwort."; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Hintergrundbild konnte nicht gefunden oder generiert werden"; -"RuuviServiceError.failedToGetJpegRepresentation" = "Fehler beim Abrufen der JPG-Darstellung"; -"UpdateFirmware.Title.text" = "Firmware aktualisieren"; -"UpdateFirmware.Download.header" = "AKTUELLE FIRMWARE HERUNTERLADEN"; -"UpdateFirmware.Download.content" = "Um mit dem Update-Vorgang zu beginnen, laden Sie zuerst das neueste Softwarepaket auf das Gerät herunter, das Sie für die Aktualisierung verwenden möchten. Die neueste Version ist auf ruuvi.com/software-update verfügbar"; -"UpdateFirmware.SetDfu.header" = "RUUVI-TAG AUF DFU-MODUS EINSTELLEN"; -"UpdateFirmware.SetDfu.content" = "Öffnen Sie das Gehäuse des RuuviTag, indem Sie es mit den Fingern oder vorsichtig mit einem Flachkopfschraubendreher aufziehen.\n\nSetzen Sie den RuuviTag in den Bootloader-Modus, indem Sie die Taste B gedrückt halten und die Reset-Taste R drücken. Die rote LED-Anzeige leuchtet und bleibt An. Wenn Ihr Gerät nur über 1 Taste verfügt, halten Sie diese 10 Sekunden lang gedrückt, um den Bootloader aufzurufen."; -"UpdateFirmware.NextButton.title" = "NÄCHSTE"; -"DfuDevicesScanner.Title.text" = "Geräte"; -"DfuDevicesScanner.Description.text" = "Suchen und wählen Sie den Sensor \"RuuviBoot\"."; -"DfuDevicesScanner.NoDevice.text" = "(Keine Sensoren in Bluetooth-Reichweite)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth ist deaktiviert)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth ist nicht aktiviert"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Die Ruuvi Station benötigt Bluetooth, um Sensoren zu verbinden. Gehen Sie zu Einstellungen und schalten Sie Bluetooth ein."; -"DfuFlash.Title.text" = "DFU Flash"; -"DfuFlash.Progress.text" = "Fortschritt"; -"DfuFlash.Step.text" = "Schritt"; -"DfuFlash.Steps.PackageSelection.text" = "Paketauswahl"; -"DfuFlash.Steps.ReadyForUpload.text" = "Bereit zum Hochladen"; -"DfuFlash.Steps.Uploading.text" = "Hochladen"; -"DfuFlash.Steps.Completed.text" = "Fertig"; -"DfuFlash.OpenDocumentPicker.title" = "DOKUMENTENAUSWAHL ÖFFNEN"; -"DfuFlash.FirmwareSelectionGuide.text" = "Suchen Sie die zuvor heruntergeladene ZIP-Datei auf Ihrem Handy."; -"DfuFlash.Firmware.FileName.text" = "Dateiname"; -"DfuFlash.Firmware.Parts.text" = "Teile"; -"DfuFlash.Firmware.Size.text" = "Größe"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Größe des Soft-Geräts"; -"DfuFlash.Firmware.BootloaderSize.text" = "Bootloader-Größe"; -"DfuFlash.Cancel.text" = "ABBRECHEN"; -"DfuFlash.Start.text" = "Start"; -"DfuFlash.Finish.text" = "BEENDEN"; -"DfuFlash.FinishGuide.text" = "Der Firmware-Update-Prozess wurde erfolgreich abgeschlossen. -Ihr RuuviTag-Sensor ist einsatzbereit!"; -"DfuFlash.CancelAlert.text" = "Möchten Sie den Firmware-Aktualisierungsvorgang wirklich abbrechen?"; -"RuuviDfuError.invalidFirmwareFile" = "Ungültige Firmware-Datei"; -"DFUUIView.navigationTitle" = "Firmware Update"; -"DFUUIView.latestTitle" = "Neueste verfügbare Ruuvi Firmware-Version:"; -"DFUUIView.currentTitle" = "Aktuelle Version:"; -"DFUUIView.notReportingDescription" = "Ihr Sensor meldet seine aktuelle Firmware-Version nicht. Dies bedeutet, dass wahrscheinlich eine alte Firmware-Version ausgeführt wird und eine Aktualisierung empfohlen wird."; -"DFUUIView.alreadyOnLatest" = "Sie verwenden die neueste Firmware-Version, keine Aktualisierung erforderlich"; -"DFUUIView.startUpdateProcess" = "Update-Prozess starten"; -"DFUUIView.downloadingTitle" = "Laden Sie die neueste zu aktualisierende Firmware herunter..."; -"DFUUIView.prepareTitle" = "Bereiten Sie Ihren Sensor vor"; -"DFUUIView.openCoverTitle" = "1. Öffnen Sie den Deckel Ihres Ruuvi-Sensors"; -"DFUUIView.locateBootButtonTitle" = "2. Suchen Sie die kleinen runden schwarzen Knöpfe auf der weißen Platine; ältere Ruuvi-Sensoren haben zwei Knöpfe mit den Bezeichnungen \"R\" und \"B\", während neuere nur einen Knopf ohne Beschriftung haben."; -"DFUUIView.setUpdatingModeTitle" = "3. Stellen Sie den Sensor in den Aktualisierungsmodus:"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. Wenn Ihr Sensor 2 Tasten hat: Halten Sie die Taste \"B\" gedrückt und tippen Sie gleichzeitig kurz auf die Taste \"R\". Lassen Sie die Taste \"B\" los."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. Wenn Ihr Sensor eine einzelne Taste hat: Halten Sie die Taste 10 Sekunden lang gedrückt."; -"DFUUIView.toBootModeSuccessTitle" = "4. Wenn die Einstellung erfolgreich war, leuchtet ein rotes Licht auf der Platine und die Schaltfläche in der App ändert sich in \"Start the update\"."; -"DFUUIView.updatingTitle" = "Aktualisierung..."; -"DFUUIView.searchingTitle" = "Suche nach einem Sensor"; -"DFUUIView.startTitle" = "Starten Sie die Aktualisierung"; -"DFUUIView.doNotCloseTitle" = "Schließen Sie die App nicht und schalten Sie den Sensor während des Updates nicht aus."; -"DFUUIView.successfulTitle" = "Aktualisierung erfolgreich"; -"DFUUIView.DBMigration.Error.message" = "Die Aktualisierung war erfolgreich, aber es ist ein unerwarteter Datenbankmigrationsfehler aufgetreten. Um diesen Sensor weiterhin zu verwenden, entfernen Sie ihn bitte aus der App und fügen Sie ihn dann erneut hinzu."; -"RuuviDfuError.failedToConstructUUID" = "Fehler beim Erstellen der UUID"; -"SignIn.EmailMismatch.Alert.message" = "Hoppla, Sie haben den Code für %@ angefordert, aber den Code für %@ verwendet. Bitte überprüfen Sie, ob Sie den Code für %@ verwenden."; -"SignIn.EmailMissing.Alert.message" = "Hoppla, die E-Mail, mit der Sie den Code erhalten haben, wurde nicht gespeichert. Bitte versuchen Sie erneut, sich anzumelden."; -"TagSettings.RemoveThisSensor.title" = "Entfernen Sie diesen Sensor"; -"Share.Success.message" = "Sensor erfolgreich geteilt"; -"TagSettings.SectionHeader.General.title" = "Allgemein"; -"TagSettings.Shared.title" = "Geteilt"; -"TagSettings.NotShared.title" = "Nicht geteilt"; -"Owner.title" = "Sensor beanspruchen"; -"Owner.ClaimOwnership.button" = "Inhaberschaft beanspruchen"; -"Owner.Claim.description" = "Besitzen Sie diesen Sensor? Wenn ja, beanspruchen Sie bitte den Besitz des Sensors und er wird Ihrem Ruuvi-Konto hinzugefügt. Jeder Ruuvi-Sensor kann nur einen Besitzer haben. Um Eigentum zu beanspruchen, müssen Sie angemeldet sein.\n\nVorteile:\n\n ● Sensornamen, Hintergrundbilder, Offsets und Alarmeinstellungen werden sicher in der Cloud gespeichert\n\n ● Fernzugriff auf Sensoren über das Internet (erfordert ein Ruuvi Gateway)\n\n ● Teilen Sie Sensoren mit Freunden und Familie (erfordert ein Ruuvi Gateway)\n\n ● Sehen Sie bis zu 2 Jahre Geschichtsdaten auf station.ruuvi.com (erfordert ein Ruuvi-Gateway)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "Durch das Entfernen des Sensors wird Ihr Sensor-Eigentumsstatus widerrufen. Nach dem Entfernen kann eine andere Person das Eigentum an dem Sensor beanspruchen. Jeder Ruuvi-Sensor kann nur einen Besitzer haben."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "Wenn Sie den Sensor entfernen, wird der Besitzer des Sensors benachrichtigt und Sie können nicht mehr auf den Sensor zugreifen."; -"TagSettings.General.Owner.none" = "Keiner"; -"TagSettings.Share.title" = "Teilen"; -"Menu.LoggedIn.title" = "Eingeloggt:"; -"Interval.Day.string" = "Tag"; -"hour" = "Stunde"; -"TagSettings.tagNameTitleLabel.rename.text" = "Ihre Sensoren werden in alphabetischer Reihenfolge angezeigt."; -"On" = "An"; -"Off" = "Aus"; -"DFUUIView.lowBattery.warning.message" = "Die Batteriespannung des Sensors scheint zu niedrig zu sein, und der Firmware-Aktualisierungsprozess kann fehlschlagen. Wir empfehlen, die Batterie vor der Aktualisierung zu ersetzen."; -"alert_notification_humidity_high_threshold" = "Luftfeuchtigkeit liegt über %@"; -"alert_notification_humidity_low_threshold" = "Luftfeuchtigkeit liegt unter %@"; -"alert_notification_pressure_high_threshold" = "Luftdruck liegt über %@"; -"alert_notification_pressure_low_threshold" = "Luftdruck liegt unter %@"; -"alert_notification_rssi_high_threshold" = "Die Signalstärke liegt über %@"; -"alert_notification_rssi_low_threshold" = "Die Signalstärke liegt unter %@"; -"alert_notification_temperature_high_threshold" = "Die Temperatur liegt über %@"; -"alert_notification_temperature_low_threshold" = "Die Temperatur liegt unter %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "Benutzer %@ ist bereits angemeldet. Wenn Sie ein anderes Konto verwenden möchten, melden Sie sich bitte zuerst ab und versuchen Sie es dann erneut."; -"Settings.Label.CloudMode" = "Cloud-Modus"; -"Settings.Label.CloudMode.description" = "Aktualisieren Sie Cloud-Sensoren in der Nähe nur aus der Cloud, indem Sie ihre Bluetooth-Nachrichten ignorieren und Warnungen nur per E-Mail erhalten. Erfordert einen Ruuvi Gateway-Router."; -"internet_connection_problem" = "Problem mit der Internetverbindung"; -"Widgets.Loading.message" = "laden..."; -"Cards.Movements.title" = "bewegungen"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Schwache Batterie"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Batterie OK"; -"Widgets.Description.message" = "Erstellen Sie Widgets mit Ihren bevorzugten Ruuvi-Sensoren. Widgets werden über die Ruuvi Cloud aktualisiert. Ein Ruuvi Gateway-Router ist erforderlich."; -"settings_appearance" = "Erscheinungsbild"; -"app_theme" = "App Thema"; -"follow_system_theme" = "Systemthema"; -"dark_theme" = "Dunkles Thema"; -"light_theme" = "Thema Licht"; -"Settings.Temperature.Resolution.title" = "Auflösung der Temperatur"; -"Settings.Humidity.Resolution.title" = "Auflösung der Luftfeuchtigkeit"; -"Settings.Pressure.Resolution.title" = "Auflösung des Drucks"; -"Settings.Measurement.Resolution.description" = "Wählen Sie aus, wie genau Sie die Live-Messwerte der Sensoren in der App sehen möchten. Diese Einstellung hat keinen Einfluss auf Verlaufsdiagramme oder Alarme."; -"Settings.Measurement.Unit.title" = "Einheit"; -"Settings.Measurement.Resolution.title" = "Auflösung"; -"MyRuuvi.Settings.DeleteAccount.title" = "Konto löschen"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "Es wurde eine Bestätigung an Ihre E-Mail gesendet. Um mit der Löschung fortzufahren, überprüfen Sie bitte Ihren Posteingang und folgen Sie den Anweisungen."; -"TagSettings.Alert.SetTemperature.title" = "Temperaturalarm einstellen"; -"TagSettings.Alert.SetHumidity.title" = "Feuchtigkeitsalarm einstellen"; -"TagSettings.Alert.SetPressure.title" = "Druckalarm einstellen"; -"TagSettings.Alert.SetRSSI.title" = "Signalstärkealarm einstellen"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Verlauf exportieren (csv)"; -"clear_view" = "Klare verlaufsansicht"; -"day_1" = "1 Tag"; -"day_2" = "2 Tage"; -"day_3" = "3 Tage"; -"day_4" = "4 Tage"; -"day_5" = "5 Tage"; -"day_6" = "6 Tage"; -"day_7" = "7 Tage"; -"day_8" = "8 Tage"; -"day_9" = "9 Tage"; -"day_10" = "10 Tage"; -"day_x" = "%.0f Tage"; -"more" = "Mehr..."; -"all" = "Alle"; -"longer_history_title" = "Längere Geschichte"; -"longer_history_message" = "Die Ruuvi Station Mobile App unterstützt maximal 10 Tage Historie. Ruuvi-Cloud-Abonnenten können mit der Web-App unter ruuvi.com/station (erfordert Ruuvi-Gateway-Router) bis zu 2 Jahre historische Daten anzeigen."; -"reading_history_x" = "Bluetooth-Sync: %.0f"; -"rssi_alert_description" = "Die Verwendung dieses Alarms setzt voraus, dass Sie in der App angemeldet sind und dass Sie den Sensor für sich beansprucht haben und dass er sich in der Reichweite des Ruuvi Gateway Routers befindet. iOS-Geräte können keine Informationen zur Signalstärke der vom Ruuvi-Sensor gesendeten Daten anzeigen, wenn der Sensor gekoppelt ist und Messungen im Hintergrund empfangen werden. Die Echtzeit-Bluetooth-Signalstärke wird in der App angezeigt, hat aber keinen Einfluss auf diesen Alarm."; -"bluetooth_download" = "Bluetooth-Download"; -"bluetooth_download_description" = "Lokale Sensordaten können heruntergeladen werden, wenn Sie sich in Bluetooth-Reichweite befinden."; -"download" = "Download"; -"clear_local_history" = "Lokaler Verlauf löschen"; -"clear_local_history_description" = "Möchten Sie lokal gespeicherte historische Daten aus der App löschen? Dies löscht nicht den intern gespeicherten Verlauf des Sensors oder die im Ruuvi Cloud-Dienst gespeicherten historischen Daten."; -"TagCharts.FailedToSyncDialog.title" = "Herunterladen fehlgeschlagen"; -"TagCharts.FailedToSyncDialog.message" = "Download der Bluetooth-Historie fehlgeschlagen. Stellen Sie sicher, dass Sie sich in Bluetooth-Reichweite befinden, dass Ihr Sensor über eine Firmware verfügt, die das Herunterladen unterstützt, und dass der Sensor nicht gleichzeitig mit einem anderen iOS-Gerät verbunden ist. Die Sensorverbindung ist für die Ruuvi Station reserviert, wenn der Verbindungsmodus in iOS verwendet wird."; -"TagCharts.TryAgain.title" = "Erneut versuchen"; -"support" = "Unterstützung"; -"full_image_view" = "Vollbildansicht"; -"history_view" = "Ansicht Verlauf"; -"settings_and_alerts" = "Einstellungen & Benachrichtigungen"; -"change_background" = "Einstellungen und Warnungen"; -"check_claim_state" = "Prüfung des Antragsstatus"; -"claim_in_progress" = "Anspruchserhebung läuft"; -"force_claim_sensor" = "Antragstellung in Bearbeitung"; -"force_claim_sensor_description1" = "Dieser Sensor wurde von einem anderen Benutzer beansprucht. Sie können die Eigentümerschaft für Ihr Konto erzwingen, wenn Sie physischen Zugang zu diesem Sensor haben. Jeder Ruuvi-Sensor kann nur einen Besitzer haben."; -"force_claim_sensor_description2" = "Die Zwangsanforderung erfolgt über die Nahfeldkommunikation (NFC). Vergewissern Sie sich, dass NFC auf Ihrem Mobilgerät aktiviert ist.\ - 1. Berühren Sie Ihren Ruuvi-Sensor mit Ihrem Mobilgerät, um den Beanspruchungsprozess zu starten.\n - 2. Nach erfolgreicher Beanspruchung werden Sie zu den Sensoreinstellungen zurückgeschickt.\ -\ -Wenn die Beanspruchung nicht erfolgreich war oder NFC auf Ihrem Gerät nicht verfügbar ist:\n\n 1. Öffnen Sie die Abdeckung Ihres Ruuvi-Sensors.\ - 2. Suchen Sie die runde schwarze Taste (oder die Taste \"B\", falls Ihr Sensor 2 Tasten hat) auf der weißen Platine und drücken Sie sie kurz, und tippen Sie dann auf die Schaltfläche „Verwenden Sie BT“, um den Beanspruchungsprozess zu starten.\ -\n\t3. Nach erfolgreicher Beanspruchung werden Sie zu den Sensoreinstellungen zurückgeschickt."; -"force_claim" = "Kraft-Anspruch"; -"claim_wrong_sensor_scanned" = "Sie scannen gerade verschiedene RuuviTag"; -"view" = "Siehe"; -"card_type" = "Speicherkarten-Typ"; -"image_cards" = "Bildkarten"; -"simple_cards" = "Einfache Karten"; -"card_action" = "Kartenaktion"; -"open_sensor_view" = "Sensoransicht öffnen"; -"open_history_view" = "Verlaufsansicht öffnen"; -"change_background_message" = "Wählen Sie das Hintergrundbild. Wenn Sie nicht angemeldet sind, verlieren Sie das Bild bei einer Neuinstallation der App."; -"take_photo" = "Ein Foto machen"; -"select_from_gallery" = "Aus der Handy-Galerie auswählen"; -"select_default_image" = "Aus Standardbildern auswählen"; -"export_csv_feature_location" = "Sie können den Verlauf eines Sensors von seiner Verlaufsgrafikseite aus exportieren. Tippen Sie auf das Drei-Punkte-Menüsymbol in der oberen rechten Ecke und wählen Sie dann \"Verlauf exportieren (csv)\"."; -"low_battery" = "Schwache Batterie"; -"change_background_image" = "Hintergrundbild ändern"; -"SignIn.Sync.message" = "Herunterladen von Inhalten aus der Cloud. Bitte warten Sie."; -"uploading_progress" = "Hochladen: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Melden Sie sich an, um das Widget zu verwenden."; -"Widgets.Unauthorized.Inline.message" = "Anmeldung bei Ruuvi Station"; -"Widgets.Unconfigured.Simple.message" = "Erzwingen Sie das Tippen, um das Widget zu bearbeiten."; -"Widgets.Unconfigured.Rectangular.message" = "Tippen Sie auf , um das Widget zu bearbeiten."; -"Widgets.Unconfigured.Inline.message" = "Sensor hinzufügen, um Ruuvi Widget zu verwenden"; -"Widgets.Unconfigured.Circular.message" = "+Hinzufügen"; -"Widgets.Select.Sensor.title" = "Ausgewählter Ruuvi-Sensor"; -"Widgets.Sensor.Type.title" = "Ausgewählter Sensortyp"; -"Settings.SectionHeader.General.title" = "ALLGEMEINES"; -"Settings.SectionHeader.Application.title" = "ANWENDUNG"; -"empty_chart_message" = "Im gewählten Verlaufsfenster sind keine Daten verfügbar."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Lernen Sie Ihre Ruuvi Station -App kennen."; -"onboarding_swipe_to_continue" = "Wischen Sie zum Fortfahren →"; -"onboarding_read_sensors_data" = "Lesen Sie Ihre Ruuvi-Sensoren"; -"onboarding_via_bluetooth_or_cloud" = "mit Bluetooth oder Ruuvi Cloud"; -"onboarding_follow_measurement" = "Sehen Sie alle Sensoren auf einen Blick auf Ihrem"; -"onboarding_dashboard" = "Dashboard"; -"onboarding_personalise" = "Personalisieren"; -"onboarding_your_sensors" = "Sie Ihre App mit benutzerdefinierten Namen und Hintergründen."; -"onboarding_explore_detailed" = "Erkunden Sie Ihren"; -"onboarding_history" = "Messverlauf"; -"onboarding_set_custom" = "Einstellen und anpassen"; -"onboarding_alerts" = "Alarme"; -"onboarding_share_your_sensors" = "zum Messen mit Ihren Freunden und Ihrer Familie."; -"onboarding_sharees_can_use" = "Teilen Sie Sensoren"; -"onboarding_handy_widgets" = "Widgets hinzu"; -"onboarding_access_widgets" = "Fügen Sie Ihre bevorzugten Sensoren als"; -"onboarding_station_web" = "Ruuvi Web App"; -"onboarding_web_pros" = "Großes Dashboard, mehrjähriger Verlauf, E-Mail-Benachrichtigungen und mehr in der"; -"onboarding_gateway_required" = "Ein Ruuvi Gateway -Router ist erforderlich."; -"onboarding_skip" = "Überspringen"; -"onboarding_thats_it" = "Fast dort!"; -"onboarding_thats_it_already_signed_in" = "Lass uns anfangen!"; -"onboarding_go_to_sign_in" = "Ruuvi ist besser, wenn Sie angemeldet sind. Machen Sie es jetzt oder fahren Sie ohne Cloud-Funktionen fort."; -"onboarding_go_to_sign_in_already_signed_in" = "Fangen wir an zu messen!"; -"onboarding_continue" = "Nächste"; -"sign_in_or_create_free_account" = "Logge dich ein oder erstelle ein kostenloses Ruuvi-Konto"; -"to_use_all_app_features" = "Kein Passwort erforderlich."; -"type_your_email" = "Geben Sie Ihre E-Mail ein.."; -"request_code" = "Anfrage Code"; -"no_password_needed" = "Für diese E-Mail wird ein kostenloses Konto erstellt, falls Sie noch keines haben. Es ist nur eine E-Mail-Adresse erforderlich. Wir bewahren Ihre Informationen sicher auf."; -"benefits_sign_in" = "Lesen Sie mehr über die Vorteile des Ruuvi-Kontos oder melden Sie sich später an"; -"use_without_account" = "Nein danke, überspringen"; -"why_should_sign_in" = "Vorteile"; -"sensors_ownership_and_settings_stored_in_cloud" = "Die Anmeldung bei der App hat viele Vorteile. Einstellungen werden sicher in deinem Konto gespeichert:"; -"cloud_stored_ownerships" = "● Sensorbesitz"; -"cloud_stored_names" = "● Sensornamen"; -"cloud_stored_alerts" = "● Hintergrundbilder"; -"cloud_stored_backgrounds" = "● Alert-Einstellungen"; -"cloud_stored_calibration" = "● Kalibrierungseinstellungen"; -"cloud_stored_sharing" = "● App Einstellungen"; -"note" = "Notiz!"; -"claim_warning" = "Sichern Sie die Eigentumsinformationen Ihrer Sensoren, indem Sie ihre Eigentumsrechte in der App beanspruchen."; -"lets_do_it" = "Gehen Sie zum Anmelden"; -"enter_code" = "Code eingeben"; -"dashboard_no_sensors_message" = "Scheint, als hätten Sie noch keine Ruuvi-Sensoren hinzugefügt."; -"dashboard_no_sensors_message_signed_out" = "Sie sind nicht angemeldet.\n\nWenn Sie ein Konto haben und diesem bereits Ruuvi-Sensoren hinzugefügt haben, werden diese automatisch mit der mobilen Ruuvi Station-App synchronisiert, wenn Sie sich anmelden."; -"add_a_sensor" = "Fügen Sie einen Sensor hinzu"; -"changelog" = "(änderungsprotokoll)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Durchschnitt"; -"shared_to_x" = "Freigegebene %d/%d"; -"settings_alert_notifications" = "Alarmbenachrichtigungen"; -"settings_alert_sound" = "Alarmton"; -"settings_alert_sound_description" = "Wählen Sie den Push-Benachrichtigungston aus."; -"settings_alerts_footer_description" = "Sie können die Benachrichtigungseinstellungen auch unter iOS-Einstellungen -> Benachrichtigungen anpassen"; -"settings_alerts_footer_description_link_mask" = "iOS-Einstellungen -> Benachrichtigungen"; -"settings_email_alerts" = "E-Mail-Benachrichtigungen"; -"settings_email_alerts_description" = "Wenn Sie Ruuvi Cloud und Ruuvi Gateway verwenden, können Sie durch Aktivieren dieser Funktion E-Mail-Benachrichtigungen erhalten."; -"settings_push_alerts" = "Push-Benachrichtigungen"; -"settings_push_alerts_description" = "Wenn Sie Ruuvi Cloud und Ruuvi Gateway verwenden, können Sie Push-Benachrichtigungen erhalten, indem Sie diese aktivieren."; -"synchronisation" = "Synchronisation"; -"gatt_sync_description" = "Ruuvi Station lädt den internen Verlauf des Sensors für die letzten 10 Tage herunter, wenn der Messverlauf verfügbar ist.\n\nDer Verlauf wird über eine Bluetooth-Verbindung heruntergeladen. Stellen Sie sicher, dass Sie sich in der Nähe des Sensors befinden."; -"do_not_show_again" = "Zeige das nicht noch einmal"; -"sign_in_continue" = "Weitermachen"; -"signing_in_is_optional" = "(Die Anmeldung ist optional)"; -"Defaults.UserAuthorized.title" = "Benutzerautorisiert"; -"Defaults.DashboardTapActionChart.title" = "Tippen Sie auf die Dashboard-Karte, um das Diagramm anzuzeigen"; -"Defaults.DevServer.title" = "Verwenden Sie einen Entwicklungsserver"; -"Defaults.DevServer.message" = "Um den Ruuvi Cloud-Endpunkt zu ändern, müssen Sie sich von der aktuellen Sitzung abmelden und die App neu starten. Bist du dir sicher?"; -"Defaults.ShowEmailAlertsSettings.title" = "Einstellungen für E-Mail-Benachrichtigungen anzeigen"; -"Defaults.ShowPushAlertsSettings.title" = "Einstellungen für Push-Benachrichtigungen anzeigen"; -"use_nfc" = "Verwenden Sie NFC"; -"use_bluetooth" = "Verwenden Sie BT"; -"sensor_not_found_error" = "Sensor nicht gefunden. Versuchen Sie es erneut."; -"Defaults.HideNFC.title" = "Verstecken Sie die NFC-Option vor einem erzwungenen Eigentümerwechsel"; -"settings_alert_sound_default" = "Systemfehler"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi Alarm"; -"add_with_nfc" = "Mit NFC hinzufügen"; -"sensor_details" = "Sensordetails"; -"add_sensor" = "Sensor hinzufügen"; -"copy_mac_address" = "MAC-Adresse kopieren"; -"copy_unique_id" = "Eindeutige ID kopieren"; -"name" = "Name:"; -"mac_address" = "MAC-Adresse:"; -"go_to_sensor" = "Gehen Sie zur Sensorkarte"; -"unique_id" = "Eindeutige ID:"; -"firmware_version" = "Firmware Version:"; -"Close" = "Schließen"; -"add_sensor_nfc_df3_error" = "Dieser Sensor kann aufgrund der alten Firmware nicht mit NFC hinzugefügt werden. Bitte fügen Sie den Sensor über Bluetooth hinzu und aktualisieren Sie die Firmware."; -"add_sensor_description" = "Auf dieser Seite werden Ruuvi-Sensoren in der Nähe angezeigt, die der App noch nicht hinzugefügt wurden. Tippen Sie auf einen Sensor, um ihn hinzuzufügen."; -"add_sensor_via_nfc" = "Alternativ können Sie einen Sensor über NFC hinzufügen, indem Sie Mit NFC hinzufügen auswählen und ihn mit Ihrem Telefon berühren."; -"unclaim_sensor" = "Anspruch auf Eigentum zurückziehen"; -"unclaim" = "Anspruch aufheben"; -"unclaim_sensor_description" = "Das Eigentum an diesem Sensor wurde Ihrem Ruuvi-Konto zugeordnet. Klicken Sie auf „Anspruch aufheben“, um die Einstellungen dieses Sensors und die zugehörigen Daten aus Ihrem Ruuvi-Konto zu entfernen."; -"claim_sensor_ownership" = "Beanspruchen Sie den Besitz des Sensors"; -"do_you_own_sensor" = "Besitzen Sie diesen Sensor?"; -"owners_plan" = "Ruuvi-Plan des Eigentümers"; -"alert_cloud_connection_title" = "Cloud-Verbindung"; -"alert_cloud_connection_description" = "Warnung, wenn Sensordaten länger als %d Minuten nicht in der Cloud aktualisiert wurden."; -"alert_cloud_connection_dialog_description" = "Geben Sie die gewünschte Verzögerung in Minuten ein, bevor die Warnung ausgelöst wird. Der Mindestwert beträgt 2 Minuten."; -"alert_cloud_connection_dialog_title" = "Cloud-Verbindungsalarm einstellen"; -"rename" = "Umbenennen"; -"chart_stat_show" = "Min./Max./Durchschnitt anzeigen"; -"chart_stat_hide" = "Min./Max./Durchschnitt ausblenden"; -"settings_alert_limit_notification" = "Beschränken Sie Warnmeldungen"; -"settings_alert_limit_notification_description" = "Lösen Sie die Bluetooth-Benachrichtigung nur einmal pro Stunde aus, auch wenn die Warnung erneut ausgelöst wurde."; -"share_pending" = "Freigabe ausstehend"; -"share_pending_message" = "Erfolgreich geteilt! Diese E-Mail-Adresse ist noch nicht mit einem Ruuvi-Konto verknüpft. Eine Einladung zur Erstellung eines kostenlosen Kontos wurde gesendet. Nach der Erstellung werden Sie es in der Freigabeliste sehen."; -"dialog_are_you_sure" = "Sind Sie sicher?"; -"dialog_operation_undone" = "Dieser Vorgang kann nicht rückgängig gemacht werden."; -"remove_cloud_history_title" = "Cloud-Historie entfernen"; -"remove_cloud_history_description" = "Ich möchte auch die Sensorverlaufsdaten aus Ruuvi Cloud entfernen."; -"remove_claimed_sensor_description" = "Durch das Entfernen des Sensors wird Ihr Sensor-Eigentumsstatus aufgehoben, und Sensor-Einstellungen wie Name, Hintergrundbild, Kalibrierungseinstellungen und Alarmeinstellungen werden entfernt. Nach der Entfernung kann jemand anderes das Eigentum am Sensor beanspruchen. Jeder Ruuvi-Sensor kann nur einen Besitzer haben."; -"remove_shared_sensor_description" = "Wenn Sie diesen freigegebenen Sensor entfernen, wird der Eigentümer des Sensors benachrichtigt und Sie können nicht mehr auf den Sensor zugreifen.\n\nSie verlieren außerdem alle zugehörigen Sensoreinstellungen wie Name, Hintergrundbild und Alarmkonfigurationen ."; -"remove_local_sensor_description" = "Wenn Sie diesen Sensor entfernen, führt dies zur Löschung Ihres lokal gespeicherten Messverlaufs sowie zur Entfernung aller zugehörigen Sensoreinstellungen wie Name, Hintergrundbild, Kalibrierung und Alarmkonfigurationen.\n\nSie können hinzufügen diesen Sensor später bei Bedarf erneut."; -"activity_saving_to_cloud" = "Speichern in der Cloud...bitte warten."; -"activity_saving_success" = "Erfolgreich gespeichert."; -"activity_saving_fail" = "Die Änderungen konnten nicht in der Cloud gespeichert werden."; -"activity_ongoing_generic" = "Bitte warten..."; -"activity_success_generic" = "Operation erfolgreich."; -"activity_failed_generic" = "Operation fehlgeschlagen."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings deleted file mode 100644 index df8b7ce15..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings +++ /dev/null @@ -1,767 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Done"; -"Copy" = "Copy"; -"Confirm" = "Confirm"; -"Remove" = "Remove"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Version"; -"Background.PresentNotifications.title" = "Show Notifications"; -"Background.KeepConnection.title" = "Keep the Connection"; -"Background.Interval.Every.string" = "every"; -"Background.Interval.Min.string" = "min"; -"Background.readRSSITitle.title" = "Read RSSI"; -"BluetoothError.disconnected" = "Disconnected"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth is not enabled"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "Too many requests"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Please try again in 5 minutes"; -"Cards.KeepConnectionDialog.message" = "Seems like you are running a connectable firmware on your Ruuvi device. Would you like to keep the connection open to this Ruuvi device in the background? This will allow histograms and alerts to work even when the application is minimised."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Cancel"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Keep the Connection"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Looks like your sensor is using an old firmware software version. To access new features such as history graphs, alerts and cloud services, updating is mandatory."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Are you sure? Without updating, you won't be able to claim ownership of the sensor, download history graphs and set alerts. The update also includes bug fixes. If you cancel now, you can start the update process again from the sensor's settings page."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Check for update"; -"Cards.Connected.title" = "Connected"; -"Cards.Error.ReverseGeocodingFailed.message" = "Failed to load data for Virtual Sensor. Reverse geocode operation limit exceeded."; -"Cards.UpdatedLabel.NoData.message" = "No data during the last 10 days"; -"CoreError.failedToGetPngRepresentation" = "Failed to get PNG representation"; -"CoreError.failedToGetDocumentsDirectory" = "Failed to get background directory"; -"CoreError.failedToGetCurrentLocation" = "Failed to get current location"; -"CoreError.failedToGetDataFromResponse" = "Failed to get data from response"; -"CoreError.locationPermissionDenied" = "Missing permission for Location Services"; -"CoreError.locationPermissionNotDetermined" = "Location permission authorisation status is not determined"; -"CoreError.objectNotFound" = "Object not found"; -"CoreError.objectInvalidated" = "Object invalidated"; -"CoreError.unableToSendEmail" = "Unable to send email"; -"Defaults.navigationItem.title" = "Defaults"; -"Defaults.WelcomeShown.title" = "Welcome Displayed"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Charts Swipe Hint Was Shown"; -"Defaults.Interval.Sec.string" = "sec"; -"Defaults.Interval.Min.string" = "min"; -"Defaults.ConnectionTimeout.title" = "Connection Timeout"; -"Defaults.ServiceTimeout.title" = "Service Timeout"; -"Defaults.CardsSwipeHint.title" = "Cards Swipe Hint Was Shown"; -"Defaults.AlertsRepeatInterval.title" = "Alerts Interval"; -"Defaults.WebPullInterval.title" = "Web Alerts Interval"; -"Defaults.PruningOffsetHours.title" = "Pruning Offset Hours"; -"Defaults.Interval.Hour.string" = "h"; -"Defaults.ChartDurationHours.title" = "Chart Duration"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "App launch count to ask for review for the first time"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Ask review if app launch divisible by"; -"DiscoverTable.SectionTitle.WebTags" = "Virtual sensors"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth is not enabled"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on."; -"DiscoverTable.NavigationItem.title" = "Add a New Sensor"; -"DiscoverTable.GetMoreSensors.button.title" = "Buy Ruuvi Sensors"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(No sensors in Bluetooth range)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth is disabled)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Virtual Sensors show public weather data provided by local weather stations."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Error"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "Missing OpenWeatherMap API Key. Please get one from openweathermap.org website and enter it in the station/Classes/Networking/Assembly/Networking.plist file"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "App is already in the process of syncing logs with this sensor"; -"ExpectedError.failedToDeleteTag" = "Unable to remove a connected device that is not reachable. Please check your Bluetooth connection."; -"ExportService.Date" = "Date"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Temperature (%@)"; -"ExportService.Humidity" = "Humidity (%@)"; -"ExportService.DewPoint" = "Dew point (%@)"; -"ExportService.Pressure" = "Pressure (%@)"; -"ExportService.Voltage" = "Voltage (V)"; -"ExportService.MovementCounter" = "Movement Counter"; -"ExportService.MeasurementSequenceNumber" = "Measurement Sequence Number"; -"ExportService.TXPower" = "TX Power"; -"ForegroundRow.advertisement.section" = "ADVERTISEMENTS"; -"ForegroundRow.advertisement.title" = "Save advertisements"; -"ForegroundRow.connection.section" = "LOGS"; -"ForegroundRow.connection.title" = "Connect and sync logs"; -"Foreground.navigationItem.title" = "Foreground"; -"Foreground.Interval.Every.string" = "Every"; -"Foreground.Interval.Min.string" = "min"; -"ForegroundRow.webTags.title" = "Load and save from web"; -"ForegroundRow.webTags.section" = "VIRTUAL SENSORS"; -"Foreground.Interval.All.string" = "All"; -"Heartbeat.Interval.Every.string" = "every"; -"Heartbeat.Interval.Min.string" = "min"; -"Heartbeat.readRSSITitle.title" = "Read RSSI"; -"Heartbeat.Interval.Sec.string" = "sec"; -"Heartbeat.Interval.All.string" = "All"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Are you sure?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "You are going to clear humidity offset. This can't be undone. Tap \"Confirm\" to continue."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Are you sure?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "You are going to calibrate humidity offset. Tap \"Confirm\" to continue"; -"Language.English" = "English"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Connected"; -"LocalNotificationsManager.DidDisconnect.title" = "Disconnected"; -"LocalNotificationsManager.Disable.button" = "Turn off"; -"LocalNotificationsManager.LowDewPoint.title" = "Dew Point is too low!"; -"LocalNotificationsManager.HighDewPoint.title" = "Dew Point is too high!"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Ruuvi Station needs to access your camera library to enable this feature."; -"PermissionPresenter.NoCameraAccess.message" = "Ruuvi Station needs to access your camera to enable this feature."; -"PermissionPresenter.NoLocationAccess.message" = "Ruuvi Station needs to access your location to enable this feature."; -"PermissionPresenter.settings" = "Settings"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Ruuvi Station needs push notifications permission to enable this feature"; -"PhotoPicker.Sheet.message" = "Pick a photo"; -"PhotoPicker.Sheet.library" = "Choose from the library"; -"PhotoPicker.Sheet.camera" = "Take photo"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Rel"; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Abs"; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "Dew"; -"Settings.Label.Language.text" = "Language"; -"Settings.Language.Dialog.title" = "Select Language"; -"Settings.Language.Dialog.message" = "Open settings and tap Language to change language of the app. -If you cannot see the Language option in the settings, make sure that you have at least one preferred language added in system settings: Settings -> General -> Language & Region."; -"Settings.Label.Foreground" = "Foreground"; -"Settings.Label.Defaults" = "Defaults"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Failed to parse Open Weather Map response"; -"OWMError.apiLimitExceeded" = "API limit exceeded"; -"OWMError.notAHttpResponse" = "Not an HTTP response"; -"OWMError.invalidApiKey" = "Invalid API Key"; -"TagCharts.NoChartData.text" = "No chart data available"; -"TagCharts.BluetoothDisabledAlert.title" = "Bluetooth is not enabled"; -"TagCharts.BluetoothDisabledAlert.message" = "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on."; -"TagCharts.Clear.title" = "Clear"; -"TagCharts.SyncConfirmationDialog.title" = "Are you sure?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Delete"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Are you sure?"; -"TagCharts.Status.Disconnecting" = "Disconnecting..."; -"TagCharts.Status.Success" = "Success"; -"TagCharts.Status.Error" = "Error"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "RAWv2 mode is required"; -"TagSettings.UpdateFirmware.Alert.message" = "In order to see missing values:\nIf you are using the latest firmware, set RAWv2 mode by pressing \"B\" on a sensor.\nOr update your sensor with the latest firmware."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Learn more"; -"TagCharts.Dismiss.Alert.message" = "The history download via Bluetooth connection is in progress. Please wait."; -"TagCharts.AbortSync.Alert.message" = "Sometimes the history download is slow due to the Bluetooth connectivity. Please wait a moment."; -"TagCharts.AbortSync.Button.title" = "Abort download"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "Humidity is adjusted"; -"TagSettings.HumidityIsClipped.Alert.message" = "Humidity value is greater than 100% after calibration. This value doesn't make sense, so the value has been adjusted to 100%."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Fix"; -"TagSettings.navigationItem.title" = "Sensor Settings"; -"TagSettings.tagNameTitleLabel.text" = "Name"; -"TagSettings.humidityTitleLabel.text" = "Humidity"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "MAC Address"; -"TagSettings.dataFormatTitleLabel.text" = "Data Format"; -"TagSettings.accelerationXTitleLabel.text" = "Acceleration X"; -"TagSettings.accelerationYTitleLabel.text" = "Acceleration Y"; -"TagSettings.accelerationZTitleLabel.text" = "Acceleration Z"; -"TagSettings.txPowerTitleLabel.text" = "Tx Power"; -"TagSettings.mcTitleLabel.text" = "Movement Counter"; -"TagSettings.msnTitleLabel.text" = "Measurement Sequence Number"; -"TagSettings.SectionHeader.Remove.title" = "REMOVE"; -"TagSettings.Label.noValues.text" = "NO VALUES?"; -"TagSettings.SectionHeader.Calibration.title" = "CALIBRATION"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH CONNECTION"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Pair and use background scan"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Connecting to the sensor"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Paired and background scan is on"; -"TagSettings.PairAndBackgroundScan.description" = "Alerts are not available over Bluetooth connection if background scanning is not enabled. Only one iOS device can be paired to a Ruuvi sensor at a time."; -"TagSettings.PairError.CloudMode.description" = "The sensor cannot be connected to via Bluetooth when the cloud mode is active. You can re-enable the Bluetooth connection for the cloud sensors by disabling cloud mode in the app settings."; -"TagSettings.PairError.Timeout.description" = "Connection timed out. Pairing was unsuccessful. Please try again."; -"TagSettings.dataSourceTitleLabel.text" = "Data Received Via"; -"TagSettings.DataSource.Heartbeat.title" = "Heartbeat"; -"TagSettings.DataSource.Advertisement.title" = "Advertisement"; -"TagSettings.DataSource.Network.title" = "Cloud"; -"TagSettings.Label.disabled.text" = "DISABLED?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Alerts are disabled because the device is not connected and missing push notification permission. Please connect to the device first."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Connect"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Alerts are disabled because you are not connected to the device."; -"TagSettings.Alert.CustomDescription.placeholder" = "Set custom description..."; -"TagSettings.Alert.CustomDescription.title" = "Alert custom description"; -"TagSettings.Alerts.Humidity.description" = "Alert when less than %.0f or more than %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Alert when less than %.0f or more than %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Dew Point"; -"TagSettings.Alerts.Pressure.description" = "Alert when less than %.0f or more than %.0f"; -"TagSettings.Alerts.Connection.description" = "Alert when connected/disconnected"; -"TagSettings.ConnectionAlert.title" = "Connection"; -"TagSettings.SectionHeader.Firmware.title" = "Firmware"; -"TagSettings.Firmware.CurrentVersion" = "Current version"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Very old"; -"TagSettings.Firmware.UpdateFirmware" = "Update"; -"UnexpectedError.callbackErrorAndResultAreNil" = "Both callback result and error are nil"; -"UnexpectedError.callerDeinitedDuringOperation" = "Caller was deallocated during operation"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Failed to reverse geocode location"; -"UnexpectedError.failedToFindRuuviTag" = "Failed to find sensor"; -"UnexpectedError.failedToFindLogsForTheTag" = "Failed to find logs for the sensor"; -"UnexpectedError.viewModelUUIDIsNil" = "View Model UUID is nil"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Attempt to read data from Realm without LUID"; -"UnexpectedError.failedToFindVirtualTag" = "Failed to find virtual sensor"; -"HumidityUnit.Dew.title" = "Dew point (%@)"; -"WebTagLocationSource.current" = "Your location"; -"WebTagLocationSource.manual" = "Pick from the map"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Remove virtual sensor"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Are you sure you want to remove this virtual sensor?"; -"WebTagSettings.Location.Current" = "Your location"; -"WebTagSettings.confirmClearLocationDialog.title" = "Clear Location"; -"WebTagSettings.confirmClearLocationDialog.message" = "Are you sure you want to clear location for this virtual sensor? Current location will be used instead."; -"WebTagSettings.navigationItem.title" = "Virtual Sensor Settings"; -"WebTagSettings.Label.BackgroundImage.text" = "BACKGROUND\nIMAGE"; -"WebTagSettings.Label.Location.text" = "Location"; -"WebTagSettings.Button.Remove.title" = "REMOVE THIS VIRTUAL SENSOR"; -"WebTagSettings.SectionHeader.Name.title" = "NAME"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "MORE INFO"; -"WebTagSettings.Alerts.Temperature.description" = "Alert when less than %.0f or more than %.0f"; -"WebTagSettings.Alerts.Off" = "Off"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Temperature"; -"WebTagSettings.Label.disabled.text" = "DISABLED?"; -"WebTagSettings.Label.alerts.text" = "ALERTS"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "In order to enable virtual sensor alerts please always grant location and notification permissions in Settings."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Settings"; -"WebTagSettings.AirHumidityAlert.title" = "Air Humidity"; -"WebTagSettings.Alerts.Humidity.description" = "Alert when less than %.0f or more than %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Alert when less than %.0f or more than %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Dew Point"; -"WebTagSettings.PressureAlert.title" = "Air Pressure"; -"WebTagSettings.Alerts.Pressure.description" = "Alert when less than %.0f or more than %.0f"; -"Welcome.description.text" = "To find nearby sensors and receive live sensor data, press 'scan'."; -"ExportService.AccelerationX" = "Acceleration X"; -"ExportService.AccelerationY" = "Acceleration Y"; -"ExportService.AccelerationZ" = "Acceleration Z"; -"DiscoverTable.SectionTitle.Devices" = "Nearby Ruuvi sensors"; -"ago" = "ago"; -"TagSettings.MovementAlert.title" = "Movement"; -"TagSettings.Alerts.Movement.description" = "Alert when sensor is moved"; -"LocalNotificationsManager.HighHumidity.title" = "Air Humidity is too high!"; -"LocalNotificationsManager.LowHumidity.title" = "Air Humidity is too low!"; -"LocalNotificationsManager.DidMove.title" = "Movement detected!"; -"LocalNotificationsManager.HighPressure.title" = "Air Pressure is too high!"; -"LocalNotificationsManager.LowPressure.title" = "Air Pressure is too low!"; -"LocalNotificationsManager.HighSignal.title" = "Signal strength is too high!"; -"LocalNotificationsManager.LowSignal.title" = "Signal strength is too low!"; -"LocalNotificationsManager.HighTemperature.title" = "Temperature is too high!"; -"LocalNotificationsManager.LowTemperature.title" = "Temperature is too low!"; -"TagSettings.Alerts.Off" = "Off"; -"TagSettings.Alerts.Temperature.description" = "Alert when less than %.0f or more than %.0f"; -"TagSettings.Label.alerts.text" = "Alerts"; -"TagSettings.backgroundImageLabel.text" = "Background image"; -"TagSettings.batteryVoltageTitleLabel.text" = "Battery Voltage"; -"HumidityCalibration.Button.Calibrate.title" = "Calibrate"; -"HumidityCalibration.lastCalibrationDate.format" = "Calibrated: %@"; -"HumidityCalibration.Description.text" = "In order to measure relative humidity as accurately as possible, a sodium chloride (salt) calibration is recommended. See video tutorials on how to easily do this at home."; -"HumidityCalibration.Label.note.text" = "Note that calibration data will be stored locally in your mobile device. After Ruuvi Station uninstall and install, you may need to recalibrate."; -"HumidityCalibration.VideoTutorials.link" = "video tutorials"; -"Cancel" = "Cancel"; -"HumidityCalibration.Button.Clear.title" = "Clear"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Clear the local history data from the app?"; -"HumidityCalibration.Button.Close.title" = "Close"; -"TagCharts.Status.Serving" = "Synchronising..."; -"TagCharts.Status.Connecting" = "Connecting..."; -"TagSettings.ConnectStatus.Disconnected" = "Disconnected"; -"TagCharts.Export.title" = "EXPORT"; -"h" = "h"; -"About.AboutHelp.contents" = "Ruuvi Station is an easy-to-use application that allows you to monitor the measurement data of Ruuvi sensors."; -"About.AboutHelp.header" = "About / Help"; -"About.TagsCount.text" = "Added sensors: %d"; -"About.MeasurementsCount.text" = "Number of locally stored measurements: %d"; -"About.DatabaseSize.text" = "Database size: %@"; -"About.More.contents" = "Ruuvi's website: ruuvi.com\nRuuvi Forum: f.ruuvi.com\nRuuvi Blog: ruuvi.com/blog\nRuuvi on Twitter: twitter.com/ruuvicom"; -"About.More.header" = "More to read"; -"About.OpenSource.contents" = "Just like Ruuvi sensors, Ruuvi Station apps are open source. Follow the development and contribute at: github.com/ruuvi"; -"About.OpenSource.header" = "Open-source"; -"About.OperationsManual.contents" = "Get started using the Ruuvi Station mobile application with our online guides: ruuvi.com/support/station-mobile"; -"About.OperationsManual.header" = "Operations manual"; -"About.Privacy.contents" = "By using the application, you accept Ruuvi's standard terms and conditions: ruuvi.com/terms"; -"About.Privacy.header" = "Privacy policy"; -"About.Troubleshooting.contents" = "Find help using the Ruuvi Station apps, Ruuvi products and Ruuvi Cloud service from our support center: ruuvi.com/support"; -"About.Troubleshooting.header" = "Troubleshooting"; -"hours" = "Hours"; -"Interval.Days.string" = "Days"; -"TagSettings.AirHumidityAlert.title" = "Air Humidity (%@)"; -"HumidityUnit.gm3.title" = "Absolute (g/m³)"; -"g/m³" = "g/m³"; -"HumidityUnit.Percent.title" = "Relative (%)"; -"TagSettings.Mac.Alert.title" = "MAC Address"; -"Menu.Label.AboutHelp.text" = "About / Help"; -"Menu.Label.AddAnNewSensor.text" = "Add a New Sensor"; -"Menu.Label.AppSettings.text" = "App Settings"; -"Menu.Label.GetMoreSensors.text" = "Buy Ruuvi Sensors"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Buy Ruuvi Gateway"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "What to measure with Ruuvi?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Send Feedback"; -"Menu.Label.MyRuuviAccount.text" = "My Ruuvi Account"; -"min" = "min"; -"minutes" = "Minutes"; -"TagSettings.Label.moreInfo.text" = "More info"; -"TagSettings.SectionHeader.Name.title" = "NAME"; -"No" = "No"; -"OK" = "OK"; -"Cards.NoSensors.title" = "No sensors added\nPress here to add sensors"; -"TagSettings.PressureAlert.title" = "Air Pressure (%@)"; -"UnitPressure.hectopascal.title" = "Hectopascal (hPa)"; -"hPa" = "hPa"; -"UnitPressure.inchOfMercury.title" = "Inch of mercury (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Millimetre of mercury (mmHg)"; -"TagCharts.Status.ReadingHistory" = "Reading history"; -"TagSettings.rssiTitleLabel.text" = "Signal Strength (RSSI)"; -"signal_strength_dbm" = "Signal Strength (dBm)"; -"s" = "s"; -"Welcome.scan.title" = "SCAN"; -"Background.Interval.Sec.string" = "sec"; -"Settings.navigationItem.title" = "Settings"; -"Settings.BackgroundScanning.title" = "Background Scanning"; -"Settings.BackgroundScanning.Footer.message" = "Important note: Bluetooth background history logging and Bluetooth alerts work only when background scanning is enabled. If you disable the background scanning, all paired Ruuvi sensors will be automatically unpaired and you need to pair them again from their settings pages."; -"Settings.BackgroundScanning.interval" = "Data logging interval"; -"Settings.Label.Chart" = "Chart Settings"; -"ChartSettings.AllPoints.title" = "Show all measurements"; -"ChartSettings.AllPoints.description" = "Charts may be updated slowly when enabled."; -"ChartSettings.DrawDots.title" = "Show datapoints"; -"ChartSettings.DrawDots.description" = "Small dots will help to understand when measurements were collected."; -"Defaults.ChartIntervalSeconds.title" = "Chart Interval"; -"ChartSettings.Duration.title" = "Chart History View Period"; -"ChartSettings.Duration.description" = "Configure the period of history to be shown on chart from 1 to 10 days."; -"Settings.Label.HumidityUnit.text" = "Humidity Unit"; -"Settings.Label.Temperature" = "Temperature"; -"Settings.Label.Humidity" = "Humidity"; -"Settings.Label.Pressure" = "Pressure"; -"Settings.ChooseHumidityUnit.text" = "Choose the humidity unit you want to be displayed."; -"Settings.Label.PressureUnit.text" = "Pressure Unit"; -"Settings.ChoosePressureUnit.text" = "Choose the pressure unit you want to be displayed."; -"Settings.Label.TemperatureUnit.text" = "Temperature Unit"; -"Settings.ChooseTemperatureUnit.text" = "Choose the temperature unit you want to be displayed."; -"dBm" = "dBm"; -"TagCharts.Sync.title" = "Sync"; -"TagCharts.SyncConfirmationDialog.message" = "Download history data from the sensor?"; -"WebTagSettings.Label.TagName.text" = "Sensor Name"; -"TagSettings.confirmTagRemovalDialog.title" = "Remove sensor"; -"TagSettings.confirmTagRemovalDialog.message" = "Do you want to remove the sensor? You can add it again later, if needed."; -"TagSettings.temperatureAlertTitleLabel.text" = "Temperature (%@)"; -"TemperatureUnit.Celsius.title" = "Celsius (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Fahrenheit (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Kelvin (K)"; -"Updated" = "Updated"; -"V" = "V"; -"RuuviOnboard.Welcome.title" = "Swipe to see what Ruuvi Station can do for you."; -"RuuviOnboard.Measure.title" = "Measure environmental data: temperature, relative humidity and air pressure."; -"RuuviOnboard.Access.title" = "Access data for each linked sensor in real time and explore history graphs."; -"RuuviOnboard.Alerts.title" = "Set alerts and get notified whenever your limits are hit."; -"RuuviOnboard.Cloud.title" = "Sign in to use the full potential of the app."; -"RuuviOnboard.Cloud.subtitle" = "Claim ownership of your sensors with a free Ruuvi Cloud account."; -"RuuviOnboard.Cloud.subtitle.signed" = "Great! You already signed in!"; -"RuuviOnboard.Start.title" = "Press SCAN to find and add nearby sensors to your Ruuvi Station."; -"Yes" = "Yes"; -"LocalNotificationsManager.Mute.button" = "Mute for an hour"; -"Defaults.AlertsMuteInterval.title" = "Alerts Mute Interval"; -"SignIn.Title.text" = "Sign in"; -"Menu.SignOut.text" = "Sign out"; -"RuuviOnboard.Cloud.Benefits.message" = "Benefits:\n\n ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud\n\n ● Access sensors remotely over the Internet (requires a Ruuvi Gateway)\n\n ● Share sensors with friends and family (requires a Ruuvi Gateway)\n\n ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway)"; -"RuuviOnboard.Cloud.Details.title" = "Details"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Are you sure you want to skip sign in?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Yes, skip"; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Go back"; -"SignIn.EmailPlaceholder" = "Email"; -"SignIn.RequestCode" = "Request a code"; -"SignIn.SubmitCode" = "Submit"; -"SignIn.EmailSent" = "Email sent"; -"SignIn.CheckMailbox" = "We've sent a one-time password to your email %@. Sign in by entering it here:"; -"SignIn.CodeHint" = "Code"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "When you sign out, sensors the ownerships of which you've claimed on the sensor Settings page will be automatically removed from the app. When you sign in again using the same email address, the sensors will be returned from the cloud.\n\nDo you want to sign out?"; -"TagSettings.ClaimTagButton.Claim" = "Claim ownership"; -"TagSettings.ShareButton" = "Share"; -"Syncing..." = "Loading history from the cloud..."; -"Synchronized" = "Synchronised"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Synchronised: %@"; -"MenuTableViewController.None" = "none"; -"MenuTableViewController.User" = "User: %@"; -"ShareViewController.Title" = "Share sensor"; -"ShareViewController.Description" = "You can share the sensor with friends and family if it's in range of a Ruuvi Gateway.\n\nReceiver will be notified by email. If the receiver doesn't have a Ruuvi account, a free Ruuvi account will automatically be created at first log in.\n\nNote that the sensor's custom name and background image will be shared. The name and image sync is one time only, and after this, they can be privately customised by the receiver. Offset values (if any) set by the owner, will be automatically synced, and the receiver will always see the final corrected values."; -"ShareViewController.addFriend.Title" = "Add friend"; -"ShareViewController.emailTextField.placeholder" = "Type email"; -"ShareViewController.sharedEmails.Title" = "You have used %d/%d of maximum shares of this sensor. The sensor has been shared to following users:"; -"Share.Send.button" = "Send"; -"SharePresenter.UnshareSensor.Message" = "Do you want to unshare sensor for %@?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "NETWORK INFO"; -"TagSettings.NetworkInfo.Owner" = "Owner"; -"Menu.RuuviNetworkStatus.text" = "Ruuvi Cloud status"; -"SignIn.TitleLabel.text" = "Sign in to\nRuuvi\nStation"; -"SignIn.SubtitleLabel.text" = "To enjoy all the features, create a free account or sign in to your existing Ruuvi account by entering your email address."; -"SignIn.VerificationCodePlaceholder" = "verification code in format: CJSM"; -"UserApiError.ER_FORBIDDEN" = "Forbidden"; -"UserApiError.ER_UNAUTHORIZED" = "Unauthorised"; -"UserApiError.ER_INTERNAL" = "Internal error"; -"UserApiError.ER_INVALID_FORMAT" = "Invalid request format"; -"UserApiError.ER_USER_NOT_FOUND" = "User not found"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Sensor not found"; -"UserApiError.ER_TOKEN_EXPIRED" = "Token is expired"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "Subscription is not found"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "The share limit is reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Sensor share limit is reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share the sensor, you need to have a Ruuvi Gateway router nearby the sensor"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "This sensor is already shared"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Sensor already claimed by %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Sensor already claimed"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Unable to send email"; -"UserApiError.ER_MISSING_ARGUMENT" = "Missing argument"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Invalid density mode"; -"UserApiError.ER_INVALID_SORT_MODE" = "Invalid sort mode"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Invalid time range"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Invalid email address"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Invalid MAC-address"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Data storage error"; -"UserApiError.ER_SUB_NO_USER" = "No user"; -"UserApiError.ER_THROTTLED" = "Too many requests"; -"OffsetCorrection.CalibrationDescription.text" = "In normal use, it's not necessary to adjust the offset.\n\nIf you're an advanced user and you'd like to manually configure the factory calibrated sensors, it's possible to do so.\n\nCalibration tips are available on ruuvi.com/support"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Clear calibration settings?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Calibration setup"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Enter the expected temperature value from sensor under current conditions (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Enter the expected pressure value from sensor under current conditions (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Enter the expected humidity value from sensor under current conditions (%@): "; -"OffsetCorrection.OriginalValue.title" = "Original measured value"; -"OffsetCorrection.CorrectedValue.title" = "Corrected value"; -"OffsetCorrection.Temperature.Title" = "Temperature offset"; -"OffsetCorrection.Humidity.Title" = "Humidity offset"; -"OffsetCorrection.Pressure.Title" = "Pressure offset"; -"OffsetCorrection.Calibrate.button" = "Offset correction"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "OFFSET CORRECTION"; -"TagSettings.OffsetCorrection.Temperature" = "Temperature"; -"TagSettings.OffsetCorrection.Humidity" = "Humidity"; -"TagSettings.OffsetCorrection.Pressure" = "Pressure"; -"PhotoPicker.Sheet.files" = "Choose from files"; -"SignIn.EnterVerificationCode" = "Please enter verification code"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Failed to find or generate background image"; -"UnexpectedError.bothLuidAndMacAreNil" = "Both local and MAC identifiers are nil"; -"RuuviCloudApiError.emptyResponse" = "Empty response"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "Failed to get data from response"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Unexpected HTTP status code"; -"RuuviCloudError.NotAuthorized" = "Not authorised"; -"RuuviLocalError.failedToGetJpegRepresentation" = "Failed to get JPG representation"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Failed to get background directory"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Failed to find sensor"; -"RuuviServiceError.pictureUrlIsNil" = "Photo URL is nil"; -"RuuviServiceError.macIdIsNil" = "MAC identifier is nil"; -"network_sharing_disabled" = "Only sensors within range of your Ruuvi Gateway can be shared."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Both local and MAC identifiers are nil"; -"RuuviServiceError.failedToParseNetworkResponse" = "Failed to parse response."; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Failed to find or generate background image"; -"RuuviServiceError.failedToGetJpegRepresentation" = "Failed to get JPG representation"; -"UpdateFirmware.Title.text" = "Update Firmware"; -"UpdateFirmware.Download.header" = "DOWNLOAD LATEST FIRMWARE"; -"UpdateFirmware.Download.content" = "To start with the update process, first download the latest software package on the device you're going to use for updates. Latest version is available on ruuvi.com/software-update"; -"UpdateFirmware.SetDfu.header" = "SET RUUVI TAG TO DFU MODE"; -"UpdateFirmware.SetDfu.content" = "Open the RuuviTag's enclosure by pulling it open with your fingers or gently with a flat head screw driver.\n\nSet RuuviTag to bootloader mode by holding down button B and pressing reset button R. Red indicator LED light will light up and stay on. If your device has only 1 button, keep it pressed 10 seconds to enter the bootloader."; -"UpdateFirmware.NextButton.title" = "NEXT"; -"DfuDevicesScanner.Title.text" = "Devices"; -"DfuDevicesScanner.Description.text" = "Find and select sensor \"RuuviBoot\"."; -"DfuDevicesScanner.NoDevice.text" = "(No sensors in Bluetooth range)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth is disabled)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth is not enabled"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Ruuvi Station needs Bluetooth to be able to listen for sensors. Go to Settings and turn Bluetooth on."; -"DfuFlash.Title.text" = "DFU Flash"; -"DfuFlash.Progress.text" = "Progress"; -"DfuFlash.Step.text" = "Step"; -"DfuFlash.Steps.PackageSelection.text" = "Package selection"; -"DfuFlash.Steps.ReadyForUpload.text" = "Ready For upload"; -"DfuFlash.Steps.Uploading.text" = "Uploading"; -"DfuFlash.Steps.Completed.text" = "Completed"; -"DfuFlash.OpenDocumentPicker.title" = "OPEN DOCUMENT PICKER"; -"DfuFlash.FirmwareSelectionGuide.text" = "Locate the previously downloaded ZIP file on your mobile device."; -"DfuFlash.Firmware.FileName.text" = "File name"; -"DfuFlash.Firmware.Parts.text" = "Parts"; -"DfuFlash.Firmware.Size.text" = "Size"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Soft Device size"; -"DfuFlash.Firmware.BootloaderSize.text" = "Bootloader size"; -"DfuFlash.Cancel.text" = "CANCEL"; -"DfuFlash.Start.text" = "Start"; -"DfuFlash.Finish.text" = "FINISH"; -"DfuFlash.FinishGuide.text" = "Firmware update process has been completed successfully. -Your RuuviTag sensor is ready for use!"; -"DfuFlash.CancelAlert.text" = "Are you sure you want to cancel the firmware update process?"; -"RuuviDfuError.invalidFirmwareFile" = "Invalid firmware file"; -"DFUUIView.navigationTitle" = "Firmware Update"; -"DFUUIView.latestTitle" = "Latest available Ruuvi Firmware version:"; -"DFUUIView.currentTitle" = "Current version:"; -"DFUUIView.notReportingDescription" = "Your sensor doesn't report its current firmware version. Either you're not in its Bluetooth range, it's connected to another phone, or it's running a very old firmware version."; -"DFUUIView.alreadyOnLatest" = "You are running the latest firmware version, no need to update"; -"DFUUIView.startUpdateProcess" = "Start update process"; -"DFUUIView.downloadingTitle" = "Downloading the latest firmware to be updated..."; -"DFUUIView.prepareTitle" = "Prepare your sensor"; -"DFUUIView.openCoverTitle" = "1. Open the cover of your Ruuvi sensor"; -"DFUUIView.locateBootButtonTitle" = "2. Locate the small round black buttons on the white circuit board; older Ruuvi sensors have 2 buttons labelled “R” and “B” while newer ones have only one button without a label."; -"DFUUIView.setUpdatingModeTitle" = "3. Set the sensor to updating mode:"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. If your sensor has 2 buttons: keep “B” button pressed while tapping button “R” momentarily. Release button “B”."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. If your sensor has a single button: keep the button pressed for 10 seconds."; -"DFUUIView.toBootModeSuccessTitle" = "4. If set successfully, you will see a solid red light lit on the circuit board and the button in the app will change to “Start the update”."; -"DFUUIView.updatingTitle" = "Updating..."; -"DFUUIView.searchingTitle" = "Searching for a sensor"; -"DFUUIView.startTitle" = "Start the update"; -"DFUUIView.doNotCloseTitle" = "Do not close the app or power off the sensor during the update."; -"DFUUIView.successfulTitle" = "Update successful"; -"DFUUIView.DBMigration.Error.message" = "The update was successful, but an unexpected database migration error occurred. To continue using this sensor, please remove it from the app and then add it again."; -"RuuviDfuError.failedToConstructUUID" = "Failed to construct UUID"; -"SignIn.EmailMismatch.Alert.message" = "Oops, you've requested the code for %@, but used the code for %@. Please double check that you are using the code for %@"; -"SignIn.EmailMissing.Alert.message" = "Oops, the email you've used to get the code was not saved. Please try to sign in again."; -"TagSettings.RemoveThisSensor.title" = "Remove this sensor"; -"Share.Success.message" = "Successfully shared sensor"; -"TagSettings.SectionHeader.General.title" = "General"; -"TagSettings.Shared.title" = "Shared"; -"TagSettings.NotShared.title" = "Not shared"; -"Owner.title" = "Claim sensor"; -"Owner.ClaimOwnership.button" = "Claim ownership"; -"Owner.Claim.description" = "Do you own this sensor? If yes, please claim ownership of the sensor and it'll be added to your Ruuvi account. Each Ruuvi sensor can have only one owner. To claim ownership, you need to be signed in.\n\nBenefits:\n\n ● Sensor names, background images, offsets and alert settings will be securely stored on the cloud\n\n ● Access sensors remotely over the Internet (requires a Ruuvi Gateway)\n\n ● Share sensors with friends and family (requires a Ruuvi Gateway)\n\n ● Browse up to 2 years of history on station.ruuvi.com (requires a Ruuvi Gateway)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "By removing the sensor, your sensor ownership status will be revoked. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "If you remove the sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore."; -"TagSettings.General.Owner.none" = "No owner"; -"TagSettings.Share.title" = "Share"; -"Menu.LoggedIn.title" = "Signed in:"; -"Interval.Day.string" = "Day"; -"hour" = "Hour"; -"TagSettings.tagNameTitleLabel.rename.text" = "Your sensors are displayed in alphabetical order."; -"On" = "On"; -"Off" = "Off"; -"DFUUIView.lowBattery.warning.message" = "Sensor's battery voltage seems to be low and the firmware update process may fail. We recommend to replace the battery before updating."; -"alert_notification_humidity_high_threshold" = "Air Humidity is above %@"; -"alert_notification_humidity_low_threshold" = "Air Humidity is below %@"; -"alert_notification_pressure_high_threshold" = "Air Pressure is above %@"; -"alert_notification_pressure_low_threshold" = "Air Pressure is below %@"; -"alert_notification_rssi_high_threshold" = "Signal strength is above %@"; -"alert_notification_rssi_low_threshold" = "Signal strength is below %@"; -"alert_notification_temperature_high_threshold" = "Temperature is above %@"; -"alert_notification_temperature_low_threshold" = "Temperature is below %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "User %@ is already signed in. If you'd like to use a different account, please sign out first and then try again."; -"Settings.Label.CloudMode" = "Cloud mode"; -"Settings.Label.CloudMode.description" = "Refresh nearby cloud sensors only from the cloud by ignoring their Bluetooth messages and receiving alerts only by email. Requires a Ruuvi Gateway router."; -"internet_connection_problem" = "Internet connection problem"; -"Widgets.Loading.message" = "loading..."; -"Cards.Movements.title" = "movements"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Low battery"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Battery OK"; -"Widgets.Description.message" = "Create widgets of your favourite Ruuvi sensors. Widgets update from the Ruuvi Cloud. A Ruuvi Gateway router is required."; -"settings_appearance" = "Appearance"; -"app_theme" = "App Theme"; -"follow_system_theme" = "System theme"; -"dark_theme" = "Dark theme"; -"light_theme" = "Light theme"; -"Settings.Temperature.Resolution.title" = "Temperature Resolution"; -"Settings.Humidity.Resolution.title" = "Humidity Resolution"; -"Settings.Pressure.Resolution.title" = "Pressure Resolution"; -"Settings.Measurement.Resolution.description" = "Select how accurately you'd like to see the sensors' live measurement values in the app. This setting doesn't affect history charts or alerts."; -"Settings.Measurement.Unit.title" = "Unit"; -"Settings.Measurement.Resolution.title" = "Resolution"; -"MyRuuvi.Settings.DeleteAccount.title" = "Delete Account"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "A confirmation has been sent to your email. To proceed with the deletion, please check your inbox and follow the instructions."; -"TagSettings.Alert.SetTemperature.title" = "Set temperature alert"; -"TagSettings.Alert.SetHumidity.title" = "Set humidity alert"; -"TagSettings.Alert.SetPressure.title" = "Set pressure alert"; -"TagSettings.Alert.SetRSSI.title" = "Set signal strength alert"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Export history (csv)"; -"clear_view" = "Clear history view"; -"day_1" = "1 day"; -"day_2" = "2 days"; -"day_3" = "3 days"; -"day_4" = "4 days"; -"day_5" = "5 days"; -"day_6" = "6 days"; -"day_7" = "7 days"; -"day_8" = "8 days"; -"day_9" = "9 days"; -"day_10" = "10 days"; -"day_x" = "%.0f days"; -"more" = "More..."; -"all" = "All"; -"longer_history_title" = "Longer history"; -"longer_history_message" = "Ruuvi Station mobile app supports maximum 10 days of history. Ruuvi Cloud subscribers are able to view up to 2 years of historical data using web app at ruuvi.com/station (requires Ruuvi Gateway router)."; -"reading_history_x" = "Reading Bluetooth: %.0f"; -"rssi_alert_description" = "Using this alert requires you to be signed in to the app, and that you have claimed the ownership of this sensor and it's in the range of Ruuvi Gateway router. iOS devices are unable to indicate signal strength information of received data sent by Ruuvi sensor when sensor is paired and measurements are being received in the background. Realtime Bluetooth signal strength is shown in the app but doesn't affect this alert."; -"bluetooth_download" = "Bluetooth download"; -"bluetooth_download_description" = "Local sensor data can be downloaded, when you're within its Bluetooth range."; -"download" = "Download"; -"clear_local_history" = "Clear local history"; -"clear_local_history_description" = "Do you want to clear locally stored history data from the app? This won't clear internally stored history from the sensor or history data stored on the Ruuvi Cloud service."; -"TagCharts.FailedToSyncDialog.title" = "Download failed"; -"TagCharts.FailedToSyncDialog.message" = "Bluetooth history download failed. Check that you're within Bluetooth range, your sensor has firmware that supports downloading and that the sensor is not simultaneously connected to another iOS device. Sensor connection is reserved for Ruuvi Station when using connected mode in iOS."; -"TagCharts.TryAgain.title" = "Try again"; -"support" = "Support"; -"full_image_view" = "Full image view"; -"history_view" = "History view"; -"settings_and_alerts" = "Settings & alerts"; -"change_background" = "Change background"; -"check_claim_state" = "Checking claim state"; -"claim_in_progress" = "Claiming in progress"; -"force_claim_sensor" = "Force Claim Sensor"; -"force_claim_sensor_description1" = "This sensor has been claimed by another user. You can force the ownership to your account if you have physical access to this sensor. Each Ruuvi sensor can have only one owner."; -"force_claim_sensor_description2" = "Force Claim is done by using Near-Field Communication (NFC). Make sure NFC is enabled on your mobile device.\n\n\t1. Touch your Ruuvi sensor with your mobile device to start the claiming process.\n\n\t2. When successfully claimed, you will be sent back to Sensor Settings.\n\nIf claiming was unsuccessful or NFC is not available on your device:\n\n\t1. Open the cover of your Ruuvi sensor.\n\n\t2. Locate the round black button (or button \"B\" in case your sensor has 2 buttons) on the white circuit board and press it briefly, then tap on Use BT button to start the claiming process.\n\n\t3. When successfully claimed you will be sent back to Sensor Settings."; -"force_claim" = "Force Claim"; -"claim_wrong_sensor_scanned" = "You are scanning different RuuviTag"; -"view" = "View"; -"card_type" = "Card type"; -"image_cards" = "Image cards"; -"simple_cards" = "Simple cards"; -"card_action" = "Card action"; -"open_sensor_view" = "Open sensor view"; -"open_history_view" = "Open history view"; -"change_background_message" = "Select background image. If you're not signed in, you'll lose the image in case of app reinstall."; -"take_photo" = "Take a photo"; -"select_from_gallery" = "Select from phone gallery"; -"select_default_image" = "Select from default images"; -"export_csv_feature_location" = "You can export a sensor's history from its history graph page. Tap the three dots menu icon in the top right corner, and then select \"Export history (csv)\"."; -"low_battery" = "Low battery"; -"change_background_image" = "Change background image"; -"SignIn.Sync.message" = "Downloading content from the cloud. Please wait."; -"uploading_progress" = "Uploading: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Sign in to use the widget."; -"Widgets.Unauthorized.Inline.message" = "Sign in to Ruuvi Station"; -"Widgets.Unconfigured.Simple.message" = "Force tap to edit the widget."; -"Widgets.Unconfigured.Rectangular.message" = "Add sensor to use Ruuvi Widget"; -"Widgets.Unconfigured.Inline.message" = "Add sensor to use Ruuvi Widget"; -"Widgets.Unconfigured.Circular.message" = "+Add"; -"Widgets.Select.Sensor.title" = "Selected Ruuvi sensor"; -"Widgets.Sensor.Type.title" = "Selected sensor type"; -"Settings.SectionHeader.General.title" = "GENERAL"; -"Settings.SectionHeader.Application.title" = "APPLICATION"; -"empty_chart_message" = "No data available \nin the selected history window."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Let's get to know your Ruuvi Station app."; -"onboarding_swipe_to_continue" = "Swipe to continue →"; -"onboarding_read_sensors_data" = "Read Your Ruuvi Sensors"; -"onboarding_via_bluetooth_or_cloud" = "using Bluetooth or Ruuvi Cloud"; -"onboarding_follow_measurement" = "View all sensors at a glance on your"; -"onboarding_dashboard" = "Dashboard"; -"onboarding_personalise" = "Personalise"; -"onboarding_your_sensors" = "your app with custom names and backgrounds."; -"onboarding_explore_detailed" = "Explore your measurement"; -"onboarding_history" = "History"; -"onboarding_set_custom" = "Set and customise your"; -"onboarding_alerts" = "Alerts"; -"onboarding_share_your_sensors" = "to measure together with your friends and family."; -"onboarding_sharees_can_use" = "Share Sensors"; -"onboarding_handy_widgets" = "Widgets"; -"onboarding_access_widgets" = "Bring your favorite sensors to your Home Screen and Lock Screen as"; -"onboarding_station_web" = "Ruuvi Web App"; -"onboarding_web_pros" = "Large dashboard, multi-year history, email alerts and more on"; -"onboarding_gateway_required" = "A Ruuvi Gateway router is required."; -"onboarding_skip" = "Skip"; -"onboarding_thats_it" = "Almost there!"; -"onboarding_thats_it_already_signed_in" = "Let's get started!"; -"onboarding_go_to_sign_in" = "Ruuvi experience is better when you're signed in. Do it now or continue without cloud features."; -"onboarding_go_to_sign_in_already_signed_in" = "Let's start measuring!"; -"onboarding_continue" = "Next"; -"sign_in_or_create_free_account" = "Sign in or create a free Ruuvi account"; -"to_use_all_app_features" = "No password needed."; -"type_your_email" = "Type your email.."; -"request_code" = "Request Code"; -"no_password_needed" = "A free account will be created for this email if you don't already have one. Only email address is required. We keep your information safe."; -"benefits_sign_in" = "Read more about Ruuvi account benefits or sign in later"; -"use_without_account" = "No thanks, skip"; -"why_should_sign_in" = "Benefits"; -"sensors_ownership_and_settings_stored_in_cloud" = "Signing in to the app has many advantages. Settings will be safely stored to your account:"; -"cloud_stored_ownerships" = "● Sensor ownerships"; -"cloud_stored_names" = "● Custom names"; -"cloud_stored_alerts" = "● Background images"; -"cloud_stored_backgrounds" = "● Alert settings"; -"cloud_stored_calibration" = "● Calibration settings"; -"cloud_stored_sharing" = "● App settings"; -"note" = "Note!"; -"claim_warning" = "Secure the ownership information of your sensors by claiming their ownerships in the app."; -"lets_do_it" = "Let's Sign In"; -"enter_code" = "Enter Code"; -"dashboard_no_sensors_message" = "Seems that you don't have any Ruuvi sensors added yet."; -"dashboard_no_sensors_message_signed_out" = "You are not signed in.\n\nIf you have an account and have already added Ruuvi sensors to it, they will automatically synchronise with Ruuvi Station mobile app when you sign in."; -"add_a_sensor" = "Add a Sensor"; -"changelog" = "(changelog)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Average"; -"shared_to_x" = "Shared to %d/%d"; -"settings_alert_notifications" = "Alert Notifications"; -"settings_alert_sound" = "Alert Sound"; -"settings_alert_sound_description" = "Select push notification alert sound."; -"settings_alerts_footer_description" = "You can also adjust Notification settings under iOS Settings -> Notifications"; -"settings_alerts_footer_description_link_mask" = "iOS Settings -> Notifications"; -"settings_email_alerts" = "Email Alerts"; -"settings_email_alerts_description" = "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive email alerts by enabling this."; -"settings_push_alerts" = "Push Alerts"; -"settings_push_alerts_description" = "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive push alerts by enabling this."; -"synchronisation" = "Synchronisation"; -"gatt_sync_description" = "Ruuvi Station downloads the internal history of the sensor for the last 10 days if the measurement history is available.\n\nThe history is downloaded using a Bluetooth connection. Make sure you are near the sensor."; -"do_not_show_again" = "Don't show this again"; -"sign_in_continue" = "Continue"; -"signing_in_is_optional" = "(Signing in is optional)"; -"Defaults.UserAuthorized.title" = "User Authorized"; -"Defaults.DashboardTapActionChart.title" = "Show Chart on Dashboard Card Tap"; -"Defaults.DevServer.title" = "Use Dev Server"; -"Defaults.DevServer.message" = "Changing Ruuvi Cloud endpoint requires signing out from current session and restart the app. Are you sure?"; -"Defaults.ShowEmailAlertsSettings.title" = "Show email alerts settings"; -"Defaults.ShowPushAlertsSettings.title" = "Show push alerts settings"; -"use_nfc" = "Use NFC"; -"use_bluetooth" = "Use BT"; -"sensor_not_found_error" = "Sensor not found. Try again."; -"Defaults.HideNFC.title" = "Hide NFC Option for sensor contest"; -"settings_alert_sound_default" = "System Default"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi Alert"; -"add_with_nfc" = "Add with NFC"; -"sensor_details" = "Sensor Details"; -"add_sensor" = "Add Sensor"; -"copy_mac_address" = "Copy MAC Address"; -"copy_unique_id" = "Copy Unique ID"; -"name" = "Name:"; -"mac_address" = "Mac Address:"; -"go_to_sensor" = "Go to sensor card"; -"unique_id" = "Unique ID:"; -"firmware_version" = "Firmware Version:"; -"Close" = "Close"; -"add_sensor_nfc_df3_error" = "This sensor cannot be added with NFC due to old firmware. Please add the sensor with Bluetooth and update firmware."; -"add_sensor_description" = "This page shows nearby Ruuvi sensors not yet added to the app. Tap a sensor to add it."; -"add_sensor_via_nfc" = "Alternatively, you can add a sensor using NFC by selecting Add with NFC and touching it with your phone."; -"unclaim_sensor" = "Unclaim sensor"; -"unclaim" = "Unclaim"; -"unclaim_sensor_description" = "Ownership of this sensor has been claimed to your Ruuvi account. Press Unclaim to remove this sensor's settings and related data from your Ruuvi account."; -"claim_sensor_ownership" = "Claim sensor ownership"; -"do_you_own_sensor" = "Do you own this sensor?"; -"owners_plan" = "Owner's Ruuvi Plan"; -"alert_cloud_connection_title" = "Cloud Connection"; -"alert_cloud_connection_description" = "Alert if sensor data hasn't been updated to the cloud for longer than %d minutes."; -"alert_cloud_connection_dialog_description" = "Enter the desired delay to be used in minutes before alert is triggered. Minimum value is 2 minutes."; -"alert_cloud_connection_dialog_title" = "Set cloud connection alert"; -"rename" = "Rename"; -"chart_stat_show" = "Show min/max/avg"; -"chart_stat_hide" = "Hide min/max/avg"; -"settings_alert_limit_notification" = "Limit alert notifications"; -"settings_alert_limit_notification_description" = "Trigger Bluetooth alert notification only once per hour even if alert was retriggered."; -"share_pending" = "Share pending"; -"share_pending_message" = "Shared successfully! This email address isn't linked to a Ruuvi account yet. An invite to create a free account has been sent. Once created, you'll see it in the sharee listing."; -"dialog_are_you_sure" = "Are you sure?"; -"dialog_operation_undone" = "This operation cannot be undone."; -"remove_cloud_history_title" = "Remove cloud history"; -"remove_cloud_history_description" = "I also want to remove sensor history data from Ruuvi Cloud."; -"remove_claimed_sensor_description" = "By removing the sensor, your sensor ownership status will be revoked and sensor settings, such as name, background image, calibration settings and alert settings will be removed. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner."; -"remove_shared_sensor_description" = "If you choose to remove this shared sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore.\n\nYou will also lose any related sensor settings like name, background image and alert configurations."; -"remove_local_sensor_description" = "If you choose to remove this sensor, it will result in the deletion of your locally stored measurement history, along with the removal of any related sensor settings like name, background image, calibration, and alert configurations.\n\nYou can add this sensor later again, if needed."; -"activity_saving_to_cloud" = "Saving to cloud...please wait."; -"activity_saving_success" = "Saved successfully."; -"activity_saving_fail" = "Couldn't save changes to cloud."; -"activity_ongoing_generic" = "Please wait..."; -"activity_success_generic" = "Operation successful."; -"activity_failed_generic" = "Operation failed."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fi.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fi.lproj/Localizable.strings deleted file mode 100644 index 50b4daa2e..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fi.lproj/Localizable.strings +++ /dev/null @@ -1,767 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Valmis"; -"Copy" = "Kopioi"; -"Confirm" = "Vahvista"; -"Remove" = "Poista"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Versio"; -"Background.PresentNotifications.title" = "Näytä ilmoituksia"; -"Background.KeepConnection.title" = "Säilytä yhteys"; -"Background.Interval.Every.string" = "joka"; -"Background.Interval.Min.string" = "min"; -"Background.readRSSITitle.title" = "Lue RSSI"; -"BluetoothError.disconnected" = "Yhteys katkaistu"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth ei ole käytössä"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station tarvitsee Bluetooth-yhteyden toimiakseen. Ota Bluetooth käyttöön laitteen asetuksista."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "Liian monta pyyntöä"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Yritä uudelleen viiden minuutin kuluttua"; -"Cards.KeepConnectionDialog.message" = "Laitteessasi on yhteyden säilyttämiseen pystyvä laiteohjelmisto. Haluatko pitää yhteyden avoinna tähän Ruuvi-laitteeseen ohjelman ollessa taustalla? Tämä mahdollistaa historian ja hälytysten toiminnan ohjelman ollessa pienennettynä."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Hylkää"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Säilytä yhteys"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Näyttää siltä, että anturisi laiteohjelmistoversio on vanha. Käyttääksesi uusia ominaisuuksia kuten historiakuvaajia, hälytyksiä ja pilvipalvelua, päivitys on pakollinen."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Oletko varma? Ilman päivittämistä et voi vahvistaa anturin omistajuutta, ladata sen sisäistä historiaa etkä asettaa hälytyksiä. Päivitys sisältää myös bugikorjauksia. Mikäli peruutat nyt, voit aloittaa päivityksen uudelleen anturin asetussivulta käsin."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Tarkista päivitykset"; -"Cards.Connected.title" = "Yhdistetty"; -"Cards.Error.ReverseGeocodingFailed.message" = "Virtuaalisen anturin tietojen lataaminen epäonnistui. Maantieteellisten koordinaattien käänteishaun toimintaraja ylittyi."; -"Cards.UpdatedLabel.NoData.message" = "Ei tietoja viimeiseltä 10 päivältä"; -"CoreError.failedToGetPngRepresentation" = "PNG-muunnosta ei voida tehdä"; -"CoreError.failedToGetDocumentsDirectory" = "Taustakuvahakemistoa ei löydy"; -"CoreError.failedToGetCurrentLocation" = "Nykyistä paikkaa ei löydy"; -"CoreError.failedToGetDataFromResponse" = "Vastaus ei sisällä tietoa"; -"CoreError.locationPermissionDenied" = "Oikeus paikkatietoon puuttuu"; -"CoreError.locationPermissionNotDetermined" = "Sijainnin käyttöoikeuden tilaa ei ole päätetty"; -"CoreError.objectNotFound" = "Kohdetta ei löydy"; -"CoreError.objectInvalidated" = "Kohde mitätöity"; -"CoreError.unableToSendEmail" = "Sähköpostin lähetys epäonnistui"; -"Defaults.navigationItem.title" = "Oletusasetukset"; -"Defaults.WelcomeShown.title" = "Esittely näytetään"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Histogrammin selite vaakanäytöllä"; -"Defaults.Interval.Sec.string" = "sek"; -"Defaults.Interval.Min.string" = "min"; -"Defaults.ConnectionTimeout.title" = "Yhteyden aikakatkaisu"; -"Defaults.ServiceTimeout.title" = "Palvelun aikakatkaisu"; -"Defaults.CardsSwipeHint.title" = "Pyyhkäisyvinkki"; -"Defaults.AlertsRepeatInterval.title" = "Hälytysväli"; -"Defaults.WebPullInterval.title" = "Virtuaalisten antureiden hälytysväli"; -"Defaults.PruningOffsetHours.title" = "Poistojen tuntisiirtymä"; -"Defaults.Interval.Hour.string" = "t"; -"Defaults.ChartDurationHours.title" = "Historian kesto"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "Sovelluksen käynnistyskerrat, kun pyydetään tarkistusta ensimmäistä kertaa"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Pyydä tarkistusta, onko sovelluksen käynnistys jaettavissa"; -"DiscoverTable.SectionTitle.WebTags" = "Paikkaan perustuvat virtuaaliset anturit"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth ei ole käytössä"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Ruuvi Station tarvitsee Bluetooth-yhteyden toimiakseen. Ota Bluetooth käyttöön laitteen asetuksista."; -"DiscoverTable.NavigationItem.title" = "Lisää uusi anturi"; -"DiscoverTable.GetMoreSensors.button.title" = "Osta Ruuvi-antureita"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(Ei havaittuja antureita Bluetooth-verkon alueella)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth ei ole käytössä)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Virtuaalisten antureiden avulla voidaan esittää paikallisilta sääasemilta kerättyjä säätietoja."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Virhe"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "OpenWeatherMap API-avain puuttuu. Hanki avain openweathermap.org -sivustolta ja lisää saamasi avain station/Classes/Networking/Assembly/Networking.plist -tiedostoon"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "Sovellus on jo määritetty synkronoimaan lokitietoja tämän anturin kanssa"; -"ExpectedError.failedToDeleteTag" = "Aiemmin yhdistettyä laitetta ei voida poistaa ilman Bluetooth-yhteyttä. Tarkasta Bluetooth-yhteyden tila."; -"ExportService.Date" = "Päivämäärä"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Lämpötila (%@)"; -"ExportService.Humidity" = "Kosteus (%@)"; -"ExportService.DewPoint" = "Kastepiste (%@)"; -"ExportService.Pressure" = "Ilmanpaine (%@)"; -"ExportService.Voltage" = "Jännite (V)"; -"ExportService.MovementCounter" = "Liikelaskuri"; -"ExportService.MeasurementSequenceNumber" = "Mittausjärjestysnumero"; -"ExportService.TXPower" = "Lähetysteho"; -"ForegroundRow.advertisement.section" = "LAITEILMOITUKSET"; -"ForegroundRow.advertisement.title" = "Tallenna laiteilmoitukset"; -"ForegroundRow.connection.section" = "LOKITIEDOT"; -"ForegroundRow.connection.title" = "Yhdistä ja tallenna lokitiedot"; -"Foreground.navigationItem.title" = "Prosessit"; -"Foreground.Interval.Every.string" = "Joka"; -"Foreground.Interval.Min.string" = "min"; -"ForegroundRow.webTags.title" = "Lataa ja tallenna verkkopalvelusta"; -"ForegroundRow.webTags.section" = "VIRTUAALISET ANTURIT"; -"Foreground.Interval.All.string" = "Kaikki"; -"Heartbeat.Interval.Every.string" = "joka"; -"Heartbeat.Interval.Min.string" = "min"; -"Heartbeat.readRSSITitle.title" = "Lue RSSI"; -"Heartbeat.Interval.Sec.string" = "sek"; -"Heartbeat.Interval.All.string" = "Kaikki"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Oletko varma?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "Olet nollaamassa kalibrointia. Tätä ei voida peruuttaa. Jatka napauttamalla \"Vahvista\" ."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Oletko varma?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "Olet kalibroimassa kosteusanturia. Jatka napauttamalla \"Vahvista\" ."; -"Language.English" = "English"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Yhdistetty"; -"LocalNotificationsManager.DidDisconnect.title" = "Yhteys katkaistu"; -"LocalNotificationsManager.Disable.button" = "Poista käytöstä"; -"LocalNotificationsManager.LowDewPoint.title" = "Kastepiste liian alhainen!"; -"LocalNotificationsManager.HighDewPoint.title" = "Kastepiste liian korkea!"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Tämä ominaisuus vaatii oikeuden gallerian käyttöön."; -"PermissionPresenter.NoCameraAccess.message" = "Tämä ominaisuus vaatii oikeuden kameran käyttöön."; -"PermissionPresenter.NoLocationAccess.message" = "Tämä ominaisuus vaatii oikeuden paikkatiedon käyttöön."; -"PermissionPresenter.settings" = "Asetukset"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Tämä ominaisuus vaatii oikeuden palveluilmoitusten näyttämiseen."; -"PhotoPicker.Sheet.message" = "Valitse kuva"; -"PhotoPicker.Sheet.library" = "Valitse kirjastosta"; -"PhotoPicker.Sheet.camera" = "Ota kuva"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Suht."; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Abs."; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "Kast."; -"Settings.Label.Language.text" = "Kieli"; -"Settings.Language.Dialog.title" = "Valitse kieli"; -"Settings.Language.Dialog.message" = "Avaa asetukset ja napauta Kieli vaihtaaksesi sovelluksen kieltä. -Mikäli et näe Kieli-valintaa asetuksissa, varmista, että sinulla on vähintään yksi ensisijainen kieli on valittuna järjestelmäasetuksissa: Asetukset -> Yleiset -> Kieli ja alue."; -"Settings.Label.Foreground" = "Prosessit"; -"Settings.Label.Defaults" = "Oletusasetukset"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Open Weather Map -vastauksen jäsentäminen epäonnistui"; -"OWMError.apiLimitExceeded" = "API-raja ylittyi"; -"OWMError.notAHttpResponse" = "Vastaus ei ole HTTP-muodossa"; -"OWMError.invalidApiKey" = "API-avain ei kelpaa"; -"TagCharts.NoChartData.text" = "Tietoja ei ole saatavilla"; -"TagCharts.BluetoothDisabledAlert.title" = "Bluetooth ei ole päällä"; -"TagCharts.BluetoothDisabledAlert.message" = "Ruuvi Station tarvitsee Bluetooth-yhteyden toimiakseen. Ota Bluetooth käyttöön laitteen asetuksista."; -"TagCharts.Clear.title" = "Pyyhi"; -"TagCharts.SyncConfirmationDialog.title" = "Oletko varma?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Poista"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Oletko varma?"; -"TagCharts.Status.Disconnecting" = "Katkaistaan yhteyttä..."; -"TagCharts.Status.Success" = "Onnistui"; -"TagCharts.Status.Error" = "Virhe"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "RAWv2-formaatti vaaditaan"; -"TagSettings.UpdateFirmware.Alert.message" = "Puuttuvat arvot voidaan näyttää ainoastaan uudemmalla laiteohjelmistoversiolla."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Lue lisää"; -"TagCharts.Dismiss.Alert.message" = "Historian lataaminen Bluetooth-yhteydellä on käynnissä. Odota hetki."; -"TagCharts.AbortSync.Alert.message" = "Historian lataaminen voi kestää pitkään Bluetooth-yhteyden laadusta riippuen. Odota hetki."; -"TagCharts.AbortSync.Button.title" = "Peruuta lataaminen"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "Kosteus on säädetty"; -"TagSettings.HumidityIsClipped.Alert.message" = "Kalibroinnin jälkeinen kosteusarvo on suurempi kuin 100%. Tämä ei käy järkeen, joten maksimiarvona näytetään 100%."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Korjaa"; -"TagSettings.navigationItem.title" = "Asetukset"; -"TagSettings.tagNameTitleLabel.text" = "Anturin nimi"; -"TagSettings.humidityTitleLabel.text" = "Kosteus"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "MAC-osoite"; -"TagSettings.dataFormatTitleLabel.text" = "Dataformaatti"; -"TagSettings.accelerationXTitleLabel.text" = "Kiihtyvyys X"; -"TagSettings.accelerationYTitleLabel.text" = "Kiihtyvyys Y"; -"TagSettings.accelerationZTitleLabel.text" = "Kiihtyvyys Z"; -"TagSettings.txPowerTitleLabel.text" = "Lähetysteho"; -"TagSettings.mcTitleLabel.text" = "Liikelaskuri"; -"TagSettings.msnTitleLabel.text" = "Mittausjärjestysnumero"; -"TagSettings.SectionHeader.Remove.title" = "POISTA"; -"TagSettings.Label.noValues.text" = "EI ARVOJA?"; -"TagSettings.SectionHeader.Calibration.title" = "KALIBROINTI"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH YHTEYS"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Parita ja käytä taustaskannausta"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Yhdistetään anturiin"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Paritettu ja taustaskannaus päällä"; -"TagSettings.PairAndBackgroundScan.description" = "Bluetooth-yhteyttä käyttävät hälytykset eivät ole käytettävissä silloin kun taustaskannausta ei ole otettu käyttöön. Ruuvi-anturi voidaan parittaa vain yhteen iOS-laitteeseen kerrallaan."; -"TagSettings.PairError.CloudMode.description" = "Anturiin ei voida yhdistää Bluetoothilla sovelluksen pilvitilan ollessa aktiivinen. Voit ottaa pilvianturiesi Bluetoothin takaisin käyttöön sammuttamalla pilvitilan sovelluksen asetussivulta."; -"TagSettings.PairError.Timeout.description" = "Yhteys aikakatkaistiin. Laiteparin muodostaminen epäonnistui. Yritä uudelleen."; -"TagSettings.dataSourceTitleLabel.text" = "Datalähde"; -"TagSettings.DataSource.Heartbeat.title" = "Syke"; -"TagSettings.DataSource.Advertisement.title" = "Laiteilmoitus"; -"TagSettings.DataSource.Network.title" = "Pilvi"; -"TagSettings.Label.disabled.text" = "POIS KÄYTÖSTÄ?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Hälytykset ovat poissa käytöstä, sillä yhteyttä laitteeseen ei ole muodostettu ja lupa palveluviestien näyttämiseen puuttuu. Yhdistä laitteeseen ensin."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Yhdistä"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Hälytykset ovat poissa käytöstä, sillä yhteyttä laitteeseen ei ole muodostettu."; -"TagSettings.Alert.CustomDescription.placeholder" = "Muokkaa kuvausta..."; -"TagSettings.Alert.CustomDescription.title" = "Aseta hälytysviesti"; -"TagSettings.Alerts.Humidity.description" = "Hälytä, mikäli alle %.0f tai yli %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Hälytä, mikäli kastepiste alle %.0f tai yli %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Kastepiste"; -"TagSettings.Alerts.Pressure.description" = "Hälytä, mikäli ilmanpaine %.0f tai yli %.0f"; -"TagSettings.Alerts.Connection.description" = "Hälytä, mikäli yhteys muodostettu/yhteys menetetty"; -"TagSettings.ConnectionAlert.title" = "Yhteys"; -"TagSettings.SectionHeader.Firmware.title" = "Laiteohjelmisto"; -"TagSettings.Firmware.CurrentVersion" = "Nykyinen versio"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Hyvin vanha"; -"TagSettings.Firmware.UpdateFirmware" = "Päivitä"; -"UnexpectedError.callbackErrorAndResultAreNil" = "Vastakutsun ja virheen tulos on nolla"; -"UnexpectedError.callerDeinitedDuringOperation" = "Kutsuja deallokoitiin toiminnon aikana"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Maantieteellisen sijainnin peruutus epäonnistui"; -"UnexpectedError.failedToFindRuuviTag" = "Anturia ei löydetty"; -"UnexpectedError.failedToFindLogsForTheTag" = "Anturin lokitietoja ei löydetty"; -"UnexpectedError.viewModelUUIDIsNil" = "UUID:n näyttömalli on nolla"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Realmin tietoja yritettiin lukea ilman LUID:tä"; -"UnexpectedError.failedToFindVirtualTag" = "Virtuaalisen anturin haku epäonnistui"; -"HumidityUnit.Dew.title" = "Kastepiste (%@)"; -"WebTagLocationSource.current" = "Nykyinen sijaintisi"; -"WebTagLocationSource.manual" = "Valitse kartalta"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Poista"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Haluatko varmasti poistaa?"; -"WebTagSettings.Location.Current" = "Nykyinen sijaintisi"; -"WebTagSettings.confirmClearLocationDialog.title" = "Poista sijainti"; -"WebTagSettings.confirmClearLocationDialog.message" = "Oletko varma, että haluat poistaa tämän sijainnin ja käyttää nykyistä sijaintiasi?"; -"WebTagSettings.navigationItem.title" = "Asetukset"; -"WebTagSettings.Label.BackgroundImage.text" = "TAUSTAKUVA"; -"WebTagSettings.Label.Location.text" = "Paikka"; -"WebTagSettings.Button.Remove.title" = "POISTA"; -"WebTagSettings.SectionHeader.Name.title" = "NIMI"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "LISÄTIETOJA"; -"WebTagSettings.Alerts.Temperature.description" = "Hälytä, mikäli lämpötila alle %.0f tai yli %.0f"; -"WebTagSettings.Alerts.Off" = "Pois käytöstä"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Lämpötila"; -"WebTagSettings.Label.disabled.text" = "POIS KÄYTÖSTÄ?"; -"WebTagSettings.Label.alerts.text" = "HÄLYTYKSET"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "Virtuaalisten antureiden hälytysominaisuus tarvitsee oikeuden sekä paikkatiedon että palveluilmoitusten näyttämiseen. Tarkasta sovellusasetukset."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Asetukset"; -"WebTagSettings.AirHumidityAlert.title" = "Ilmankosteus"; -"WebTagSettings.Alerts.Humidity.description" = "Hälytä, mikäli alle %.0f tai yli %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Hälytä, mikäli kastepiste alle %.0f tai yli %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Kastepiste"; -"WebTagSettings.PressureAlert.title" = "Ilmanpaine"; -"WebTagSettings.Alerts.Pressure.description" = "Hälytä, mikäli ilmanpaine alle %.0f tai yli %.0f"; -"Welcome.description.text" = "Etsi lähistöllä olevia antureita napauttamalla Skannaa."; -"ExportService.AccelerationX" = "Kiihtyvyys X"; -"ExportService.AccelerationY" = "Kiihtyvyys Y"; -"ExportService.AccelerationZ" = "Kiihtyvyys Z"; -"DiscoverTable.SectionTitle.Devices" = "Lähellä olevat Ruuvi-laitteet"; -"ago" = "sitten"; -"TagSettings.MovementAlert.title" = "Liike"; -"TagSettings.Alerts.Movement.description" = "Hälytä, mikäli liike havaittu"; -"LocalNotificationsManager.HighHumidity.title" = "Suhteellinen ilmankosteus liian korkea!"; -"LocalNotificationsManager.LowHumidity.title" = "Suhteellinen ilmankosteus liian alhainen!"; -"LocalNotificationsManager.DidMove.title" = "Liike havaittu!"; -"LocalNotificationsManager.HighPressure.title" = "Ilmanpaine liian korkea!"; -"LocalNotificationsManager.LowPressure.title" = "Ilmanpaine liian alhainen!"; -"LocalNotificationsManager.HighSignal.title" = "Signaalin voimakkuus liian korkea!"; -"LocalNotificationsManager.LowSignal.title" = "Signaalin voimakkuus liian alhainen!"; -"LocalNotificationsManager.HighTemperature.title" = "Lämpötila liian korkea!"; -"LocalNotificationsManager.LowTemperature.title" = "Lämpötila liian alhainen!"; -"TagSettings.Alerts.Off" = "Pois käytöstä"; -"TagSettings.Alerts.Temperature.description" = "Hälytä, mikäli alle %.0f tai yli %.0f"; -"TagSettings.Label.alerts.text" = "Hälytykset"; -"TagSettings.backgroundImageLabel.text" = "Taustakuva"; -"TagSettings.batteryVoltageTitleLabel.text" = "Paristojännite"; -"HumidityCalibration.Button.Calibrate.title" = "Kalibroi"; -"HumidityCalibration.lastCalibrationDate.format" = "Kalibroitu: %@"; -"HumidityCalibration.Description.text" = "Suosittelemme kalibrointia suolaliuoksen avulla mahdollisimman tarkkojen ilmankosteusmittausten saamiseksi. Video-ohje."; -"HumidityCalibration.Label.note.text" = "Huomaathan, että kalibrointitieto tallennetaan paikallisesti mobiililaitteeseesi. Kalibrointi joudutaan suorittamaan uudelleen sovelluksen poistamisen ja uudelleenasennuksen jälkeen."; -"HumidityCalibration.VideoTutorials.link" = "Video-ohje."; -"Cancel" = "Peruuta"; -"HumidityCalibration.Button.Clear.title" = "Pyyhi"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Tyhjennetäänkö sovellukseen paikallisesti tallennetut historiatiedot?"; -"HumidityCalibration.Button.Close.title" = "Sulje"; -"TagCharts.Status.Serving" = "Synkronoidaan..."; -"TagCharts.Status.Connecting" = "Yhdistetään..."; -"TagSettings.ConnectStatus.Disconnected" = "Ei yhteyttä"; -"TagCharts.Export.title" = "LATAA"; -"h" = "t"; -"About.AboutHelp.contents" = "Ruuvi Station on kätevä ja helppokäyttöinen sovellus, jonka avulla voit seurata Ruuvin anturien mittaustietoja."; -"About.AboutHelp.header" = "Tietoa / Apua"; -"About.TagsCount.text" = "Lisätyt anturit: %d"; -"About.MeasurementsCount.text" = "Paikallisesti tallennettujen mittausten lukumäärä: %d"; -"About.DatabaseSize.text" = "Tietokannan koko: %@"; -"About.More.contents" = "Ruuvin kotisivu: ruuvi.com\nRuuvi Forum: f.ruuvi.com\nRuuvi Blog: ruuvi.com/fi/blogi\nRuuvi Twitter: twitter.com/ruuvicom"; -"About.More.header" = "Lue lisää"; -"About.OpenSource.contents" = "Kuten Ruuvi-anturit, Ruuvi Station -sovellukset perustuvat avoimeen lähdekoodiin. Seuraa kehitystä ja osallistu osoitteessa: github.com/ruuvi"; -"About.OpenSource.header" = "Avoin lähdekoodi"; -"About.OperationsManual.contents" = "Aloita Ruuvi Station -mobiilisovelluksen käyttö ohjeidemme avulla: ruuvi.com/fi/tuki/station-mobile-fi"; -"About.OperationsManual.header" = "Käyttöohje"; -"About.Privacy.contents" = "Sovelluksen käyttäminen vaatii Ruuvin käyttöehtojen hyväksymisen: ruuvi.com/terms"; -"About.Privacy.header" = "Tietosuojakäytäntö"; -"About.Troubleshooting.contents" = "Löydä apua Ruuvi Station -sovellusten, Ruuvi-tuotteiden ja Ruuvi Cloud -palvelun käyttöön tukikeskuksestamme: ruuvi.com/fi/tuki"; -"About.Troubleshooting.header" = "Vianetsintä"; -"hours" = "tuntia"; -"Interval.Days.string" = "päivää"; -"TagSettings.AirHumidityAlert.title" = "Ilmankosteus (%@)"; -"HumidityUnit.gm3.title" = "Absoluuttinen (g/m³)"; -"g/m³" = "g/m³"; -"HumidityUnit.Percent.title" = "Suhteellinen (%)"; -"TagSettings.Mac.Alert.title" = "MAC-osoite"; -"Menu.Label.AboutHelp.text" = "Tietoa / Apua"; -"Menu.Label.AddAnNewSensor.text" = "Lisää uusi anturi"; -"Menu.Label.AppSettings.text" = "Asetukset"; -"Menu.Label.GetMoreSensors.text" = "Osta Ruuvi-antureita"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/fi/tuotteet?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/fi/tuotteet?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Osta Ruuvi Gateway"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/fi/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "Mitä mitata Ruuvilla?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/fi/ideat?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Lähetä palautetta"; -"Menu.Label.MyRuuviAccount.text" = "Minun Ruuvi-tilini"; -"min" = "min"; -"minutes" = "Minuuttia"; -"TagSettings.Label.moreInfo.text" = "Lisätietoa"; -"TagSettings.SectionHeader.Name.title" = "NIMI"; -"No" = "Ei"; -"OK" = "OK"; -"Cards.NoSensors.title" = "Ei antureita\nLisää antureita napauttamalla tästä"; -"TagSettings.PressureAlert.title" = "Ilmanpaine (%@)"; -"UnitPressure.hectopascal.title" = "Hehtopascal (hPa)"; -"hPa" = "hPa"; -"UnitPressure.inchOfMercury.title" = "Elohopeatuuma (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Elohopeamillimetri (mmHg)"; -"TagCharts.Status.ReadingHistory" = "Historiatietoja luetaan"; -"TagSettings.rssiTitleLabel.text" = "Signaalin voimakkuus (RSSI)"; -"signal_strength_dbm" = "Signaalin voimakkuus (dBm)"; -"s" = "s"; -"Welcome.scan.title" = "SKANNAA"; -"Background.Interval.Sec.string" = "sek"; -"Settings.navigationItem.title" = "Asetukset"; -"Settings.BackgroundScanning.title" = "Taustaskannaus"; -"Settings.BackgroundScanning.Footer.message" = "Tärkeitä huomioita: Historian Bluetooth-taustatallennus ja Bluetooth-hälytykset toimivat ainoastaan sovelluksen taustaskannauksen ollessa käytössä. Mikäli poistat taustaskannauksen käytöstä, kaikkien yhdistettyjen Ruuvi-anturien paritukset poistetaan ja joudut parittamaan ne uudelleen niiden asetussivuilta käsin."; -"Settings.BackgroundScanning.interval" = "Historiatietojen tallennusväli"; -"Settings.Label.Chart" = "Historiatietojen asetukset"; -"ChartSettings.AllPoints.title" = "Näytä kaikki kerätyt mittaukset"; -"ChartSettings.AllPoints.description" = "Ominaisuuden käyttäminen saattaa hidastaa historiatietojen päivittymistä."; -"ChartSettings.DrawDots.title" = "Näytä tietopisteet"; -"ChartSettings.DrawDots.description" = "Tietopisteiden näyttäminen helpottaa tallennetun historiatiedon tutkimista."; -"Defaults.ChartIntervalSeconds.title" = "Historian tarkkuus"; -"ChartSettings.Duration.title" = "Historian tarkastelujakso"; -"ChartSettings.Duration.description" = "Määritä historian tarkastelujakso 1 - 10 päivää."; -"Settings.Label.HumidityUnit.text" = "Kosteusyksikkö"; -"Settings.Label.Temperature" = "Lämpötila"; -"Settings.Label.Humidity" = "Kosteus"; -"Settings.Label.Pressure" = "Paine"; -"Settings.ChooseHumidityUnit.text" = "Valitse sovelluksessa käytettävä kosteusyksikkö."; -"Settings.Label.PressureUnit.text" = "Paineyksikkö"; -"Settings.ChoosePressureUnit.text" = "Valitse sovelluksessa käytettävä paineyksikkö."; -"Settings.Label.TemperatureUnit.text" = "Lämpötilayksikkö"; -"Settings.ChooseTemperatureUnit.text" = "Valitse sovelluksessa käytettävä lämpötilayksikkö."; -"dBm" = "dBm"; -"TagCharts.Sync.title" = "Synkronoi"; -"TagCharts.SyncConfirmationDialog.message" = "Ladataanko historiatiedot anturista?"; -"WebTagSettings.Label.TagName.text" = "Anturin nimi"; -"TagSettings.confirmTagRemovalDialog.title" = "Poista"; -"TagSettings.confirmTagRemovalDialog.message" = "Haluatko varmasti poistaa tämän anturin?"; -"TagSettings.temperatureAlertTitleLabel.text" = "Lämpötila (%@)"; -"TemperatureUnit.Celsius.title" = "Celsius (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Fahrenheit (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Kelvin (K)"; -"Updated" = "Päivitetty"; -"V" = "V"; -"RuuviOnboard.Welcome.title" = "Tutustu Ruuvi Station -sovellukseen."; -"RuuviOnboard.Measure.title" = "Mittaa ympäristösi olosuhteita: lämpötilaa, ilmankosteutta ja ilmanpainetta."; -"RuuviOnboard.Access.title" = "Tarkastele anturitietoja reaaliaikaisesti tai tutki laitteelle tallennettuja historiatietoja."; -"RuuviOnboard.Alerts.title" = "Aseta hälytyksiä ja ilmoituksia haluamallasi tavalla."; -"RuuviOnboard.Cloud.title" = "Kirjaudu sisään käyttääksesi kaikkia sovelluksen ominaisuuksia."; -"RuuviOnboard.Cloud.subtitle" = "Vahvista anturiesi omistajuudet ilmaisen Ruuvi Cloud -tilin avulla."; -"RuuviOnboard.Cloud.subtitle.signed" = "Hienoa, olet jo kirjautunut sisään!"; -"RuuviOnboard.Start.title" = "Näytä lähietäisyydellä olevat anturit napauttamalla SKANNAA."; -"Yes" = "Kyllä"; -"LocalNotificationsManager.Mute.button" = "Mykistä tunniksi"; -"Defaults.AlertsMuteInterval.title" = "Hälytysten mykistysväli"; -"SignIn.Title.text" = "Kirjaudu sisään"; -"Menu.SignOut.text" = "Kirjaudu ulos"; -"RuuviOnboard.Cloud.Benefits.message" = "Hyödyt:\n\n ● Anturien nimet, taustakuvat sekä kalibrointi- ja hälytysasetukset tallentuvat turvallisesti tilillesi pilvipalveluun\n\n ● Lue anturitiedot etänä verkossa (vaatii Ruuvi Gateway -reitittimen)\n\n ● Jaa antureita ystävien ja perheen kesken (vaatii Ruuvi Gateway -reitittimen)\n\n ● Selaa jopa 2 vuoden historiatietoja osoitteessa station.ruuvi.com (vaatii Ruuvi Gateway -reitittimen)"; -"RuuviOnboard.Cloud.Details.title" = "Tiedot"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Haluatko varmasti ohittaa sisäänkirjautumisen?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Kyllä, ohita"; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Takaisin"; -"SignIn.EmailPlaceholder" = "Sähköposti"; -"SignIn.RequestCode" = "Pyydä kirjautumiskoodi"; -"SignIn.SubmitCode" = "Lähetä"; -"SignIn.EmailSent" = "Sähköposti lähetetty"; -"SignIn.CheckMailbox" = "Olemme lähettäneet sähköpostiisi kertakäyttöisen salasanan %@. Kirjaudu syöttämällä se tähän:"; -"SignIn.CodeHint" = "Koodi"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "Anturit, joiden omistajuuden olet vahvistanut asetussivulla poistetaan sovelluksesta automaattisesti uloskirjauduttaessa. Anturitiedot palautetaan pilvipalvelusta samalla sähköpostiosoitteella uudelleenkirjauduttaessa.\n\nHaluatko varmasti kirjautua ulos?"; -"TagSettings.ClaimTagButton.Claim" = "Vahvista omistajuus"; -"TagSettings.ShareButton" = "Jaa"; -"Syncing..." = "Ladataan historiaa pilvestä..."; -"Synchronized" = "Synkronoitu"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Synkronoitu: %@"; -"MenuTableViewController.None" = "ei kirjautunut"; -"MenuTableViewController.User" = "Käyttäjä: %@"; -"ShareViewController.Title" = "Jaa anturi"; -"ShareViewController.Description" = "Voit jakaa tämän anturin ystäville tai perheenjäsenille, mikäli laite on Ruuvi Gateway -reitittimen kuuluvuusalueella.\n\nVastaanottaja saa jakamisesta ilmoituksen sähköpostilla. Ilmainen Ruuvi-tili luodaan ensimmäisen sisäänkirjautumisen yhteydessä, mikäli vastaanottajalla ei ole vielä Ruuvi-tiliä.\n\nAnturin nimi ja taustakuva jaetaan vastaanottajalle vain kertaalleen. Sen jälkeen kumpikin voivat muokata vain omia anturiasetuksiaan. Kalibrointiarvot (mikäli käytössä) synkronoidaan automaattisesti jaetuille antureille ja vastaanottaja näkee vain lopulliset korjatut arvot."; -"ShareViewController.addFriend.Title" = "Lisää ystävä"; -"ShareViewController.emailTextField.placeholder" = "Anna sähköpostiosoite"; -"ShareViewController.sharedEmails.Title" = "Olet käyttänyt %d/%d tämän anturin enimmäisjakomäärästä. Anturi on jaettu seuraaville käyttäjille:"; -"Share.Send.button" = "Lähetä"; -"SharePresenter.UnshareSensor.Message" = "Haluatko lopettaa anturin jakamisen käyttäjälle %@?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "VERKON TIEDOT"; -"TagSettings.NetworkInfo.Owner" = "Omistaja"; -"Menu.RuuviNetworkStatus.text" = "Ruuvin pilven tila"; -"SignIn.TitleLabel.text" = "Kirjaudu\nRuuvi\nStationiin"; -"SignIn.SubtitleLabel.text" = "Hyödyntääksesi kaikkia sovelluksen ominaisuuksia, kirjaudu sisään tai luo uusi ilmainen Ruuvi-käyttäjätili antamalla sähköpostiosoitteesi."; -"SignIn.VerificationCodePlaceholder" = "vahvistuskoodi muodossa: CJSM"; -"UserApiError.ER_FORBIDDEN" = "Kielletty"; -"UserApiError.ER_UNAUTHORIZED" = "Ei sallittu"; -"UserApiError.ER_INTERNAL" = "Sisäinen virhe"; -"UserApiError.ER_INVALID_FORMAT" = "Virheellinen pyynnön muoto"; -"UserApiError.ER_USER_NOT_FOUND" = "Käyttäjää ei löydy"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Anturia ei löydy"; -"UserApiError.ER_TOKEN_EXPIRED" = "Avain on vanhentunut"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "Tilausta ei löydy"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "Jakojen enimmäismäärä on ylitetty"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Et voi jakaa anturia useammalle käyttäjälle"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "Jotta voit jakaa anturin, sen täytyy olla Ruuvi Gateway -reitittimen kuuluvuusalueella"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "Tämä anturi on jo jaettu"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Anturilla on jo toinen omistaja: %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Anturilla on jo toinen omistaja"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Sähköpostin lähetys epäonnistui"; -"UserApiError.ER_MISSING_ARGUMENT" = "Argumentti puuttuu"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Virheellinen tiheuden tila"; -"UserApiError.ER_INVALID_SORT_MODE" = "Virheellinen lajittelun tila"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Virheellinen aikaväli"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Virheellinen sähköpostiosoite"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Virheellinen MAC-osoite"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Tallennusvirhe"; -"UserApiError.ER_SUB_NO_USER" = "Ei käyttäjää"; -"UserApiError.ER_THROTTLED" = "Liian monta pyyntöä"; -"OffsetCorrection.CalibrationDescription.text" = "Anturin kalibrointi ei ole tarpeellista normaalissa käytössä.\n\nTämä ominaisuus on tarkoitettu edistyneille käyttäjille.\n\nKalibroinnin lisäohjeet löytyvät osoitteesta ruuvi.com/fi/tuki"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Poista kalibrointiasetukset?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Kalibrointi"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Syötä anturin oletettu lämpötila tämänhetkisissä olosuhteissa (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Syötä anturin oletettu paine tämänhetkisissä olosuhteissa (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Syötä anturin oletettu kosteus tämänhetkisissä olosuhteissa (%@): "; -"OffsetCorrection.OriginalValue.title" = "Alkuperäinen arvo"; -"OffsetCorrection.CorrectedValue.title" = "Korjattu arvo"; -"OffsetCorrection.Temperature.Title" = "Lämpötilapoikkeama"; -"OffsetCorrection.Humidity.Title" = "Kosteuspoikkeama"; -"OffsetCorrection.Pressure.Title" = "Painepoikkeama"; -"OffsetCorrection.Calibrate.button" = "Kalibrointi"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "KALIBROINTI"; -"TagSettings.OffsetCorrection.Temperature" = "Lämpötila"; -"TagSettings.OffsetCorrection.Humidity" = "Kosteus"; -"TagSettings.OffsetCorrection.Pressure" = "Paine"; -"PhotoPicker.Sheet.files" = "Valitse tiedostoista"; -"SignIn.EnterVerificationCode" = "Syötä vahvistuskoodi"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Taustakuvaa ei löydy tai sen luominen epäonnistui"; -"UnexpectedError.bothLuidAndMacAreNil" = "Sekä paikallinen että MAC-tunniste puuttuu"; -"RuuviCloudApiError.emptyResponse" = "Tyhjä vastaus"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "Vastaus ei sisällä tietoa"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Odottamaton HTTP-tilakoodi"; -"RuuviCloudError.NotAuthorized" = "Ei valtuutusta"; -"RuuviLocalError.failedToGetJpegRepresentation" = "JPG-muunnosta ei voida tehdä"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Taustakuvahakemistoa ei löydy"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Anturia ei löydetty"; -"RuuviServiceError.pictureUrlIsNil" = "Kuvan URL puuttuu"; -"RuuviServiceError.macIdIsNil" = "MAC-tunniste puuttuu"; -"network_sharing_disabled" = "Voit jakaa vain Ruuvi Gateway -reitittimen läheisyydessä olevia antureita."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Sekä paikallinen että MAC-tunniste puuttuu"; -"RuuviServiceError.failedToParseNetworkResponse" = "Vastauksen jäsentäminen epäonnistui"; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Taustakuvaa ei löydy tai sen luominen epäonnistui"; -"RuuviServiceError.failedToGetJpegRepresentation" = "JPG-muunnosta ei voida tehdä"; -"UpdateFirmware.Title.text" = "Päivitä laiteohjelmisto"; -"UpdateFirmware.Download.header" = "LATAA UUSIN LAITEOHJELMISTO"; -"UpdateFirmware.Download.content" = "Lataa uusin saatavilla oleva ohjelmistopaketti ennen päivityksen aloittamista. Uusin versio on ladattavissa osoitteesta ruuvi.com/fi/ohjelmistopaivitys"; -"UpdateFirmware.SetDfu.header" = "ASETA RUUVI-ANTURI DFU-TILAAN"; -"UpdateFirmware.SetDfu.content" = "Avaa anturin suojakotelo vetämällä kansiosa erilleen kotelon pohjasta sormin tai tasapäisen ruuvimeisselin avulla.\n\nAseta RuuviTag päivitystilaan pitämällä painiketta B alaspainettuna ja painamalla samalla nollauspainiketta R. Punainen LED-valo on aktiivinen laitteen ollessa bootloader-tilassa. Pidä painiketta alaspainettuna 10 sekunnin ajan, mikäli laitteessa on vain yksi painike."; -"UpdateFirmware.NextButton.title" = "SEURAAVA"; -"DfuDevicesScanner.Title.text" = "Laitteet"; -"DfuDevicesScanner.Description.text" = "Etsi ja valitse päivitettävä anturi \"RuuviBoot\"."; -"DfuDevicesScanner.NoDevice.text" = "(Ei havaittuja antureita Bluetooth-verkon alueella)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth ei ole käytössä)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth ei ole käytössä"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Ruuvi Station tarvitsee Bluetooth-yhteyden toimiakseen. Ota Bluetooth käyttöön laitteen asetuksista."; -"DfuFlash.Title.text" = "DFU-päivitys"; -"DfuFlash.Progress.text" = "Edistyminen"; -"DfuFlash.Step.text" = "Vaihe"; -"DfuFlash.Steps.PackageSelection.text" = "Valitse päivityspaketti"; -"DfuFlash.Steps.ReadyForUpload.text" = "Valmis ladattavaksi"; -"DfuFlash.Steps.Uploading.text" = "Ladataan"; -"DfuFlash.Steps.Completed.text" = "Valmis"; -"DfuFlash.OpenDocumentPicker.title" = "AVAA TIEDOSTOVALITSIN"; -"DfuFlash.FirmwareSelectionGuide.text" = "Etsi aiemmin mobiililaitteelle tallentamasi ZIP-tiedosto."; -"DfuFlash.Firmware.FileName.text" = "Tiedostonimi"; -"DfuFlash.Firmware.Parts.text" = "Osat"; -"DfuFlash.Firmware.Size.text" = "Koko"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Soft Device koko"; -"DfuFlash.Firmware.BootloaderSize.text" = "Bootloader koko"; -"DfuFlash.Cancel.text" = "PERUUTA"; -"DfuFlash.Start.text" = "Aloita"; -"DfuFlash.Finish.text" = "VALMIS"; -"DfuFlash.FinishGuide.text" = "Laiteohjelmiston päivitys onnistui. -RuuviTag on valmis käyttöön!"; -"DfuFlash.CancelAlert.text" = "Haluatko varmasti peruuttaa laiteohjelmistopäivityksen?"; -"RuuviDfuError.invalidFirmwareFile" = "Tiedosto ei sisällä sopivaa laiteohjelmistoa"; -"DFUUIView.navigationTitle" = "Laiteohjelmiston päivitys"; -"DFUUIView.latestTitle" = "Uusin saatavilla oleva Ruuvi-laiteohjelmisto:"; -"DFUUIView.currentTitle" = "Nykyinen versio:"; -"DFUUIView.notReportingDescription" = "Laitteessa oleva laiteohjelmisto ei ilmoita nykyistä versiota. Joko et ole sen Bluetooth-kuuluvuusalueella, se on samanaikaisesti yhteydessä toiseen puhelimeen tai kyseessä on hyvin vanha laiteohjelmisto."; -"DFUUIView.alreadyOnLatest" = "Laitteessa on jo viimeisin saatavilla oleva laiteohjelmisto"; -"DFUUIView.startUpdateProcess" = "Siirry päivittämään"; -"DFUUIView.downloadingTitle" = "Ladataan viimeisin laiteohjelmisto päivitystä varten..."; -"DFUUIView.prepareTitle" = "Laitteen asettaminen päivitystilaan"; -"DFUUIView.openCoverTitle" = "1. Avaa Ruuvi-anturin suojakotelo"; -"DFUUIView.locateBootButtonTitle" = "2. Paikanna valkoisella piirilevyllä olevat pienet pyöreät mustat painikkeet; vanhemmissa Ruuvi-antureissa on 2 painiketta “R” ja “B”, kun taas uudemmissa on vain yksi nimeämätön painike."; -"DFUUIView.setUpdatingModeTitle" = "3. Aseta anturi päivitystilaan:"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. Anturissasi on kaksi painiketta: pidä painike “B” alaspainettuna ja napauta samalla painiketta “R”. Vapauta painike “B”."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. Anturissasi on yksi painike: pidä painiketta alaspainettuna 10 sekunnin ajan."; -"DFUUIView.toBootModeSuccessTitle" = "4. Päivitystilaan siirtyminen onnistui, mikäli piirilevyllä oleva punainen LED-valo on nyt aktiivinen ja sovelluksen painikkeen nimeksi on vaihtunut “Aloita päivitys”."; -"DFUUIView.updatingTitle" = "Päivitetään..."; -"DFUUIView.searchingTitle" = "Laitetta etsitään"; -"DFUUIView.startTitle" = "Aloita päivitys"; -"DFUUIView.doNotCloseTitle" = "Älä sulje sovellusta tai poista paristoa laitteesta päivityksen aikana."; -"DFUUIView.successfulTitle" = "Päivitys onnistui"; -"DFUUIView.DBMigration.Error.message" = "Päivitys onnistui, mutta sovelluksen tietokannassa tapahtui odottamaton virhe. Jatkaaksesi tämän anturin käyttöä, poista se sovelluksesta ja lisää se sitten uudelleen."; -"RuuviDfuError.failedToConstructUUID" = "UUID:n muodostaminen epäonnistui"; -"SignIn.EmailMismatch.Alert.message" = "Hupsis, olet pyytänyt kirjautumiskoodia käyttäjälle %@ mutta käytettävä koodi on tarkoitettu käyttäjälle %@. Tarkasta, että saamasi koodi on käyttäjälle %@"; -"SignIn.EmailMissing.Alert.message" = "Hupsis, kirjautumiskoodin saamiseksi antamaasi sähköpostia ei voitu tallentaa. Yritä kirjautumista uudelleen."; -"TagSettings.RemoveThisSensor.title" = "Poista tämä anturi"; -"Share.Success.message" = "Anturi jaettu onnistuneesti"; -"TagSettings.SectionHeader.General.title" = "Yleisasetukset"; -"TagSettings.Shared.title" = "Jaettu"; -"TagSettings.NotShared.title" = "Ei jaettu"; -"Owner.title" = "Vahvista omistajuus"; -"Owner.ClaimOwnership.button" = "Vahvista Omistajuus"; -"Owner.Claim.description" = "Omistatko tämän anturin? Vahvista omistajuus ja anturi lisätään Ruuvi-tilillesi. Jokaisella Ruuvi-anturilla voi olla vain yksi omistaja. Vahvistaaksesi omistajuuden, sinun täytyy olla kirjautuneena sisälle.\n\nHyödyt:\n\n ● Anturien nimet, taustakuvat sekä kalibrointi- ja hälytysasetukset tallentuvat turvallisesti tilillesi pilvipalveluun\n\n ● Lue anturitiedot etänä verkossa (vaatii Ruuvi Gateway -reitittimen)\n\n ● Jaa antureita ystävien ja perheen kesken (vaatii Ruuvi Gateway -reitittimen)\n\n ● Selaa jopa 2 vuoden historiatietoja osoitteessa station.ruuvi.com (vaatii Ruuvi Gateway -reitittimen)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "Anturin poistaminen mitätöi omistajuuden. Kuka tahansa voi vaatia anturin omistajuutta poistamisen jälkeen. Jokaisella Ruuvi-anturilla voi olla vain yksi omistaja."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "Poistamisesta ilmoitetaan anturin omistajalle ja anturin tietojen lukuoikeus päättyy."; -"TagSettings.General.Owner.none" = "Ei omistajaa"; -"TagSettings.Share.title" = "Jaa"; -"Menu.LoggedIn.title" = "Kirjautunut:"; -"Interval.Day.string" = "päivä"; -"hour" = "tunti"; -"TagSettings.tagNameTitleLabel.rename.text" = "Anturisi asettuvat automaattisesti aakkosjärjestykseen."; -"On" = "Päällä"; -"Off" = "Pois"; -"DFUUIView.lowBattery.warning.message" = "Anturin paristojännite on alhainen ja päivitysprosessi voi epäonnistua. Suosittelemme vaihtamaan pariston ennen ohjelmiston päivittämistä."; -"alert_notification_humidity_high_threshold" = "Ilmankosteus on yli %@"; -"alert_notification_humidity_low_threshold" = "Ilmankosteus on alle %@"; -"alert_notification_pressure_high_threshold" = "Ilmanpaine on yli %@"; -"alert_notification_pressure_low_threshold" = "Ilmanpaine on alle %@"; -"alert_notification_rssi_high_threshold" = "Signaalinvoimakkuus on yli %@"; -"alert_notification_rssi_low_threshold" = "Signaalinvoimakkuus on alle %@"; -"alert_notification_temperature_high_threshold" = "Lämpötila on yli %@"; -"alert_notification_temperature_low_threshold" = "Lämpötila on alle %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "Käyttäjä %@ on jo kirjautuneena sisälle. Mikäli haluat käyttää toista tiliä, kirjaudu ensin ulos ja yritä sitten uudelleen."; -"Settings.Label.CloudMode" = "Pilvitila"; -"Settings.Label.CloudMode.description" = "Päivitä lähellä olevat pilveen rekisteröidyt anturit ainoastaan pilvestä ja vastaanota ainoastaan sähköpostihälytyksiä hylkäämällä niiden Bluetooth-viestit. Vaatii Ruuvi Gateway -reitittimen."; -"internet_connection_problem" = "Ongelma internet-yhteydessä"; -"Widgets.Loading.message" = "ladataan..."; -"Cards.Movements.title" = "liikettä"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Paristo vähissä"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Paristo OK"; -"Widgets.Description.message" = "Luo widgettejä Ruuvi-antureistasi. Widgetit päivittyvät Ruuvin pilvipalvelun kautta ja vaativat toimiakseen Ruuvi Gateway -reitittimen."; -"settings_appearance" = "Sovelluksen ulkoasuasetukset"; -"app_theme" = "Sovelluksen teema"; -"follow_system_theme" = "Järjestelmä"; -"dark_theme" = "Tumma teema"; -"light_theme" = "Vaalea teema"; -"Settings.Temperature.Resolution.title" = "Lämpötilan resoluutio"; -"Settings.Humidity.Resolution.title" = "Kosteuden resoluutio"; -"Settings.Pressure.Resolution.title" = "Paineen resoluutio"; -"Settings.Measurement.Resolution.description" = "Valitse kuinka suurella tarkkuudella haluat mittaustietojen näkyvän sovelluksessa. Tämä asetus ei vaikuta historiatietoihin tai hälytyksiin."; -"Settings.Measurement.Unit.title" = "Yksikkö"; -"Settings.Measurement.Resolution.title" = "Resoluutio"; -"MyRuuvi.Settings.DeleteAccount.title" = "Poista tili"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "Vahvistussähköposti lähetetty. Poista tili noudattamalla sähköpostissa annettuja ohjeita."; -"TagSettings.Alert.SetTemperature.title" = "Aseta lämpötilahälytys"; -"TagSettings.Alert.SetHumidity.title" = "Aseta kosteushälytys"; -"TagSettings.Alert.SetPressure.title" = "Aseta painehälytys"; -"TagSettings.Alert.SetRSSI.title" = "Aseta signaalinvoimakkuushälytys"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Lataa historia (csv)"; -"clear_view" = "Tyhjennä kaavionäkymä"; -"day_1" = "1 päivä"; -"day_2" = "2 päivää"; -"day_3" = "3 päivää"; -"day_4" = "4 päivää"; -"day_5" = "5 päivää"; -"day_6" = "6 päivää"; -"day_7" = "7 päivää"; -"day_8" = "8 päivää"; -"day_9" = "9 päivää"; -"day_10" = "10 päivää"; -"day_x" = "%.0f päivää"; -"more" = "Lisää..."; -"all" = "Kaikki"; -"longer_history_title" = "Pidempi historia"; -"longer_history_message" = "Ruuvi Station -mobiilisovellus tukee maksimissaan 10 päivän historiaa. Ruuvi Cloud -tilaajat voivat tarkastella historiatietoja jopa 2 vuoden ajalta web-sovelluksessa osoitteessa ruuvi.com/fi/station (vaatii Ruuvi Gateway -reitittimen)."; -"reading_history_x" = "Bluetooth-lataus: %.0f"; -"rssi_alert_description" = "Tämän hälytyksen käyttö vaatii, että olet sisäänkirjautunut sovellukseen, sinut on merkitty anturin omistajaksi ja anturi on Ruuvi Gateway -reitittimen kuuluvuusalueella. iOS-päätelaitteet eivät pysty näyttämään Ruuvin anturien lähettämien viestien signaalinvoimakkuustietoja anturin ollessa paritettuna ja kun mittauksia luetaan taustalla. Reaaliaikainen Bluetooth-signaalinvoimakkuus näytetään sovelluksessa, mutta sitä ei käytetä tässä hälytyksessä."; -"bluetooth_download" = "Bluetooth-lataus"; -"bluetooth_download_description" = "Voit ladata anturin sisäisen historian ollessasi Bluetooth-kantaman sisällä."; -"download" = "Lataa"; -"clear_local_history" = "Tyhjennä paikallinen historia"; -"clear_local_history_description" = "Haluatko tyhjentää sovelluksen muistiin tallennetun mittaushistorian? Tämä ei tyhjennä anturin sisäistä historiaa eikä Ruuvi Cloud -pilvipalveluun tallennettua historiaa."; -"TagCharts.FailedToSyncDialog.title" = "Lataus epäonnistui"; -"TagCharts.FailedToSyncDialog.message" = "Bluetooth-historian lataus epäonnistui. Tarkasta, että olet Bluetooth-kantaman sisällä, että anturissa on latausta tukeva laiteohjelmisto ja ettei anturi ole yhteydessä toiseen iOS-laitteeseen samanaikaisesti. Ruuvi Stationin iOS-versio varaa anturin yhteyden käyttöönsä jatkuvaa yhteystilaa käytettäessä."; -"TagCharts.TryAgain.title" = "Yritä uudelleen"; -"support" = "Tuki"; -"full_image_view" = "Anturikortti"; -"history_view" = "Historianäkymä"; -"settings_and_alerts" = "Asetukset & hälytykset"; -"change_background" = "Vaihda taustakuva"; -"check_claim_state" = "Omistajuuden tilaa haetaan"; -"claim_in_progress" = "Omistajuutta vaihdetaan"; -"force_claim_sensor" = "Vaihda omistajuus"; -"force_claim_sensor_description1" = "Tällä anturilla on jo toinen omistaja. Omistajuus voidaan vaihtaa pakotetusti, mikäli anturi on lähettyvilläsi. Jokaisella Ruuvi-anturilla voi olla vain yksi omistaja."; -"force_claim_sensor_description2" = "Omistajuuden pakotettu vaihtaminen tapahtuu Near-Field Communication (NFC) ominaisuutta käyttämällä. Varmista, että NFC on käytössä mobiililaitteessasi.\n\n\t1. Aloita omistajuuden pakotettu vaihto koskettamalla Ruuvi-anturia mobiililaitteellasi.\n\n\t2. Sinut siirretään takaisin Asetukset-sivulle onnistuneen vaihdon päätteeksi.\n\nMikäli pakotettu vaihto epäonnistui tai NFC-ominaisuutta ei ole saatavilla mobiililaitteessasi:\n\n\t1. Avaa Ruuvi-anturin suojakotelo.\n\n\t2. Paikanna valkoisella piirilevyllä oleva pieni musta painike (tai painike \"B\", mikäli anturissasi on 2 painiketta), napauta painiketta ensin lyhyesti ja paina tämän jälkeen sivulla olevaa Käytä BT -nappia pakotetun vaihdon aloittamiseksi.\n\n\t3. Sinut siirretään takaisin Asetukset-sivulle onnistuneen vaihdon päätteeksi."; -"force_claim" = "Vaadi omistajuutta"; -"claim_wrong_sensor_scanned" = "Olet lukemassa väärää RuuviTagia"; -"view" = "Näkymä"; -"card_type" = "Korttityyppi"; -"image_cards" = "Kuvakortit"; -"simple_cards" = "Yksinkertaiset kortit"; -"card_action" = "Siirry kortista"; -"open_sensor_view" = "Anturinäkymään"; -"open_history_view" = "Historianäkymään"; -"change_background_message" = "Valitse taustakuva. Taustakuva menetetään uudelleenasennuksen yhteydessä, mikäli et ole sisäänkirjautunut sovellukseen."; -"take_photo" = "Ota kuva"; -"select_from_gallery" = "Valitse kuvagalleriasta"; -"select_default_image" = "Valitse oletuskuva"; -"export_csv_feature_location" = "Anturihistoria voidaan viedä tiedostoon anturin historiasivulla. Napauta oikeassa yläkulmassa olevaa kolmipistevalikkoa ja valitse sitten \"Lataa historia (csv)\"."; -"low_battery" = "Paristo vähissä"; -"change_background_image" = "Vaihda taustakuva"; -"SignIn.Sync.message" = "Ladataan tietoja pilvestä. Odota hetki."; -"uploading_progress" = "Ladataan: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Kirjaudu sisään käyttääksesi widgettiä."; -"Widgets.Unauthorized.Inline.message" = "Kirjaudu Ruuvi Stationiin"; -"Widgets.Unconfigured.Simple.message" = "Paina pitkään muokataksesi widgettiä."; -"Widgets.Unconfigured.Rectangular.message" = "Lisää Ruuvi widgetissä näytettävä anturi"; -"Widgets.Unconfigured.Inline.message" = "Lisää Ruuvi widgetissä näytettävä anturi"; -"Widgets.Unconfigured.Circular.message" = "+Lisää"; -"Widgets.Select.Sensor.title" = "Valittu anturi"; -"Widgets.Sensor.Type.title" = "Valitse anturin tyyppi"; -"Settings.SectionHeader.General.title" = "YLEISET"; -"Settings.SectionHeader.Application.title" = "OHJELMA"; -"empty_chart_message" = "Ei tallennettuja mittauksia \nvalitulla aikajaksolla."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Tutustu Ruuvi Station -sovellukseesi."; -"onboarding_swipe_to_continue" = "Jatka pyyhkäisemällä →"; -"onboarding_read_sensors_data" = "Lue Ruuvi-antureitasi"; -"onboarding_via_bluetooth_or_cloud" = "Bluetoothilla tai Ruuvi Cloudilla"; -"onboarding_follow_measurement" = "Seuraa kaikkia antureitasi"; -"onboarding_dashboard" = "koontinäytöltä"; -"onboarding_personalise" = "Personoi"; -"onboarding_your_sensors" = "sovelluksesi omilla nimillä ja taustakuvilla."; -"onboarding_explore_detailed" = "Tarkastele anturiesi"; -"onboarding_history" = "mittaushistoriaa"; -"onboarding_set_custom" = "Aseta ja säädä omat"; -"onboarding_alerts" = "hälytyksesi"; -"onboarding_share_your_sensors" = "ja mittaa yhdessä ystävien sekä perheen kesken."; -"onboarding_sharees_can_use" = "Jaa anturisi"; -"onboarding_handy_widgets" = "widgeteillä"; -"onboarding_access_widgets" = "Tuo suosikkianturisi kotinäytölle ja lukitusnäytölle"; -"onboarding_station_web" = "Ruuvin web-sovelluksessa"; -"onboarding_web_pros" = "Koontinäyttö, usean vuoden historia, sähköpostihälytykset ja paljon muuta"; -"onboarding_gateway_required" = "Vaatii Ruuvi Gateway -reitittimen."; -"onboarding_skip" = "Ohita"; -"onboarding_thats_it" = "Melkein valmista!"; -"onboarding_thats_it_already_signed_in" = "Aloitetaan!"; -"onboarding_go_to_sign_in" = "Kirjautumalla sisään saat parhaan Ruuvi-käyttökokemuksen. Tee se nyt tai jatka ilman pilviominaisuuksia."; -"onboarding_go_to_sign_in_already_signed_in" = "Lähdetään mittaamaan!"; -"onboarding_continue" = "Seuraava"; -"sign_in_or_create_free_account" = "Kirjaudu tai luo ilmainen Ruuvi-tili"; -"to_use_all_app_features" = "Kirjautuminen ei vaadi salasanaa."; -"type_your_email" = "Anna sähköpostiosoite..."; -"request_code" = "Pyydä kirjautumiskoodi"; -"no_password_needed" = "Tälle osoitteelle luodaan ilmainen tili, jos sinulla ei vielä ole tiliä. Tarvitset kirjautumiseen ainoastaan sähköpostiosoitteen. Pidämme tietosi turvassa."; -"benefits_sign_in" = "Lue lisää Ruuvi-tilin hyödyistä tai kirjaudu sisään myöhemmin"; -"use_without_account" = "Ei kiitos, ohita"; -"why_should_sign_in" = "Hyödyt"; -"sensors_ownership_and_settings_stored_in_cloud" = "Sisäänkirjautumalla saat useita etuja. Asetukset tallennetaan turvallisesti tilillesi:"; -"cloud_stored_ownerships" = "● Anturien omistajuustiedot"; -"cloud_stored_names" = "● Anturinimet"; -"cloud_stored_alerts" = "● Taustakuvat"; -"cloud_stored_backgrounds" = "● Hälytysasetukset"; -"cloud_stored_calibration" = "● Kalibrointiasetukset"; -"cloud_stored_sharing" = "● Sovellusasetukset"; -"note" = "Huomaa!"; -"claim_warning" = "Turvaa anturiesi omistajuustiedot merkitsemällä niiden omistajuudet sovelluksessa."; -"lets_do_it" = "Siirry kirjautumaan"; -"enter_code" = "Syötä koodi"; -"dashboard_no_sensors_message" = "Sinulla ei ole vielä Ruuvi-antureita sovelluksessa."; -"dashboard_no_sensors_message_signed_out" = "Et ole kirjautunut sisään.\n\nJos sinulla on tili ja olet jo lisännyt tilille Ruuvi-antureita, ne synkronoituvat automaattisesti Ruuvi Station -mobiilisovellukseen kirjautuessasi sisään."; -"add_a_sensor" = "Lisää anturi"; -"changelog" = "(muutosloki)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Keskiarvo"; -"shared_to_x" = "Jaettu %d/%d"; -"settings_alert_notifications" = "Hälytysilmoitukset"; -"settings_alert_sound" = "Hälytysääni"; -"settings_alert_sound_description" = "Valitse push-viestin hälytysääni."; -"settings_alerts_footer_description" = "Voit myös muokata ilmoitusasetuksia kohdassa iOS-asetukset -> Ilmoitukset"; -"settings_alerts_footer_description_link_mask" = "iOS-asetukset -> Ilmoitukset"; -"settings_email_alerts" = "Sähköpostihälytykset"; -"settings_email_alerts_description" = "Jos olet Ruuvi Cloud ja Ruuvi Gateway -käyttäjä, voit vastaanottaa sähköpostihälytyksiä ottamalla tämän käyttöön."; -"settings_push_alerts" = "Push-hälytykset"; -"settings_push_alerts_description" = "Jos olet Ruuvi Cloud ja Ruuvi Gateway -käyttäjä, voit vastaanottaa push-hälytyksiä ottamalla tämän käyttöön."; -"synchronisation" = "Synkronointi"; -"gatt_sync_description" = "Ruuvi Station lataa anturin sisäisen historian viimeiseltä 10 päivältä, jos historia on saatavilla.\n\nMittaushistoria ladataan Bluetooth-yhteydellä. Varmista, että olet anturin läheisyydessä."; -"do_not_show_again" = "Älä näytä tätä uudestaan"; -"sign_in_continue" = "Jatka"; -"signing_in_is_optional" = "(Kirjautuminen ei ole pakollista)"; -"Defaults.UserAuthorized.title" = "Käyttäjä autorisoitu"; -"Defaults.DashboardTapActionChart.title" = "Näytä kuvaaja napauttamalla koontinäytön korttia"; -"Defaults.DevServer.title" = "Käytä dev-palvelinta"; -"Defaults.DevServer.message" = "Ruuvi Cloud -päätepisteen muuttaminen vaatii kirjautumisen ulos nykyisestä istunnosta ja käynnistämään sovelluksen uudelleen. Oletko varma?"; -"Defaults.ShowEmailAlertsSettings.title" = "Näytä sähköpostihälytysasetukset"; -"Defaults.ShowPushAlertsSettings.title" = "Näytä push-hälytysasetukset"; -"use_nfc" = "Käytä NFC:tä"; -"use_bluetooth" = "Käytä BT:tä"; -"sensor_not_found_error" = "Anturia ei löytynyt. Yritä uudelleen."; -"Defaults.HideNFC.title" = "Piilota NFC-vaihtoehto pakotetusta omistajuudenvaihdosta"; -"settings_alert_sound_default" = "Järjestelmän oletus"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi hälytys"; -"add_with_nfc" = "Lisää NFC:llä"; -"sensor_details" = "Anturin tiedot"; -"add_sensor" = "Lisää anturi"; -"copy_mac_address" = "Kopioi MAC-osoite"; -"copy_unique_id" = "Kopioi yksilöivä tunniste"; -"name" = "Nimi:"; -"mac_address" = "MAC-osoite:"; -"go_to_sensor" = "Siirry anturikortille"; -"unique_id" = "Yksilöivä tunniste:"; -"firmware_version" = "Laiteohjelmistoversio:"; -"Close" = "Sulje"; -"add_sensor_nfc_df3_error" = "Vanha laiteohjelmisto ei salli anturin lisäämistä NFC:llä. Lisää anturi Bluetooth-yhteydellä ja päivitä laiteohjelmisto."; -"add_sensor_description" = "Tällä sivulla näet lähelläsi olevat Ruuvi-anturit, joita ei ole vielä lisätty sovellukseen. Lisää listattu anturi napauttamalla."; -"add_sensor_via_nfc" = "Voit vaihtoehtoisesti lisätä anturin sovellukseen NFC:llä napauttamalla Lisää NFC:llä painiketta ja koskettamalla sitä."; -"unclaim_sensor" = "Poista omistajuus"; -"unclaim" = "Poista omistajuus"; -"unclaim_sensor_description" = "Tämän anturin omistajuus on merkitty Ruuvi-tilillesi. Poista anturin asetukset ja anturin tiedot Ruuvi-tililtä valitsemalla Poista omistajuus."; -"claim_sensor_ownership" = "Vaadi anturin omistajuutta"; -"do_you_own_sensor" = "Omistatko tämän anturin?"; -"owners_plan" = "Omistajan Ruuvi-tilaus"; -"alert_cloud_connection_title" = "Yhteys pilveen"; -"alert_cloud_connection_description" = "Hälytä, jos anturitietoja ei ole päivitetty pilveen yli %d minuuttiin."; -"alert_cloud_connection_dialog_description" = "Syötä haluttu viive minuutteina, jonka jälkeen hälytys laukaistaan. Lyhyin valittava arvo on 2 minuuttia."; -"alert_cloud_connection_dialog_title" = "Aseta pilviyhteyden hälytys"; -"rename" = "Nimeä uudelleen"; -"chart_stat_show" = "Näytä min/maks/ka"; -"chart_stat_hide" = "Piilota min/maks/ka"; -"settings_alert_limit_notification" = "Rajoita hälytysilmoituksia"; -"settings_alert_limit_notification_description" = "Näytä Bluetooth-hälytysilmoitus vain kerran tunnissa, vaikka hälytys laukeaisi useammin."; -"share_pending" = "Jakamista odotetaan"; -"share_pending_message" = "Jako onnistui! Tämä sähköpostiosoite ei ole vielä liitetty Ruuvi-tiliin. Kutsu ilmaisen tilin luomiseen on lähetetty. Kun tili on luotu, näet sen jakolistanäkymässä."; -"dialog_are_you_sure" = "Oletko varma?"; -"dialog_operation_undone" = "Tätä toimenpidettä ei voi perua."; -"remove_cloud_history_title" = "Poista pilvihistoria"; -"remove_cloud_history_description" = "Haluan myös poistaa anturihistoriatiedot Ruuvi Cloudista."; -"remove_claimed_sensor_description" = "Poistamalla anturin omistusoikeutesi peruutetaan, ja anturin asetukset, kuten nimi, taustakuva, kalibrointiasetukset ja hälytysasetukset poistetaan. Poiston jälkeen joku toinen voi ottaa anturin omistukseensa. Jokaisella Ruuvi-anturilla voi olla vain yksi omistaja."; -"remove_shared_sensor_description" = "Jos poistat tämän jaetun anturin, anturin omistajalle lähetetään ilmoitus poistosta, etkä voi enää käyttää anturia.\n\nMenetät myös kaikki tähän anturiin liittyvät anturin asetukset, kuten nimen, taustakuvan ja asetetut hälytykset."; -"remove_local_sensor_description" = "Jos poistat tämän anturin, paikallisesti tallennettu mittaushistoria ja kaikki tähän anturiin liittyvät asetukset, kuten nimi, taustakuva, kalibrointiasetukset ja hälytysasetukset poistetaan.\n\nVoit lisätä tämän anturin myöhemmin uudelleen tarvittaessa."; -"activity_saving_to_cloud" = "Tallennetaan pilveen...odota hetki."; -"activity_saving_success" = "Tallennus onnistui."; -"activity_saving_fail" = "Muutoksia ei voitu tallentaa pilveen."; -"activity_ongoing_generic" = "Odota..."; -"activity_success_generic" = "Toiminto onnistui."; -"activity_failed_generic" = "Toiminto epäonnistui."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fr.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fr.lproj/Localizable.strings deleted file mode 100644 index 10f7618e3..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fr.lproj/Localizable.strings +++ /dev/null @@ -1,769 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Prêt"; -"Copy" = "Copier"; -"Confirm" = "Confirmer"; -"Remove" = "Supprimer"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Version"; -"Background.PresentNotifications.title" = "Voir les notifications"; -"Background.KeepConnection.title" = "Maintenir la connexion"; -"Background.Interval.Every.string" = "Chaque"; -"Background.Interval.Min.string" = "min"; -"Background.readRSSITitle.title" = "Lire RSSI"; -"BluetoothError.disconnected" = "Déconnecté"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth désactivé"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station a besoin du Bluetooth pour fonctionner. Activez-le dans les paramètres de votre téléphone."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "Trop de demandes simultanées"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Réessayez dans 5 minutes"; -"Cards.KeepConnectionDialog.message" = "Votre appareil est programmé pour rester connecté. Souhaitez-vous maintenir la connexion en arrière plan? Cela permettra de tracer les histogrammes et de recevoir les alertes même lorsque l'application est fermée."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Supprimer"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Maintenir la connexion"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Il semble que votre capteur utilise une ancienne version du micrologiciel. Une mise à jour est obligatoire pour avoir accès à de nouvelles fonctions telles que les graphiques d'historique, les alertes et les services cloud."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Tu es sûr ? Sans mise à jour, vous ne pouvez pas revendiquer la propriété du capteur, télécharger des graphiques d'historique et définir des alertes. La mise à jour contient également des corrections de bugs. Si vous annulez maintenant, vous pouvez relancer le processus de mise à jour à partir de la page de configuration du capteur."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Vérifie les mises à jour"; -"Cards.Connected.title" = "Connecté"; -"Cards.Error.ReverseGeocodingFailed.message" = "Echec du téléchargement des données de l'appareil."; -"Cards.UpdatedLabel.NoData.message" = "Aucune donnée au cours des 10 derniers jours"; -"CoreError.failedToGetPngRepresentation" = "Echec de la représentation PNG"; -"CoreError.failedToGetDocumentsDirectory" = "Répertoire d'arrière-plan introuvable"; -"CoreError.failedToGetCurrentLocation" = "Position introuvable"; -"CoreError.failedToGetDataFromResponse" = "La réponse ne contient pas de données"; -"CoreError.locationPermissionDenied" = "L'accès aux données de géolocalisation n'est pas accordé"; -"CoreError.locationPermissionNotDetermined" = "L'accès aux données de géolocalisation n'est pas déterminé"; -"CoreError.objectNotFound" = "Objet introuvable"; -"CoreError.objectInvalidated" = "Objet invalide"; -"CoreError.unableToSendEmail" = "Echec de l'envoi du mail"; -"Defaults.navigationItem.title" = "Paramètres d'usine"; -"Defaults.WelcomeShown.title" = "La présentation est affichée"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Détails de l'histogramme en mode paysage"; -"Defaults.Interval.Sec.string" = "sec"; -"Defaults.Interval.Min.string" = "min"; -"Defaults.ConnectionTimeout.title" = "Temporisation de la connexion"; -"Defaults.ServiceTimeout.title" = "Temporisation du service"; -"Defaults.CardsSwipeHint.title" = "Conseil d'essuyage"; -"Defaults.AlertsRepeatInterval.title" = "Intervalle d'alerte"; -"Defaults.WebPullInterval.title" = "Intervalle d'alerte des capteurs virtuels"; -"Defaults.PruningOffsetHours.title" = "Décalage"; -"Defaults.Interval.Hour.string" = "h"; -"Defaults.ChartDurationHours.title" = "Durée de l'historique"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "Nombre de lancements d'applications pour demander un examen pour la première fois"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Demander un avis si le lancement de l'application est divisible par"; -"DiscoverTable.SectionTitle.WebTags" = "Capteurs virtuels"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth désactivé"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Ruuvi Station a besoin du Bluetooth pour fonctionner. Activez-le dans les paramètres de votre appareil."; -"DiscoverTable.NavigationItem.title" = "Ajouter un capteur"; -"DiscoverTable.GetMoreSensors.button.title" = "Acheter des capteurs Ruuvi"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(Pas de capteurs à portée du Bluetooth)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth désactivé)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Les capteurs virtuels permettent d'afficher des données recueillies à partir de stations météorologiques locales."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Erreur"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "Clé API OpenWeatherMap manquante. Obtenez une clé sur openweathermap.org et ajoutez-la dans le fichier station/Classes/Networking/Assembly/Networking.plist"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "L'application a été paramétrée pour être synchronisée avec ce capteur"; -"ExpectedError.failedToDeleteTag" = "Un capteur enregistré ne peut être supprimé sans connexion Bluetooth. Vérifiez la connexion."; -"ExportService.Date" = "Date"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Température (%@)"; -"ExportService.Humidity" = "Humidité (%@)"; -"ExportService.DewPoint" = "Point de rosée (%@)"; -"ExportService.Pressure" = "Pression (%@)"; -"ExportService.Voltage" = "Tension (V)"; -"ExportService.MovementCounter" = "Compteur de mouvements"; -"ExportService.MeasurementSequenceNumber" = "Numéro de séquence"; -"ExportService.TXPower" = "Puissance d'émission"; -"ForegroundRow.advertisement.section" = "MESSAGES DES CAPTEURS"; -"ForegroundRow.advertisement.title" = "Enregistrer les messages des capteurs"; -"ForegroundRow.connection.section" = "HISTORIQUE"; -"ForegroundRow.connection.title" = "Connecter et enregistrer l'historique"; -"Foreground.navigationItem.title" = "Tâches actives en premier plan"; -"Foreground.Interval.Every.string" = "Chaque"; -"Foreground.Interval.Min.string" = "min"; -"ForegroundRow.webTags.title" = "Télécharger et enregistrer depuis internet"; -"ForegroundRow.webTags.section" = "CAPTEURS VIRTUELS"; -"Foreground.Interval.All.string" = "Tous"; -"Heartbeat.Interval.Every.string" = "toutes les"; -"Heartbeat.Interval.Min.string" = "min"; -"Heartbeat.readRSSITitle.title" = "Lire RSSI"; -"Heartbeat.Interval.Sec.string" = "sec"; -"Heartbeat.Interval.All.string" = "Tous"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Êtes-vous sûr ?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "Vous allez réinitialiser le calibrage de l'hygromètre. Cette action est irréversible. Appuyez sur \"confirmer\" pour continuer."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Êtes-vous sûr ?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "Vous allez calibrer l'hygromètre. Appuyez sur \"confirmer\" pour continuer."; -"Language.English" = "English"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Connecté"; -"LocalNotificationsManager.DidDisconnect.title" = "Déconnecté"; -"LocalNotificationsManager.Disable.button" = "Supprimer"; -"LocalNotificationsManager.LowDewPoint.title" = "Point de rosée trop bas !"; -"LocalNotificationsManager.HighDewPoint.title" = "Point de rosée trop haut !"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Veuillez autoriser l'accès aux fichiers multimédias de votre appareil."; -"PermissionPresenter.NoCameraAccess.message" = "Veuillez autoriser l'accès à l'appareil photo."; -"PermissionPresenter.NoLocationAccess.message" = "Veuillez autoriser l'accès aux services de géolocalisation."; -"PermissionPresenter.settings" = "Réglages"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Veuillez autoriser les notifications dans les réglages de l'appareil."; -"PhotoPicker.Sheet.message" = "Choisissez une photo"; -"PhotoPicker.Sheet.library" = "Choisir dans la bibliothèque"; -"PhotoPicker.Sheet.camera" = "Prendre une photo"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Rel"; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Abs"; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "Rosée"; -"Settings.Label.Language.text" = "Langue"; -"Settings.Language.Dialog.title" = "Choisissez une Langue"; -"Settings.Language.Dialog.message" = "Ouvrez les paramètres et appuyez sur Langue pour changer la langue de l'application. Si vous ne voyez pas l'option Langue dans les paramètres, assurez-vous que vous avez ajouté au moins une langue préférée dans les paramètres système : Paramètres -> Général -> Langue et région."; -"Settings.Label.Foreground" = "Premier plan"; -"Settings.Label.Defaults" = "Paramètres d'usine"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Echec lors de l'ajout de la réponse Weather Map"; -"OWMError.apiLimitExceeded" = "Limite API dépassée"; -"OWMError.notAHttpResponse" = "La réponse n'est pas au format HTTP"; -"OWMError.invalidApiKey" = "Clé API invalide"; -"TagCharts.NoChartData.text" = "Informations indisponibles"; -"TagCharts.BluetoothDisabledAlert.title" = "Le Bluetooth n'est pas activé"; -"TagCharts.BluetoothDisabledAlert.message" = "Ruuvi Station a besoin du Bluetooth pour fonctionner. Veuillez l'activer dans les paramètres de votre appareil."; -"TagCharts.Clear.title" = "Effacer"; -"TagCharts.SyncConfirmationDialog.title" = "Êtes-vous sûr ?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Supprimer"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Êtes-vous sûr ?"; -"TagCharts.Status.Disconnecting" = "Déconnexion..."; -"TagCharts.Status.Success" = "Succès"; -"TagCharts.Status.Error" = "Erreur"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "Format RAWv2 nécessaire"; -"TagSettings.UpdateFirmware.Alert.message" = "L'affichage des informations manquantes n'est possible qu'avec la nouvelle version système."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Plus d'infos"; -"TagCharts.Dismiss.Alert.message" = "Le téléchargement de l'historique via la connexion Bluetooth est en cours. Veuillez patienter."; -"TagCharts.AbortSync.Alert.message" = "Parfois, le téléchargement de l'historique est lent en raison de la connectivité Bluetooth. Veuillez patienter un moment."; -"TagCharts.AbortSync.Button.title" = "Abandonner le téléchargement"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "L'hygromètre est calibré"; -"TagSettings.HumidityIsClipped.Alert.message" = "L'humidité est supérieure à 100 % après calibrage. Cela n'a pas de sens, donc la valeur max affichée est 100 %."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Réparer"; -"TagSettings.navigationItem.title" = "Réglages"; -"TagSettings.tagNameTitleLabel.text" = "Nom du capteur"; -"TagSettings.humidityTitleLabel.text" = "Humidité"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "Adresse MAC"; -"TagSettings.dataFormatTitleLabel.text" = "Format des données"; -"TagSettings.accelerationXTitleLabel.text" = "Accélération en X"; -"TagSettings.accelerationYTitleLabel.text" = "Accélération en Y"; -"TagSettings.accelerationZTitleLabel.text" = "Accélération en Z"; -"TagSettings.txPowerTitleLabel.text" = "Puissance d'émission"; -"TagSettings.mcTitleLabel.text" = "Compteur de mouvements"; -"TagSettings.msnTitleLabel.text" = "Numéro de séquence"; -"TagSettings.SectionHeader.Remove.title" = "SUPPRIMER"; -"TagSettings.Label.noValues.text" = "PAS DE VALEURS ?"; -"TagSettings.SectionHeader.Calibration.title" = "CALIBRAGE"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH CONNEXION"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Jumelage et utilisation de l'analyse d'arrière-plan"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Connexion au capteur"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Pairé et le scan de fond est activé"; -"TagSettings.PairAndBackgroundScan.description" = "Les alertes ne sont pas disponibles via la connexion Bluetooth si le balayage en arrière-plan n'est pas activé. Un seul appareil iOS peut être apparié à un capteur Ruuvi à la fois."; -"TagSettings.PairError.CloudMode.description" = "Impossible de se connecter au capteur tant que le statut du cloud est actif. Vous pouvez modifier le statut dans les paramètres de l'application."; -"TagSettings.PairError.Timeout.description" = "La connexion a expiré. Le jumelage n'a pas réussi. Veuillez réessayer."; -"TagSettings.dataSourceTitleLabel.text" = "Données reçues via"; -"TagSettings.DataSource.Heartbeat.title" = "Cadence"; -"TagSettings.DataSource.Advertisement.title" = "Messages des capteurs"; -"TagSettings.DataSource.Network.title" = "Cloud"; -"TagSettings.Label.disabled.text" = "HORS SERVICE ?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Les notifications sont désactivées car l'appareil n'est pas connecté et les notifications ne sont autorisées. Veuillez d'abord vous connecter à l'appareil."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Se connecter"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Les notifications sont désactivées car l'appreil n'est pas connecté."; -"TagSettings.Alert.CustomDescription.placeholder" = "Modifier la description..."; -"TagSettings.Alert.CustomDescription.title" = "Description personnalisée de l'alerte"; -"TagSettings.Alerts.Humidity.description" = "Notifier si la valeur est inférieure à %.0f ou supérieure à %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Notifier si le point de rosée est inférieur à %.0f ou supérieur à %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Point de rosée"; -"TagSettings.Alerts.Pressure.description" = "Notifier si la pression de l'air est inférieure à %.0f ou supérieure à %.0f"; -"TagSettings.Alerts.Connection.description" = "Notifier lorsque l'appareil est connecté/déconnecté"; -"TagSettings.ConnectionAlert.title" = "Connexion"; -"TagSettings.SectionHeader.Firmware.title" = "Firmware"; -"TagSettings.Firmware.CurrentVersion" = "Version actuelle"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Très vieux"; -"TagSettings.Firmware.UpdateFirmware" = "Mettre à jour"; -"UnexpectedError.callbackErrorAndResultAreNil" = "Le résultat est nul"; -"UnexpectedError.callerDeinitedDuringOperation" = "Les invitations ont été délocalisées"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Echec de l'annulation de la géolocalisation"; -"UnexpectedError.failedToFindRuuviTag" = "Echec de jumelage"; -"UnexpectedError.failedToFindLogsForTheTag" = "Historique du capteur introuvable"; -"UnexpectedError.viewModelUUIDIsNil" = "Le modèle d'affichage UUID est nul"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Tentative de lecture des données de Realm sans LUID"; -"UnexpectedError.failedToFindVirtualTag" = "Echec de jumelage du capteur virtuel"; -"HumidityUnit.Dew.title" = "Point de rosée (%@)"; -"WebTagLocationSource.current" = "Localisation actuelle"; -"WebTagLocationSource.manual" = "Choisir sur la carte"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Supprimer"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Êtes-vous certain de vouloir supprimer ?"; -"WebTagSettings.Location.Current" = "Localisation actuelle"; -"WebTagSettings.confirmClearLocationDialog.title" = "Supprimer la localisation"; -"WebTagSettings.confirmClearLocationDialog.message" = "Êtes-vous certain de vouloir supprimer cette position et d'utiliser votre position actuelle ?"; -"WebTagSettings.navigationItem.title" = "Réglages"; -"WebTagSettings.Label.BackgroundImage.text" = "FOND D'ÉCRAN"; -"WebTagSettings.Label.Location.text" = "Position"; -"WebTagSettings.Button.Remove.title" = "SUPPRIMER CE CAPTEUR VIRTUEL"; -"WebTagSettings.SectionHeader.Name.title" = "NOM"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "PLUS D'INFOS"; -"WebTagSettings.Alerts.Temperature.description" = "Notifier si la température est inférieure à %.0f ou supérieure à %.0f"; -"WebTagSettings.Alerts.Off" = "Désactivé"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Température"; -"WebTagSettings.Label.disabled.text" = "DÉSACTIVÉ ?"; -"WebTagSettings.Label.alerts.text" = "NOTIFICATIONS"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "Pour activer les notifications, veuillez autoriser la géolocalisation ainsi que l'affichage des notifications dans les réglages de votre appareil."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Réglages"; -"WebTagSettings.AirHumidityAlert.title" = "Humidité de l'air"; -"WebTagSettings.Alerts.Humidity.description" = "Notifier si la valeur est inférieure à %.0f ou supérieure à %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Notifier si le point de rosée est inférieur à %.0f ou supérieur à %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Point de rosée"; -"WebTagSettings.PressureAlert.title" = "Pression de l'air"; -"WebTagSettings.Alerts.Pressure.description" = "Notifier si la pression de l'air est inférieure à %.0f ou supérieure à %.0f"; -"Welcome.description.text" = "Appuyer sur scanner pour trouver des capteurs."; -"ExportService.AccelerationX" = "Accélération en X"; -"ExportService.AccelerationY" = "Accélération en Y"; -"ExportService.AccelerationZ" = "Accélération en Z"; -"DiscoverTable.SectionTitle.Devices" = "Capteurs Ruuvi à proximité"; -"ago" = "avant"; -"TagSettings.MovementAlert.title" = "Mouvement"; -"TagSettings.Alerts.Movement.description" = "Notifier quand le capteur est déplacé"; -"LocalNotificationsManager.HighHumidity.title" = "L'humidité de l'air est trop haute !"; -"LocalNotificationsManager.LowHumidity.title" = "L'humidité de l'air est trop basse !"; -"LocalNotificationsManager.DidMove.title" = "Mouvement détecté !"; -"LocalNotificationsManager.HighPressure.title" = "La pression de l'air est trop haute !"; -"LocalNotificationsManager.LowPressure.title" = "La pression de l'air est trop basse !"; -"LocalNotificationsManager.HighSignal.title" = "Puissance du signal trop importante !"; -"LocalNotificationsManager.LowSignal.title" = "Puissance du signal trop faible !"; -"LocalNotificationsManager.HighTemperature.title" = "Température trop haute !"; -"LocalNotificationsManager.LowTemperature.title" = "Température trop basse !"; -"TagSettings.Alerts.Off" = "Désactivé"; -"TagSettings.Alerts.Temperature.description" = "Notifier si la valeur est inférieure à %.0f ou supérieure à %.0f"; -"TagSettings.Label.alerts.text" = "Notifications"; -"TagSettings.backgroundImageLabel.text" = "Fond d'écran"; -"TagSettings.batteryVoltageTitleLabel.text" = "Tension de la pile"; -"HumidityCalibration.Button.Calibrate.title" = "Calibrer"; -"HumidityCalibration.lastCalibrationDate.format" = "Calibré : %@"; -"HumidityCalibration.Description.text" = "Nous recommandons le calibrage avec une solution saline pour de meilleurs résultats. Tutoriel vidéo."; -"HumidityCalibration.Label.note.text" = "Le calibrage s'effectue sur la mémoire de votre appareil. Vous devrez répeter l'opération si vous supprimez/installez à nouveau l'application."; -"HumidityCalibration.VideoTutorials.link" = "Tutoriel vidéo."; -"Cancel" = "Annuler"; -"HumidityCalibration.Button.Clear.title" = "Effacer"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Supprimer l'historique de l'application ?"; -"HumidityCalibration.Button.Close.title" = "Fermer"; -"TagCharts.Status.Serving" = "Synchronisation..."; -"TagCharts.Status.Connecting" = "Connexion..."; -"TagSettings.ConnectStatus.Disconnected" = "Déconnecté"; -"TagCharts.Export.title" = "EXPORTER"; -"h" = "h"; -"About.AboutHelp.contents" = "Ruuvi Station est une application facile à utiliser qui vous permet de surveiller les données de mesure des capteurs Ruuvi."; -"About.AboutHelp.header" = "Infos / Aide"; -"About.TagsCount.text" = "Capteurs jumelés : %d"; -"About.MeasurementsCount.text" = "Données enregistrées : %d"; -"About.DatabaseSize.text" = "Taille de la base de données : %@"; -"About.More.contents" = "Site officiel de Ruuvi : ruuvi.com\nRuuvi Forum : f.ruuvi.com\nRuuvi Blog : ruuvi.com/blog\nRuuvi Twitter : twitter.com/ruuvicom"; -"About.More.header" = "Plus d'infos"; -"About.OpenSource.contents" = "Tout comme les capteurs Ruuvi, les applications Ruuvi Station sont open source. Suivez le développement et contribuez sur : github.com/ruuvi"; -"About.OpenSource.header" = "Open-source"; -"About.OperationsManual.contents" = "Commencez à utiliser l'application mobile Ruuvi Station avec nos guides en ligne : ruuvi.com/support/station-mobile"; -"About.OperationsManual.header" = "Notice d'utilisation"; -"About.Privacy.contents" = "L'utilisation de l'application nécessite l'approbation des conditions générales de Ruuvi : ruuvi.com/terms"; -"About.Privacy.header" = "Protection des données personnelles"; -"About.Troubleshooting.contents" = "Trouvez de l'aide en utilisant les applications Ruuvi Station, les produits Ruuvi et le service Ruuvi Cloud depuis notre centre d'assistance : ruuvi.com/support"; -"About.Troubleshooting.header" = "Dépannage technique"; -"hours" = "Heures"; -"Interval.Days.string" = "Jours"; -"TagSettings.AirHumidityAlert.title" = "Humidité de l'air (%@)"; -"HumidityUnit.gm3.title" = "Absolue (g/m³)"; -"g/m³" = "g/m³"; -"HumidityUnit.Percent.title" = "Relative (%)"; -"TagSettings.Mac.Alert.title" = "Adresse MAC"; -"Menu.Label.AboutHelp.text" = "Infos/Aide"; -"Menu.Label.AddAnNewSensor.text" = "Ajouter un capteur"; -"Menu.Label.AppSettings.text" = "Réglages"; -"Menu.Label.GetMoreSensors.text" = "Acheter des capteurs"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Acheter le routeur Ruuvi Gateway"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "Que mesurer avec Ruuvi?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Donnez-nous votre avis!"; -"Menu.Label.MyRuuviAccount.text" = "Mon compte Ruuvi"; -"min" = "min"; -"minutes" = "Minutes"; -"TagSettings.Label.moreInfo.text" = "Plus d'infos"; -"TagSettings.SectionHeader.Name.title" = "NOM"; -"No" = "Non"; -"OK" = "OK"; -"Cards.NoSensors.title" = "Pas de capteurs\nAjoutez-en en cliquant ici"; -"TagSettings.PressureAlert.title" = "Pression de l'air (%@)"; -"UnitPressure.hectopascal.title" = "Hectopascal (hPa)"; -"hPa" = "hPa"; -"UnitPressure.inchOfMercury.title" = "Pouce de mercure (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Millimètre de mercure (mmHg)"; -"TagCharts.Status.ReadingHistory" = "Analyse de l'historique"; -"TagSettings.rssiTitleLabel.text" = "Puissance du signal (RSSI)"; -"signal_strength_dbm" = "Puissance du signal (dBm)"; -"s" = "s"; -"Welcome.scan.title" = "BALAYAGE EN COURS"; -"Background.Interval.Sec.string" = "sec"; -"Settings.navigationItem.title" = "Réglages"; -"Settings.BackgroundScanning.title" = "Réglages du balayage en arrière-plan"; -"Settings.BackgroundScanning.Footer.message" = "Remarque importante : L'enregistrement de l'historique et les alertes Bluetooth ne fonctionnent que lorsque le balayage en arrière-plan est activé. Si vous désactivez l'analyse en arrière-plan, tous les capteurs Ruuvi appariés seront automatiquement désappariés et vous devrez les appairer à nouveau à partir de leurs pages de paramètres."; -"Settings.BackgroundScanning.interval" = "Intervalle d'acquisition des données"; -"Settings.Label.Chart" = "Paramètres de l'histogramme"; -"ChartSettings.AllPoints.title" = "Afficher toutes les mesures"; -"ChartSettings.AllPoints.description" = "L'utilisation de cette fonction peut ralentir la mise à jour de l'histogramme."; -"ChartSettings.DrawDots.title" = "Afficher les points de données"; -"ChartSettings.DrawDots.description" = "L'affichage des points facilite l'analyse de l'histogramme."; -"Defaults.ChartIntervalSeconds.title" = "Précision de l'histogramme"; -"ChartSettings.Duration.title" = "Période de l'histogramme"; -"ChartSettings.Duration.description" = "Définir la période de l'histogramme 1 - 10 jours"; -"Settings.Label.HumidityUnit.text" = "Unité d'humidité"; -"Settings.Label.Temperature" = "Température"; -"Settings.Label.Humidity" = "Humidité"; -"Settings.Label.Pressure" = "Pression"; -"Settings.ChooseHumidityUnit.text" = "Choisissez l'unité souhaitée pour l'humidité."; -"Settings.Label.PressureUnit.text" = "Unité de pression"; -"Settings.ChoosePressureUnit.text" = "Choisissez l'unité souhaitée pour la pression."; -"Settings.Label.TemperatureUnit.text" = "Unité de température"; -"Settings.ChooseTemperatureUnit.text" = "Choisissez l'unité souhaitée pour la température."; -"dBm" = "dBm"; -"TagCharts.Sync.title" = "Synchroniser"; -"TagCharts.SyncConfirmationDialog.message" = "Souhaitez vous importer les données du capteur ?"; -"WebTagSettings.Label.TagName.text" = "Nom du capteur"; -"TagSettings.confirmTagRemovalDialog.title" = "Supprimer le capteur"; -"TagSettings.confirmTagRemovalDialog.message" = "Êtes-vous certain de vouloir supprimer ce capteur ?"; -"TagSettings.temperatureAlertTitleLabel.text" = "Température (%@)"; -"TemperatureUnit.Celsius.title" = "Celsius (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Fahrenheit (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Kelvin (K)"; -"Updated" = "Mis à jour il y'a"; -"V" = "V"; -"RuuviOnboard.Welcome.title" = "Découvrez l'application Ruuvi Station."; -"RuuviOnboard.Measure.title" = "Mesurer votre environnement : température, humidité, et pression de l'air."; -"RuuviOnboard.Access.title" = "Vérifier les données en temps réels ou consultez les histogrammes."; -"RuuviOnboard.Alerts.title" = "Définir des alarmes et des notifications comme vous le souhaitez."; -"RuuviOnboard.Cloud.title" = "Connectez-vous pour utiliser tout le potentiel de l'application."; -"RuuviOnboard.Cloud.subtitle" = "Réclamez la propriété de vos capteurs avec un compte Ruuvi Cloud gratuit."; -"RuuviOnboard.Cloud.subtitle.signed" = "Super ! Vous vous êtes déjà connecté !"; -"RuuviOnboard.Start.title" = "Afficher les capteurs à proximité en appuyant sur BALAYAGE."; -"Yes" = "Oui"; -"LocalNotificationsManager.Mute.button" = "Désactiver les notifications pendant une heure"; -"Defaults.AlertsMuteInterval.title" = "Espacement entre deux alarmes"; -"SignIn.Title.text" = "Connexion"; -"Menu.SignOut.text" = "Déconnexion"; -"RuuviOnboard.Cloud.Benefits.message" = "Avantages :\n\n ● Les noms, fonds d'écrans, les réglages de calibration, ainsi que les alertes sont enregistrés de façon sécurisée dans notre cloud\n\n ● Consultez les données à distance depuis n'importe quel navigateur (routeur Ruuvi Gateway requis)\n\n ● Partager les capteurs avec votre famille ou des amis (routeur Ruuvi Gateway requis)\n\n ● consultez jusqu'à deux ans d'historique de vos données sur le site station.ruuvi.com (routeur Ruuvi Gateway requis)"; -"RuuviOnboard.Cloud.Details.title" = "Détails"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Êtes-vous sûr de vouloir ignorer l'ouverture de session ?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Oui, passez."; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Retourner"; -"SignIn.EmailPlaceholder" = "Email"; -"SignIn.RequestCode" = "Obtenir un code"; -"SignIn.SubmitCode" = "Envoyer"; -"SignIn.EmailSent" = "Email envoyé"; -"SignIn.CheckMailbox" = "Nous avons envoyé un mot de passe à usage unique à votre adresse e-mail %@. Connectez-vous en le saisissant ici:"; -"SignIn.CodeHint" = "Code"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "Les capteurs dont vous êtes propriétaire seront suspprimés de l'application lorsque vous vous déconnectez de votre compte Ruuvi. Les données seront importées du cloud lorsque vous vous connectez à nouveau.\n\nSouhaitez vous vous déconnecter ?"; -"TagSettings.ClaimTagButton.Claim" = "Confirmer l'appropriation"; -"TagSettings.ShareButton" = "Partager"; -"Syncing..." = "Synchronisation..."; -"Synchronized" = "Synchronisé"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Synchronisé : %@"; -"MenuTableViewController.None" = "non connecté"; -"MenuTableViewController.User" = "Utilisateur : %@"; -"ShareViewController.Title" = "Partager le capteur"; -"ShareViewController.Description" = "Vous pouvez partager ce capteur à des amis ou à des membres de votre famille si le capteur est à portée du routeur Ruuvi Gateway.\n\nL'utilisateur recevra une notification par mail. Le compte Ruuvi est créé en utilisant une adresse mailf si l'utilisateur n'en possède pas encore.\n\Le nom du capteur ainsi que le fond d'écran sont partgés seulement une fois. Si la fonction calibrage est utilisée, les utilisateurs verront seulement la valeur finale une fois ajustée."; -"ShareViewController.addFriend.Title" = "Ajouter un ami"; -"ShareViewController.emailTextField.placeholder" = "Adresse mail"; -"ShareViewController.sharedEmails.Title" = "Vous avez utilisé %d/%d du nombre maximum de divisions pour ce capteur. Le capteur est partagé avec les utilisateurs suivants :"; -"Share.Send.button" = "Envoyer"; -"SharePresenter.UnshareSensor.Message" = "Voulez-vous arrêter le partage du capteur avec %@ ?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "RÉSEAU"; -"TagSettings.NetworkInfo.Owner" = "Propriétaire"; -"Menu.RuuviNetworkStatus.text" = "Statut du Ruuvi cloud"; -"SignIn.TitleLabel.text" = "Connexion \nRuuvi\nStation"; -"SignIn.SubtitleLabel.text" = "Profitez de tous les avantages de Ruuvi Station! Connectez-vous ou créez votre compte en entrant votre adresse mail."; -"SignIn.VerificationCodePlaceholder" = "verification du code au format CJSM"; -"UserApiError.ER_FORBIDDEN" = "Interdit"; -"UserApiError.ER_UNAUTHORIZED" = "Non permis"; -"UserApiError.ER_INTERNAL" = "Erreur interne"; -"UserApiError.ER_INVALID_FORMAT" = "Format incorrect"; -"UserApiError.ER_USER_NOT_FOUND" = "Utilisateur introuvable"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Capteur introuvable"; -"UserApiError.ER_TOKEN_EXPIRED" = "Le code est perimé"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "L'abonnement est introuvable"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "Le nombre de partages maximum est atteint"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Vous ne pouvez pas partager le capteur à d'avantage d'utilisateurs"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "Pour partager le capteur, ce dernier doit être à portée du routeur Ruuvi Gateway"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "Ce capteur est déjà partagé"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Capteur déjà revendiqué par %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Capteur déjà revendiqué"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Impossible d'envoyer l'email"; -"UserApiError.ER_MISSING_ARGUMENT" = "Argument manquant"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Mode de densité invalide"; -"UserApiError.ER_INVALID_SORT_MODE" = "Mode de tri invalide"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Intervalle invalide"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Adresse email invalide"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Adresse MAC invalide"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Erreur d'enregistrement"; -"UserApiError.ER_SUB_NO_USER" = "Pas d'utilisateur"; -"UserApiError.ER_THROTTLED" = "Trop de demandes simultanées"; -"OffsetCorrection.CalibrationDescription.text" = "En utilisation normale, il n'est pas nécessaire de calibrer le capteur.\n\nSi vous souhaitez tout de même calibrer calibrer le capteur \n\n les instructions sont trouvables ici ruuvi.com/support"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Supprimer la calibration ?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Calibration"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Entrez la température attendue dans ces conditions (%@):"; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Entrez la pression attendue dans ces conditions (%@):"; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Entrez l'humidité attendue dans ces conditions (%@):"; -"OffsetCorrection.OriginalValue.title" = "Valeur originale"; -"OffsetCorrection.CorrectedValue.title" = "Valeur corrigée"; -"OffsetCorrection.Temperature.Title" = "Correction de température"; -"OffsetCorrection.Humidity.Title" = "Correction d'humidité"; -"OffsetCorrection.Pressure.Title" = "Correction de pression"; -"OffsetCorrection.Calibrate.button" = "Correction"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "CORRECTION"; -"TagSettings.OffsetCorrection.Temperature" = "Température"; -"TagSettings.OffsetCorrection.Humidity" = "Humidité"; -"TagSettings.OffsetCorrection.Pressure" = "Pression"; -"PhotoPicker.Sheet.files" = "Choisir parmis les fichiers"; -"SignIn.EnterVerificationCode" = "Entrez le code de vérification"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Echec de la mise à jour du fond d'écran"; -"UnexpectedError.bothLuidAndMacAreNil" = "Les identifiants MAC et local sont introuvables"; -"RuuviCloudApiError.emptyResponse" = "Réponse nulle"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "La réponse ne contient pas de données"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Code HTTP innatendu"; -"RuuviCloudError.NotAuthorized" = "Non authorisé"; -"RuuviLocalError.failedToGetJpegRepresentation" = "Echec de la représentation JPG"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Répertoire d'arrière-plan introuvable"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Echec de jumelage"; -"RuuviServiceError.pictureUrlIsNil" = "URL de la photo manquant"; -"RuuviServiceError.macIdIsNil" = "adresse MAC manquante"; -"network_sharing_disabled" = "Vous pouvez partager seulement des capteurs à proximité du Ruuvi Gateway."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Identifiants MAC et local manquant"; -"RuuviServiceError.failedToParseNetworkResponse" = "Echec de l'enregistrement de la réponse"; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Fond d'écran introuvable"; -"RuuviServiceError.failedToGetJpegRepresentation" = "Echec de la représentation JPG"; -"UpdateFirmware.Title.text" = "Mettre à jour le programme"; -"UpdateFirmware.Download.header" = "TÉLÉCHARGER LA DÉRNIÈRE VERSION"; -"UpdateFirmware.Download.content" = "Pour commencer la mise à jour, télécharger la dérnière version sur l'appareil que vous utiliserez pour mettre à jour le capteur. Fichier disponible sur ruuvi.com/software-update"; -"UpdateFirmware.SetDfu.header" = "METTRE LE CAPTEUR EN MODE DFU"; -"UpdateFirmware.SetDfu.content" = "Ouvrez le boitier du capteur, aidez-vous d'un tournevis plat si besoin.\n\nAppuyez sur le bouton B pendant quelques secondespuis sur le bouton R en gradant le bouton B enfoncé. La LED rouge doit s'allumer lorsqu'il est en mode bootloader. S'il n'y a qu'un bouton appuyez dessus pendant 10 secondes."; -"UpdateFirmware.NextButton.title" = "SUIVANT"; -"DfuDevicesScanner.Title.text" = "Appareils"; -"DfuDevicesScanner.Description.text" = "Chercher et choisir un capteur \"RuuviBoot\"."; -"DfuDevicesScanner.NoDevice.text" = "(Pas de capteurs à portée du Bluetooth)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth désactivé)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth désactivé"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Ruuvi Station a besoin du Bluetooth pour fonctionner. Activez-le dans les paramètres de votre appareil."; -"DfuFlash.Title.text" = "Mise à jour DFU"; -"DfuFlash.Progress.text" = "Avancement"; -"DfuFlash.Step.text" = "Étape"; -"DfuFlash.Steps.PackageSelection.text" = "Choisir le fichier de mise à jour"; -"DfuFlash.Steps.ReadyForUpload.text" = "Prêt pour la mise à jour"; -"DfuFlash.Steps.Uploading.text" = "Chargement"; -"DfuFlash.Steps.Completed.text" = "Prêt"; -"DfuFlash.OpenDocumentPicker.title" = "OUVRIR LE GESTIONNAIRE DE FICHIERS"; -"DfuFlash.FirmwareSelectionGuide.text" = "Chercher le fichier ZIP."; -"DfuFlash.Firmware.FileName.text" = "Nom du fichier"; -"DfuFlash.Firmware.Parts.text" = "Parties"; -"DfuFlash.Firmware.Size.text" = "Taille"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Soft Device taille"; -"DfuFlash.Firmware.BootloaderSize.text" = "Taille du bootloader"; -"DfuFlash.Cancel.text" = "ANNULER"; -"DfuFlash.Start.text" = "Commencer"; -"DfuFlash.Finish.text" = "PRÊT"; -"DfuFlash.FinishGuide.text" = "Mise à jour réussie. -RuuviTag est prêt à être utilisé !"; -"DfuFlash.CancelAlert.text" = "Voulez-vous annuler la mise à jour ?"; -"RuuviDfuError.invalidFirmwareFile" = "Fichier de mise à jour invalide"; -"DFUUIView.navigationTitle" = "Mise à jour du firmware"; -"DFUUIView.latestTitle" = "Dernière version du Ruuvi Firmware :"; -"DFUUIView.currentTitle" = "Version actuelle :"; -"DFUUIView.notReportingDescription" = "Impossible d'obtenir la version actuelle de l'appareil. La version est probablement trop ancienne et il est recommandé d'effectuer une mise à jour."; -"DFUUIView.alreadyOnLatest" = "L'appareil est à déjà à jour"; -"DFUUIView.startUpdateProcess" = "Début de la mise à jour"; -"DFUUIView.downloadingTitle" = "Téléchargement de la dernière version pour la mise à jour..."; -"DFUUIView.prepareTitle" = "Préparez votre capteur"; -"DFUUIView.openCoverTitle" = "1. Ouvrez le couvercle de votre capteur Ruuvi"; -"DFUUIView.locateBootButtonTitle" = "2. Localisez les petits boutons ronds noirs sur la carte de circuit imprimé blanche ; les anciens capteurs Ruuvi ont 2 boutons étiquetés \"R\" et \"B\" tandis que les plus récents n'ont qu'un seul bouton sans étiquette."; -"DFUUIView.setUpdatingModeTitle" = "3. Mettez le capteur en mode de mise à jour :"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. Si votre capteur est équipé de 2 boutons : maintenez le bouton \"B\" enfoncé tout en appuyant momentanément sur le bouton \"R\". Relâchez le bouton \"B\"."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. Si votre capteur possède un seul bouton : maintenez le bouton enfoncé pendant 10 secondes."; -"DFUUIView.toBootModeSuccessTitle" = "4. Si le réglage est réussi, vous verrez une lumière rouge fixe s'allumer sur la carte de circuit imprimé et le bouton de l'application passera à \"Démarrer la mise à jour\"."; -"DFUUIView.updatingTitle" = "Mise à jour..."; -"DFUUIView.searchingTitle" = "Recherche d'un capteur"; -"DFUUIView.startTitle" = "Lancer la mise à jour"; -"DFUUIView.doNotCloseTitle" = "Ne pas fermer l'application ou enlever la pile du capteur pendant la mise à jour."; -"DFUUIView.successfulTitle" = "Mise à jour réussie"; -"DFUUIView.DBMigration.Error.message" = "La mise à jour a réussi, mais une erreur inattendue de migration de la base de données s'est produite. Pour continuer à utiliser ce capteur, veuillez le supprimer de l'application, puis le rajouter à nouveau."; -"RuuviDfuError.failedToConstructUUID" = "Echec de la création de l'UUID"; -"SignIn.EmailMismatch.Alert.message" = "Oups, vous avez demandé le code de connexion pour l'utilisateur %@ alors qu'il est destiné à l'utilisateur %@. Veuillez vérifier que vous utilisez bien le code pour %@"; -"SignIn.EmailMissing.Alert.message" = "Oups, l'adresse mail utilisée n'a pu être enregistrée. Veuillez réessayer."; -"TagSettings.RemoveThisSensor.title" = "Retirer le capteur"; -"Share.Success.message" = "Capteur partagé avec succès"; -"TagSettings.SectionHeader.General.title" = "Général"; -"TagSettings.Shared.title" = "Partagé"; -"TagSettings.NotShared.title" = "Non partagé"; -"Owner.title" = "Confirmer l'appropriation"; -"Owner.ClaimOwnership.button" = "Confirmer l'appropriation"; -"Owner.Claim.description" = "Êtes-vous propriétaire de ce capteur ? En devenant propriétaire, le capteur sera associé à votre compte Ruuvi. Chaque capteur ne peut avoir qu'un seul propriétaire. Pour revendiquer la propriété, vous devez être connecté.\n\nAvantages:\n\n ● Les noms, fonds d'écrans, les réglages de calibration, ainsi que les alertes sont enregistrés de façon sécurisée dans notre cloud\n\n ● Consultez les données à distance depuis n'importe quel navigateur (routeur Ruuvi Gateway requis)\n\n ● Partager les capteurs avec votre famille ou des amis (routeur Ruuvi Gateway requis)\n\n ● consultez jusqu'à deux ans d'historique de vos données sur le site station.ruuvi.com (routeur Ruuvi Gateway requis)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "Le propriétaire sera réinitialisé en supprimant le capteur. N'importe qui pourra alors s'approprier le capteur. Chaque capteur Ruuvi ne pouvant avoir qu'un propriétaire."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "En supprimant le capteur vous n'aurez plus accès aux données du capteur et une notification sera envoyée au propriétaire."; -"TagSettings.General.Owner.none" = "Pas de propriétaire"; -"TagSettings.Share.title" = "Partager"; -"Menu.LoggedIn.title" = "Connecté :"; -"Interval.Day.string" = "Jour"; -"hour" = "Heure"; -"TagSettings.tagNameTitleLabel.rename.text" = "Les capteurs sont dans l'ordre alphabétique."; -"On" = "Activé"; -"Off" = "Désactivé"; -"DFUUIView.lowBattery.warning.message" = "La tension de la pile du capteur est faible et risque de faire echouer la mise à jour. Nous vous conseillons de remplacer la batterie avant la mise à jour."; -"alert_notification_humidity_high_threshold" = "L'humidité de l'air est supérieure à %@"; -"alert_notification_humidity_low_threshold" = "L'humidité de l'air est inférieure à %@"; -"alert_notification_pressure_high_threshold" = "La pression de l'air est supérieure à %@"; -"alert_notification_pressure_low_threshold" = "La pression de l'air est inférieure à %@"; -"alert_notification_rssi_high_threshold" = "La puissance du signal est supérieure à %@"; -"alert_notification_rssi_low_threshold" = "La puissance du signal est inférieure à %@"; -"alert_notification_temperature_high_threshold" = "La température est supérieure à %@"; -"alert_notification_temperature_low_threshold" = "La température est inférieure à %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "L'utilisateur %@ est déjà connecté. Si vous souhaitez utiliser un autre compte veuillez vous déconnecter d'abord."; -"Settings.Label.CloudMode" = "Statut du cloud"; -"Settings.Label.CloudMode.description" = "Mettre à jour les capteurs à proximité associés au cloud seulement pour recevoir seulement des alertes par mail en rejetant les messages Bluetooth. Nécessite le routeur Ruuvi Gateway."; -"internet_connection_problem" = "Problème de connexion Internet"; -"Widgets.Loading.message" = "Chargement..."; -"Cards.Movements.title" = "mouvements"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Batterie faible"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Batterie OK"; -"Widgets.Description.message" = "Créez des widgets de vos capteurs Ruuvi préférés. Les widgets sont mis à jour depuis le Ruuvi Cloud. Un routeur Ruuvi Gateway est nécessaire."; -"settings_appearance" = "Apparition"; -"app_theme" = "App Theme"; -"follow_system_theme" = "Thème système"; -"dark_theme" = "Thème sombre"; -"light_theme" = "Thème de la lumière"; -"Settings.Temperature.Resolution.title" = "Résolution de la température"; -"Settings.Humidity.Resolution.title" = "Résolution de l'humidité"; -"Settings.Pressure.Resolution.title" = "Résolution de la pression"; -"Settings.Measurement.Resolution.description" = "Sélectionnez la précision avec laquelle vous souhaitez voir les valeurs de mesure en direct des capteurs dans l'application. Ce paramètre n'affecte pas les graphiques d'historique ni les alertes."; -"Settings.Measurement.Unit.title" = "Unité"; -"Settings.Measurement.Resolution.title" = "Résolution"; -"MyRuuvi.Settings.DeleteAccount.title" = "Supprimer le compte"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "Une confirmation a été envoyée à votre adresse électronique. Pour procéder à la suppression, veuillez vérifier votre boîte de réception et suivre les instructions."; -"TagSettings.Alert.SetTemperature.title" = "Réglage de l'alerte de température"; -"TagSettings.Alert.SetHumidity.title" = "Réglage de l'alerte d'humidité"; -"TagSettings.Alert.SetPressure.title" = "Régler l'alerte de pression"; -"TagSettings.Alert.SetRSSI.title" = "Définir une alerte sur la puissance du signal"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Exportation de l'historique (csv)"; -"clear_view" = "Vue historique vide"; -"day_1" = "1 jour"; -"day_2" = "2 jours"; -"day_3" = "3 jours"; -"day_4" = "4 jours"; -"day_5" = "5 jours"; -"day_6" = "6 jours"; -"day_7" = "7 jours"; -"day_8" = "8 jours"; -"day_9" = "9 jours"; -"day_10" = "10 jours"; -"day_x" = "%.0f jours"; -"more" = "Plus..."; -"all" = "Tout"; -"longer_history_title" = "Une histoire plus longue"; -"longer_history_message" = "L'application mobile Ruuvi Station prend en charge un maximum de 10 jours d'historique. Les abonnés à Ruuvi Cloud peuvent consulter jusqu'à 2 ans d'historique en utilisant l'application web à ruuvi.com/station (nécessite le routeur Ruuvi Gateway)."; -"reading_history_x" = "Bluetooth sync: %.0f"; -"rssi_alert_description" = "L'utilisation de cette alerte nécessite que vous soyez connecté à l'application, que vous ayez revendiqué la propriété de ce capteur et qu'il se trouve dans le rayon d'action du routeur de la passerelle Ruuvi. Les appareils iOS sont incapables d'indiquer l'intensité du signal des données reçues envoyées par le capteur Ruuvi lorsque le capteur est apparié et que des mesures sont reçues en arrière-plan. La puissance du signal Bluetooth en temps réel est affichée dans l'application mais n'affecte pas cette alerte."; -"bluetooth_download" = "Téléchargement Bluetooth"; -"bluetooth_download_description" = "Les données du capteur local peuvent être téléchargées lorsque vous êtes dans sa portée Bluetooth."; -"download" = "Téléchargement"; -"clear_local_history" = "Effacer l'histoire locale"; -"clear_local_history_description" = "Voulez-vous effacer les données historiques stockées localement dans l'application ? Cela n'effacera pas l'historique stocké en interne par le capteur ou les données historiques stockées sur le service Ruuvi Cloud."; -"TagCharts.FailedToSyncDialog.title" = "Échec du téléchargement"; -"TagCharts.FailedToSyncDialog.message" = "Le téléchargement de l'historique Bluetooth a échoué. Vérifiez que vous êtes à portée Bluetooth, que votre capteur possède un micrologiciel prenant en charge le téléchargement et que le capteur n'est pas simultanément connecté à un autre appareil iOS. La connexion du capteur est réservée à la Ruuvi Station lorsque vous utilisez le mode connecté dans iOS."; -"TagCharts.TryAgain.title" = "Essayez à nouveau"; -"support" = "Soutien"; -"full_image_view" = "Vue d'ensemble de l'image"; -"history_view" = "Vue de l'histoire"; -"settings_and_alerts" = "Paramètres & alertes"; -"change_background" = "Paramètres et alertes"; -"check_claim_state" = "Vérification de l'état de la demande"; -"claim_in_progress" = "Réclamation en cours"; -"force_claim_sensor" = "Revendication en cours"; -"force_claim_sensor_description1" = "Ce capteur a été réclamé par un autre utilisateur. Vous pouvez forcer la propriété à votre compte si vous avez un accès physique à ce capteur. Chaque capteur Ruuvi ne peut avoir qu'un seul propriétaire."; -"force_claim_sensor_description2" = "La réclamation forcée est effectuée en utilisant la communication en champ proche (NFC). Assurez-vous que la NFC est activée sur votre appareil mobile. 1. Touchez le capteur de votre Ruuvi avec votre appareil mobile pour lancer le processus de réclamation. - 2. Une fois la réclamation réussie, vous serez renvoyé aux paramètres du capteur. Si la réclamation n'a pas abouti ou si la technologie NFC n'est pas disponible sur votre appareil : 1. Ouvrez le couvercle de votre capteur Ruuvi. 2. Localisez le bouton rond noir (ou le bouton \"B\" si votre capteur a 2 boutons) sur la carte de circuit imprimé blanche et appuyez dessus brièvement, puis appuyez sur le bouton Utiliser BT pour démarrer le processus de réclamation. - 3. Une fois la réclamation réussie, vous serez renvoyé aux paramètres du capteur."; -"force_claim" = "Revendication de force"; -"claim_wrong_sensor_scanned" = "Vous scannez différents RuuviTag"; -"view" = "Voir"; -"card_type" = "Type de carte"; -"image_cards" = "Cartes-images"; -"simple_cards" = "Cartes simples"; -"card_action" = "Action de la carte"; -"open_sensor_view" = "Ouvrir la vue du capteur"; -"open_history_view" = "Ouvrir la vue de l'historique"; -"change_background_message" = "Sélectionnez l'image d'arrière-plan. Si vous n'êtes pas connecté, vous perdrez l'image en cas de réinstallation de l'application."; -"take_photo" = "Prenez une photo"; -"select_from_gallery" = "Sélectionner dans la galerie du téléphone"; -"select_default_image" = "Choisir parmi les images par défaut"; -"export_csv_feature_location" = "Vous pouvez exporter l'historique d'un capteur à partir de sa page graphique d'historique. Appuyez sur l'icône de menu à trois points dans le coin supérieur droit, puis sélectionnez \"Exporter l'historique (csv)\"."; -"low_battery" = "Batterie faible"; -"change_background_image" = "Modifier l'image de fond"; -"SignIn.Sync.message" = "Téléchargement de contenu depuis le cloud. Veuillez patienter."; -"uploading_progress" = "Chargement: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Connectez-vous pour utiliser le widget.Connectez-vous pour utiliser le widget."; -"Widgets.Unauthorized.Inline.message" = "Connectez-vous à la station Ruuvi"; -"Widgets.Unconfigured.Simple.message" = "Forcer l'appui pour modifier le widget."; -"Widgets.Unconfigured.Rectangular.message" = "Appuyez sur le bouton pour modifier le widget."; -"Widgets.Unconfigured.Inline.message" = "Ajouter un capteur pour utiliser le widget Ruuvi"; -"Widgets.Unconfigured.Circular.message" = "+Ajouter"; -"Widgets.Select.Sensor.title" = "Capteur Ruuvi sélectionné"; -"Widgets.Sensor.Type.title" = "Type de capteur sélectionné"; -"Settings.SectionHeader.General.title" = "GÉNÉRAL"; -"Settings.SectionHeader.Application.title" = "APPLICATION"; -"empty_chart_message" = "Aucune donnée disponible dans la fenêtre d'historique sélectionnée."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Apprenez à connaître votre application Ruuvi Station."; -"onboarding_swipe_to_continue" = "Balayez pour continuer →"; -"onboarding_read_sensors_data" = "Lisez vos capteurs Ruuvi"; -"onboarding_via_bluetooth_or_cloud" = "en utilisant Bluetooth ou Ruuvi Cloud"; -"onboarding_follow_measurement" = "Visualisez tous les capteurs en un coup d'œil sur votre"; -"onboarding_dashboard" = "tableau de bord"; -"onboarding_personalise" = "Personnalisez"; -"onboarding_your_sensors" = "votre application avec des noms et des arrière-plans personnalisés."; -"onboarding_explore_detailed" = "Explorez votre"; -"onboarding_history" = "historique de mesure"; -"onboarding_set_custom" = "Définissez et personnalisez vos"; -"onboarding_alerts" = "alertes"; -"onboarding_share_your_sensors" = "à mesurer avec vos amis et votre famille."; -"onboarding_sharees_can_use" = "Partagez des capteurs"; -"onboarding_handy_widgets" = "de widgets"; -"onboarding_access_widgets" = "Apportez vos capteurs préférés sur votre écran d'accueil et votre écran de verrouillage sous forme"; -"onboarding_station_web" = "l'application Web Ruuvi"; -"onboarding_web_pros" = "Grand tableau de bord, historique pluriannuel, alertes par e-mail et plus encore sur"; -"onboarding_gateway_required" = "Un routeur Ruuvi Gateway est requis."; -"onboarding_skip" = "Ignorer"; -"onboarding_thats_it" = "Presque là!"; -"onboarding_thats_it_already_signed_in" = "Commençons!"; -"onboarding_go_to_sign_in" = "L'expérience Ruuvi est meilleure lorsque vous êtes connecté. Faites-le maintenant ou continuez sans les fonctionnalités cloud."; -"onboarding_go_to_sign_in_already_signed_in" = "Commençons à mesurer !"; -"onboarding_continue" = "Suivant"; -"sign_in_or_create_free_account" = "Connectez-vous ou créez un compte Ruuvi gratuit"; -"to_use_all_app_features" = "Aucun mot de passe nécessaire."; -"type_your_email" = "Tapez votre e-mail..."; -"request_code" = "Demander un code"; -"no_password_needed" = "Un compte gratuit sera créé pour cet e-mail si vous n'en avez pas déjà un. Seule l'adresse e-mail est requise. Nous gardons vos informations en toute sécurité."; -"benefits_sign_in" = "En savoir plus sur les avantages du compte Ruuvi ou connectez-vous plus tard"; -"use_without_account" = "Non merci, ignorer"; -"why_should_sign_in" = "Bénéfices"; -"sensors_ownership_and_settings_stored_in_cloud" = "La connexion à l'application présente de nombreux avantages. Les paramètres seront stockés en toute sécurité sur votre compte:"; -"cloud_stored_ownerships" = "● Propriété des capteurs"; -"cloud_stored_names" = "● Noms des capteurs"; -"cloud_stored_alerts" = "● Images d'arrière-plan"; -"cloud_stored_backgrounds" = "● Paramètres d'alerte"; -"cloud_stored_calibration" = "● Paramètres d'étalonnage"; -"cloud_stored_sharing" = "● Paramètres de l'application"; -"note" = "Note!"; -"claim_warning" = "Sécurisez les informations de propriété de vos capteurs en revendiquant leurs propriétés dans l'application."; -"lets_do_it" = "Connectez-vous"; -"enter_code" = "Entrez le code"; -"dashboard_no_sensors_message" = "Il semble que vous n'ayez pas encore ajouté de capteurs Ruuvi."; -"dashboard_no_sensors_message_signed_out" = "Vous n'êtes pas connecté.\n\nSi vous avez un compte et que vous y avez déjà ajouté des capteurs Ruuvi, ils se synchroniseront automatiquement avec l'application mobile Ruuvi Station lorsque vous vous connecterez."; -"add_a_sensor" = "Ajouter un capteur"; -"changelog" = "(journal des modifications)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Moyenne"; -"shared_to_x" = "Partagé %d/%d"; -"settings_alert_notifications" = "Notifications d'alerte"; -"settings_alert_sound" = "Son d'alerte"; -"settings_alert_sound_description" = "Sélectionnez le son de notification push."; -"settings_alerts_footer_description" = "Vous pouvez également ajuster les paramètres de notification sous Paramètres iOS -> Notifications"; -"settings_alerts_footer_description_link_mask" = "Paramètres iOS -> Notifications"; -"settings_email_alerts" = "Alertes courrier électronique"; -"settings_email_alerts_description" = "Si vous utilisez Ruuvi Cloud et Ruuvi Gateway, vous pourrez recevoir des alertes par e-mail en activant ceci."; -"settings_push_alerts" = "Alertes push"; -"settings_push_alerts_description" = "Si vous utilisez Ruuvi Cloud et Ruuvi Gateway, vous pourrez recevoir des alertes push en activant ceci."; -"synchronisation" = "Synchronisation"; -"gatt_sync_description" = "Ruuvi Station télécharge l'historique interne du capteur pour les 10 derniers jours si l'historique des mesures est disponible.\n\nL'historique est téléchargé à l'aide d'une connexion Bluetooth. Assurez-vous d'être à proximité du capteur."; -"do_not_show_again" = "Ne plus afficher ça"; -"sign_in_continue" = "Continuer"; -"signing_in_is_optional" = "(La connexion est facultative)"; -"Defaults.UserAuthorized.title" = "Utilisateur autorisé"; -"Defaults.DashboardTapActionChart.title" = "Appuyez sur la carte du tableau de bord pour afficher le graphique"; -"Defaults.DevServer.title" = "Utiliser le serveur de développement"; -"Defaults.DevServer.message" = "La modification du point de terminaison Ruuvi Cloud nécessite de se déconnecter de la session en cours et de redémarrer l'application. Es-tu sûr?"; -"Defaults.ShowEmailAlertsSettings.title" = "Afficher les paramètres d'alertes par e-mail"; -"Defaults.ShowPushAlertsSettings.title" = "Afficher les paramètres des alertes push"; -"use_nfc" = "Utiliser NFC"; -"use_bluetooth" = "Utiliser BT"; -"sensor_not_found_error" = "Capteur introuvable. Essayer à nouveau."; -"Defaults.HideNFC.title" = "Masquer l'option NFC du changement de propriété forcé"; -"settings_alert_sound_default" = "Défaillance du système"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi alarme"; -"add_with_nfc" = "Ajouter avec NFC"; -"sensor_details" = "Détails du capteur"; -"add_sensor" = "Ajouter un capteur"; -"copy_mac_address" = "Copier l'adresse MAC"; -"copy_unique_id" = "Copier l'identifiant unique"; -"name" = "Nom:"; -"mac_address" = "Adresse Mac:"; -"go_to_sensor" = "Aller à la carte du capteur"; -"unique_id" = "Identifiant unique:"; -"firmware_version" = "Version du firmware:"; -"Close" = "Fermer"; -"add_sensor_nfc_df3_error" = "Ce capteur ne peut pas être ajouté avec NFC en raison d'un ancien firmware. Veuillez ajouter le capteur avec Bluetooth et mettre à jour le firmware."; -"add_sensor_description" = "Cette page montre les capteurs Ruuvi à proximité qui n'ont pas encore été ajoutés à l'application. Appuyez sur un capteur pour l'ajouter."; -"add_sensor_via_nfc" = "Vous pouvez également ajouter un capteur via NFC en sélectionnant Ajouter avec NFC et en le touchant avec votre téléphone."; -"unclaim_sensor" = "Annuler la revendication du capteur"; -"unclaim" = "Annuler la réclamation"; -"unclaim_sensor_description" = "La propriété de ce capteur a été revendiquée sur votre compte Ruuvi. Appuyez sur Annuler la revendication pour supprimer les paramètres de ce capteur et les données associées de votre compte Ruuvi."; -"claim_sensor_ownership" = "Revendiquer la propriété du capteur"; -"do_you_own_sensor" = "Possédez-vous ce capteur ?"; -"owners_plan" = "Plan Ruuvi du propriétaire"; -"alert_cloud_connection_title" = "Connexion infonuagique"; -"alert_cloud_connection_description" = "Alerte si les données du capteur n'ont pas été mises à jour dans le cloud depuis plus de %d minutes."; -"alert_cloud_connection_dialog_description" = "Entrez le délai souhaité à utiliser en minutes avant le déclenchement de l'alerte. La valeur minimale est de 2 minutes."; -"alert_cloud_connection_dialog_title" = "Définir une alerte de connexion au cloud"; -"rename" = "Renommer"; -"chart_stat_show" = "Afficher min/max/moy"; -"chart_stat_hide" = "Masquer min/max/moy"; -"settings_alert_limit_notification" = "Limiter les notifications d'alerte"; -"settings_alert_limit_notification_description" = "Déclenchez la notification d'alerte Bluetooth une seule fois par heure, même si l'alerte a été redéclenchée."; -"share_pending" = "Partage en attente"; -"share_pending_message" = "Partagé avec succès ! Cette adresse e-mail n'est pas encore liée à un compte Ruuvi. Une invitation pour créer un compte gratuit a été envoyée. Une fois créé, vous le verrez dans la liste des partages."; -"dialog_are_you_sure" = "Êtes-vous sûr ?"; -"dialog_operation_undone" = "Cette opération ne peut pas être annulée."; -"remove_cloud_history_title" = "Supprimer l'historique cloud"; -"remove_cloud_history_description" = "Je veux également supprimer les données d'historique du capteur de Ruuvi Cloud."; -"remove_claimed_sensor_description" = "En supprimant le capteur, votre statut de propriétaire du capteur sera révoqué, et les paramètres du capteur, tels que le nom, l'image d'arrière-plan, les paramètres de calibration et les paramètres d'alerte, seront supprimés. Après la suppression, quelqu'un d'autre peut revendiquer la propriété du capteur. Chaque capteur Ruuvi ne peut avoir qu'un seul propriétaire."; -"remove_shared_sensor_description" = "Si vous choisissez de supprimer ce capteur partagé, le propriétaire du capteur sera averti et vous ne pourrez plus accéder au capteur.\n\nVous perdrez également tous les paramètres du capteur associés, tels que le nom, l'image d'arrière-plan et les configurations d'alerte. ."; -"remove_local_sensor_description" = "Si vous choisissez de supprimer ce capteur, cela entraînera la suppression de votre historique de mesures stocké localement, ainsi que la suppression de tous les paramètres du capteur associés tels que le nom, l'image d'arrière-plan, l'étalonnage et les configurations d'alerte.\n\nVous pouvez ajouter ce capteur plus tard, si nécessaire."; -"activity_saving_to_cloud" = "Enregistrement dans le cloud... veuillez patienter."; -"activity_saving_success" = "Enregistré avec succès."; -"activity_saving_fail" = "Impossible d'enregistrer les modifications dans le cloud."; -"activity_ongoing_generic" = "S'il vous plaît, attendez..."; -"activity_success_generic" = "Opération réussie."; -"activity_failed_generic" = "L'opération a échoué."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; - diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/ru.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/ru.lproj/Localizable.strings deleted file mode 100644 index 77faef121..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/ru.lproj/Localizable.strings +++ /dev/null @@ -1,767 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Готово"; -"Copy" = "Копировать"; -"Confirm" = "Подтвердить"; -"Remove" = "Удалить"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Версия"; -"Background.PresentNotifications.title" = "Показывать Уведомления"; -"Background.KeepConnection.title" = "Держать Соединение"; -"Background.Interval.Every.string" = "каждые"; -"Background.Interval.Min.string" = "мин"; -"Background.readRSSITitle.title" = "Считывать RSSI"; -"BluetoothError.disconnected" = "Соединение разорвано"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth выключен"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station необходим Bluetooth чтобы слушать сенсоры. Откройте Настройки и включите Bluetooth."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "Слишком много запросов"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Пожалуйста, попробуйте через 5 минут"; -"Cards.KeepConnectionDialog.message" = "На вашем устройстве установлена прошивка, поддерживающая соединение. Хотите поддерживать соединение активным для этого устройства в фоновом режиме? Это позволит использовать графики и уведомления даже когда приложение закрыто."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Закрыть"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Установить Соединение"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Looks like your sensor is using an old firmware software version. To access new features such as history graphs, alerts and cloud services, updating is mandatory."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Are you sure? Without updating, you won't be able to claim ownership of the sensor, download history graphs and set alerts. The update also includes bug fixes. If you cancel now, you can start the update process again from the sensor's settings page."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Check for update"; -"Cards.Connected.title" = "Соединен"; -"Cards.Error.ReverseGeocodingFailed.message" = "Не удалось загрузить данные для виртуального сенсора. Превышен лимит операций обратного геокодирования."; -"Cards.UpdatedLabel.NoData.message" = "No data during the last 10 days"; -"CoreError.failedToGetPngRepresentation" = "Не удалось получить данные в формате PNG"; -"CoreError.failedToGetDocumentsDirectory" = "Не удалось получить директорию для фоновых изображений"; -"CoreError.failedToGetCurrentLocation" = "Не удалось получить текущее месторасположение"; -"CoreError.failedToGetDataFromResponse" = "Не удалось получить данные из ответа"; -"CoreError.locationPermissionDenied" = "Не удалось получить разрешение на использование геолокации"; -"CoreError.locationPermissionNotDetermined" = "Права на использование локационных сервисов не определены"; -"CoreError.objectNotFound" = "Объект не найден"; -"CoreError.objectInvalidated" = "Объект инвалидирован"; -"CoreError.unableToSendEmail" = "Невозможно отправить электронное письмо"; -"Defaults.navigationItem.title" = "Значения"; -"Defaults.WelcomeShown.title" = "Приветствие Показано"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Свайп на Графиках"; -"Defaults.Interval.Sec.string" = "сек"; -"Defaults.Interval.Min.string" = "мин"; -"Defaults.ConnectionTimeout.title" = "Таймаут (соед.)"; -"Defaults.ServiceTimeout.title" = "Таймаут (обм.)"; -"Defaults.CardsSwipeHint.title" = "Свайп Подсказка на Графиках"; -"Defaults.AlertsRepeatInterval.title" = "Интервал Уведомлений"; -"Defaults.WebPullInterval.title" = "Интервал Уведомления для Виртуальных Сенсоров"; -"Defaults.PruningOffsetHours.title" = "Смещение Очистки в Часах"; -"Defaults.Interval.Hour.string" = "ч"; -"Defaults.ChartDurationHours.title" = "Размер Графиков"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "Количество запусков приложения, чтобы запросить обзор в первый раз"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Запросить отзыв, если запуск приложения делится на"; -"DiscoverTable.SectionTitle.WebTags" = "Виртуальные"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth выключен"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Ruuvi Station необходим bluetooth чтобы слушать сенсоры. Откройте Настройки и включите Bluetooth."; -"DiscoverTable.NavigationItem.title" = "Добавить Сенсор"; -"DiscoverTable.GetMoreSensors.button.title" = "Купить датчики Ruuvi"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(Bluetooth устройства не найдены)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth отключен)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Виртуальные сенсоры показывают публичную информацию о погоде, предоставленную локальными станциями."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Ошибка"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "Не указан API-ключ для OpenWeatherMap. Пожалуйста, получите его на сайте openweathermap.org и поместите в файл station/Classes/Networking/Assembly/Networking.plist"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "Приложение уже в процессе синхронизации логов с данным сенсором"; -"ExpectedError.failedToDeleteTag" = "Не удалось удалить подключенный сенсор, так как он недоступен. Пожалуйста, проверьте соединение по Bluetooth."; -"ExportService.Date" = "Дата"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Температура (%@)"; -"ExportService.Humidity" = "Влажность (%@)"; -"ExportService.DewPoint" = "Точка росы (%@)"; -"ExportService.Pressure" = "Давление (%@)"; -"ExportService.Voltage" = "Напряжение (В)"; -"ExportService.MovementCounter" = "Счетчик Движения"; -"ExportService.MeasurementSequenceNumber" = "Порядковый Номер Измерения"; -"ExportService.TXPower" = "Мощность Передачи"; -"ForegroundRow.advertisement.section" = "СООБЩЕНИЯ"; -"ForegroundRow.advertisement.title" = "Сохранять данные"; -"ForegroundRow.connection.section" = "ЛОГИ"; -"ForegroundRow.connection.title" = "Соединяться и сохранять логи"; -"Foreground.navigationItem.title" = "Активный Режим"; -"Foreground.Interval.Every.string" = "Каждые"; -"Foreground.Interval.Min.string" = "мин"; -"ForegroundRow.webTags.title" = "Загружать из интернета"; -"ForegroundRow.webTags.section" = "ВИРТУАЛЬНЫЕ СЕНСОРЫ"; -"Foreground.Interval.All.string" = "Все"; -"Heartbeat.Interval.Every.string" = "каждые"; -"Heartbeat.Interval.Min.string" = "мин"; -"Heartbeat.readRSSITitle.title" = "Считывать RSSI"; -"Heartbeat.Interval.Sec.string" = "сек"; -"Heartbeat.Interval.All.string" = "Все"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Вы уверены?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "Вы собираетесь очистить смещение для влажности. Вы не сможете откатить изменения. Нажмите \"Подтвердить\" для продолжения."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Вы уверены?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "Вы собираетесь откалибровать смещение для влажности. Нажмите \"Подтвердить\" для продолжения."; -"Language.English" = "English"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Соединился"; -"LocalNotificationsManager.DidDisconnect.title" = "Отсоединился"; -"LocalNotificationsManager.Disable.button" = "Отключить"; -"LocalNotificationsManager.LowDewPoint.title" = "Ниже Точки Росы!"; -"LocalNotificationsManager.HighDewPoint.title" = "Выше Точки Росы!"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Ruuvi Station необходим доступ к вашей библиотеке фотографий для того, чтобы использовать эту функцию."; -"PermissionPresenter.NoCameraAccess.message" = "Ruuvi Station нужен доступ к камере для того, чтобы использовать эту функцию."; -"PermissionPresenter.NoLocationAccess.message" = "Ruuvi Station необходим доступ к геолокационным сервисам для того, чтобы использовать эту функцию."; -"PermissionPresenter.settings" = "Настройки"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Ruuvi Station необходим доступ к уведомлениям для того, чтобы использовать эту функцию."; -"PhotoPicker.Sheet.message" = "Выбрать фотографию"; -"PhotoPicker.Sheet.library" = "Выбрать из библиотеки"; -"PhotoPicker.Sheet.camera" = "Сделать фото"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Отн"; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Абс"; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "ТР"; -"Settings.Label.Language.text" = "Язык"; -"Settings.Language.Dialog.title" = "Выберите Язык"; -"Settings.Language.Dialog.message" = "Open settings and tap Language to change language of the app. -If you cannot see the Language option in the settings, make sure that you have at least one preferred language added in system settings: Settings -> General -> Language & Region."; -"Settings.Label.Foreground" = "Активный Режим"; -"Settings.Label.Defaults" = "Значения"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Не удалось распарсить ответ от OpenWeatherMap"; -"OWMError.apiLimitExceeded" = "Превышен лимит запросов к API OpenWeatherMap"; -"OWMError.notAHttpResponse" = "Не HTTP ответ"; -"OWMError.invalidApiKey" = "Некорректный API-ключ"; -"TagCharts.NoChartData.text" = "Нет данных для построения графика"; -"TagCharts.BluetoothDisabledAlert.title" = "Bluetooth выключен"; -"TagCharts.BluetoothDisabledAlert.message" = "Ruuvi Station необходим Bluetooth чтобы слушать сенсоры. Откройте Настройки и включите Bluetooth."; -"TagCharts.Clear.title" = "Очистить"; -"TagCharts.SyncConfirmationDialog.title" = "Вы уверены?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Удалить"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Вы уверены?"; -"TagCharts.Status.Disconnecting" = "Разрываю соединение..."; -"TagCharts.Status.Success" = "Успех"; -"TagCharts.Status.Error" = "Ошибка"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "Необходим Режим RAWv2"; -"TagSettings.UpdateFirmware.Alert.message" = "Для того, чтобы увидеть отсутствующие значения:\nЕсли вы используете последнюю прошивку, включите RAWv2 режим нажатием кнопки \"B\" на вашем сенсоре.\nИли обновите ваш сенсор с последней прошивкой."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Узнать больше"; -"TagCharts.Dismiss.Alert.message" = "The history download via Bluetooth connection is in progress. Please wait."; -"TagCharts.AbortSync.Alert.message" = "Sometimes the history download is slow due to the Bluetooth connectivity. Please wait a moment."; -"TagCharts.AbortSync.Button.title" = "Abort download"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "Датчик влажности откалиброван"; -"TagSettings.HumidityIsClipped.Alert.message" = "Значение относительной влажности больше 100% после калибровки. Это значение не имеет смысла, поэтому значение откалибровано до 100%."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Исправить"; -"TagSettings.navigationItem.title" = "Настройки"; -"TagSettings.tagNameTitleLabel.text" = "Имя"; -"TagSettings.humidityTitleLabel.text" = "Влажность"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "MAC Адрес"; -"TagSettings.dataFormatTitleLabel.text" = "Формат Данных"; -"TagSettings.accelerationXTitleLabel.text" = "Ускорение по X"; -"TagSettings.accelerationYTitleLabel.text" = "Ускорение по Y"; -"TagSettings.accelerationZTitleLabel.text" = "Ускорение по Z"; -"TagSettings.txPowerTitleLabel.text" = "Мощность Передачи"; -"TagSettings.mcTitleLabel.text" = "Счетчик Движения"; -"TagSettings.msnTitleLabel.text" = "Порядковый Номер Измерения"; -"TagSettings.SectionHeader.Remove.title" = "УДАЛИТЬ"; -"TagSettings.Label.noValues.text" = "НЕТ ЗНАЧЕНИЙ?"; -"TagSettings.SectionHeader.Calibration.title" = "КАЛИБРОВКА"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH СОЕДИНЕНИЕ"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Pair and use background scan"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Connecting to the sensor"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Paired and background scan is on"; -"TagSettings.PairAndBackgroundScan.description" = "Alerts are not available over Bluetooth connection if background scanning is not enabled. Only one iOS device can be paired to a Ruuvi sensor at a time."; -"TagSettings.PairError.CloudMode.description" = "The sensor cannot be connected to via Bluetooth when the cloud mode is active. You can re-enable the Bluetooth connection for the cloud sensors by disabling cloud mode in the app settings."; -"TagSettings.PairError.Timeout.description" = "Connection timed out. Pairing was unsuccessful. Please try again."; -"TagSettings.dataSourceTitleLabel.text" = "Данные Получены Из"; -"TagSettings.DataSource.Heartbeat.title" = "Соединение"; -"TagSettings.DataSource.Advertisement.title" = "Вещания"; -"TagSettings.DataSource.Network.title" = "Сеть"; -"TagSettings.Label.disabled.text" = "НЕДОСТУПНО?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Уведомления недоступны поскольку девайс не подсоединен и нет разрешения на показ уведомлений. Пожалуйста, сперва соединитесь с устройством."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Соединиться"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Уведомления недоступны поскольку вы не подсоединены к устройству."; -"TagSettings.Alert.CustomDescription.placeholder" = "Введите описание..."; -"TagSettings.Alert.CustomDescription.title" = "Описание уведомления"; -"TagSettings.Alerts.Humidity.description" = "Уведомить если меньше %.0f или больше %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Уведомить если меньше %.0f или больше %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Точка Росы"; -"TagSettings.Alerts.Pressure.description" = "Уведомить если меньше %.0f или больше %.0f"; -"TagSettings.Alerts.Connection.description" = "Уведомить при установке/разрыве соединения"; -"TagSettings.ConnectionAlert.title" = "Соединение"; -"TagSettings.SectionHeader.Firmware.title" = "Прошивка"; -"TagSettings.Firmware.CurrentVersion" = "Текущая версия"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Устаревшая"; -"TagSettings.Firmware.UpdateFirmware" = "Обновить"; -"UnexpectedError.callbackErrorAndResultAreNil" = "И коллбэк и ошибка nil"; -"UnexpectedError.callerDeinitedDuringOperation" = "Вызывающий объект был деаллоцирован во время операции"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Не удалось определить локацию по координатам"; -"UnexpectedError.failedToFindRuuviTag" = "Не удалось найти сенсор"; -"UnexpectedError.failedToFindLogsForTheTag" = "Не удалось найти логи сенсора"; -"UnexpectedError.viewModelUUIDIsNil" = "UUID модели пустое"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Attempt to read data from Realm without LUID"; -"UnexpectedError.failedToFindVirtualTag" = "Failed to find virtual sensor"; -"HumidityUnit.Dew.title" = "Точка росы (%@)"; -"WebTagLocationSource.current" = "Ваше текущее месторасположение"; -"WebTagLocationSource.manual" = "Месторасположение на карте"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Удалить"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Вы уверены что хотите удалить?"; -"WebTagSettings.Location.Current" = "Ваше текущее месторасположение"; -"WebTagSettings.confirmClearLocationDialog.title" = "Очистить месторасположение"; -"WebTagSettings.confirmClearLocationDialog.message" = "Вы уверены, что хотите очистить месторасположение? Будет использовано текущее месторасположение."; -"WebTagSettings.navigationItem.title" = "Настройки"; -"WebTagSettings.Label.BackgroundImage.text" = "ФОНОВОЕ\nИЗОБРАЖЕНИЕ"; -"WebTagSettings.Label.Location.text" = "Месторасположение"; -"WebTagSettings.Button.Remove.title" = "УДАЛИТЬ"; -"WebTagSettings.SectionHeader.Name.title" = "ИМЯ"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "ДОПОЛНИТЕЛЬНО"; -"WebTagSettings.Alerts.Temperature.description" = "Уведомить если меньше %.0f или больше %.0f"; -"WebTagSettings.Alerts.Off" = "Отключено"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Температура"; -"WebTagSettings.Label.disabled.text" = "НЕДОСТУПНО?"; -"WebTagSettings.Label.alerts.text" = "УВЕДОМЛЕНИЯ"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "Чтобы включить уведомления для Виртуальных Сенсоров, пожалуйста дайте разрешение на использование геолокации в Настройках."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Настройки"; -"WebTagSettings.AirHumidityAlert.title" = "Относительная Влажность"; -"WebTagSettings.Alerts.Humidity.description" = "Уведомить если меньше %.0f или больше %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Уведомить если меньше %.0f или больше %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Точка Росы"; -"WebTagSettings.PressureAlert.title" = "Атмосферное Давление"; -"WebTagSettings.Alerts.Pressure.description" = "Уведомить если меньше %.0f или больше %.0f"; -"Welcome.description.text" = "Чтобы найти сенсор рядом и получать текущие данные, нажмите сканировать."; -"ExportService.AccelerationX" = "Ускорение по X"; -"ExportService.AccelerationY" = "Ускорение по Y"; -"ExportService.AccelerationZ" = "Ускорение по Z"; -"DiscoverTable.SectionTitle.Devices" = "Ближайшие Сенсоры"; -"ago" = "назад"; -"TagSettings.MovementAlert.title" = "Движение"; -"TagSettings.Alerts.Movement.description" = "Уведомить при движении"; -"LocalNotificationsManager.HighHumidity.title" = "Высокая Влажность!"; -"LocalNotificationsManager.LowHumidity.title" = "Низкая Влажность!"; -"LocalNotificationsManager.DidMove.title" = "Сработал Датчик Движения!"; -"LocalNotificationsManager.HighPressure.title" = "Высокое Атмосферное Давление!"; -"LocalNotificationsManager.LowPressure.title" = "Низкое Атмосферное Давление!"; -"LocalNotificationsManager.HighSignal.title" = "Высокий уровень сигнала!"; -"LocalNotificationsManager.LowSignal.title" = "Низкий уровен сигнала!"; -"LocalNotificationsManager.HighTemperature.title" = "Высокая температура!"; -"LocalNotificationsManager.LowTemperature.title" = "Низкая температура!"; -"TagSettings.Alerts.Off" = "Отключено"; -"TagSettings.Alerts.Temperature.description" = "Уведомление если меньше %.0f или больше %.0f"; -"TagSettings.Label.alerts.text" = "Уведомления"; -"TagSettings.backgroundImageLabel.text" = "Фоновое изображение"; -"TagSettings.batteryVoltageTitleLabel.text" = "Напряжение Батареи"; -"HumidityCalibration.Button.Calibrate.title" = "Калибровать"; -"HumidityCalibration.lastCalibrationDate.format" = "Откалибровано: %@"; -"HumidityCalibration.Description.text" = "Чтобы измерять относительную влажность наиболее точно, рекомендуется провести тест с поваренной солью. Посмотрите обучающие видео о том, как легко сделать это дома. "; -"HumidityCalibration.Label.note.text" = "Данные для калибровки будут сохранены локально. Если вы переустановите приложение будет нужно произвести калибровку заново."; -"HumidityCalibration.VideoTutorials.link" = "обучающие видео"; -"Cancel" = "Отмена"; -"HumidityCalibration.Button.Clear.title" = "Очистить"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Вы уверены что хотите удалить всю историю наблюдений? Данное действие невозможно отменить."; -"HumidityCalibration.Button.Close.title" = "Закрыть"; -"TagCharts.Status.Serving" = "Обмениваюсь..."; -"TagCharts.Status.Connecting" = "Соединение..."; -"TagSettings.ConnectStatus.Disconnected" = "Отсоединен"; -"TagCharts.Export.title" = "ЭКСПОРТ"; -"h" = "ч"; -"About.AboutHelp.contents" = "Ruuvi Station — это простое в использовании приложение, позволяющее отслеживать данные измерений датчиков Ruuvi."; -"About.AboutHelp.header" = "О приложении"; -"About.TagsCount.text" = "Добавленных датчиков: %d"; -"About.MeasurementsCount.text" = "Кол-во сохраненных измерений: %d"; -"About.DatabaseSize.text" = "Размер базы данных: %@"; -"About.More.contents" = "Веб-сайт: ruuvi.com\nФорум: f.ruuvi.com\nБлог: ruuvi.com\nTwitter: twitter.com/ruuvicom"; -"About.More.header" = "Почитать еще"; -"About.OpenSource.contents" = "Как и датчики Ruuvi, приложения Ruuvi Station имеют открытый исходный код. Следите за развитием и вносите свой вклад на: github.com/ruuvi"; -"About.OpenSource.header" = "Открытый исходный код"; -"About.OperationsManual.contents" = "Начните использовать мобильное приложение Ruuvi Station с помощью наших онлайн-руководств: ruuvi.com/support/station-mobile"; -"About.OperationsManual.header" = "Руководство"; -"About.Privacy.contents" = "Используя это приложение, вы соглашаетесь со стандартными условиями и положениями Ruuvi: ruuvi.com/terms"; -"About.Privacy.header" = "Политика конфиденциальности"; -"About.Troubleshooting.contents" = "Получите помощь по использованию приложений Ruuvi Station, продуктов Ruuvi и облачной службы Ruuvi в нашем центре поддержки: ruuvi.com/support"; -"About.Troubleshooting.header" = "Решение проблем"; -"hours" = "Часов"; -"Interval.Days.string" = "Дней"; -"TagSettings.AirHumidityAlert.title" = "Влажность воздуха (%@)"; -"HumidityUnit.gm3.title" = "Абсолютная влажность (г/м³)"; -"g/m³" = "г/м³"; -"HumidityUnit.Percent.title" = "Относительная влажность (%)"; -"TagSettings.Mac.Alert.title" = "MAC адрес"; -"Menu.Label.AboutHelp.text" = "О Приложении"; -"Menu.Label.AddAnNewSensor.text" = "Добавить Сенсор"; -"Menu.Label.AppSettings.text" = "Настройки"; -"Menu.Label.GetMoreSensors.text" = "Купить датчики Ruuvi"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Купить Ruuvi Gateway"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "Что измерять с помощью Ruuvi?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Отправить Отзыв"; -"Menu.Label.MyRuuviAccount.text" = "My Ruuvi Account"; -"min" = "мин"; -"minutes" = "Минут"; -"TagSettings.Label.moreInfo.text" = "Дополнительно"; -"TagSettings.SectionHeader.Name.title" = "ИМЯ"; -"No" = "Нет"; -"OK" = "OK"; -"Cards.NoSensors.title" = "Нет добавленных датчиков\nнажмите чтобы добавить"; -"TagSettings.PressureAlert.title" = "Атмосферное Давление (%@)"; -"UnitPressure.hectopascal.title" = "Гектопаскаль (гПа)"; -"hPa" = "гПа"; -"UnitPressure.inchOfMercury.title" = "Дюймов ртутного столба (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Миллиметров ртутного столба (мм.рт.ст.)"; -"TagCharts.Status.ReadingHistory" = "Чтение истории"; -"TagSettings.rssiTitleLabel.text" = "Сила сигнала (RSSI)"; -"signal_strength_dbm" = "Сила сигнала (dBm)"; -"s" = "с"; -"Welcome.scan.title" = "СКАНИРОВАТЬ"; -"Background.Interval.Sec.string" = "сек"; -"Settings.navigationItem.title" = "Настройки"; -"Settings.BackgroundScanning.title" = "Сканирование в фоне"; -"Settings.BackgroundScanning.Footer.message" = "Important note: Bluetooth background history logging and Bluetooth alerts work only when background scanning is enabled. If you disable the background scanning, all paired Ruuvi sensors will be automatically unpaired and you need to pair them again from their settings pages."; -"Settings.BackgroundScanning.interval" = "Интервал сканирования"; -"Settings.Label.Chart" = "Настройки графиков"; -"ChartSettings.AllPoints.title" = "Отображать все данные"; -"ChartSettings.AllPoints.description" = "Это может привести к медленному обновлению графиков."; -"ChartSettings.DrawDots.title" = "Показывать точки на графике"; -"ChartSettings.DrawDots.description" = "Маленькие точки помогут точно понять когда были получены данные."; -"Defaults.ChartIntervalSeconds.title" = "Интервал Графиков"; -"ChartSettings.Duration.title" = "Диапазон отображения графиков"; -"ChartSettings.Duration.description" = "Установите диапазон для отображения на графиках от 1-го до 10-ти дней."; -"Settings.Label.HumidityUnit.text" = "Ед. изм. Влажности"; -"Settings.Label.Temperature" = "Температура"; -"Settings.Label.Humidity" = "Влажность"; -"Settings.Label.Pressure" = "Давление"; -"Settings.ChooseHumidityUnit.text" = "Выберите единицу измерения влажности для отображения."; -"Settings.Label.PressureUnit.text" = "Ед. изм. Давления"; -"Settings.ChoosePressureUnit.text" = "Выберите единицу измерения давления для отображения."; -"Settings.Label.TemperatureUnit.text" = "Ед. изм. Температуры"; -"Settings.ChooseTemperatureUnit.text" = "Выберите единицу измерения температуры для отображения."; -"dBm" = "дБм"; -"TagCharts.Sync.title" = "Скачать"; -"TagCharts.SyncConfirmationDialog.message" = "Вы уверены что хотите синхронизировать данные с устройством?"; -"WebTagSettings.Label.TagName.text" = "Имя"; -"TagSettings.confirmTagRemovalDialog.title" = "Удалить сенсор"; -"TagSettings.confirmTagRemovalDialog.message" = "Вы уверены что хотите удалить этот сенсор?"; -"TagSettings.temperatureAlertTitleLabel.text" = "Температура (%@)"; -"TemperatureUnit.Celsius.title" = "Цельсий (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Фаренгейт (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Кельвин (K)"; -"Updated" = "Обновлено"; -"V" = "В"; -"RuuviOnboard.Welcome.title" = "Проведите пальцем чтобы узнать, чем Ruuvi Station может помочь вам."; -"RuuviOnboard.Measure.title" = "Измеряйте параметры окружающей среды: температуру, влажность и атмосферное давление."; -"RuuviOnboard.Access.title" = "В реальном времени считывайте показатели с датчиков и просматривайте историю на графиках."; -"RuuviOnboard.Alerts.title" = "Устанавливайте лимиты значений, при превышении которых вы получите уведомление."; -"RuuviOnboard.Cloud.title" = "Sign in to use the full potential of the app."; -"RuuviOnboard.Cloud.subtitle" = "Claim ownership of your sensors with a free Ruuvi Cloud account."; -"RuuviOnboard.Cloud.subtitle.signed" = "Great! You already signed in!"; -"RuuviOnboard.Start.title" = "Нажмите СКАНИРОВАТЬ, чтобы найти и добавить датчики в Ruuvi Station."; -"Yes" = "Да"; -"LocalNotificationsManager.Mute.button" = "Отключить на час"; -"Defaults.AlertsMuteInterval.title" = "Интервал Отключения Уведомлений"; -"SignIn.Title.text" = "Войти"; -"Menu.SignOut.text" = "Выйти из сети"; -"RuuviOnboard.Cloud.Benefits.message" = "Преимущества:\n\n ● Название датчика, изображение фона, данные калибровки и настройки тревог будут безопасно храниться в облаке\n\n ● Получите доступ к датчикам через интернет (требуестся Ruuvi Gateway)\n\n ● Поделитесь данными датчиков с друзьями и членами семьи (требуется Ruuvi Gateway)\n\n ● Просматривайте до 2-х лет истории на сайте station.ruuvi.com (требуется a Ruuvi Gateway)"; -"RuuviOnboard.Cloud.Details.title" = "Подробнее"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Точно хотите пропустить вход?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Пропустить"; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Назад"; -"SignIn.EmailPlaceholder" = "Email"; -"SignIn.RequestCode" = "Запросить код"; -"SignIn.SubmitCode" = "Отправить"; -"SignIn.EmailSent" = "Email отправлен"; -"SignIn.CheckMailbox" = "Мы отправили одноразовый пароль на вашу электронную почту %@. Войдите, введя его здесь:"; -"SignIn.CodeHint" = "Код для входа"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "После выхода все датчики, которые зарегистрованы на вас, будут удалены из приложения. Если вы повторно войдете с тем же email адресом, список ваших датчиков будет загружен из облака. \n\nВы хотите выйти из сети?"; -"TagSettings.ClaimTagButton.Claim" = "Заявить о собственности"; -"TagSettings.ShareButton" = "Поделиться"; -"Syncing..." = "Синхронизация..."; -"Synchronized" = "Синхронизировано"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Синхронизировано: %@"; -"MenuTableViewController.None" = "нет"; -"MenuTableViewController.User" = "Пользователь: %@"; -"ShareViewController.Title" = "Поделиться датчиком Ruuvi"; -"ShareViewController.Description" = "Вы можете поделиться измерениями этого датчика с друзьями или членами семьи, если датчик находится в радиусе действия Ruuvi Gateway.\n\nПолучатель будет извещен по электронной почте. Если у него нет аккаунта Ruuvi, то бесплатный аккаунт будет создан при первом входе.\n\nНазвание датчика и изображение использованное в качестве фона будет также доступно для пользователя. Пользователь сможет позже изменить название и изображение на удобное для себя. Данные калибровки датчика (если они были установлены владельцем) будут автоматически синхронизированы и получатель всегда будет видеть данные после калибровки."; -"ShareViewController.addFriend.Title" = "Добавить друга"; -"ShareViewController.emailTextField.placeholder" = "Введите email"; -"ShareViewController.sharedEmails.Title" = "Вы использовали %d/%d от максимального количества делений для этого датчика. Датчик используется совместно со следующими пользователями:"; -"Share.Send.button" = "Отправить"; -"SharePresenter.UnshareSensor.Message" = "Хотите перестать делиться показаниями датчика с %@?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "Данные сети"; -"TagSettings.NetworkInfo.Owner" = "Владелец"; -"Menu.RuuviNetworkStatus.text" = "Статус сети Ruuvi"; -"SignIn.TitleLabel.text" = "Войти в\nRuuvi\nStation"; -"SignIn.SubtitleLabel.text" = "Чтобы воспользоваться всеми функциями, создайте аккаунт или войдите в существующий. Пожалуйста, введите ваш email."; -"SignIn.VerificationCodePlaceholder" = "код подтверждения в формате: CJSM"; -"UserApiError.ER_FORBIDDEN" = "Запрещено"; -"UserApiError.ER_UNAUTHORIZED" = "Требуется авторизация"; -"UserApiError.ER_INTERNAL" = "Внутренняя ошибка"; -"UserApiError.ER_INVALID_FORMAT" = "Неправильный формат запроса"; -"UserApiError.ER_USER_NOT_FOUND" = "Пользователь не найден"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Сенсор не найден"; -"UserApiError.ER_TOKEN_EXPIRED" = "Токен истек"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "Подписка не найдена"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "Достигнут лимит количества общих сенсоров"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Превышено количество общих сенсоров"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "Чтобы поделиться датчиком необходимо наличие Ruuvi Gateway поблизости"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "Вы уже делились этим сенсором"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Sensor already claimed by %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Sensor already claimed"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Не удалось отправить e-mail"; -"UserApiError.ER_MISSING_ARGUMENT" = "Пропущен аргумент запроса"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Недопустимый режим плотности"; -"UserApiError.ER_INVALID_SORT_MODE" = "Выбран недопустимый метод сортировки"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Выбран недопустимый промежуток времени"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Недопустимый e-mail"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Недопустимый MAC-адрес"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Ошибка сохранения данных"; -"UserApiError.ER_SUB_NO_USER" = "Нет пользователя"; -"UserApiError.ER_THROTTLED" = "Слишком много запросов"; -"OffsetCorrection.CalibrationDescription.text" = "Обычно нет необходимости калибровать датчики.\n\nОднако, если вы продивнутый пользователь и хотите вручную откалибровать настроенные на заводе сенсоры, это возможно.\n\nПодсказки и информация доступны на сайте ruuvi.com/support"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Сбросить настройки калибровки?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Настройка калибровок"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Введите ожидаемое значение температуры в текущих условиях (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Введите ожидаемое значение давления в текущих условиях (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Введите ожидаемое значение влажности в текущих условиях (%@): "; -"OffsetCorrection.OriginalValue.title" = "Измеренное значение"; -"OffsetCorrection.CorrectedValue.title" = "Откалиброванное значение"; -"OffsetCorrection.Temperature.Title" = "Калибровка по температуре"; -"OffsetCorrection.Humidity.Title" = "Калибровка по влажности"; -"OffsetCorrection.Pressure.Title" = "Калибровка по давлению"; -"OffsetCorrection.Calibrate.button" = "Калибровка"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "КАЛИБРОВКИ"; -"TagSettings.OffsetCorrection.Temperature" = "Температура"; -"TagSettings.OffsetCorrection.Humidity" = "Влажность"; -"TagSettings.OffsetCorrection.Pressure" = "Давление"; -"PhotoPicker.Sheet.files" = "Выбрать из файлов"; -"SignIn.EnterVerificationCode" = "Пожалуйста, введите код подтверждения"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Не удалось найти или сгенерировать фоновое изображение"; -"UnexpectedError.bothLuidAndMacAreNil" = "Локальный индентификатор и MAC-адрес не определены"; -"RuuviCloudApiError.emptyResponse" = "Пустой ответ"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "Не удалось получить данные из ответа"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Неожиданный код статуса HTTP"; -"RuuviCloudError.NotAuthorized" = "Не авторизован"; -"RuuviLocalError.failedToGetJpegRepresentation" = "Не удалось получить данные в формате JPG"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Не удалось получить директорию для фоновых изображений"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Не удалось найти сенсор"; -"RuuviServiceError.pictureUrlIsNil" = "Пустой URL картинки"; -"RuuviServiceError.macIdIsNil" = "Пустой MAC-адрес"; -"network_sharing_disabled" = "Вы можете поделиться сенсорами только из зоны покрытия Ruuvi Gateway."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Локальный идентификатор и MAC-адрес пустые"; -"RuuviServiceError.failedToParseNetworkResponse" = "Не удалось распарсить ответ"; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Не удалось найти или сгенерировать фоновое изображение"; -"RuuviServiceError.failedToGetJpegRepresentation" = "Не удалось получить данные в формате JPG"; -"UpdateFirmware.Title.text" = "Обновить Прошивку"; -"UpdateFirmware.Download.header" = "СКАЧАТЬ ПОСЛЕДНЮЮ ПРОШИВКУ"; -"UpdateFirmware.Download.content" = "Чтобы начать процесс обновления, скачайте последнюю прошивку для целевого устройства. Последняя версия прошивки доступна на сайте ruuvi.com/software-update"; -"UpdateFirmware.SetDfu.header" = "ПЕРЕВЕДИТЕ RUUVI TAG В DFU-РЕЖИМ"; -"UpdateFirmware.SetDfu.content" = "Осторожно откройте RuuviTag пальцами или отверткой.\n\nВведите RuuviTag в режим обновления прошивки, зажав кнопку B и нажав на кнопку перезагрузки R. Красная лампочка загорится и будет продолжать гореть. Если на вашем устройстве только одна кнопка, зажмите ее на 10 секунд."; -"UpdateFirmware.NextButton.title" = "ДАЛЕЕ"; -"DfuDevicesScanner.Title.text" = "Устройства"; -"DfuDevicesScanner.Description.text" = "Найдите и выберите сенсор \"RuuviBoot\"."; -"DfuDevicesScanner.NoDevice.text" = "(Bluetooth устройства не найдены)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth отключен)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth выключен"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Ruuvi Station необходим bluetooth чтобы слушать сенсоры. Откройте Настройки и включите Bluetooth."; -"DfuFlash.Title.text" = "DFU"; -"DfuFlash.Progress.text" = "Прогресс"; -"DfuFlash.Step.text" = "Шаг"; -"DfuFlash.Steps.PackageSelection.text" = "Выбор Прошивки"; -"DfuFlash.Steps.ReadyForUpload.text" = "Готово к Загрузке"; -"DfuFlash.Steps.Uploading.text" = "Загружаю"; -"DfuFlash.Steps.Completed.text" = "Успешно"; -"DfuFlash.OpenDocumentPicker.title" = "ОТКРЫТЬ ФАЙЛ"; -"DfuFlash.FirmwareSelectionGuide.text" = "Выберите ранее загруженный ZIP файл."; -"DfuFlash.Firmware.FileName.text" = "Имя Файла"; -"DfuFlash.Firmware.Parts.text" = "Части"; -"DfuFlash.Firmware.Size.text" = "Размер"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Soft Device Размер"; -"DfuFlash.Firmware.BootloaderSize.text" = "Размер Загрузчика"; -"DfuFlash.Cancel.text" = "ОТМЕНА"; -"DfuFlash.Start.text" = "Начать"; -"DfuFlash.Finish.text" = "УСПЕХ"; -"DfuFlash.FinishGuide.text" = "Обновление прошивки завершилось успешно -Ваш RuuviTag готов к использованию!"; -"DfuFlash.CancelAlert.text" = "Вы уверены что хотите прервать процесс обновления прошивки?"; -"RuuviDfuError.invalidFirmwareFile" = "Некорректный файл прошивки"; -"DFUUIView.navigationTitle" = "Обновление Прошивки"; -"DFUUIView.latestTitle" = "Доступная версия прошивки Ruuvi:"; -"DFUUIView.currentTitle" = "Текущая версия:"; -"DFUUIView.notReportingDescription" = "Ваш сенсор не возвращает версию прошивки. Вероятно, на нем установлена старая версия прошивки и обновление рекомендовано."; -"DFUUIView.alreadyOnLatest" = "Последняя версия прошивки уже установлена, обновление не требуется"; -"DFUUIView.startUpdateProcess" = "Начать процесс обновления"; -"DFUUIView.downloadingTitle" = "Идет скачивание обновления прошивки..."; -"DFUUIView.prepareTitle" = "Prepare your sensor"; -"DFUUIView.openCoverTitle" = "1. Open the cover of your Ruuvi sensor"; -"DFUUIView.locateBootButtonTitle" = "2. Locate the small round black buttons on the white circuit board; older Ruuvi sensors have 2 buttons labelled “R” and “B” while newer ones have only one button without a label."; -"DFUUIView.setUpdatingModeTitle" = "3. Set the sensor to updating mode:"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. If your sensor has 2 buttons: keep “B” button pressed while tapping button “R” momentarily. Release button “B”."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. If your sensor has a single button: keep the button pressed for 10 seconds."; -"DFUUIView.toBootModeSuccessTitle" = "4. If set successfully, you will see a solid red light lit on the circuit board and the button in the app will change to “Start the update”."; -"DFUUIView.updatingTitle" = "Обновляю..."; -"DFUUIView.searchingTitle" = "Searching for a sensor"; -"DFUUIView.startTitle" = "Start the update"; -"DFUUIView.doNotCloseTitle" = "Не закрывайте приложение и не отключайте сенсор во время обновления."; -"DFUUIView.successfulTitle" = "Обновление успешно завершено"; -"DFUUIView.DBMigration.Error.message" = "The update was successful, but an unexpected database migration error occurred. To continue using this sensor, please remove it from the app and then add it again."; -"RuuviDfuError.failedToConstructUUID" = "Не удалось создать UUID"; -"SignIn.EmailMismatch.Alert.message" = "Вы запросили код для %@, но использовали код для %@. Пожалуйста, убадитесь в том, что вы используете код из %@"; -"SignIn.EmailMissing.Alert.message" = "Почтовый адрес, который вы использовали для входа, не был сохранен. Пожалуйста, попробуйте войти снова."; -"TagSettings.RemoveThisSensor.title" = "Удалить датчик"; -"Share.Success.message" = "Успешно поделились данными датчика"; -"TagSettings.SectionHeader.General.title" = "Основное"; -"TagSettings.Shared.title" = "Поделились"; -"TagSettings.NotShared.title" = "Не делились"; -"Owner.title" = "Заявить о собственности"; -"Owner.ClaimOwnership.button" = "Заявить о владении"; -"Owner.Claim.description" = "Это ваш датчик? Если да, то пожалуйста заявите о владении и датчик будет добавлен в ваш Ruuvi аккаунт. Каждый датчик может иметь только одного владельца. Чтобы заявить права собственности, вам необходимо войти в систему.\n\nПреимущества:\n\n ● Название датчика, изображение фона, данные калибровки и настройки тревог будут безопасно храниться в облаке\n\n ● Получите доступ к датчикам через интернет (требуестся Ruuvi Gateway)\n\n ● Поделитесь данными датчиков с друзьями и членами семьи (требуется Ruuvi Gateway)\n\n ● Просматривайте до 2-х лет истории на сайте station.ruuvi.com (требуется a Ruuvi Gateway)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "Удаляя датчик вы также отказываетесь от владения. Кто-то другой сможет заявить о владении этим датчиком. Каждый датчик может иметь только одного владельца."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "Если вы удалите датчик, то владелец будет уведомлен и вы более не сможете получать данные с него."; -"TagSettings.General.Owner.none" = "Нет владельца"; -"TagSettings.Share.title" = "Поделиться"; -"Menu.LoggedIn.title" = "Пользователь:"; -"Interval.Day.string" = "день"; -"hour" = "час"; -"TagSettings.tagNameTitleLabel.rename.text" = "Датчики будут отсортированы в алфавитном порядке."; -"On" = "Вкл"; -"Off" = "Выкл"; -"DFUUIView.lowBattery.warning.message" = "Уровень заряда батареи датчика слишком низкий и обновление прошивки может завершиться неудачей. Мы рекомендуем заменить батарейку перед обновлением."; -"alert_notification_humidity_high_threshold" = "Влажность выше %@"; -"alert_notification_humidity_low_threshold" = "Влажность ниже %@"; -"alert_notification_pressure_high_threshold" = "Давление выше %@"; -"alert_notification_pressure_low_threshold" = "Давление ниже %@"; -"alert_notification_rssi_high_threshold" = "Сила сигнала выше %@"; -"alert_notification_rssi_low_threshold" = "Сила сигнала ниже %@"; -"alert_notification_temperature_high_threshold" = "Температура выше %@"; -"alert_notification_temperature_low_threshold" = "Температура ниже %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "Пользователь %@ уже совершил вход. Если вы хотите войти под другим аккаунтом, пожалуйста вначале выйдите, а затем повторите попытку."; -"Settings.Label.CloudMode" = "Режим облака"; -"Settings.Label.CloudMode.description" = "Refresh nearby cloud sensors only from the cloud by ignoring their Bluetooth messages and receiving alerts only by email. Requires a Ruuvi Gateway router."; -"internet_connection_problem" = "Проблема с подключением"; -"Widgets.Loading.message" = "загрузка..."; -"Cards.Movements.title" = "движений"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Low battery"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Батарея OK"; -"Widgets.Description.message" = "Create widgets of your favourite Ruuvi sensors. Widgets update from the Ruuvi Cloud. A Ruuvi Gateway router is required."; -"settings_appearance" = "Внешний вид"; -"app_theme" = "Тема приложения"; -"follow_system_theme" = "Системная тема"; -"dark_theme" = "Темная тема"; -"light_theme" = "Светлая тема"; -"Settings.Temperature.Resolution.title" = "Temperature Resolution"; -"Settings.Humidity.Resolution.title" = "Humidity Resolution"; -"Settings.Pressure.Resolution.title" = "Pressure Resolution"; -"Settings.Measurement.Resolution.description" = "Select how accurately you'd like to see the sensors' live measurement values in the app. This setting doesn't affect history charts or alerts."; -"Settings.Measurement.Unit.title" = "Unit"; -"Settings.Measurement.Resolution.title" = "Resolution"; -"MyRuuvi.Settings.DeleteAccount.title" = "Delete Account"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "A confirmation has been sent to your email. To proceed with the deletion, please check your inbox and follow the instructions."; -"TagSettings.Alert.SetTemperature.title" = "Set temperature alert"; -"TagSettings.Alert.SetHumidity.title" = "Set humidity alert"; -"TagSettings.Alert.SetPressure.title" = "Set pressure alert"; -"TagSettings.Alert.SetRSSI.title" = "Set signal strength alert"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Выгрузить историю (csv)"; -"clear_view" = "Clear history view"; -"day_1" = "1 день"; -"day_2" = "2 дня"; -"day_3" = "3 дня"; -"day_4" = "4 дня"; -"day_5" = "5 дней"; -"day_6" = "6 дней"; -"day_7" = "7 дней"; -"day_8" = "8 дней"; -"day_9" = "9 дней"; -"day_10" = "10 дней"; -"day_x" = "%.0f days"; -"more" = "Больше..."; -"all" = "All"; -"longer_history_title" = "Longer history"; -"longer_history_message" = "Ruuvi Station mobile app supports maximum 10 days of history. Ruuvi Cloud subscribers are able to view up to 2 years of historical data using web app at ruuvi.com/station (requires Ruuvi Gateway router)."; -"reading_history_x" = "Bluetooth sync: %.0f"; -"rssi_alert_description" = "Using this alert requires you to be signed in to the app, and that you have claimed the ownership of this sensor and it's in the range of Ruuvi Gateway router. iOS devices are unable to indicate signal strength information of received data sent by Ruuvi sensor when sensor is paired and measurements are being received in the background. Realtime Bluetooth signal strength is shown in the app but doesn't affect this alert."; -"bluetooth_download" = "Bluetooth download"; -"bluetooth_download_description" = "Local sensor data can be downloaded, when you're within its Bluetooth range."; -"download" = "Download"; -"clear_local_history" = "Clear local history"; -"clear_local_history_description" = "Do you want to clear locally stored history data from the app? This won't clear internally stored history from the sensor or history data stored on the Ruuvi Cloud service."; -"TagCharts.FailedToSyncDialog.title" = "Download failed"; -"TagCharts.FailedToSyncDialog.message" = "Bluetooth history download failed. Check that you're within Bluetooth range, your sensor has firmware that supports downloading and that the sensor is not simultaneously connected to another iOS device. Sensor connection is reserved for Ruuvi Station when using connected mode in iOS."; -"TagCharts.TryAgain.title" = "Try again"; -"support" = "Support"; -"full_image_view" = "Full image view"; -"history_view" = "History view"; -"settings_and_alerts" = "Settings & alerts"; -"change_background" = "Change background"; -"check_claim_state" = "Checking claim state"; -"claim_in_progress" = "Claiming in progress"; -"force_claim_sensor" = "Force Claim Sensor"; -"force_claim_sensor_description1" = "This sensor has been claimed by another user. You can force the ownership to your account if you have physical access to this sensor. Each Ruuvi sensor can have only one owner."; -"force_claim_sensor_description2" = "Force Claim is done by using Near-Field Communication (NFC). Make sure NFC is enabled on your mobile device.\n\n\t1. Touch your Ruuvi sensor with your mobile device to start the claiming process.\n\n\t2. When successfully claimed, you will be sent back to Sensor Settings.\n\nIf claiming was unsuccessful or NFC is not available on your device:\n\n\t1. Open the cover of your Ruuvi sensor.\n\n\t2. Locate the round black button (or button \"B\" in case your sensor has 2 buttons) on the white circuit board and press it briefly, then tap on Use BT button to start the claiming process.\n\n\t3. When successfully claimed you will be sent back to Sensor Settings."; -"force_claim" = "Force Claim"; -"claim_wrong_sensor_scanned" = "You are scanning different RuuviTag"; -"view" = "Вид"; -"card_type" = "Card type"; -"image_cards" = "Image cards"; -"simple_cards" = "Simple cards"; -"card_action" = "Card action"; -"open_sensor_view" = "Open sensor view"; -"open_history_view" = "Open history view"; -"change_background_message" = "Select background image. If you're not signed in, you'll lose the image in case of app reinstall."; -"take_photo" = "Take a photo"; -"select_from_gallery" = "Select from phone gallery"; -"select_default_image" = "Select from default images"; -"export_csv_feature_location" = "You can export a sensor's history from its history graph page. Tap the three dots menu icon in the top right corner, and then select \"Export history (csv)\"."; -"low_battery" = "Low battery"; -"change_background_image" = "Изменить фоновое изображение"; -"SignIn.Sync.message" = "Downloading content from the cloud. Please wait."; -"uploading_progress" = "Загружаю: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Sign in to use the widget."; -"Widgets.Unauthorized.Inline.message" = "Sign in to Ruuvi Station"; -"Widgets.Unconfigured.Simple.message" = "Force tap to edit the widget."; -"Widgets.Unconfigured.Rectangular.message" = "Add sensor to use Ruuvi Widget"; -"Widgets.Unconfigured.Inline.message" = "Add sensor to use Ruuvi Widget"; -"Widgets.Unconfigured.Circular.message" = "+Add"; -"Widgets.Select.Sensor.title" = "Selected Ruuvi sensor"; -"Widgets.Sensor.Type.title" = "Selected sensor type"; -"Settings.SectionHeader.General.title" = "ОСНОВНЫЕ"; -"Settings.SectionHeader.Application.title" = "ПРИЛОЖЕНИЕ"; -"empty_chart_message" = "No data available \nin the selected history window."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Let's get to know your Ruuvi Station app."; -"onboarding_swipe_to_continue" = "Swipe to continue →"; -"onboarding_read_sensors_data" = "Read Your Ruuvi Sensors"; -"onboarding_via_bluetooth_or_cloud" = "using Bluetooth or Ruuvi Cloud"; -"onboarding_follow_measurement" = "View all sensors at a glance on your"; -"onboarding_dashboard" = "Dashboard"; -"onboarding_personalise" = "Personalise"; -"onboarding_your_sensors" = "your app with custom names and backgrounds."; -"onboarding_explore_detailed" = "Explore your measurement"; -"onboarding_history" = "History"; -"onboarding_set_custom" = "Set and customise your"; -"onboarding_alerts" = "Alerts"; -"onboarding_share_your_sensors" = "to measure together with your friends and family."; -"onboarding_sharees_can_use" = "Share Sensors"; -"onboarding_handy_widgets" = "Widgets"; -"onboarding_access_widgets" = "Bring your favorite sensors to your Home Screen and Lock Screen as"; -"onboarding_station_web" = "Ruuvi Web App"; -"onboarding_web_pros" = "Large dashboard, multi-year history, email alerts and more on"; -"onboarding_gateway_required" = "A Ruuvi Gateway router is required."; -"onboarding_skip" = "Skip"; -"onboarding_thats_it" = "Almost there!"; -"onboarding_thats_it_already_signed_in" = "Let's get started!"; -"onboarding_go_to_sign_in" = "Ruuvi experience is better when you're signed in. Do it now or continue without cloud features."; -"onboarding_go_to_sign_in_already_signed_in" = "Let's start measuring!"; -"onboarding_continue" = "Next"; -"sign_in_or_create_free_account" = "Sign in or create a free Ruuvi account"; -"to_use_all_app_features" = "No password needed."; -"type_your_email" = "Type your email.."; -"request_code" = "Request Code"; -"no_password_needed" = "A free account will be created for this email if you don't already have one. Only email address is required. We keep your information safe."; -"benefits_sign_in" = "Read more about Ruuvi account benefits or sign in later"; -"use_without_account" = "No thanks, skip"; -"why_should_sign_in" = "Benefits"; -"sensors_ownership_and_settings_stored_in_cloud" = "Signing in to the app has many advantages. Settings will be safely stored to your account:"; -"cloud_stored_ownerships" = "● Sensor ownerships"; -"cloud_stored_names" = "● Custom names"; -"cloud_stored_alerts" = "● Background images"; -"cloud_stored_backgrounds" = "● Alert settings"; -"cloud_stored_calibration" = "● Calibration settings"; -"cloud_stored_sharing" = "● App settings"; -"note" = "Note!"; -"claim_warning" = "Secure the ownership information of your sensors by claiming their ownerships in the app."; -"lets_do_it" = "Let's Sign In"; -"enter_code" = "Enter Code"; -"dashboard_no_sensors_message" = "Seems that you don't have any Ruuvi sensors added yet."; -"dashboard_no_sensors_message_signed_out" = "Вы не вошли в аккаунт.\n\nЕсли у вас уже есть аккаунт Ruuvi и добавлены датчики в него, то они будут автоматичеки синхронизированы с мобильным приложением после того как вы войдете в свой аккаунт."; -"add_a_sensor" = "Add a Sensor"; -"changelog" = "(changelog)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Average"; -"shared_to_x" = "Shared to %d/%d"; -"settings_alert_notifications" = "Уведомления о тревогах"; -"settings_alert_sound" = "Alert Sound"; -"settings_alert_sound_description" = "Select push notification alert sound."; -"settings_alerts_footer_description" = "You can also adjust Notification settings under iOS Settings -> Notifications"; -"settings_alerts_footer_description_link_mask" = "iOS Settings -> Notifications"; -"settings_email_alerts" = "Email Alerts"; -"settings_email_alerts_description" = "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive email alerts by enabling this."; -"settings_push_alerts" = "Push Alerts"; -"settings_push_alerts_description" = "If you are using Ruuvi Cloud and Ruuvi Gateway, you will be able to receive push alerts by enabling this."; -"synchronisation" = "Синхронизация"; -"gatt_sync_description" = "Ruuvi Station downloads the internal history of the sensor for the last 10 days if the measurement history is available.\n\nThe history is downloaded using a Bluetooth connection. Make sure you are near the sensor."; -"do_not_show_again" = "Больше не показывать"; -"sign_in_continue" = "Продолжить"; -"signing_in_is_optional" = "(Авторизация не обязательна)"; -"Defaults.UserAuthorized.title" = "User Authorized"; -"Defaults.DashboardTapActionChart.title" = "Show Chart on Dashboard Card Tap"; -"Defaults.DevServer.title" = "Use Dev Server"; -"Defaults.DevServer.message" = "Changing Ruuvi Cloud endpoint requires signing out from current session and restart the app. Are you sure?"; -"Defaults.ShowEmailAlertsSettings.title" = "Show email alerts settings"; -"Defaults.ShowPushAlertsSettings.title" = "Show push alerts settings"; -"use_nfc" = "Use NFC"; -"use_bluetooth" = "Use BT"; -"sensor_not_found_error" = "Sensor not found. Try again."; -"Defaults.HideNFC.title" = "Hide NFC Option for sensor contest"; -"settings_alert_sound_default" = "System Default"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi Alert"; -"add_with_nfc" = "Add with NFC"; -"sensor_details" = "Sensor Details"; -"add_sensor" = "Add Sensor"; -"copy_mac_address" = "Копировать MAC-адрес"; -"copy_unique_id" = "Скопировать уникальный идентификатор"; -"name" = "Name:"; -"mac_address" = "Mac Address:"; -"go_to_sensor" = "Go to sensor card"; -"unique_id" = "Unique ID:"; -"firmware_version" = "Firmware Version:"; -"Close" = "Закрыть"; -"add_sensor_nfc_df3_error" = "This sensor cannot be added with NFC due to old firmware. Please add the sensor with Bluetooth and update firmware."; -"add_sensor_description" = "Здесь показаны датчики Ruuvi, которые еще не были добавлены в приложение. Нажмите на сенсор, чтобы добавить его."; -"add_sensor_via_nfc" = "Alternatively, you can add a sensor using NFC by selecting Add with NFC and touching it with your phone."; -"unclaim_sensor" = "Unclaim sensor"; -"unclaim" = "Unclaim"; -"unclaim_sensor_description" = "Ownership of this sensor has been claimed to your Ruuvi account. Press Unclaim to remove this sensor's settings and related data from your Ruuvi account."; -"claim_sensor_ownership" = "Заявить о собственности на датчик"; -"do_you_own_sensor" = "Это ваш датчик?"; -"owners_plan" = "Owner's Ruuvi Plan"; -"alert_cloud_connection_title" = "Cloud Connection"; -"alert_cloud_connection_description" = "Alert if sensor data hasn't been updated to the cloud for longer than %d minutes."; -"alert_cloud_connection_dialog_description" = "Enter the desired delay to be used in minutes before alert is triggered. Minimum value is 2 minutes."; -"alert_cloud_connection_dialog_title" = "Set cloud connection alert"; -"rename" = "Переименовать"; -"chart_stat_show" = "Show min/max/avg"; -"chart_stat_hide" = "Hide min/max/avg"; -"settings_alert_limit_notification" = "Ограничить количество уведомлений"; -"settings_alert_limit_notification_description" = "Показывать уведомления не чаще одного раза в час, даже если тревога сработала повторно."; -"share_pending" = "Share pending"; -"share_pending_message" = "Shared successfully! This email address isn't linked to a Ruuvi account yet. An invite to create a free account has been sent. Once created, you'll see it in the sharee listing."; -"dialog_are_you_sure" = "Вы уверены?"; -"dialog_operation_undone" = "This operation cannot be undone."; -"remove_cloud_history_title" = "Remove cloud history"; -"remove_cloud_history_description" = "I also want to remove sensor history data from Ruuvi Cloud."; -"remove_claimed_sensor_description" = "By removing the sensor, your sensor ownership status will be revoked and sensor settings, such as name, background image, calibration settings and alert settings will be removed. After removal, someone else can claim ownership of the sensor. Each Ruuvi sensor can have only one owner."; -"remove_shared_sensor_description" = "If you choose to remove this shared sensor, the owner of the sensor will be notified and you will not be able to access the sensor anymore.\n\nYou will also lose any related sensor settings like name, background image and alert configurations."; -"remove_local_sensor_description" = "If you choose to remove this sensor, it will result in the deletion of your locally stored measurement history, along with the removal of any related sensor settings like name, background image, calibration, and alert configurations.\n\nYou can add this sensor later again, if needed."; -"activity_saving_to_cloud" = "Saving to cloud...please wait."; -"activity_saving_success" = "Saved successfully."; -"activity_saving_fail" = "Couldn't save changes to cloud."; -"activity_ongoing_generic" = "Please wait..."; -"activity_success_generic" = "Operation successful."; -"activity_failed_generic" = "Operation failed."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; diff --git a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/sv.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/sv.lproj/Localizable.strings deleted file mode 100644 index a6979e528..000000000 --- a/Common/RuuviLocalization/Sources/RuuviLocalization/Resources/sv.lproj/Localizable.strings +++ /dev/null @@ -1,767 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -"Done" = "Klar"; -"Copy" = "Kopiera"; -"Confirm" = "Bekräfta"; -"Remove" = "Ta bort"; -"N/A" = "-"; -"g" = "g"; -"About.Version.text" = "Version"; -"Background.PresentNotifications.title" = "Visa Notifikationer"; -"Background.KeepConnection.title" = "Håll Anslutningen"; -"Background.Interval.Every.string" = "varje"; -"Background.Interval.Min.string" = "min"; -"Background.readRSSITitle.title" = "Läs RSSI"; -"BluetoothError.disconnected" = "Frånkopplad"; -"Cards.BluetoothDisabledAlert.title" = "Bluetooth är inte aktiverat"; -"Cards.BluetoothDisabledAlert.message" = "Ruuvi Station behöver bluetooth för att fungera. Gå till Inställningar och aktivera Bluetooth."; -"Cards.WebTagAPILimitExcededError.Alert.title" = "För många förfrågningar"; -"Cards.WebTagAPILimitExcededError.Alert.message" = "Försök igen om 5 minutes"; -"Cards.KeepConnectionDialog.message" = "Det ser ut som din Ruuvi enhet har anslutningsbar firmware. Vill du att anslutningen till enheten skall hållas öppen i bakgrunden? Detta gör att histogram och alarm fungerar även om applikationen är minimerad."; -"Cards.KeepConnectionDialog.Dismiss.title" = "Avbryt"; -"Cards.KeepConnectionDialog.KeepConnection.title" = "Håll Anslutningen"; -"Cards.LegacyFirmwareUpdateDialog.message" = "Det verkar som om din sensor använder en gammal programvaruversion. För att komma åt nya funktioner som historikgrafer, alarm och molntjänster krävs en mjukvaruuppdatering."; -"Cards.LegacyFirmwareUpdateDialog.CancelConfirmation.message" = "Är du säker? Utan uppdatering kommer du inte att kunna göra anspråk på äganderätten till sensorn, ladda ner historikdiagram och ställa in alarm. Uppdateringen innehåller även buggfixar. Om du avbryter nu kan du starta uppdateringsprocessen igen från sensorns inställningssida."; -"Cards.LegacyFirmwareUpdateDialog.CheckForUpdate.title" = "Visa uppdateringsinstruktioner"; -"Cards.Connected.title" = "Ansluten"; -"Cards.Error.ReverseGeocodingFailed.message" = "Det gick inte att ladda data för Virtual Sensor. Gränsen för geokodöverföring överskriden."; -"Cards.UpdatedLabel.NoData.message" = "Ingen data under de senaste 10 dagarna"; -"CoreError.failedToGetPngRepresentation" = "Det gick inte att få PNG-representation"; -"CoreError.failedToGetDocumentsDirectory" = "Det gick inte att hämta bakgrundskatalog"; -"CoreError.failedToGetCurrentLocation" = "Det gick inte att få aktuell plats"; -"CoreError.failedToGetDataFromResponse" = "Svaret innehåller ingen information"; -"CoreError.locationPermissionDenied" = "Saknar rättigheter för Platstjänster"; -"CoreError.locationPermissionNotDetermined" = "Status för platstillstånd kunde inte fastställas"; -"CoreError.objectNotFound" = "Inget objekt hittades"; -"CoreError.objectInvalidated" = "Objekt ogiltigt"; -"CoreError.unableToSendEmail" = "Kunde inte skicka e-post"; -"Defaults.navigationItem.title" = "Standardinställningar"; -"Defaults.WelcomeShown.title" = "Välkomst Visad"; -"Defaults.ChartsSwipeInstructionWasShown.title" = "Histogram Swipe Tips Har Visats"; -"Defaults.Interval.Sec.string" = "sek"; -"Defaults.Interval.Min.string" = "min"; -"Defaults.ConnectionTimeout.title" = "Anslutningstimeout"; -"Defaults.ServiceTimeout.title" = "Service Timeout"; -"Defaults.CardsSwipeHint.title" = "Kort Swipe Tips Har Visats"; -"Defaults.AlertsRepeatInterval.title" = "Alarmintervall"; -"Defaults.WebPullInterval.title" = "Alarmintervall för Virtuella Sensorer"; -"Defaults.PruningOffsetHours.title" = "Beskärning av förskjutningstider"; -"Defaults.Interval.Hour.string" = "h"; -"Defaults.ChartDurationHours.title" = "Historikens längd"; -"Defaults.AppLaunchRequiredForReview.Count.title" = "Appstartsräkning för att be om granskning för första gången"; -"Defaults.AskReviewIfLaunchDivisibleBy.Count.title" = "Fråga granskning om appstart är delbart med"; -"DiscoverTable.SectionTitle.WebTags" = "Virtuella sensorer"; -"DiscoverTable.BluetoothDisabledAlert.title" = "Bluetooth är inte aktiverat"; -"DiscoverTable.BluetoothDisabledAlert.message" = "Ruuvi Station behöver bluetooth för att fungera. Gå till Inställningar och aktivera Bluetooth."; -"DiscoverTable.NavigationItem.title" = "Lägg till en ny sensor"; -"DiscoverTable.GetMoreSensors.button.title" = "Köp Ruuvi-sensorer"; -"DiscoverTable.NoDevicesSection.NotFound.text" = "(Inga sensorer inom Bluetooths räckvidd)"; -"DiscoverTable.NoDevicesSection.BluetoothDisabled.text" = "(Bluetooth är avaktiverat)"; -"DiscoverTable.WebTagsInfoDialog.message" = "Virtuella Sensorer visar offentlig väder data som upprätthålls av lokala väderstationer."; -"DiscoverTable.RuuviDevice.prefix" = "Ruuvi"; -"ErrorPresenterAlert.Error" = "Fel"; -"ErrorPresenterAlert.OK" = "OK"; -"ExpectedError.missingOpenWeatherMapAPIKey" = "OpenWeatherMap API Key saknas. Du kan få en från openweathermap.org website och sätt den sedan i filen station/Classes/Networking/Assembly/Networking.plist"; -"ExpectedError.isAlreadySyncingLogsWithThisTag" = "Applikationen håller redan på att synkronisera logginformation med denna sensor"; -"ExpectedError.failedToDeleteTag" = "Det går inte att ta bort en ansluten enhet som inte kan nås. Kontrollera Bluetooth-anslutningen."; -"ExportService.Date" = "Datum"; -"ExportService.ISO8601" = "ISO8601"; -"ExportService.Temperature" = "Temperatur (%@)"; -"ExportService.Humidity" = "Luftfuktighet (%@)"; -"ExportService.DewPoint" = "Daggpunkt (%@)"; -"ExportService.Pressure" = "Lufttryck (%@)"; -"ExportService.Voltage" = "Spänning (V)"; -"ExportService.MovementCounter" = "Rörelseräknare"; -"ExportService.MeasurementSequenceNumber" = "Mätningssekvensnummer"; -"ExportService.TXPower" = "Sändningseffekt"; -"ForegroundRow.advertisement.section" = "ENHETSMEDDELANDEN"; -"ForegroundRow.advertisement.title" = "Spara enhetsmeddelanden"; -"ForegroundRow.connection.section" = "LOGS"; -"ForegroundRow.connection.title" = "Anslut och synkronisera loggar"; -"Foreground.navigationItem.title" = "Processer"; -"Foreground.Interval.Every.string" = "Varje"; -"Foreground.Interval.Min.string" = "min"; -"ForegroundRow.webTags.title" = "Ladda och spara från webben"; -"ForegroundRow.webTags.section" = "VIRTUELLA SENSORER"; -"Foreground.Interval.All.string" = "Alla"; -"Heartbeat.Interval.Every.string" = "varje"; -"Heartbeat.Interval.Min.string" = "min"; -"Heartbeat.readRSSITitle.title" = "Läs RSSI"; -"Heartbeat.Interval.Sec.string" = "sek"; -"Heartbeat.Interval.All.string" = "Alla"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.title" = "Är du säker?"; -"HumidityCalibration.ClearCalibrationConfirmationAlert.message" = "Du kommer att rensa luftfuktighetskalibreringen. Det går inte att ångra detta. Tryck på \"Bekräfta\" för att fortsätta."; -"HumidityCalibration.CalibrationConfirmationAlert.title" = "Är du säker?"; -"HumidityCalibration.CalibrationConfirmationAlert.message" = "Du kommer att kalibrera luftfuktighetssensorn. Tryck på \"Bekräfta\" för att fortsätta."; -"Language.English" = "English"; -"Language.Finnish" = "Suomi"; -"Language.Russian" = "Русский"; -"Language.Swedish" = "Svenska"; -"Language.French" = "Français"; -"Language.German" = "Deutsch"; -"LocalNotificationsManager.DidConnect.title" = "Ansluten"; -"LocalNotificationsManager.DidDisconnect.title" = "Frånkopplad"; -"LocalNotificationsManager.Disable.button" = "Stäng av"; -"LocalNotificationsManager.LowDewPoint.title" = "För låg Daggpunkt!"; -"LocalNotificationsManager.HighDewPoint.title" = "För hög Daggpunkt!"; -"PermissionPresenter.NoPhotoLibraryAccess.message" = "Ruuvi Station behöver tillgång till dina bilder för att använda den här funktionen."; -"PermissionPresenter.NoCameraAccess.message" = "Ruuvi Station behöver tillgång kameran för att använda den här funktionen."; -"PermissionPresenter.NoLocationAccess.message" = "Ruuvi Station behöver tillgång till din plats för att använda den här funktionen."; -"PermissionPresenter.settings" = "Inställningar"; -"PermissionPresenter.NoPushNotificationsPermission.message" = "Ruuvi Station behöver behörighett ill Push-meddelanden för att aktivera den här funktionen."; -"PhotoPicker.Sheet.message" = "Välj ett foto"; -"PhotoPicker.Sheet.library" = "Välj från bilder"; -"PhotoPicker.Sheet.camera" = "Ta ett foto"; -"Settings.SegmentedControl.Humidity.Relative.title" = "Rel"; -"Settings.SegmentedControl.Humidity.Absolute.title" = "Abs"; -"Settings.SegmentedControl.Humidity.DewPoint.title" = "Dew"; -"Settings.Label.Language.text" = "Språk"; -"Settings.Language.Dialog.title" = "Välj språk"; -"Settings.Language.Dialog.message" = "Öppna inställningar och tryck på Språk för att ändra språket i appen. -Om du inte kan se språkalternativet i inställningarna, se till att du har lagt till minst ett föredraget språk i systeminställningarna: Inställningar -> Allmänt -> Språk och region."; -"Settings.Label.Foreground" = "Processer"; -"Settings.Label.Defaults" = "Standardinställningar"; -"OWMError.failedToParseOpenWeatherMapResponse" = "Det gick inte att tolka Open Weather Map data"; -"OWMError.apiLimitExceeded" = "API gräns överskriden"; -"OWMError.notAHttpResponse" = "Ingen HTTP respons"; -"OWMError.invalidApiKey" = "Ogiltig API Key"; -"TagCharts.NoChartData.text" = "Ingen histogram data"; -"TagCharts.BluetoothDisabledAlert.title" = "Bluetooth är inte aktiverat"; -"TagCharts.BluetoothDisabledAlert.message" = "Ruuvi Station behöver Bluetooth för att lyssna efter sensorer. Gå till Inställningar och aktivera Bluetooth."; -"TagCharts.Clear.title" = "Rensa"; -"TagCharts.SyncConfirmationDialog.title" = "Är du säker?"; -"TagCharts.DeleteHistoryConfirmationDialog.button.delete.title" = "Radera"; -"TagCharts.DeleteHistoryConfirmationDialog.title" = "Är du säker?"; -"TagCharts.Status.Disconnecting" = "Avbryter anslutning..."; -"TagCharts.Status.Success" = "Lyckades"; -"TagCharts.Status.Error" = "Fel"; -"TagSettings.UUID.Alert.title" = "UUID"; -"TagSettings.UpdateFirmware.Alert.title" = "RAWv2-format krävs"; -"TagSettings.UpdateFirmware.Alert.message" = "Värden som saknas kan bara visas i nyare enhetsmjukvara med RAWv2-format."; -"TagSettings.UpdateFirmware.Alert.Buttons.LearnMore.title" = "Läs mer"; -"TagCharts.Dismiss.Alert.message" = "Nedladdning av historik via Bluetooth pågår. Vänta."; -"TagCharts.AbortSync.Alert.message" = "Ibland går nedladdningen av historik långsamt på grund av Bluetooth-anslutningen. Var god vänta ett ögonblick."; -"TagCharts.AbortSync.Button.title" = "Avbryt nedladdning"; -"TagSettings.EmptyValue.sign" = "-"; -"TagSettings.HumidityIsClipped.Alert.title" = "Luftfuktigheten är justerad"; -"TagSettings.HumidityIsClipped.Alert.message" = "Fuktighetsvärdet efter kalibreringen är större än 100%. Detta är inte rimligt, så det maximala värdet visas som 100%."; -"TagSettings.HumidityIsClipped.Alert.Fix.button" = "Fixa"; -"TagSettings.navigationItem.title" = "Inställningar"; -"TagSettings.tagNameTitleLabel.text" = "Sensornamn"; -"TagSettings.humidityTitleLabel.text" = "Luftfuktighet"; -"TagSettings.uuidTitleLabel.text" = "UUID"; -"TagSettings.macAddressTitleLabel.text" = "MAC Adress"; -"TagSettings.dataFormatTitleLabel.text" = "Dataformat"; -"TagSettings.accelerationXTitleLabel.text" = "Acceleration X"; -"TagSettings.accelerationYTitleLabel.text" = "Acceleration Y"; -"TagSettings.accelerationZTitleLabel.text" = "Acceleration Z"; -"TagSettings.txPowerTitleLabel.text" = "Sändningseffekten"; -"TagSettings.mcTitleLabel.text" = "Rörelseräknare"; -"TagSettings.msnTitleLabel.text" = "Mätningssekvensnummer"; -"TagSettings.SectionHeader.Remove.title" = "TA BORT"; -"TagSettings.Label.noValues.text" = "INGA VÄRDEN?"; -"TagSettings.SectionHeader.Calibration.title" = "KALIBRERING"; -"TagSettings.SectionHeader.BTConnection.title" = "BLUETOOTH ANSLUTNING"; -"TagSettings.PairAndBackgroundScan.Unpaired.title" = "Para ihop och använd bakgrundsskanning"; -"TagSettings.PairAndBackgroundScan.Pairing.title" = "Anslutning till sensorn"; -"TagSettings.PairAndBackgroundScan.Paired.title" = "Parat och bakgrundsskanning på"; -"TagSettings.PairAndBackgroundScan.description" = "Alarm är inte tillgängliga via Bluetooth-anslutning om bakgrundsskanning inte är aktiverad. Endast en iOS-enhet kan paras ihop med Ruuvi-sensorn åt gången."; -"TagSettings.PairError.CloudMode.description" = "Sensorn kan inte anslutas till via Bluetooth när molnläget är aktivt. Du kan återaktivera Bluetooth-anslutning för molnsensorerna genom att inaktivera molnläget i appinställningarna."; -"TagSettings.PairError.Timeout.description" = "Anslutningstimeout. Parningen misslyckades. Försök igen."; -"TagSettings.dataSourceTitleLabel.text" = "Data Mottagen Via"; -"TagSettings.DataSource.Heartbeat.title" = "Hjärtslag"; -"TagSettings.DataSource.Advertisement.title" = "Advertisement"; -"TagSettings.DataSource.Network.title" = "Moln"; -"TagSettings.Label.disabled.text" = "INAKTIVERAD?"; -"TagSettings.AlertsAreDisabled.Dialog.BothNotConnectedAndNoPNPermission.message" = "Alarm är inaktiverade eftersom enheten inte är ansluten och behörigheten att se Push-meddelanden saknas. Anslut först till enheten."; -"TagSettings.AlertsAreDisabled.Dialog.Connect.title" = "Anslut"; -"TagSettings.AlertsAreDisabled.Dialog.NotConnected.message" = "Alarm är inaktiverade eftersom du inte är ansluten till enheten."; -"TagSettings.Alert.CustomDescription.placeholder" = "Redigera beskrivningen..."; -"TagSettings.Alert.CustomDescription.title" = "Ställ in ett alarm-meddelande"; -"TagSettings.Alerts.Humidity.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"TagSettings.Alerts.DewPoint.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"TagSettings.dewPointAlertTitleLabel.text" = "Daggpunkt"; -"TagSettings.Alerts.Pressure.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"TagSettings.Alerts.Connection.description" = "Alarmera vid anslutning/frånkoppling"; -"TagSettings.ConnectionAlert.title" = "Anslutning"; -"TagSettings.SectionHeader.Firmware.title" = "Programvara"; -"TagSettings.Firmware.CurrentVersion" = "Nuvarande version"; -"TagSettings.Firmware.CurrentVersion.VeryOld" = "Väldigt gammal"; -"TagSettings.Firmware.UpdateFirmware" = "Uppdatera"; -"UnexpectedError.callbackErrorAndResultAreNil" = "Både resultatet och felmeddelande är nil"; -"UnexpectedError.callerDeinitedDuringOperation" = "Uppringare avallokerad under operation"; -"UnexpectedError.failedToReverseGeocodeCoordinate" = "Det gick inte att få geokoordinaterna för platsen"; -"UnexpectedError.failedToFindRuuviTag" = "Hittade inte sensorn"; -"UnexpectedError.failedToFindLogsForTheTag" = "Ingen sensorlogginformation hittades"; -"UnexpectedError.viewModelUUIDIsNil" = "View Model UUID är nil"; -"UnexpectedError.attemptToReadDataFromRealmWithoutLUID" = "Försökte läsa data från Realm utan LUID"; -"UnexpectedError.failedToFindVirtualTag" = "Hittade inte den virtuella sensorn"; -"HumidityUnit.Dew.title" = "Daggpunkt (%@)"; -"WebTagLocationSource.current" = "Din plats"; -"WebTagLocationSource.manual" = "Välj från karta"; -"WebTagSettings.confirmTagRemovalDialog.title" = "Ta bort virtuell sensor"; -"WebTagSettings.confirmTagRemovalDialog.message" = "Är du säker på att du vill ta bort den här virtuella sensorn?"; -"WebTagSettings.Location.Current" = "Din plats"; -"WebTagSettings.confirmClearLocationDialog.title" = "Renas Plats"; -"WebTagSettings.confirmClearLocationDialog.message" = "Är du säker på att du vill rensa plats för den här virtuella sensorn? Nuvarande plats kommer att användas istället."; -"WebTagSettings.navigationItem.title" = "Inställningar"; -"WebTagSettings.Label.BackgroundImage.text" = "BAKGRUNDSBILD"; -"WebTagSettings.Label.Location.text" = "Plats"; -"WebTagSettings.Button.Remove.title" = "TA BORT"; -"WebTagSettings.SectionHeader.Name.title" = "NAMN"; -"WebTagSettings.SectionHeader.MoreInfo.title" = "MER INFO"; -"WebTagSettings.Alerts.Temperature.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"WebTagSettings.Alerts.Off" = "Av"; -"WebTagSettings.temperatureAlertTitleLabel.text" = "Temperatur"; -"WebTagSettings.Label.disabled.text" = "INAKTIVERAD?"; -"WebTagSettings.Label.alerts.text" = "ALARM"; -"WebTagSettings.AlertsAreDisabled.Dialog.BothNoPNPermissionAndNoLocationPermission.message" = "Den virtuella sensorns alarmfunktion kräver rätt att visa både platsinformation och push-meddelanden. Kontrollera applikationsinställningarna."; -"WebTagSettings.AlertsAreDisabled.Dialog.Settings.title" = "Inställningar"; -"WebTagSettings.AirHumidityAlert.title" = "Luftfuktighet"; -"WebTagSettings.Alerts.Humidity.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"WebTagSettings.Alerts.DewPoint.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"WebTagSettings.dewPointAlertTitleLabel.text" = "Daggpunkt"; -"WebTagSettings.PressureAlert.title" = "Luftfuktighet"; -"WebTagSettings.Alerts.Pressure.description" = "Alarmera om mindre än %.0f eller mer än %.0f"; -"Welcome.description.text" = "Klicka på Skanna för att hitta sensorer i närheten."; -"ExportService.AccelerationX" = "Acceleration X"; -"ExportService.AccelerationY" = "Acceleration Y"; -"ExportService.AccelerationZ" = "Acceleration Z"; -"DiscoverTable.SectionTitle.Devices" = "Ruuvi sensorer i närheten"; -"ago" = "sedan"; -"TagSettings.MovementAlert.title" = "Rörelse"; -"TagSettings.Alerts.Movement.description" = "Alarmera om rörelse upptäcks"; -"LocalNotificationsManager.HighHumidity.title" = "För hög Luftfuktighet!"; -"LocalNotificationsManager.LowHumidity.title" = "För låg Luftfuktighet!"; -"LocalNotificationsManager.DidMove.title" = "Rörelse upptäckt!"; -"LocalNotificationsManager.HighPressure.title" = "För högt Lufttryck!"; -"LocalNotificationsManager.LowPressure.title" = "För lågt Lufttryck!"; -"LocalNotificationsManager.HighSignal.title" = "För hög signalstyrka!"; -"LocalNotificationsManager.LowSignal.title" = "För låg signalstyrka!"; -"LocalNotificationsManager.HighTemperature.title" = "För hög temperatur!"; -"LocalNotificationsManager.LowTemperature.title" = "För låg temperatur!"; -"TagSettings.Alerts.Off" = "Av"; -"TagSettings.Alerts.Temperature.description" = "Alarmera när mindre än %.0f eller mer än %.0f"; -"TagSettings.Label.alerts.text" = "Alarm"; -"TagSettings.backgroundImageLabel.text" = "Bakgrundsbild"; -"TagSettings.batteryVoltageTitleLabel.text" = "Batterispänning"; -"HumidityCalibration.Button.Calibrate.title" = "Kalibrera"; -"HumidityCalibration.lastCalibrationDate.format" = "Kalibrerad: %@"; -"HumidityCalibration.Description.text" = "För att mäta relativ luftfuktighet så exakt som möjligt rekommenderar vi att kalibrera sensorn med natriumklorid (salt). Se videor om hur du enkelt gör det hemma."; -"HumidityCalibration.Label.note.text" = "Observera att kalibreringsdata lagras lokalt i din mobila enhet. Om du tar bort Ruuvi Station appen och installerar den igen behöver du kalibrera på nytt."; -"HumidityCalibration.VideoTutorials.link" = "Se videor"; -"Cancel" = "Avbryt"; -"HumidityCalibration.Button.Clear.title" = "Rensa"; -"TagCharts.DeleteHistoryConfirmationDialog.message" = "Radera historisk data från appen?"; -"HumidityCalibration.Button.Close.title" = "Stäng"; -"TagCharts.Status.Serving" = "Synkroniserar..."; -"TagCharts.Status.Connecting" = "Ansluter..."; -"TagSettings.ConnectStatus.Disconnected" = "Frånkopplad"; -"TagCharts.Export.title" = "EXPORTERA"; -"h" = "h"; -"About.AboutHelp.contents" = "Ruuvi Station är en lättanvänd applikation som låter dig övervaka mätdata från Ruuvi-sensorer."; -"About.AboutHelp.header" = "Om / Hjälp"; -"About.TagsCount.text" = "Tillagda sensorer: %d"; -"About.MeasurementsCount.text" = "Sparade mätningar: %d"; -"About.DatabaseSize.text" = "Databasens storlek: %@"; -"About.More.contents" = "Ruuvis hemsida: ruuvi.com\nRuuvi Forum: f.ruuvi.com\nRuuvi Blog: ruuvi.com/blog\nRuuvi Twitter: twitter.com/ruuvicom"; -"About.More.header" = "Läs mer"; -"About.OpenSource.contents" = "Precis som Ruuvi-sensorer är Ruuvi Station-appar öppen källkod. Följ utvecklingen och bidra på: github.com/ruuvi"; -"About.OpenSource.header" = "Öppen källkod"; -"About.OperationsManual.contents" = "Kom igång med Ruuvi Stations mobilapplikation med våra onlineguider: ruuvi.com/support/station-mobile"; -"About.OperationsManual.header" = "Bruksanvisning"; -"About.Privacy.contents" = "Användning av applikationen kräver godkännande av användarvillkoren\nruuvi.com/terms"; -"About.Privacy.header" = "Integritetspolicy"; -"About.Troubleshooting.contents" = "Hitta hjälp med att använda Ruuvi Station-appar, Ruuvi-produkter och Ruuvi Cloud-tjänst från vårt supportcenter: ruuvi.com/support"; -"About.Troubleshooting.header" = "Felsökning"; -"hours" = "Timmar"; -"Interval.Days.string" = "Dagar"; -"TagSettings.AirHumidityAlert.title" = "Luftfuktighet (%@)"; -"HumidityUnit.gm3.title" = "Absolut (g/m³)"; -"g/m³" = "g/m³"; -"HumidityUnit.Percent.title" = "Relativ (%)"; -"TagSettings.Mac.Alert.title" = "MAC Adress"; -"Menu.Label.AboutHelp.text" = "Om / Hjälp"; -"Menu.Label.AddAnNewSensor.text" = "Lägg till en ny Sensor"; -"Menu.Label.AppSettings.text" = "App Inställningar"; -"Menu.Label.GetMoreSensors.text" = "Köp Ruuvi-sensorer"; -"Ruuvi.BuySensors.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Ruuvi.BuySensors.Menu.URL.IOS" = "https://ruuvi.com/products?utm_campaign=app_ua_nav&utm_medium=referral&utm_source=ios"; -"Menu.Label.BuyRuuviGateway.text" = "Köp Ruuvi Gateway"; -"Menu.BuyGateway.URL.IOS" = "https://ruuvi.com/gateway?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.WhatToMeasure.text" = "Vad ska man mäta med Ruuvi?"; -"Menu.Measure.URL.IOS" = "https://ruuvi.com/ideas?utm_campaign=app_ua&utm_medium=referral&utm_source=ios"; -"Menu.Label.Feedback.text" = "Skicka Feedback"; -"Menu.Label.MyRuuviAccount.text" = "Mitt Ruuvi-konto"; -"min" = "min"; -"minutes" = "Minuter"; -"TagSettings.Label.moreInfo.text" = "Mer info"; -"TagSettings.SectionHeader.Name.title" = "NAMN"; -"No" = "Nej"; -"OK" = "OK"; -"Cards.NoSensors.title" = "Inga sensorer har lags till\nTryck här för att lägga till sensorer"; -"TagSettings.PressureAlert.title" = "Lufttryck (%@)"; -"UnitPressure.hectopascal.title" = "Hektopascal (hPa)"; -"hPa" = "hPa"; -"UnitPressure.inchOfMercury.title" = "Tum kvicksilver (inHg)"; -"UnitPressure.millimetreOfMercury.title" = "Millimeter kvicksilver (mmHg)"; -"TagCharts.Status.ReadingHistory" = "Läser historik"; -"TagSettings.rssiTitleLabel.text" = "Signalstyrka (RSSI)"; -"signal_strength_dbm" = "Signalstyrka (dBm)"; -"s" = "s"; -"Welcome.scan.title" = "SKANNA"; -"Background.Interval.Sec.string" = "sek"; -"Settings.navigationItem.title" = "Inställningar"; -"Settings.BackgroundScanning.title" = "Bakgrundsskanning"; -"Settings.BackgroundScanning.Footer.message" = "Viktiga anteckningar: Loggning av Bluetooth-bakgrundshistorik och Bluetooth-alarm fungerar endast när bakgrundsskanning är aktiverad. Om du inaktiverar bakgrundsskanning kommer alla parade Ruuvi-sensorer att automatiskt avparas och du måste para dem igen från deras inställningssidor."; -"Settings.BackgroundScanning.interval" = "Dataloggningsintervall"; -"Settings.Label.Chart" = "Historik"; -"ChartSettings.AllPoints.title" = "Visa alla mätningar"; -"ChartSettings.AllPoints.description" = "Den här funktionen kan göra appen laddar historik långsammare."; -"ChartSettings.DrawDots.title" = "Visa datapunkter"; -"ChartSettings.DrawDots.description" = "Datapunkter gör det lättare att utforska lagrad historikinformation."; -"Defaults.ChartIntervalSeconds.title" = "Historikens noggrannhet"; -"ChartSettings.Duration.title" = "Historik"; -"ChartSettings.Duration.description" = "Ange hur långt bak historiken skall visas, mellan 1 - 10 dagar."; -"Settings.Label.HumidityUnit.text" = "Luftfuktighetsenhet"; -"Settings.Label.Temperature" = "Temperatur"; -"Settings.Label.Humidity" = "Fuktighet"; -"Settings.Label.Pressure" = "Lufttryck"; -"Settings.ChooseHumidityUnit.text" = "Välj den fuktighetsenhet som du vill ska visas."; -"Settings.Label.PressureUnit.text" = "Tryckenhet"; -"Settings.ChoosePressureUnit.text" = "Välj den tryckenhet du vill ska visas."; -"Settings.Label.TemperatureUnit.text" = "Temperaturenhet"; -"Settings.ChooseTemperatureUnit.text" = "Välj den temperaturenhet som du vill ska visas."; -"dBm" = "dBm"; -"TagCharts.Sync.title" = "Synk"; -"TagCharts.SyncConfirmationDialog.message" = "Ladda ner historik-data från sensorn?"; -"WebTagSettings.Label.TagName.text" = "Sensornamn"; -"TagSettings.confirmTagRemovalDialog.title" = "Ta bort sensor"; -"TagSettings.confirmTagRemovalDialog.message" = "Är du säker på att du vill ta bort den här sensorn?"; -"TagSettings.temperatureAlertTitleLabel.text" = "Temperatur (%@)"; -"TemperatureUnit.Celsius.title" = "Celsius (℃)"; -"ºC" = "°C"; -"TemperatureUnit.Fahrenheit.title" = "Fahrenheit (℉)"; -"ºF" = "°F"; -"TemperatureUnit.Kelvin.title" = "Kelvin (K)"; -"Updated" = "Uppdaterad"; -"V" = "V"; -"RuuviOnboard.Welcome.title" = "Det här kan Ruuvi Station göra för dig."; -"RuuviOnboard.Measure.title" = "Mät förhållandena i din miljö: temperatur, luftfuktighet och lufttryck."; -"RuuviOnboard.Access.title" = "Visa sensordata i realtid eller granska historisk data som är lagrad på enheten."; -"RuuviOnboard.Alerts.title" = "Ställ in alarm och få notiser om dem."; -"RuuviOnboard.Cloud.title" = "Logga in för att få tillgång till alla appens funktioner."; -"RuuviOnboard.Cloud.subtitle" = "Verifiera ditt sensorägande med ett gratis Ruuvi Cloud-konto."; -"RuuviOnboard.Cloud.subtitle.signed" = "Bra! Du är redan inloggad!"; -"RuuviOnboard.Start.title" = "Tryck på SCAN för att se sensorerna i närheten."; -"Yes" = "Ja"; -"LocalNotificationsManager.Mute.button" = "Pausa alarmet i en timme"; -"Defaults.AlertsMuteInterval.title" = "Alarmavstängningsintervall"; -"SignIn.Title.text" = "Logga in"; -"Menu.SignOut.text" = "Logga ut"; -"RuuviOnboard.Cloud.Benefits.message" = "Fördelar:\n\n ● Sensornamn, bakgrundsbilder, kalibrering och larminformation från en säker molntjänst\n\n ● Läs sensorinformation på distans online ( kräver Ruuvi Gateway-router)\n\n ● Dela sensorer med vänner och familj (kräver Ruuvi Gateway)\n\n ● Upp till 2 års historik från station.ruuvi.com (kräver Ruuvi Gateway)"; -"RuuviOnboard.Cloud.Details.title" = "Info"; -"ruuvi_cloud" = "Ruuvi Cloud"; -"RuuviOnboard.Cloud.Skip.title" = "Är du säker på att du vill hoppa över inloggningen?"; -"RuuviOnboard.Cloud.Skip.Yes.title" = "Ja, hoppa över"; -"RuuviOnboard.Cloud.Skip.GoBack.title" = "Gå tillbaka"; -"SignIn.EmailPlaceholder" = "E-post"; -"SignIn.RequestCode" = "Begär en inloggningskod"; -"SignIn.SubmitCode" = "Skicka"; -"SignIn.EmailSent" = "E-post skickat"; -"SignIn.CheckMailbox" = "Vi har skickat ett engångslösenord till din e-post %@. Logga in genom att ange den här:"; -"SignIn.CodeHint" = "Kod"; -"TagsManagerPresenter.SignOutConfirmAlert.Message" = "Sensorer som du har verifierat äganderätten till på inställningssidan tas automatiskt bort från appen när du loggar ut. Sensordata hämtas från molnet igen om du loggar in med samma e-postadress.\n\nÄr du säker på att du vill logga ut? "; -"TagSettings.ClaimTagButton.Claim" = "Bekräfta ägandet"; -"TagSettings.ShareButton" = "Dela"; -"Syncing..." = "Synkroniserar..."; -"Synchronized" = "Synkronisering klar"; -"TagChartsPresenter.NumberOfPointsSynchronizedOverNetwork" = "Synkroniserat: %@"; -"MenuTableViewController.None" = "ingen"; -"MenuTableViewController.User" = "Användare: %@"; -"ShareViewController.Title" = "Dela sensor"; -"ShareViewController.Description" = "Du kan dela sensorn med vänner och familj om den är inom räckhåll för en Ruuvi Gateway.\n\nMottagaren meddelas via e-post. Om mottagaren inte har ett Ruuvi-konto skapas ett gratis Ruuvi-konto automatiskt vid första inloggningen.\n\nObservera att sensorns anpassade namn och bakgrundsbild delas. Namnet och bildsynkroniseringen sker endast vid en gång, efteråt kan det anpassas av mottagaren. Kalibreringsvärden (om sådana finns) synkroniseras automatiskt och mottagaren ser alltid de korrigerade värdena."; -"ShareViewController.addFriend.Title" = "Lägg till vän"; -"ShareViewController.emailTextField.placeholder" = "Ange e-postadress"; -"ShareViewController.sharedEmails.Title" = "Du har använt %d/%d av det maximala antalet delningar för denna sensor. Sensorn delas med följande användare:"; -"Share.Send.button" = "Skicka"; -"SharePresenter.UnshareSensor.Message" = "Vill du sluta dela sensorn med %@?"; -"TagSettings.SectionHeader.NetworkInfo.title" = "NÄTVERKSINFO"; -"TagSettings.NetworkInfo.Owner" = "Ägare"; -"Menu.RuuviNetworkStatus.text" = "Ruuvi cloud status"; -"SignIn.TitleLabel.text" = "Logga in till\nRuuvi\nStation"; -"SignIn.SubtitleLabel.text" = "Dra full nytta av Ruuvi Station! Logga in eller skapa ett nytt Ruuvi-konto genom att ange din e-postadress."; -"SignIn.VerificationCodePlaceholder" = "verifieringskod i format CJSM"; -"UserApiError.ER_FORBIDDEN" = "Förbjuden"; -"UserApiError.ER_UNAUTHORIZED" = "Obehörig"; -"UserApiError.ER_INTERNAL" = "Internt fel"; -"UserApiError.ER_INVALID_FORMAT" = "Ogiltigt förfrågningsformat"; -"UserApiError.ER_USER_NOT_FOUND" = "Användaren hittades inte"; -"UserApiError.ER_SENSOR_NOT_FOUND" = "Sensorn hittades inte"; -"UserApiError.ER_TOKEN_EXPIRED" = "Nyckeln har upphört att gälla"; -"UserApiError.ER_SUBSCRIPTION_NOT_FOUND" = "Prenumerationen hittades inte"; -"UserApiError.ER_SHARE_COUNT_REACHED" = "Maximal delning har överskridits"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Du kan inte dela sensorn med flera användare"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "För att dela sensorn måste du ha en Ruuvi Gateway router i närheten av sensorn"; -"UserApiError.ER_SENSOR_ALREADY_SHARED" = "Sensorn är redan delad"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED" = "Sensorn ägs redan av %@"; -"UserApiError.ER_SENSOR_ALREADY_CLAIMED_NO_EMAIL" = "Sensorn har redan en ägare"; -"UserApiError.ER_UNABLE_TO_SEND_EMAIL" = "Kunde inte skicka e-post"; -"UserApiError.ER_MISSING_ARGUMENT" = "Argument saknas"; -"UserApiError.ER_INVALID_DENSITY_MODE" = "Ogiltig densitet"; -"UserApiError.ER_INVALID_SORT_MODE" = "Ogiltig sortering"; -"UserApiError.ER_INVALID_TIME_RANGE" = "Ogiltigt intervall"; -"UserApiError.ER_INVALID_EMAIL_ADDRESS" = "Ogiltig e-postaddress"; -"UserApiError.ER_INVALID_MAC_ADDRESS" = "Ogiltig MAC-address"; -"UserApiError.ER_SUB_DATA_STORAGE_ERROR" = "Datalagringsfel"; -"UserApiError.ER_SUB_NO_USER" = "Ingen användare"; -"UserApiError.ER_THROTTLED" = "För många förfrågningar"; -"OffsetCorrection.CalibrationDescription.text" = "Vid normal användning är det inte nödvändigt att kalibrera sensorerna.\n\nOm du är en avancerad användare och vill kalibrera manuellt är det möjligt att göra det.\n\nKalibreringstips finns på ruuvi.com/support"; -"OffsetCorrection.Dialog.Calibration.ClearConfirm" = "Renas kalibereringsinställningar?"; -"OffsetCorrection.Dialog.Calibration.Title" = "Kalibreringsinställningar"; -"OffsetCorrection.Dialog.Calibration.EnterTemperature" = "Ange temperaturen som förväntas av sensorn just nu (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterPressure" = "Ange lufttrycket som förväntas av sensorn just nu (%@): "; -"OffsetCorrection.Dialog.Calibration.EnterHumidity" = "Ange fuktigheten som förväntas av sensorn just nu (%@): "; -"OffsetCorrection.OriginalValue.title" = "Ursprungligt värde"; -"OffsetCorrection.CorrectedValue.title" = "Korrigerat värde"; -"OffsetCorrection.Temperature.Title" = "Temperatur offset"; -"OffsetCorrection.Humidity.Title" = "Fuktighet offset"; -"OffsetCorrection.Pressure.Title" = "Lufttryck offset"; -"OffsetCorrection.Calibrate.button" = "Kalibrering"; -"TagSettings.SectionHeader.OffsetCorrection.Title" = "KALIBRERING"; -"TagSettings.OffsetCorrection.Temperature" = "Temperatur"; -"TagSettings.OffsetCorrection.Humidity" = "Fuktighet"; -"TagSettings.OffsetCorrection.Pressure" = "Lufttryck"; -"PhotoPicker.Sheet.files" = "Välj från filer"; -"SignIn.EnterVerificationCode" = "Ange verifieringskod"; -"UnexpectedError.failedToFindOrGenerateBackgroundImage" = "Det gick inte att hitta eller skapa bakgrundsbild"; -"UnexpectedError.bothLuidAndMacAreNil" = "Både lokal och MAC-ID saknas"; -"RuuviCloudApiError.emptyResponse" = "Tomt svar"; -"RuuviCloudApiError.failedToGetDataFromResponse" = "Svaret innehåller ingen information"; -"RuuviCloudApiError.unexpectedHTTPStatusCode" = "Oväntad HTTP-statuskod"; -"RuuviCloudError.NotAuthorized" = "Inte behörig"; -"RuuviLocalError.failedToGetJpegRepresentation" = "Det gick inte att få JPG-representation"; -"RuuviLocalError.failedToGetDocumentsDirectory" = "Det gick inte att hämta bakgrundskatalog"; -"RuuviPersistenceError.failedToFindRuuviTag" = "Hittade inte sensorn"; -"RuuviServiceError.pictureUrlIsNil" = "Bild URL saknas"; -"RuuviServiceError.macIdIsNil" = "MAC-id saknas"; -"network_sharing_disabled" = "Endast sensorer inom räckhåll av din Ruuvi Gateway kan delas."; -"RuuviServiceError.bothLuidAndMacAreNil" = "Både lokal och MAC-ID saknas"; -"RuuviServiceError.failedToParseNetworkResponse" = "Det gick inte att tolka svaret."; -"RuuviServiceError.failedToFindOrGenerateBackgroundImage" = "Det gick inte att hitta eller skapa bakgrundsbild"; -"RuuviServiceError.failedToGetJpegRepresentation" = "Det gick inte att få JPG-representation"; -"UpdateFirmware.Title.text" = "Uppdatera programvara"; -"UpdateFirmware.Download.header" = "LADDA NER NYASTE PROGRAMVARA"; -"UpdateFirmware.Download.content" = "Ladda ner det senaste tillgängliga programvarupaketet innan du startar uppgraderingen. Den senaste versionen kan laddas ner från ruuvi.com/software-update"; -"UpdateFirmware.SetDfu.header" = "STÄLL IN RUUVI TAG I DFU-LÄGE"; -"UpdateFirmware.SetDfu.content" = "Öppna sensorn genom att dra upp den med fingrarna eller försiktigt med en platt skruvmejsel.\n\nStäll RuuviTag i uppdateringsläge genom att hålla ned knappen B och trycka på återställningsknappen R. Den röda indikatorlampan tänds och fortsätter att lysa. Om din enhet bara har en knapp, håll den intryckt i 10 sekunder för att komma in i uppdateringsläge."; -"UpdateFirmware.NextButton.title" = "NÄSTA"; -"DfuDevicesScanner.Title.text" = "Enheter"; -"DfuDevicesScanner.Description.text" = "Hitta ock välj sensor \"RuuviBoot\""; -"DfuDevicesScanner.NoDevice.text" = "(Inga sensorer inom Bluetooths räckvidd)"; -"DfuDevicesScanner.BluetoothDisabled.text" = "(Bluetooth är avaktiverat)"; -"DfuDevicesScanner.BluetoothDisabledAlert.title" = "Bluetooth är inte aktiverat"; -"DfuDevicesScanner.BluetoothDisabledAlert.message" = "Ruuvi Station behöver bluetooth för att fungera. Gå till Inställningar och aktivera Bluetooth."; -"DfuFlash.Title.text" = "DFU-uppdatering"; -"DfuFlash.Progress.text" = "Framsteg"; -"DfuFlash.Step.text" = "Steg"; -"DfuFlash.Steps.PackageSelection.text" = "Välj uppdateringspaket"; -"DfuFlash.Steps.ReadyForUpload.text" = "Redo för uppladdning"; -"DfuFlash.Steps.Uploading.text" = "Uppladdning"; -"DfuFlash.Steps.Completed.text" = "Klar"; -"DfuFlash.OpenDocumentPicker.title" = "ÖPPET DOKUMENTVÄLJARE"; -"DfuFlash.FirmwareSelectionGuide.text" = "Hitta ZIP-filen som du laddade ner."; -"DfuFlash.Firmware.FileName.text" = "Filnamn"; -"DfuFlash.Firmware.Parts.text" = "Delar"; -"DfuFlash.Firmware.Size.text" = "Storlek"; -"DfuFlash.Firmware.SoftDeviceSize.text" = "Soft Device storlek"; -"DfuFlash.Firmware.BootloaderSize.text" = "Bootloader storlek"; -"DfuFlash.Cancel.text" = "AVBRYT"; -"DfuFlash.Start.text" = "Börja"; -"DfuFlash.Finish.text" = "KLAR"; -"DfuFlash.FinishGuide.text" = "Uppdateringsprocessen har slutförts. -RuuviTag-sensorn är redo att användas!"; -"DfuFlash.CancelAlert.text" = "Är du säker på att du vill avbryta uppdateringsprocessen?"; -"RuuviDfuError.invalidFirmwareFile" = "Ogiltig programvaruuppdateringsfil"; -"DFUUIView.navigationTitle" = "Firmware Uppdatering"; -"DFUUIView.latestTitle" = "Senast tillgängliga Ruuvi firmwareversion:"; -"DFUUIView.currentTitle" = "Nuvarande version:"; -"DFUUIView.notReportingDescription" = "Din sensor rapporterar inte sin nuvarande firmwareversion. Det betyder att den förmodligen har en gammal firmwareversion och uppdatering rekommenderas."; -"DFUUIView.alreadyOnLatest" = "Du har redan den senaste firmwareversionen, ingen uppdatering behövs"; -"DFUUIView.startUpdateProcess" = "Starta uppdateringsprocessen"; -"DFUUIView.downloadingTitle" = "Hämtar senaste firmware.."; -"DFUUIView.prepareTitle" = "Förbered din sensor"; -"DFUUIView.openCoverTitle" = "1. Öppna locket på din Ruuvi sensor"; -"DFUUIView.locateBootButtonTitle" = "2. Leta reda på små runda svarta knappar på det vita kretskortet; äldre Ruuvi-sensorer har 2 knappar märkta “R“ och “B“ medan nyare har bara en knapp utan etikett."; -"DFUUIView.setUpdatingModeTitle" = "3. Lägg sensorn i uppdateringsläge"; -"DFUUIView.toBootModeTwoButtonsDescription" = "3.1. Om din sensor har två knappar: håll knappen “B” intryckt medan du trycker en gång på “R”. Släpp knapp “B”."; -"DFUUIView.toBootModeOneButtonDescription" = "3.2. Om din sensor har en knapp, håll knappen intryckt i 10 sekunder."; -"DFUUIView.toBootModeSuccessTitle" = "4. Uppgraderingsläget lyckades om den röda lysdioden på kretskortet lyser och knappens text i appen har bytts till “Starta uppdatering“."; -"DFUUIView.updatingTitle" = "Uppdaterar..."; -"DFUUIView.searchingTitle" = "Söker efter en sensor"; -"DFUUIView.startTitle" = "Starta uppdatering"; -"DFUUIView.doNotCloseTitle" = "Stäng inte appen eller stäng av sensorn under uppdateringen."; -"DFUUIView.successfulTitle" = "Uppdateringen lyckades"; -"DFUUIView.DBMigration.Error.message" = "Uppdateringen lyckades, men ett oväntat databasmigreringsfel inträffade. För att fortsätta använda den här sensorn, ta bort den från appen och lägg sedan till den igen."; -"RuuviDfuError.failedToConstructUUID" = "Det gick inte att skapa UUID"; -"SignIn.EmailMismatch.Alert.message" = "Oj, du har begärt koden för %@, men använde koden för %@. Kontrollera att du använder koden för %@"; -"SignIn.EmailMissing.Alert.message" = "Oj, e-postadressen du har använt för att få koden sparades inte. Försök att logga in igen."; -"TagSettings.RemoveThisSensor.title" = "Ta bort sensorn"; -"Share.Success.message" = "Delningen lyckades"; -"TagSettings.SectionHeader.General.title" = "Allmänt"; -"TagSettings.Shared.title" = "Delad"; -"TagSettings.NotShared.title" = "Inte delad"; -"Owner.title" = "Bekräfta ägandet"; -"Owner.ClaimOwnership.button" = "Bekräfta Ägandet"; -"Owner.Claim.description" = "Äger du den här sensorn? Bekräfta ägandet och så läggs sensorn till på ditt Ruuvi-konto. Varje Ruuvi-sensor kan bara ha en ägare. För att göra anspråk på äganderätt måste du vara inloggad.\n\nFördelar:\n\n ● Sensornamn, bakgrundsbilder, kalibrering och larminformation från en säker molntjänst\n\n ● Läs sensorinformation på distans online ( kräver Ruuvi Gateway-router)\n\n ● Dela sensorer med vänner och familj (kräver Ruuvi Gateway)\n\n ● Upp till 2 års historik från station.ruuvi.com (kräver Ruuvi Gateway)"; -"TagSettings.confirmTagUnclaimAndRemoveDialog.message" = "Om du tar bort sensorn upphör ägarskapet. Vem som helst kan göra anspråk på ägandet av sensorn efter borttagning. Varje Ruuvi-sensor kan bara ha en ägare."; -"TagSettings.confirmSharedTagRemovalDialog.message" = "Om du tar bort sensorn så meddelas ägaren till sensorn och du kan inte komma åt den längre."; -"TagSettings.General.Owner.none" = "Ingen"; -"TagSettings.Share.title" = "Dela"; -"Menu.LoggedIn.title" = "Inloggad:"; -"Interval.Day.string" = "Dag"; -"hour" = "Timme"; -"TagSettings.tagNameTitleLabel.rename.text" = "Dina sensorer kommer att vara i alfabetisk ordning."; -"On" = "På"; -"Off" = "Av"; -"DFUUIView.lowBattery.warning.message" = "Sensorns batterispänning är låg och uppgraderingsprocessen kan misslyckas. Vi rekommenderar att du byter ut batteriet innan du uppdaterar programvaran."; -"alert_notification_humidity_high_threshold" = "Luftfuktigheten är över %@"; -"alert_notification_humidity_low_threshold" = "Luftfuktigheten är under %@"; -"alert_notification_pressure_high_threshold" = "Lufttrycket är över %@"; -"alert_notification_pressure_low_threshold" = "Lufttrycket är under %@"; -"alert_notification_rssi_high_threshold" = "Signalstyrkan är över %@"; -"alert_notification_rssi_low_threshold" = "Signalstyrkan är under %@"; -"alert_notification_temperature_high_threshold" = "Temperaturen är över %@"; -"alert_notification_temperature_low_threshold" = "Temperaturen är under %@"; -"Cards.Alert.AlreadyLoggedIn.message" = "Användare %@ är redan inloggad. Om du vill använda ett annat konto, logga ut först och försök sedan igen."; -"Settings.Label.CloudMode" = "Molnläge"; -"Settings.Label.CloudMode.description" = "Uppdatera närliggande molnregistrerade sensorer endast från molnet genom att inte lyssna på deras Bluetooth-meddelanden och endast ta emot varningar via e-post. Kräver en Ruuvi Gateway."; -"internet_connection_problem" = "Internetanslutningsproblem"; -"Widgets.Loading.message" = "laddar..."; -"Cards.Movements.title" = "rörelser"; -"TagSettings.BatteryStatusLabel.Replace.message" = "Låg batterinivå"; -"TagSettings.BatteryStatusLabel.Ok.message" = "Batteri OK"; -"Widgets.Description.message" = "Skapa widgets av dina favorit Ruuvi-sensorer. Widgetdatan kommer från Ruuvi Cloud och kräver en Ruuvi Gateway-router."; -"settings_appearance" = "Utseende"; -"app_theme" = "App tema"; -"follow_system_theme" = "Systemtema"; -"dark_theme" = "Mörkt tema"; -"light_theme" = "Ljust tema"; -"Settings.Temperature.Resolution.title" = "Temperaturupplösning"; -"Settings.Humidity.Resolution.title" = "Fuktighetsupplösning"; -"Settings.Pressure.Resolution.title" = "Tryckupplösning"; -"Settings.Measurement.Resolution.description" = "Välj hur exakt du vill se sensorernas livemätvärden i appen. Den här inställningen påverkar inte histogram eller varningar."; -"Settings.Measurement.Unit.title" = "Enhet"; -"Settings.Measurement.Resolution.title" = "Upplösning"; -"MyRuuvi.Settings.DeleteAccount.title" = "Radera konto"; -"MyRuuvi.Settings.DeleteAccount.Confirmation.message" = "En bekräftelse skickas till din e-post. För att fortsätta med raderingen, kontrollera din inkorg och följ instruktionerna."; -"TagSettings.Alert.SetTemperature.title" = "Ställ in temperaturalarm"; -"TagSettings.Alert.SetHumidity.title" = "Ställ in fuktighetsalarm"; -"TagSettings.Alert.SetPressure.title" = "Ställ in lufttryckssalarm"; -"TagSettings.Alert.SetRSSI.title" = "Ställ in signalstyrkealarm"; -"TagSettings.AlertSettings.Dialog.Min" = "Min (%.0f)"; -"TagSettings.AlertSettings.Dialog.Max" = "Max (%.0f)"; -"export_history" = "Exportera historik (csv)"; -"clear_view" = "Töm historikvy"; -"day_1" = "1 dag"; -"day_2" = "2 dagar"; -"day_3" = "3 dagar"; -"day_4" = "4 dagar"; -"day_5" = "5 dagar"; -"day_6" = "6 dagar"; -"day_7" = "7 dagar"; -"day_8" = "8 dagar"; -"day_9" = "9 dagar"; -"day_10" = "10 dagar"; -"day_x" = "%.0f dagar"; -"more" = "Mer..."; -"all" = "Allt"; -"longer_history_title" = "Längre historik"; -"longer_history_message" = "Ruuvi Station mobilapp stöder högst 10 dagars historik. Ruuvi Cloud-prenumeranter kan se upp till 2 års historisk data med hjälp av webbappen på ruuvi.com/station (kräver Ruuvi Gateway-router)."; -"reading_history_x" = "Läser Bluetooth: %.0f"; -"rssi_alert_description" = "För att använda denna avisering måste du vara inloggad i appen, att du har tagit ägandeskap av den här sensorn och att den är inom räckhåll för Ruuvi Gateway-routern. IOS-enheter kan inte visa signalstyrka för mottagna data som skickas av Ruuvi-sensorn när sensorn är parat och mätningar mottas i bakgrunden. Realtids Bluetooth-signalstyrka visas i appen men påverkar inte denna avisering."; -"bluetooth_download" = "Bluetooth-nedladdning"; -"bluetooth_download_description" = "Lokal sensordata kan laddas ner när du är inom Bluetooth-räckvidd."; -"download" = "Ladda ner"; -"clear_local_history" = "Rensa lokal historik"; -"clear_local_history_description" = "Vill du rensa lokalt lagrad historisk data från appen? Detta kommer inte att rensa internt lagrad historik i sensorer eller historisk data lagrad i Ruuvi Cloud-tjänst."; -"TagCharts.FailedToSyncDialog.title" = "Nedladdning misslyckad"; -"TagCharts.FailedToSyncDialog.message" = "Nedladdning av Bluetooth-historik misslyckades. Kontrollera att du är inom Bluetooth-räckvidd, att din sensor har firmware som stöder nedladdning och att sensorn inte samtidigt är ansluten till en annan iOS-enhet. Sensoranslutning är reserverad för Ruuvi Station vid användning av anslutet läge i iOS."; -"TagCharts.TryAgain.title" = "Försök igen"; -"support" = "Support"; -"full_image_view" = "Bildvy"; -"history_view" = "Historikvy"; -"settings_and_alerts" = "Inställningar & alarm"; -"change_background" = "Byt bakgrund"; -"check_claim_state" = "Kontrollerar anspråkstillstånd"; -"claim_in_progress" = "Anspråk pågår"; -"force_claim_sensor" = "Tvinga fram anspråk"; -"force_claim_sensor_description1" = "Den här sensorn ägs av en annan användare. Du kan tvinga ägandeskap till ditt konto om du har fysisk tillgång till den här sensorn. Varje Ruuvi-sensor kan bara ha en ägare."; -"force_claim_sensor_description2" = "Tvingat anspråk görs genom att använda närfältskommunikation (NFC). Se till att NFC är aktiverat på din mobil.\n\n\t1. Rör din Ruuvi-givare med din mobila enhet för att starta kravprocessen.\n\n\t2. När det lyckats förs du tillbaka till sensorinställningar.\n\nOm det misslyckades eller om NFC inte är tillgängligt på din enhet:\n\n\t1. Öppna locket på sensorn. Leta upp den runda svarta knappen (eller knapp B om din sensor har två knappar)på det vita kretskortet, tryck först kort på knappen och tryck sedan på knappen Använd BT på sidan för att starta processen.\n\n\t3. När det har gått igenom framgångsrikt förs du tillbaka till sensorinställningar."; -"force_claim" = "Tvinga fram anspråk"; -"claim_wrong_sensor_scanned" = "Du skannar fel RuuviTag"; -"view" = "Vy"; -"card_type" = "Kort typ"; -"image_cards" = "Bildkort"; -"simple_cards" = "Enkla kort"; -"card_action" = "Kortåtgärd"; -"open_sensor_view" = "Öppna sensorvy"; -"open_history_view" = "Öppna historikvy"; -"change_background_message" = "Välj bakgrundsbild. Om du inte är inloggad kommer du att förlora bilden vid appominstallation."; -"take_photo" = "Ta ett foto"; -"select_from_gallery" = "Välj från telefonens galleri"; -"select_default_image" = "Välj bland standardbilder"; -"export_csv_feature_location" = "Du kan exportera sensorns historik från dess historiagramsida. Tryck på tre punkters menyikon i övre högra hörnet, och välj sedan \"Exportera historik (csv)\"."; -"low_battery" = "Låg batterinivå"; -"change_background_image" = "Ändra bakgrundsbild"; -"SignIn.Sync.message" = "Laddar ner data från molnet. Vänta en stund."; -"uploading_progress" = "Uppladdning: %.0f"; -"Widgets.Unauthorized.Regular.message" = "Logga in för att använda widgeten."; -"Widgets.Unauthorized.Inline.message" = "Logga in till Ruuvi Station"; -"Widgets.Unconfigured.Simple.message" = "Tryck och håll ned för att redigera widgeten."; -"Widgets.Unconfigured.Rectangular.message" = "Välj sensorn som ska visas i Ruuvi widgeten"; -"Widgets.Unconfigured.Inline.message" = "Välj sensorn som ska visas i Ruuvi widgeten"; -"Widgets.Unconfigured.Circular.message" = "+Lägg till"; -"Widgets.Select.Sensor.title" = "Vald Ruuvi sensor"; -"Widgets.Sensor.Type.title" = "Vald sensortyp"; -"Settings.SectionHeader.General.title" = "ALLMÄNT"; -"Settings.SectionHeader.Application.title" = "APPLIKATION"; -"empty_chart_message" = "Ingen data tillgänglig \ni det valda historikfönstret."; -"onboarding_measure_your_world" = "Measure Your World"; -"onboarding_with_ruuvi_sensors" = "Lär känna din Ruuvi Station -applikation."; -"onboarding_swipe_to_continue" = "Dra för att fortsätta →"; -"onboarding_read_sensors_data" = "Läs dina Ruuvi-sensorer"; -"onboarding_via_bluetooth_or_cloud" = "med Bluetooth eller Ruuvi Cloud"; -"onboarding_follow_measurement" = "Se alla sensorer med en blick på din"; -"onboarding_dashboard" = "instrumentpanel"; -"onboarding_personalise" = "Anpassa"; -"onboarding_your_sensors" = "din app med anpassade namn och bakgrunder."; -"onboarding_explore_detailed" = "Utforska din"; -"onboarding_history" = "mäthistorik"; -"onboarding_set_custom" = "Ställ in och anpassa dina"; -"onboarding_alerts" = "varningar"; -"onboarding_share_your_sensors" = "för att mäta tillsammans med dina vänner och familj."; -"onboarding_sharees_can_use" = "Dela sensorer"; -"onboarding_handy_widgets" = "widgets"; -"onboarding_access_widgets" = "Ta med dina favoritsensorer till din startskärm och låsskärm som"; -"onboarding_station_web" = "Ruuvi webbappen"; -"onboarding_web_pros" = "Stor instrumentpanel, flerårig historik, e-postvarningar och mer på"; -"onboarding_gateway_required" = "En Ruuvi Gateway -router krävs."; -"onboarding_skip" = "Hoppa över"; -"onboarding_thats_it" = "Nästan där!"; -"onboarding_thats_it_already_signed_in" = "Låt oss börja!"; -"onboarding_go_to_sign_in" = "Ruuvi-upplevelsen är bättre när du är inloggad. Gör det nu eller fortsätt utan molnfunktioner."; -"onboarding_go_to_sign_in_already_signed_in" = "Låt oss börja mäta!"; -"onboarding_continue" = "Nästa"; -"sign_in_or_create_free_account" = "Logga in eller skapa ett gratis Ruuvi-konto"; -"to_use_all_app_features" = "Inget lösenord behövs."; -"type_your_email" = "Skriv in din e-postadress..."; -"request_code" = "Begär en inloggningskod"; -"no_password_needed" = "Ett gratiskonto kommer att skapas för denna e-post om du inte redan har ett. Endast e-postadress krävs. Vi håller din information säker."; -"benefits_sign_in" = "Läs mer om Ruuvi-kontoförmåner eller logga in senare"; -"use_without_account" = "Nej tack, hoppa över"; -"why_should_sign_in" = "Fördelar"; -"sensors_ownership_and_settings_stored_in_cloud" = "Att logga in på appen har många fördelar. Inställningarna kommer att lagras säkert på ditt konto:"; -"cloud_stored_ownerships" = "● Sensorns ägarskap"; -"cloud_stored_names" = "● Sensornamn"; -"cloud_stored_alerts" = "● Bakgrundsbilder"; -"cloud_stored_backgrounds" = "● Varningsinställningar"; -"cloud_stored_calibration" = "● Kalibreringsinställningar"; -"cloud_stored_sharing" = "● App inställningar"; -"note" = "Obs!"; -"claim_warning" = "Säkra ägarinformationen för dina sensorer genom att göra anspråk på deras äganderätt i appen."; -"lets_do_it" = "Gå till inloggning"; -"enter_code" = "Ange kod"; -"dashboard_no_sensors_message" = "Det verkar som om du inte har några Ruuvi-sensorer tillagda ännu."; -"dashboard_no_sensors_message_signed_out" = "Du är inte inloggad.\n\nOm du har ett konto och redan har lagt till Ruuvi-sensorer till det, synkroniseras de automatiskt med Ruuvi Stations mobilapp när du loggar in."; -"add_a_sensor" = "Lägg till en sensor"; -"changelog" = "(ändringslogg)"; -"changelog_ios_url" = "https://f.ruuvi.com/t/3192"; -"chart_stat_min" = "Min"; -"chart_stat_max" = "Max"; -"chart_stat_avg" = "Medelvärde"; -"shared_to_x" = "Delad %d/%d"; -"settings_alert_notifications" = "Varningsmeddelanden"; -"settings_alert_sound" = "Varningsljud"; -"settings_alert_sound_description" = "Välj varningsljudet för push-meddelandet."; -"settings_alerts_footer_description" = "Du kan även justera Aviseringsinställningar under iOS-inställningar -> Aviseringar"; -"settings_alerts_footer_description_link_mask" = "iOS-inställningar -> Aviseringar"; -"settings_email_alerts" = "E-postvarningar"; -"settings_email_alerts_description" = "Om du använder Ruuvi Cloud och Ruuvi Gateway kommer du att kunna ta emot e-postvarningar genom att aktivera detta."; -"settings_push_alerts" = "Push-varningar"; -"settings_push_alerts_description" = "Om du använder Ruuvi Cloud och Ruuvi Gateway kommer du att kunna ta emot push-varningar genom att aktivera detta."; -"synchronisation" = "Synkronisering"; -"gatt_sync_description" = "Ruuvi Station laddar ner sensorns interna historik för de senaste 10 dagarna om mäthistoriken är tillgänglig.\n\nHistorien laddas ner med en Bluetooth-anslutning. Se till att du är nära sensorn."; -"do_not_show_again" = "Visa inte detta igen"; -"sign_in_continue" = "Fortsätta"; -"signing_in_is_optional" = "(Inloggning är inte obligatoriskt)"; -"Defaults.UserAuthorized.title" = "Användare auktoriserad"; -"Defaults.DashboardTapActionChart.title" = "Tryck på instrumentpanelskortet för att visa diagrammet"; -"Defaults.DevServer.title" = "Använd dev-server"; -"Defaults.DevServer.message" = "För att ändra Ruuvi Cloud -slutpunkt måste du logga ut från den aktuella sessionen och starta om appen. Är du säker?"; -"Defaults.ShowEmailAlertsSettings.title" = "Visa inställningar för e-postvarningar"; -"Defaults.ShowPushAlertsSettings.title" = "Visa push-varningsinställningar"; -"use_nfc" = "Använd NFC"; -"use_bluetooth" = "Använd BT"; -"sensor_not_found_error" = "Sensorn hittades inte. Försök igen."; -"Defaults.HideNFC.title" = "Dölj NFC-alternativet från påtvingat ägarbyte"; -"settings_alert_sound_default" = "Systemfel"; -"settings_alert_sound_ruuvi_speak" = "Ruuvi larm"; -"add_with_nfc" = "Lägg till med NFC"; -"sensor_details" = "Sensordetaljer"; -"add_sensor" = "Lägg till sensor"; -"copy_mac_address" = "Kopiera MAC-adress"; -"copy_unique_id" = "Kopiera unikt ID"; -"name" = "Namn:"; -"mac_address" = "MAC-adress:"; -"go_to_sensor" = "Gå till sensorkortet"; -"unique_id" = "Unikt ID:"; -"firmware_version" = "Firmwareversion:"; -"Close" = "Stäng"; -"add_sensor_nfc_df3_error" = "Denna sensor kan inte läggas till med NFC på grund av gammal firmware. Lägg till sensorn med Bluetooth och uppdatera firmware."; -"add_sensor_description" = "Den här sidan visar närliggande Ruuvi-sensorer som ännu inte har lagts till i appen. Tryck på en sensor för att lägga till den."; -"add_sensor_via_nfc" = "Alternativt kan du lägga till en sensor med NFC genom att välja Lägg till med NFC och trycka på den med din telefon."; -"unclaim_sensor" = "Ta bort äganderätten"; -"unclaim" = "Ta bort anspråk"; -"unclaim_sensor_description" = "Äganderätten till denna sensor har gjorts anspråk på ditt Ruuvi-konto. Tryck på Unclaim för att ta bort sensorns inställningar och relaterade data från ditt Ruuvi-konto."; -"claim_sensor_ownership" = "Gör anspråk på sensorägande"; -"do_you_own_sensor" = "Äger du denna sensor?"; -"owners_plan" = "Ägarens Ruuvi-plan"; -"alert_cloud_connection_title" = "Molnuppkoppling"; -"alert_cloud_connection_description" = "Varning om sensordata inte har uppdaterats till molnet på mer än %d minuter."; -"alert_cloud_connection_dialog_description" = "Ange önskad fördröjning som ska användas i minuter innan larmet utlöses. Minsta värde är 2 minuter."; -"alert_cloud_connection_dialog_title" = "Ställ in molnanslutningsvarning"; -"rename" = "Döp om"; -"chart_stat_show" = "Visa min/max/genomsnitt"; -"chart_stat_hide" = "Dölj min/max/genomsnitt"; -"settings_alert_limit_notification" = "Begränsa varningsmeddelanden"; -"settings_alert_limit_notification_description" = "Utlös Bluetooth-varningsavisering endast en gång i timmen även om varningen återutlöstes."; -"share_pending" = "Delning pågår"; -"share_pending_message" = "Delat framgångsrikt! Den här e-postadressen är ännu inte kopplad till ett Ruuvi-konto. En inbjudan att skapa ett gratis konto har skickats. När kontot har skapats kommer du att se det i delningslistan."; -"dialog_are_you_sure" = "Är du säker?"; -"dialog_operation_undone" = "Denna åtgärd kan inte ångras."; -"remove_cloud_history_title" = "Ta bort molnhistorik"; -"remove_cloud_history_description" = "Jag vill också ta bort sensorhistorikdata från Ruuvi Cloud."; -"remove_claimed_sensor_description" = "Genom att ta bort sensorn kommer den inte längre synas i ditt konto och sensorinställningar som namn, bakgrundsbild, kalibreringsinställningar och larminställningar kommer att tas bort. Efter borttagning kan någon annan ta ägande om sensorn. Varje Ruuvi-sensor kan bara ha en ägare."; -"remove_shared_sensor_description" = "Om du tar bort den här delade sensorn kommer sensorns ägare att meddelas om borttagningen och du kommer inte längre att kunna använda sensorn.\n\nDu kommer också att förlora alla sensorinställningar som är kopplade till denna sensor, t.ex. namn, bakgrundsbild och ställ in alarm."; -"remove_local_sensor_description" = "Om du väljer att ta bort den här sensorn kommer det att resultera i radering av din lokalt lagrade mäthistorik, tillsammans med att eventuella relaterade sensorinställningar som namn, bakgrundsbild, kalibrering och varningskonfigurationer tas bort.\n\nDu kan lägga till denna sensor senare igen, om det behövs."; -"activity_saving_to_cloud" = "Sparar till molnet... vänligen vänta."; -"activity_saving_success" = "Sparad."; -"activity_saving_fail" = "Det gick inte att spara ändringar i molnet."; -"activity_ongoing_generic" = "Vänta..."; -"activity_success_generic" = "Operationen lyckades."; -"activity_failed_generic" = "Operationen misslyckades."; -"Devices.tokenId" = "Token Id"; -"UserApiError.ER_GATEWAY_NOT_FOUND" = "Gateway not found"; -"UserApiError.ER_GATEWAY_ALREADY_WHITELISTED" = "Gateway already whitelisted"; -"UserApiError.ER_GATEWAY_STATUS_REPORT_FAILED" = "Gateway status report failed"; -"UserApiError.ER_CONFLICT" = "Data already exists, cannot update"; -"UserApiError.ER_CLAIM_COUNT_REACHED" = "Maximum claim count for the user reached"; -"UserApiError.ER_SENSOR_SHARE_COUNT_REACHED" = "Maximum share count for the sensor reached"; -"UserApiError.ER_NO_DATA_TO_SHARE" = "In order to share a sensor, it must have data"; -"UserApiError.ER_SENSOR_ALREADY_REGISTERED" = "The sensor has already been registered"; -"UserApiError.ER_SUBSCRIPTION_CODE_EXISTS" = "Tried to add duplicate subscription to a code"; -"UserApiError.ER_SUBSCRIPTION_CODE_USED" = "Tried to claim already used code"; -"UserApiError.ER_OLD_ENTRY" = "Newer data already exists, cannot update"; -"UserApiError.ER_INVALID_ENUM_VALUE" = "Invalid ENUM value given"; -"UserApiError.OK" = "Operation was successful"; diff --git a/Common/RuuviLocalization/Templates/structured-swift5.stencil b/Common/RuuviLocalization/Templates/strings-swift5.stencil similarity index 100% rename from Common/RuuviLocalization/Templates/structured-swift5.stencil rename to Common/RuuviLocalization/Templates/strings-swift5.stencil diff --git a/Common/RuuviLocalization/Templates/xcassets-swift5.stencil b/Common/RuuviLocalization/Templates/xcassets-swift5.stencil new file mode 100644 index 000000000..5fa01e074 --- /dev/null +++ b/Common/RuuviLocalization/Templates/xcassets-swift5.stencil @@ -0,0 +1,438 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if catalogs %} +{% macro hasValuesBlock assets filter %} + {%- for asset in assets -%} + {%- if asset.type == filter -%} + 1 + {%- elif asset.items -%} + {% call hasValuesBlock asset.items filter %} + {%- endif -%} + {%- endfor -%} +{% endmacro %} +{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} +{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %} +{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} +{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %} +{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} +{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %} +{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set hasARResourceGroup %}{% for catalog in catalogs %}{% call hasValuesBlock catalog.assets "arresourcegroup" %}{% endfor %}{% endset %} +{% set hasColor %}{% for catalog in catalogs %}{% call hasValuesBlock catalog.assets "color" %}{% endfor %}{% endset %} +{% set hasData %}{% for catalog in catalogs %}{% call hasValuesBlock catalog.assets "data" %}{% endfor %}{% endset %} +{% set hasImage %}{% for catalog in catalogs %}{% call hasValuesBlock catalog.assets "image" %}{% endfor %}{% endset %} +{% set hasSymbol %}{% for catalog in catalogs %}{% call hasValuesBlock catalog.assets "symbol" %}{% endfor %}{% endset %} +#if os(macOS) + import AppKit +#elseif os(iOS) +{% if hasARResourceGroup %} + import ARKit +{% endif %} + import UIKit +#elseif os(tvOS) || os(watchOS) + import UIKit +#endif +#if canImport(SwiftUI) + import SwiftUI +#endif + +// Deprecated typealiases +{% if hasColor %} +@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color +{% endif %} +{% if hasImage %} +@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image +{% endif %} + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Asset Catalogs + +{% macro enumBlock assets %} + {% call casesBlock assets %} + {% if param.allValues %} + + // swiftlint:disable trailing_comma + {% set hasItems %}{% call hasValuesBlock assets "arresourcegroup" %}{% endset %} + {% if hasItems %} + @available(*, deprecated, message: "All values properties are now deprecated") + {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [ + {% filter indent:2," ",true %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %} + ] + {% endif %} + {% set hasItems %}{% call hasValuesBlock assets "color" %}{% endset %} + {% if hasItems %} + @available(*, deprecated, message: "All values properties are now deprecated") + {{accessModifier}} static let allColors: [{{colorType}}] = [ + {% filter indent:2," ",true %}{% call allValuesBlock assets "color" "" %}{% endfilter %} + ] + {% endif %} + {% set hasItems %}{% call hasValuesBlock assets "data" %}{% endset %} + {% if hasItems %} + @available(*, deprecated, message: "All values properties are now deprecated") + {{accessModifier}} static let allDataAssets: [{{dataType}}] = [ + {% filter indent:2," ",true %}{% call allValuesBlock assets "data" "" %}{% endfilter %} + ] + {% endif %} + {% set hasItems %}{% call hasValuesBlock assets "image" %}{% endset %} + {% if hasItems %} + @available(*, deprecated, message: "All values properties are now deprecated") + {{accessModifier}} static let allImages: [{{imageType}}] = [ + {% filter indent:2," ",true %}{% call allValuesBlock assets "image" "" %}{% endfilter %} + ] + {% endif %} + {% set hasItems %}{% call hasValuesBlock assets "symbol" %}{% endset %} + {% if hasItems %} + @available(*, deprecated, message: "All values properties are now deprecated") + {{accessModifier}} static let allSymbols: [{{symbolType}}] = [ + {% filter indent:2," ",true %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %} + ] + {% endif %} + // swiftlint:enable trailing_comma + {% endif %} +{% endmacro %} +{% macro casesBlock assets %} + {% for asset in assets %} + {% if asset.type == "arresourcegroup" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}") + {% elif asset.type == "color" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") + {% elif asset.type == "data" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}") + {% elif asset.type == "image" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") + {% elif asset.type == "symbol" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}") + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2," ",true %}{% call casesBlock asset.items %}{% endfilter %} + } + {% elif asset.items %} + {% call casesBlock asset.items %} + {% endif %} + {% endfor %} +{% endmacro %} +{% macro allValuesBlock assets filter prefix %} + {% for asset in assets %} + {% if asset.type == filter %} + {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} + {% call allValuesBlock asset.items filter prefix2 %} + {% elif asset.items %} + {% call allValuesBlock asset.items filter prefix %} + {% endif %} + {% endfor %} +{% endmacro %} +// swiftlint:disable identifier_name line_length nesting type_body_length type_name +{{accessModifier}} enum {{enumName}} { + {% if catalogs.count > 1 or param.forceFileNameEnum %} + {% for catalog in catalogs %} + {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% if catalog.assets %} + {% filter indent:2," ",true %}{% call enumBlock catalog.assets %}{% endfilter %} + {% endif %} + } + {% endfor %} + {% else %} + {% call enumBlock catalogs.first.assets %} + {% endif %} +} +// swiftlint:enable identifier_name line_length nesting type_body_length type_name + +// MARK: - Implementation Details +{% if hasARResourceGroup %} + +{{accessModifier}} struct {{arResourceGroupType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) + @available(iOS 11.3, *) + {{accessModifier}} var referenceImages: Set { + return ARReferenceImage.referenceImages(in: self) + } + + @available(iOS 12.0, *) + {{accessModifier}} var referenceObjects: Set { + return ARReferenceObject.referenceObjects(in: self) + } + #endif +} + +#if os(iOS) +@available(iOS 11.3, *) +{{accessModifier}} extension ARReferenceImage { + static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} + +@available(iOS 12.0, *) +{{accessModifier}} extension ARReferenceObject { + static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} +#endif +{% endif %} +{% if hasColor %} + +{{accessModifier}} final class {{colorType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Color = NSColor + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Color = UIColor + #endif + + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + {{accessModifier}} private(set) lazy var color: Color = { + guard let color = Color(asset: self) else { + fatalError("Unable to load color asset named \(name).") + } + return color + }() + + #if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load color asset named \(name).") + } + return color + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + {{accessModifier}} private(set) lazy var swiftUIColor: SwiftUI.Color = { + SwiftUI.Color(asset: self) + }() + #endif + + fileprivate init(name: String) { + self.name = name + } +} + +{{accessModifier}} extension {{colorType}}.Color { + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + convenience init?(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSColor.Name(asset.name), bundle: bundle) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +{{accessModifier}} extension SwiftUI.Color { + init(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if hasData %} + +{{accessModifier}} struct {{dataType}} { + {{accessModifier}} fileprivate(set) var name: String + + @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) + {{accessModifier}} var data: NSDataAsset { + guard let data = NSDataAsset(asset: self) else { + fatalError("Unable to load data asset named \(name).") + } + return data + } +} + +@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) +{{accessModifier}} extension NSDataAsset { + convenience init?(asset: {{dataType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) || os(watchOS) + self.init(name: asset.name, bundle: bundle) + #elseif os(macOS) + self.init(name: NSDataAsset.Name(asset.name), bundle: bundle) + #endif + } +} +{% endif %} +{% if hasImage %} + +{{accessModifier}} struct {{imageType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Image = UIImage + #endif + + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let name = NSImage.Name(self.name) + let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + {{accessModifier}} var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +{{accessModifier}} extension {{imageType}}.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) + @available(macOS, deprecated, + message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") + convenience init?(asset: {{imageType}}) { + #if os(iOS) || os(tvOS) + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSImage.Name(asset.name)) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +{{accessModifier}} extension SwiftUI.Image { + init(asset: {{imageType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } + + init(asset: {{imageType}}, label: Text) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: {{imageType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if hasSymbol %} + +{{accessModifier}} struct {{symbolType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration + {{accessModifier}} typealias Image = UIImage + + @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} func image(with configuration: Configuration) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, with: configuration) else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + {{accessModifier}} var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +{{accessModifier}} extension SwiftUI.Image { + init(asset: {{symbolType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } + + init(asset: {{symbolType}}, label: Text) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: {{symbolType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if not param.bundle %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No assets found +{% endif %} +// swiftlint:enable all \ No newline at end of file diff --git a/Common/RuuviLocalization/target.yml b/Common/RuuviLocalization/target.yml index ce9e46494..1dfecdf03 100644 --- a/Common/RuuviLocalization/target.yml +++ b/Common/RuuviLocalization/target.yml @@ -6,18 +6,22 @@ targets: sources: - path: Sources name: Localization - - path: Sources/RuuviLocalization/RuuviLocalization.swift + - path: Sources/RuuviLocalization.swift + optional: true + - path: Sources/RuuviColor.swift optional: true preBuildScripts: - - path: ../../scripts/build/generate_l10n.sh - name: Generate L10N + - path: ../../scripts/build/generate_resources.sh + name: Generate Resources inputFiles: - $(SRCROOT)/station.localization/station.localization.json + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/Colors.xsassets outputFiles: - - $(SRCROOT)/Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings - - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings \ No newline at end of file + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings + - $(SRCROOT)/Common/RuuviLocalization/Sources/RuuviLocalization.swift + - $(SRCROOT)/Common/RuuviLocalization/Sources/RuuviColor.swift \ No newline at end of file diff --git a/Makefile b/Makefile index bd7da8519..3b3bd98e2 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # generates xcodeproj for frameworks build configuration xcodeproj: installed_xcodegen installed_swiftgen installed_swiftlint - .tools/xcodegen/bin/xcodegen -s project.yml + scripts/generate_project.sh # install firebase installed_firebase: .tools/firebase/firebase diff --git a/scripts/build/generate_l10n.sh b/scripts/build/generate_resources.sh similarity index 57% rename from scripts/build/generate_l10n.sh rename to scripts/build/generate_resources.sh index 55a53e187..5ec2fc6fd 100755 --- a/scripts/build/generate_l10n.sh +++ b/scripts/build/generate_resources.sh @@ -7,4 +7,5 @@ if [ ! -f "$PROJECT_DIR"/.tools/swiftgen/bin/swiftgen ]; then fi # execute swiftgen -"$PROJECT_DIR"/.tools/swiftgen/bin/swiftgen \ No newline at end of file +"$PROJECT_DIR"/.tools/swiftgen/bin/swiftgen --config "$PROJECT_DIR"/.swiftgen.localizable.yml +"$PROJECT_DIR"/.tools/swiftgen/bin/swiftgen --config "$PROJECT_DIR"/.swiftgen.assets.yml \ No newline at end of file diff --git a/scripts/generate_project.sh b/scripts/generate_project.sh new file mode 100755 index 000000000..5b8f485d9 --- /dev/null +++ b/scripts/generate_project.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# Check if the resources exists and if not - touch them +if [ ! -f "Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings" ]; then + echo "Creating $localizableStrings because it does not exist." + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/de.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings" + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/en.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings" + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/fi.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings" + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/fr.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings" + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/ru.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings" + + mkdir -p "./Common/RuuviLocalization/Sources/Resources/sv.lproj" + touch "./Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings" +fi + +.tools/xcodegen/bin/xcodegen -s project.yml diff --git a/swiftgen.yml b/swiftgen.yml deleted file mode 100644 index 826a8779c..000000000 --- a/swiftgen.yml +++ /dev/null @@ -1,34 +0,0 @@ -json: - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_en.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_sv.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/sv.lproj/Localizable.strings - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_ru.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/ru.lproj/Localizable.strings - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_fi.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fi.lproj/Localizable.strings - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_fr.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/fr.lproj/Localizable.strings - - inputs: ./station.localization/station.localization.json - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/Localizable_de.strings.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/de.lproj/Localizable.strings -strings: - - inputs: ./Common/RuuviLocalization/Sources/RuuviLocalization/Resources/en.lproj/Localizable.strings - outputs: - - templatePath: ./Common/RuuviLocalization/Templates/structured-swift5.stencil - output: ./Common/RuuviLocalization/Sources/RuuviLocalization/RuuviLocalization.swift - params: - forceProvidesNamespaces: true - publicAccess: true - enumName: RuuviLocalization \ No newline at end of file From 22c21248d03e2e02054eca46b9e5a8dc6db2b41a Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Wed, 13 Dec 2023 22:31:18 +0200 Subject: [PATCH 3/6] remove localizable --- .../Sources/Resources/de.lproj/Localizable.strings | 0 .../Sources/Resources/en.lproj/Localizable.strings | 0 .../Sources/Resources/fi.lproj/Localizable.strings | 0 .../Sources/Resources/fr.lproj/Localizable.strings | 0 .../Sources/Resources/ru.lproj/Localizable.strings | 0 .../Sources/Resources/sv.lproj/Localizable.strings | 0 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings delete mode 100644 Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings diff --git a/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/de.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/fi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/fr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/ru.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings b/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings deleted file mode 100644 index e69de29bb..000000000 From a4874bd1849fd6f05f84e89759cd6ba7f29f5068 Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Wed, 13 Dec 2023 22:32:03 +0200 Subject: [PATCH 4/6] gitignore files --- Common/RuuviLocalization/.gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Common/RuuviLocalization/.gitignore b/Common/RuuviLocalization/.gitignore index e35470fe1..1eacdd81b 100644 --- a/Common/RuuviLocalization/.gitignore +++ b/Common/RuuviLocalization/.gitignore @@ -5,4 +5,6 @@ xcuserdata/ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -RuuviLocalization.swift \ No newline at end of file +RuuviLocalization.swift +RuuviColor.swift +Localizable.strings \ No newline at end of file From d0ead40a06ab283b9c945c108e5c74858f7dcb01 Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Wed, 13 Dec 2023 23:20:48 +0200 Subject: [PATCH 5/6] use new colors --- .swiftgen.assets.yml | 2 +- .../Presentation/Colors/RuuviColor.swift | 42 --------- .../FLEX/FeatureTogglesViewController.swift | 11 +-- .../About/Presenter/AboutPresenter.swift | 4 +- .../About/View/AboutViewController.swift | 4 +- .../UI/BackgroundSelectionButtonView.swift | 7 +- ...ackgroundSelectionUploadProgressView.swift | 5 +- .../BackgroundSelectionViewController.swift | 2 +- .../UI/BackgroundSelectionViewHeader.swift | 6 +- .../Cards/View/UI/CardsViewController.swift | 6 +- .../Charts/Helpers/TagChartsHelper.swift | 7 +- .../Charts/View/UI/TagChartsMarkerView.swift | 3 +- .../View/UI/TagChartsViewController.swift | 2 +- .../Home/View/DashboardImageCell.swift | 24 ++--- .../Home/View/DashboardIndicatorView.swift | 13 +-- .../Home/View/DashboardPlainCell.swift | 16 ++-- .../Home/View/DashboardViewController.swift | 14 +-- .../Dashboard/Home/View/LowBatteryView.swift | 4 +- .../Dashboard/Home/View/NoSensorView.swift | 8 +- .../View/UI/ASSelectionTableViewCell.swift | 9 +- .../UI/ASSelectionTableViewController.swift | 3 +- ...AppearanceSettingsTableViewBasicCell.swift | 5 +- ...ppearanceSettingsTableViewController.swift | 3 +- .../ChartSettingsTableViewController.swift | 2 +- .../View/UI/DevicesTableViewCell.swift | 8 +- .../View/UI/DevicesTableViewController.swift | 2 +- .../Table/HeartbeatTableViewController.swift | 2 +- ...PushAlertSoundSelectionTableViewCell.swift | 9 +- ...ertSoundSelectionTableViewController.swift | 3 +- .../UI/NotificationsSettingsSwitchCell.swift | 5 +- ...ficationsSettingsTableViewController.swift | 2 +- .../UI/NotificationsSettingsTextCell.swift | 7 +- .../View/UI/RuuviCloudTableViewCell.swift | 3 +- .../UI/RuuviCloudTableViewController.swift | 4 +- .../Table/SelectionTableViewController.swift | 4 +- .../ViewController/ShareViewController.swift | 5 +- .../View/SignInBenefitsViewController.swift | 6 +- .../SignIn/View/UI/Helper/SignInView.swift | 2 +- .../SignIn/View/UI/SignInViewController.swift | 2 +- .../DFU/View/SwiftUI/DFUUIView.swift | 89 ++++++++++--------- .../UI/SensorForceClaimViewController.swift | 14 +-- .../OffsetCorrectionAppleViewController.swift | 4 +- .../Owner/View/OwnerViewController.swift | 4 +- .../View/UI/SensorRemovalViewController.swift | 10 +-- .../RUAlertDetailsCellChildView.swift | 3 +- .../RUAlertExpandButton.swift | 3 +- .../View/UI/TagSettingsAlertConfigCell.swift | 12 +-- .../TagSettingsBackgroundSelectionView.swift | 2 +- .../View/UI/TagSettingsBasicCell.swift | 9 +- .../TagSettingsExpandableSectionHeader.swift | 24 ++--- .../View/UI/TagSettingsPlainCell.swift | 5 +- .../UI/TagSettingsSimpleSectionHeader.swift | 7 +- .../View/UI/TagSettingsSwitchCell.swift | 7 +- .../View/UI/TagSettingsViewController.swift | 12 +-- .../Classess/RuuviLinkTextView.swift | 9 +- .../Extensions/Classess/RuuviUISwitch.swift | 6 +- .../Contents.json | 0 .../DashboardBG.colorset}/Contents.json | 0 .../DashboardCardBG.colorset}/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../DustyBlue.colorset}/Contents.json | 0 .../GraphBGColor.colorset}/Contents.json | 0 .../GraphFillColor.colorset}/Contents.json | 0 .../GraphLineColor.colorset}/Contents.json | 0 .../GraphMarkerColor.colorset}/Contents.json | 0 .../Green.colorset}/Contents.json | 0 .../LineColor.colorset}/Contents.json | 0 .../LogoTintColor.colorset}/Contents.json | 0 .../MenuTextColor.colorset}/Contents.json | 0 .../MenuTintColor.colorset}/Contents.json | 0 .../OrangeColor.colorset}/Contents.json | 0 .../Primary.colorset}/Contents.json | 0 .../Purple.colorset}/Contents.json | 0 .../Secondary.colorset}/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../SwitchEnabledTint.colorset}/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../TextColor.colorset}/Contents.json | 0 .../TintColor.colorset}/Contents.json | 0 Common/RuuviLocalization/target.yml | 2 +- .../View/Table/DiscoverTableHeaderView.swift | 3 +- .../RuuviFirmware/Common/ProgressBar.swift | 5 +- .../RuuviMenuTextColor.colorset/Contents.json | 38 -------- .../RuuviTextColor.colorset/Contents.json | 38 -------- .../RuuviTintColor.colorset/Contents.json | 20 ----- .../RuuviFirmware/SwiftUI/FirmwareView.swift | 87 +++++++++--------- .../RuuviFirmware/Util/RuuviColor.swift | 8 -- Modules/RuuviFirmware/target.yml | 1 + .../Pages/Assests/RuuviAssets.swift | 3 - .../RuuviOnboardGatewayFeaturesCell.swift | 3 +- .../Pages/RuuviOnboardSignInCell.swift | 3 +- .../RuuviTintColor.colorset/Contents.json | 20 ----- 95 files changed, 289 insertions(+), 428 deletions(-) delete mode 100644 Apps/RuuviStation/Sources/Classes/Presentation/Colors/RuuviColor.swift rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets => RuuviColors.xcassets}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviDashboardBG.colorset => RuuviColors.xcassets/DashboardBG.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviDashboardCardBG.colorset => RuuviColors.xcassets/DashboardCardBG.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviDashboardIndicator.colorset => RuuviColors.xcassets/DashboardIndicator.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviDashboardIndicatorBig.colorset => RuuviColors.xcassets/DashboardIndicatorBig.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviDustyBlue.colorset => RuuviColors.xcassets/DustyBlue.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviGraphBGColor.colorset => RuuviColors.xcassets/GraphBGColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviGraphFillColor.colorset => RuuviColors.xcassets/GraphFillColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviGraphLineColor.colorset => RuuviColors.xcassets/GraphLineColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviGraphMarkerColor.colorset => RuuviColors.xcassets/GraphMarkerColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviGreen.colorset => RuuviColors.xcassets/Green.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviLineColor.colorset => RuuviColors.xcassets/LineColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviLogoTintColor.colorset => RuuviColors.xcassets/LogoTintColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviMenuTextColor.colorset => RuuviColors.xcassets/MenuTextColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviMenuTintColor.colorset => RuuviColors.xcassets/MenuTintColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviOrangeColor.colorset => RuuviColors.xcassets/OrangeColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviPrimary.colorset => RuuviColors.xcassets/Primary.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviPurple.colorset => RuuviColors.xcassets/Purple.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviSecondary.colorset => RuuviColors.xcassets/Secondary.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset => RuuviColors.xcassets/SwitchDisabledThumbTint.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviSwitchDisabledTint.colorset => RuuviColors.xcassets/SwitchDisabledTint.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviSwitchEnabledTint.colorset => RuuviColors.xcassets/SwitchEnabledTint.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets => RuuviColors.xcassets}/TagSettingsItemHeaderColor.colorset/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets => RuuviColors.xcassets}/TagSettingsSectionHeaderColor.colorset/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviTextColor.colorset => RuuviColors.xcassets/TextColor.colorset}/Contents.json (100%) rename Common/RuuviLocalization/Sources/Resources/{Colors.xcassets/RuuviTintColor.colorset => RuuviColors.xcassets/TintColor.colorset}/Contents.json (100%) delete mode 100644 Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviMenuTextColor.colorset/Contents.json delete mode 100644 Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTextColor.colorset/Contents.json delete mode 100644 Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTintColor.colorset/Contents.json delete mode 100644 Modules/RuuviFirmware/Sources/RuuviFirmware/Util/RuuviColor.swift delete mode 100644 Modules/RuuviOnboard/Sources/RuuviOnboard/Resources/RuuviOnboard.xcassets/Resources/RuuviTintColor.colorset/Contents.json diff --git a/.swiftgen.assets.yml b/.swiftgen.assets.yml index 9fd7f006b..f38d655cd 100644 --- a/.swiftgen.assets.yml +++ b/.swiftgen.assets.yml @@ -1,5 +1,5 @@ xcassets: - - inputs: ./Common/RuuviLocalization/Sources/Resources/Colors.xcassets + - inputs: ./Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets outputs: - templatePath: ./Common/RuuviLocalization/Templates/xcassets-swift5.stencil output: ./Common/RuuviLocalization/Sources/RuuviColor.swift diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Colors/RuuviColor.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Colors/RuuviColor.swift deleted file mode 100644 index 75c0ca8a3..000000000 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Colors/RuuviColor.swift +++ /dev/null @@ -1,42 +0,0 @@ -import SwiftUI - -enum RuuviColor { - static let purple = Color("RuuviPurple") - static let green = Color("RuuviGreen") - static let dustyBlue = Color("RuuviDustyBlue") - static let ruuviPrimarySUI = UIColor(named: "RuuviPrimary") - static let ruuviTintColorSUI = Color("RuuviTintColor") - static let ruuviTextColorSUI = Color("RuuviTextColor") - static let ruuviTitleTextColorSUI = Color("RuuviMenuTextColor") - static let dashboardBGColor = UIColor(named: "RuuviDashboardBG") - static let dashboardCardBGColor = UIColor(named: "RuuviDashboardCardBG") - static let menuButtonTintColor = UIColor(named: "RuuviMenuTintColor") - static let logoTintColor = UIColor(named: "RuuviLogoTintColor") - static let dashboardIndicatorTextColor = UIColor(named: "RuuviDashboardIndicator") - static let dashboardIndicatorBigTextColor = UIColor(named: "RuuviDashboardIndicatorBig") - static let ruuviOrangeColor = UIColor(named: "RuuviOrangeColor") - static let ruuviGraphBGColor = UIColor(named: "RuuviGraphBGColor") - static let ruuviGraphFillColor = UIColor(named: "RuuviGraphFillColor") - static let ruuviGraphLineColor = UIColor(named: "RuuviGraphFillColor") - static let ruuviGraphMarkerColor = UIColor(named: "RuuviGraphMarkerColor") - static let ruuviPrimary = UIColor(named: "RuuviPrimary") - static let ruuviSecondary = UIColor(named: "RuuviSecondary") - static let ruuviTintColor = UIColor(named: "RuuviTintColor") - static let ruuviTextColor = UIColor(named: "RuuviTextColor") - static let ruuviMenuTextColor = UIColor(named: "RuuviMenuTextColor") - static let ruuviLineColor = UIColor(named: "RuuviLineColor") - static let ruuviSwitchDisabledTint = - UIColor(named: "RuuviSwitchDisabledTint") - static let ruuviSwitchEnabledTint = - UIColor(named: "RuuviSwitchEnabledTint") - static let ruuviSwitchDisabledThumbTint = UIColor(named: "RuuviSwitchDisabledThumbTint") - - // Tag settings - static let tagSettingsSectionHeaderColor = UIColor(named: "TagSettingsSectionHeaderColor") - static let tagSettingsItemHeaderColor = UIColor(named: "TagSettingsItemHeaderColor") -} - -extension RuuviColor { - static let fallbackGraphLineColor = UIColor(hexString: "34ad9f") - static let fallbackGraphFillColor = UIColor(hexString: "46cab9", alpha: 0.3) -} diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/FLEX/FeatureTogglesViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/FLEX/FeatureTogglesViewController.swift index 732492390..ae969e479 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/FLEX/FeatureTogglesViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/FLEX/FeatureTogglesViewController.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit final class FeatureTogglesViewController: UITableViewController { @@ -22,7 +23,7 @@ final class FeatureTogglesViewController: UITableViewController { private static let featureCellReuseIdentifier = "FeatureCellReuseIdentifier" private func setupViews() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color headerView.addSubview(sourceSwitch) headerView.addSubview(sourceLabel) tableView.tableHeaderView = headerView @@ -44,7 +45,7 @@ final class FeatureTogglesViewController: UITableViewController { let sourceSwitch = sourceSwitch sourceSwitch.onTintColor = .clear - sourceSwitch.thumbTintColor = RuuviColor.ruuviTintColor + sourceSwitch.thumbTintColor = RuuviColor.tintColor.color let sourceLabel = sourceLabel headerView.translatesAutoresizingMaskIntoConstraints = false @@ -106,10 +107,10 @@ extension FeatureTogglesViewController { let feature = features[indexPath.row] cell.textLabel?.text = Self.title(for: feature) cell.textLabel?.font = UIFont.Muli(.bold, size: 16) - cell.textLabel?.textColor = RuuviColor.ruuviMenuTextColor + cell.textLabel?.textColor = RuuviColor.menuTextColor.color if featureToggleService.isEnabled(feature) { cell.accessoryType = .checkmark - cell.tintColor = RuuviColor.ruuviTintColor + cell.tintColor = RuuviColor.tintColor.color } else { cell.accessoryType = .none } @@ -136,7 +137,7 @@ extension FeatureTogglesViewController { label.text = "Use local feature toggles" label.textAlignment = .right label.font = UIFont.Muli(.bold, size: 16) - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color return label } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift index 5c3a391af..0a4d77cea 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift @@ -71,7 +71,7 @@ extension AboutPresenter { ) attrString.addAttribute( .foregroundColor, - value: RuuviColor.ruuviTintColor ?? UIColor.blue, + value: RuuviColor.tintColor.color, range: changelogRange ) @@ -80,7 +80,7 @@ extension AboutPresenter { .range(of: versionText) attrString.addAttribute( .foregroundColor, - value: RuuviColor.dashboardIndicatorTextColor ?? UIColor.label, + value: RuuviColor.dashboardIndicator.color, range: regularRange ) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/View/AboutViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/View/AboutViewController.swift index 303ce0a26..8dbc4ac93 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/View/AboutViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/About/View/AboutViewController.swift @@ -155,12 +155,12 @@ extension AboutViewController { // make text color white attrString.addAttribute( .foregroundColor, - value: RuuviColor.ruuviTextColor ?? UIColor.label, + value: RuuviColor.textColor.color, range: NSRange(location: 0, length: attrString.length) ) aboutTextView.attributedText = attrString - aboutTextView.textColor = RuuviColor.ruuviTextColor + aboutTextView.textColor = RuuviColor.textColor.color } private func setUpChangelogTapGesture() { diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionButtonView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionButtonView.swift index 9843f9aac..c2d39604f 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionButtonView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionButtonView.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol BackgroundSelectionButtonViewDelegate: NSObjectProtocol { @@ -10,7 +11,7 @@ class BackgroundSelectionButtonView: UIView { // UI private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 16) @@ -21,11 +22,11 @@ class BackgroundSelectionButtonView: UIView { let iv = UIImageView() iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color return iv }() - lazy var seprator = UIView(color: RuuviColor.ruuviLineColor) + lazy var seprator = UIView(color: RuuviColor.lineColor.color) override init(frame: CGRect) { super.init(frame: frame) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionUploadProgressView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionUploadProgressView.swift index 2aae72c97..670c004a4 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionUploadProgressView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionUploadProgressView.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit // swiftlint:disable:next type_name @@ -21,7 +22,7 @@ class BackgroundSelectionUploadProgressView: UIView { let iv = UIImageView() iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color iv.isUserInteractionEnabled = true iv.image = UIImage(systemName: "xmark.circle.fill") let tap = UITapGestureRecognizer(target: self, action: #selector(handleCancelTap)) @@ -42,7 +43,7 @@ class BackgroundSelectionUploadProgressView: UIView { private extension BackgroundSelectionUploadProgressView { func setUpUI() { - backgroundColor = RuuviColor.ruuviGraphBGColor + backgroundColor = RuuviColor.graphBGColor.color layer.cornerRadius = 4 clipsToBounds = true diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewController.swift index 6ec8d7cdf..67b28d3ec 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewController.swift @@ -81,7 +81,7 @@ private extension BackgroundSelectionViewController { } func setUpBaseView() { - view.backgroundColor = RuuviColor.dashboardBGColor + view.backgroundColor = RuuviColor.dashboardBG.color } func setUpHeaderView() { diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewHeader.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewHeader.swift index 626e872c8..6992074a3 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewHeader.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Background/View/UI/BackgroundSelectionViewHeader.swift @@ -15,7 +15,7 @@ class BackgroundSelectionViewHeader: UICollectionReusableView { private lazy var descriptionLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 16) @@ -23,7 +23,7 @@ class BackgroundSelectionViewHeader: UICollectionReusableView { return label }() - lazy var seprator = UIView(color: RuuviColor.ruuviLineColor) + lazy var seprator = UIView(color: RuuviColor.lineColor.color) lazy var takePhotoButton = BackgroundSelectionButtonView( title: RuuviLocalization.takePhoto, icon: "camera.fill", @@ -37,7 +37,7 @@ class BackgroundSelectionViewHeader: UICollectionReusableView { private lazy var selectFromDefaultLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 16) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Cards/View/UI/CardsViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Cards/View/UI/CardsViewController.swift index 9143b34d5..cbf95aaad 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Cards/View/UI/CardsViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Cards/View/UI/CardsViewController.swift @@ -1,9 +1,9 @@ +// swiftlint:disable file_length import Humidity import RuuviLocal import RuuviLocalization import RuuviOntology import RuuviService -// swiftlint:disable file_length import UIKit class CardsViewController: UIViewController { @@ -56,7 +56,7 @@ class CardsViewController: UIViewController { // Base private lazy var cardBackgroundView = CardsBackgroundView() - private lazy var chartViewBackground = UIView(color: RuuviColor.ruuviGraphBGColor) + private lazy var chartViewBackground = UIView(color: RuuviColor.graphBGColor.color) // Header View // Ruuvi Logo @@ -261,7 +261,7 @@ private extension CardsViewController { } func setUpBaseView() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color view.addSubview(cardBackgroundView) cardBackgroundView.fillSuperview() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/Helpers/TagChartsHelper.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/Helpers/TagChartsHelper.swift index 9ff1ac9f7..4d8ed7e3c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/Helpers/TagChartsHelper.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/Helpers/TagChartsHelper.swift @@ -1,18 +1,19 @@ import Charts import Foundation +import RuuviLocalization enum TagChartsHelper { static func newDataSet(entries: [ChartDataEntry] = []) -> LineChartDataSet { let lineChartDataSet = LineChartDataSet(entries: entries) lineChartDataSet.axisDependency = .left - lineChartDataSet.setColor(RuuviColor.ruuviGraphLineColor ?? RuuviColor.fallbackGraphLineColor) + lineChartDataSet.setColor(RuuviColor.graphLineColor.color) lineChartDataSet.lineWidth = 1.5 lineChartDataSet.drawCirclesEnabled = false lineChartDataSet.circleRadius = 0.8 lineChartDataSet.drawValuesEnabled = false lineChartDataSet.fillAlpha = 1 - lineChartDataSet.fillColor = RuuviColor.ruuviGraphFillColor ?? RuuviColor.fallbackGraphFillColor - lineChartDataSet.highlightColor = RuuviColor.ruuviGraphFillColor ?? RuuviColor.fallbackGraphFillColor + lineChartDataSet.fillColor = RuuviColor.graphFillColor.color + lineChartDataSet.highlightColor = RuuviColor.graphFillColor.color lineChartDataSet.highlightLineDashLengths = [2, 1, 0] lineChartDataSet.highlightLineWidth = 1 lineChartDataSet.drawCircleHoleEnabled = false diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsMarkerView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsMarkerView.swift index ee362a0f7..1aacac812 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsMarkerView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsMarkerView.swift @@ -1,4 +1,5 @@ import Charts +import RuuviLocalization import RuuviService import UIKit @@ -21,7 +22,7 @@ class TagChartsMarkerView: MarkerImage { private let yBottomPadding: CGFloat = 32.0 init( - color: UIColor? = RuuviColor.ruuviGraphMarkerColor, + color: UIColor? = RuuviColor.graphMarkerColor.color, font: UIFont = UIFont.Muli(.regular, size: 8), textColor: UIColor = .white ) { diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsViewController.swift index b67a3bac8..b53c01d7b 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Charts/View/UI/TagChartsViewController.swift @@ -84,7 +84,7 @@ class TagChartsViewController: UIViewController { titleColor: .white, title: RuuviLocalization.day1, icon: RuuviAssets.dropDownArrowImage, - iconTintColor: RuuviColor.logoTintColor, + iconTintColor: RuuviColor.logoTintColor.color, iconSize: .init(width: 14, height: 14), preccedingIcon: false ) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardImageCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardImageCell.swift index f17a92cc7..f118dda09 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardImageCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardImageCell.swift @@ -12,7 +12,7 @@ class DashboardImageCell: UICollectionViewCell { private lazy var ruuviTagNameLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorBigTextColor + label.textColor = RuuviColor.dashboardIndicatorBig.color label.textAlignment = .left label.numberOfLines = 2 label.font = UIFont.Montserrat(.bold, size: 14) @@ -23,7 +23,7 @@ class DashboardImageCell: UICollectionViewCell { let iv = UIImageView() iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear - iv.tintColor = RuuviColor.dashboardIndicatorBigTextColor + iv.tintColor = RuuviColor.dashboardIndicatorBig.color iv.alpha = 0 return iv }() @@ -42,7 +42,7 @@ class DashboardImageCell: UICollectionViewCell { iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear iv.image = RuuviAssets.threeDotMoreImage - iv.tintColor = RuuviColor.dashboardIndicatorBigTextColor + iv.tintColor = RuuviColor.dashboardIndicatorBig.color return iv }() @@ -57,7 +57,7 @@ class DashboardImageCell: UICollectionViewCell { private lazy var temperatureLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorBigTextColor + label.textColor = RuuviColor.dashboardIndicatorBig.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Oswald(.bold, size: 30) @@ -66,7 +66,7 @@ class DashboardImageCell: UICollectionViewCell { private lazy var temperatureUnitLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorBigTextColor + label.textColor = RuuviColor.dashboardIndicatorBig.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Oswald(.extraLight, size: 16) @@ -83,7 +83,7 @@ class DashboardImageCell: UICollectionViewCell { iv.backgroundColor = .clear iv.alpha = 0.7 iv.tintColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.8) return iv }() @@ -91,7 +91,7 @@ class DashboardImageCell: UICollectionViewCell { private lazy var updatedAtLabel: UILabel = { let label = UILabel() label.textColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.8) label.textAlignment = .left label.numberOfLines = 0 @@ -128,7 +128,7 @@ class DashboardImageCell: UICollectionViewCell { // swiftlint:disable:next function_body_length fileprivate func setUpUI() { let container = UIView( - color: RuuviColor.dashboardCardBGColor, + color: RuuviColor.dashboardCardBG.color, cornerRadius: 8 ) contentView.addSubview(container) @@ -530,11 +530,11 @@ extension DashboardImageCell { alertIcon.image = RuuviAssets.alertOnImage removeAlertAnimations() } - alertIcon.tintColor = RuuviColor.logoTintColor + alertIcon.tintColor = RuuviColor.logoTintColor.color case .firing: alertButton.isUserInteractionEnabled = true alertIcon.alpha = 1.0 - alertIcon.tintColor = RuuviColor.ruuviOrangeColor + alertIcon.tintColor = RuuviColor.orangeColor.color if alertIcon.image != RuuviAssets.alertActiveImage { alertIcon.image = RuuviAssets.alertActiveImage } @@ -629,8 +629,8 @@ extension DashboardImageCell { private func highlightTemperatureValues(highlight: Bool) { temperatureLabel.textColor = - highlight ? RuuviColor.ruuviOrangeColor : RuuviColor.dashboardIndicatorBigTextColor + highlight ? RuuviColor.orangeColor.color : RuuviColor.dashboardIndicatorBig.color temperatureUnitLabel.textColor = - highlight ? RuuviColor.ruuviOrangeColor : RuuviColor.dashboardIndicatorBigTextColor + highlight ? RuuviColor.orangeColor.color : RuuviColor.dashboardIndicatorBig.color } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardIndicatorView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardIndicatorView.swift index fd974bed6..75fece86e 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardIndicatorView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardIndicatorView.swift @@ -1,9 +1,10 @@ +import RuuviLocalization import UIKit class DashboardIndicatorView: UIView { private lazy var indicatorValueLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Montserrat(.bold, size: 14) @@ -13,7 +14,7 @@ class DashboardIndicatorView: UIView { private lazy var indicatorUnitLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 12) @@ -78,15 +79,15 @@ extension DashboardIndicatorView { func changeColor(highlight: Bool) { indicatorValueLabel.textColor = - highlight ? RuuviColor.ruuviOrangeColor : RuuviColor.dashboardIndicatorTextColor + highlight ? RuuviColor.orangeColor.color : RuuviColor.dashboardIndicator.color indicatorUnitLabel.textColor = - highlight ? RuuviColor.ruuviOrangeColor : RuuviColor.dashboardIndicatorTextColor + highlight ? RuuviColor.orangeColor.color : RuuviColor.dashboardIndicator.color } func clearValues() { indicatorValueLabel.text = nil indicatorUnitLabel.text = nil - indicatorValueLabel.textColor = RuuviColor.dashboardIndicatorTextColor - indicatorUnitLabel.textColor = RuuviColor.dashboardIndicatorTextColor + indicatorValueLabel.textColor = RuuviColor.dashboardIndicator.color + indicatorUnitLabel.textColor = RuuviColor.dashboardIndicator.color } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardPlainCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardPlainCell.swift index 226bd8784..a909756d5 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardPlainCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardPlainCell.swift @@ -8,7 +8,7 @@ import UIKit class DashboardPlainCell: UICollectionViewCell { private lazy var ruuviTagNameLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorBigTextColor + label.textColor = RuuviColor.dashboardIndicatorBig.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Montserrat(.bold, size: 14) @@ -19,7 +19,7 @@ class DashboardPlainCell: UICollectionViewCell { let iv = UIImageView() iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear - iv.tintColor = RuuviColor.dashboardIndicatorBigTextColor + iv.tintColor = RuuviColor.dashboardIndicatorBig.color iv.alpha = 0 return iv }() @@ -38,7 +38,7 @@ class DashboardPlainCell: UICollectionViewCell { iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear iv.image = RuuviAssets.threeDotMoreImage - iv.tintColor = RuuviColor.dashboardIndicatorBigTextColor + iv.tintColor = RuuviColor.dashboardIndicatorBig.color return iv }() @@ -62,7 +62,7 @@ class DashboardPlainCell: UICollectionViewCell { iv.backgroundColor = .clear iv.alpha = 0.7 iv.tintColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.8) return iv }() @@ -70,7 +70,7 @@ class DashboardPlainCell: UICollectionViewCell { private lazy var updatedAtLabel: UILabel = { let label = UILabel() label.textColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.8) label.textAlignment = .left label.numberOfLines = 0 @@ -107,7 +107,7 @@ class DashboardPlainCell: UICollectionViewCell { // swiftlint:disable:next function_body_length fileprivate func setUpUI() { let container = UIView( - color: RuuviColor.dashboardCardBGColor, + color: RuuviColor.dashboardCardBG.color, cornerRadius: 8 ) contentView.addSubview(container) @@ -482,11 +482,11 @@ extension DashboardPlainCell { alertIcon.image = RuuviAssets.alertOnImage removeAlertAnimations() } - alertIcon.tintColor = RuuviColor.logoTintColor + alertIcon.tintColor = RuuviColor.logoTintColor.color case .firing: alertButton.isUserInteractionEnabled = true alertIcon.alpha = 1.0 - alertIcon.tintColor = RuuviColor.ruuviOrangeColor + alertIcon.tintColor = RuuviColor.orangeColor.color if alertIcon.image != RuuviAssets.alertActiveImage { alertIcon.image = RuuviAssets.alertActiveImage } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardViewController.swift index a920b3106..4302bdc5c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/DashboardViewController.swift @@ -76,7 +76,7 @@ class DashboardViewController: UIViewController { // UI private lazy var noSensorView: NoSensorView = { let view = NoSensorView() - view.backgroundColor = RuuviColor.dashboardCardBGColor + view.backgroundColor = RuuviColor.dashboardCardBG.color view.layer.cornerRadius = 12 view.clipsToBounds = true view.delegate = self @@ -92,14 +92,14 @@ class DashboardViewController: UIViewController { contentMode: .scaleAspectFit ) iv.backgroundColor = .clear - iv.tintColor = RuuviColor.logoTintColor + iv.tintColor = RuuviColor.logoTintColor.color return iv }() // Action Buttons private lazy var menuButton: UIButton = { let button = UIButton() - button.tintColor = RuuviColor.menuButtonTintColor + button.tintColor = RuuviColor.menuTintColor.color let menuImage = UIImage(named: "baseline_menu_white_48pt") button.setImage(menuImage, for: .normal) button.setImage(menuImage, for: .highlighted) @@ -115,10 +115,10 @@ class DashboardViewController: UIViewController { private lazy var viewButton: RuuviContextMenuButton = .init( menu: viewToggleMenuOptions(), - titleColor: RuuviColor.dashboardIndicatorTextColor, + titleColor: RuuviColor.dashboardIndicator.color, title: RuuviLocalization.view, icon: RuuviAssets.dropDownArrowImage, - iconTintColor: RuuviColor.logoTintColor, + iconTintColor: RuuviColor.logoTintColor.color, iconSize: .init(width: 14, height: 14), preccedingIcon: false ) @@ -140,7 +140,7 @@ class DashboardViewController: UIViewController { private lazy var refresher: UIRefreshControl = { let rc = UIRefreshControl() - rc.tintColor = RuuviColor.ruuviTintColor + rc.tintColor = RuuviColor.tintColor.color rc.layer.zPosition = -1 rc.alpha = 0 rc.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged) @@ -382,7 +382,7 @@ private extension DashboardViewController { } func setUpBaseView() { - view.backgroundColor = RuuviColor.dashboardBGColor + view.backgroundColor = RuuviColor.dashboardBG.color view.addSubview(noSensorView) noSensorView.anchor( diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/LowBatteryView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/LowBatteryView.swift index 7bc284348..1708e9f93 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/LowBatteryView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/LowBatteryView.swift @@ -5,7 +5,7 @@ class BatteryLevelView: UIView { private lazy var batteryLevelLabel: UILabel = { let label = UILabel() label.textColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.5) label.textAlignment = .right label.numberOfLines = 0 @@ -19,7 +19,7 @@ class BatteryLevelView: UIView { iv.contentMode = .scaleAspectFit iv.backgroundColor = .clear iv.image = UIImage(systemName: "battery.25") - iv.tintColor = RuuviColor.ruuviOrangeColor + iv.tintColor = RuuviColor.orangeColor.color return iv }() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/NoSensorView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/NoSensorView.swift index ce9c82765..e5c58ffa4 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/NoSensorView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Dashboard/Home/View/NoSensorView.swift @@ -31,7 +31,7 @@ class NoSensorView: UIView { private lazy var messageLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .center label.numberOfLines = 0 label.font = UIFont.Muli(.semiBoldItalic, size: UIDevice.isiPhoneSE() ? 16 : 20) @@ -48,7 +48,7 @@ class NoSensorView: UIView { private lazy var signInButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: UIDevice.isiPhoneSE() ? 20 : 25 ) button.setTitle( @@ -70,7 +70,7 @@ class NoSensorView: UIView { private lazy var addSensorButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: UIDevice.isiPhoneSE() ? 20 : 25 ) button.setTitle( @@ -92,7 +92,7 @@ class NoSensorView: UIView { private lazy var buySensorButton: UIButton = { let button = UIButton() - button.setTitleColor(RuuviColor.ruuviTextColor, for: .normal) + button.setTitleColor(RuuviColor.textColor.color, for: .normal) button.setTitle( RuuviLocalization.DiscoverTable.GetMoreSensors.Button.title, for: .normal diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewCell.swift index 71401485b..4b8ac6ba7 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewCell.swift @@ -1,9 +1,10 @@ +import RuuviLocalization import UIKit class ASSelectionTableViewCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 16) @@ -28,7 +29,7 @@ class ASSelectionTableViewCell: UITableViewCell { fileprivate func setUpUI() { backgroundColor = .clear - tintColor = RuuviColor.ruuviTintColor + tintColor = RuuviColor.tintColor.color addSubview(titleLabel) titleLabel.anchor( @@ -52,8 +53,8 @@ extension ASSelectionTableViewCell { UIFont.Muli(.bold, size: 16) : UIFont.Muli(.regular, size: 16) titleLabel.textColor = isSelected ? - RuuviColor.ruuviMenuTextColor : - RuuviColor.ruuviTextColor + RuuviColor.menuTextColor.color : + RuuviColor.textColor.color accessoryType = isSelected ? .checkmark : .none } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewController.swift index c53442d60..26f0a1734 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/Selection/View/UI/ASSelectionTableViewController.swift @@ -1,4 +1,5 @@ import Foundation +import RuuviLocalization import UIKit class ASSelectionTableViewController: UITableViewController { @@ -41,7 +42,7 @@ extension ASSelectionTableViewController: ASSelectionViewInput { private extension ASSelectionTableViewController { func setUpUI() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color setUpTableView() } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewBasicCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewBasicCell.swift index e344ce6af..c66f8bbf2 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewBasicCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewBasicCell.swift @@ -1,9 +1,10 @@ +import RuuviLocalization import UIKit class AppearanceSettingsTableViewBasicCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 16) @@ -12,7 +13,7 @@ class AppearanceSettingsTableViewBasicCell: UITableViewCell { private lazy var valueLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color label.textAlignment = .right label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 16) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewController.swift index 3c7882c9a..3cbd88277 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Appearance/View/UI/AppearanceSettingsTableViewController.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import Foundation import UIKit @@ -41,7 +42,7 @@ extension AppearanceSettingsTableViewController: AppearanceSettingsViewInput { private extension AppearanceSettingsTableViewController { func setUpUI() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color setUpTableView() } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Chart/View/Table/ChartSettingsTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Chart/View/Table/ChartSettingsTableViewController.swift index 135f15728..127314a5d 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Chart/View/Table/ChartSettingsTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Chart/View/Table/ChartSettingsTableViewController.swift @@ -85,7 +85,7 @@ extension ChartSettingsTableViewController { override func tableView(_: UITableView, viewForFooterInSection section: Int) -> UIView? { let footerView = UIView() let footerLabel = UILabel() - footerLabel.textColor = RuuviColor.ruuviTextColor + footerLabel.textColor = RuuviColor.textColor.color footerLabel.font = UIFont.Muli(.regular, size: 13) footerLabel.numberOfLines = 0 footerLabel.text = viewModel.sections[section].note diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewCell.swift index 6286107b7..344fc3229 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewCell.swift @@ -15,7 +15,7 @@ class DevicesTableViewCell: UITableViewCell { // UI private lazy var deviceNameLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorBigTextColor + label.textColor = RuuviColor.dashboardIndicatorBig.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Montserrat(.bold, size: 14) @@ -24,7 +24,7 @@ class DevicesTableViewCell: UITableViewCell { private lazy var tokenIdLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Montserrat(.regular, size: 12) @@ -33,7 +33,7 @@ class DevicesTableViewCell: UITableViewCell { private lazy var lastAccessedLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Montserrat(.regular, size: 12) @@ -56,7 +56,7 @@ private extension DevicesTableViewCell { selectionStyle = .none let container = UIView( - color: RuuviColor.dashboardCardBGColor, + color: RuuviColor.dashboardCardBG.color, cornerRadius: 8 ) contentView.addSubview(container) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewController.swift index 67c160e24..db3860190 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Devices/View/UI/DevicesTableViewController.swift @@ -90,7 +90,7 @@ private extension DevicesTableViewController { } func setUpTableView() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color tableView.showsVerticalScrollIndicator = false tableView.tableFooterView = UIView() tableView.estimatedRowHeight = UITableView.automaticDimension diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Heartbeat/View/Table/HeartbeatTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Heartbeat/View/Table/HeartbeatTableViewController.swift index 4aad330ad..2e74ef82c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Heartbeat/View/Table/HeartbeatTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Heartbeat/View/Table/HeartbeatTableViewController.swift @@ -66,7 +66,7 @@ extension HeartbeatTableViewController { override func tableView(_: UITableView, viewForFooterInSection _: Int) -> UIView? { let footerView = UIView() let footerLabel = UILabel() - footerLabel.textColor = RuuviColor.ruuviTextColor + footerLabel.textColor = RuuviColor.textColor.color footerLabel.font = UIFont.Muli(.regular, size: 13) footerLabel.numberOfLines = 0 footerLabel.text = RuuviLocalization.Settings.BackgroundScanning.Footer.message diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewCell.swift index 775ff356e..e90df097d 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewCell.swift @@ -1,9 +1,10 @@ +import RuuviLocalization import UIKit class PushAlertSelectionTableViewCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 16) @@ -28,7 +29,7 @@ class PushAlertSelectionTableViewCell: UITableViewCell { fileprivate func setUpUI() { backgroundColor = .clear - tintColor = RuuviColor.ruuviTintColor + tintColor = RuuviColor.tintColor.color addSubview(titleLabel) titleLabel.anchor( @@ -52,8 +53,8 @@ extension PushAlertSelectionTableViewCell { UIFont.Muli(.bold, size: 16) : UIFont.Muli(.regular, size: 16) titleLabel.textColor = isSelected ? - RuuviColor.ruuviMenuTextColor : - RuuviColor.ruuviTextColor + RuuviColor.menuTextColor.color : + RuuviColor.textColor.color accessoryType = isSelected ? .checkmark : .none } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewController.swift index b7ada4f69..bd1fa978f 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/Selection/View/UI/PushAlertSoundSelectionTableViewController.swift @@ -1,5 +1,6 @@ import AVFoundation import Foundation +import RuuviLocalization import RuuviOntology import UIKit @@ -60,7 +61,7 @@ extension PushAlertSoundSelectionTableViewController: PushAlertSoundSelectionVie private extension PushAlertSoundSelectionTableViewController { func setUpUI() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color setUpTableView() } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsSwitchCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsSwitchCell.swift index e0131e90a..336eb67fe 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsSwitchCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsSwitchCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol NotificationsSettingsSwitchCellDelegate: NSObjectProtocol { @@ -9,7 +10,7 @@ class NotificationsSettingsSwitchCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.bold, size: 16) @@ -19,7 +20,7 @@ class NotificationsSettingsSwitchCell: UITableViewCell { private lazy var subtitleLabel: UILabel = { let label = UILabel() label.textColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.6) label.textAlignment = .left label.numberOfLines = 0 diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTableViewController.swift index 300c701e3..92a80a0bd 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTableViewController.swift @@ -43,7 +43,7 @@ extension NotificationsSettingsTableViewController: NotificationsSettingsViewInp private extension NotificationsSettingsTableViewController { func setUpUI() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color setUpTableView() } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTextCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTextCell.swift index 4b8fc5a53..7cd1fb1a9 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTextCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Notifications/View/UI/NotificationsSettingsTextCell.swift @@ -1,9 +1,10 @@ +import RuuviLocalization import UIKit class NotificationsSettingsTextCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.bold, size: 16) @@ -13,7 +14,7 @@ class NotificationsSettingsTextCell: UITableViewCell { private lazy var subtitleLabel: UILabel = { let label = UILabel() label.textColor = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.6) label.textAlignment = .left label.numberOfLines = 0 @@ -23,7 +24,7 @@ class NotificationsSettingsTextCell: UITableViewCell { private lazy var valueLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviMenuTextColor + label.textColor = RuuviColor.menuTextColor.color label.textAlignment = .right label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 16) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewCell.swift index 7b1b8acd6..9d8399590 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol RuuviCloudTableViewCellDelegate: NSObjectProtocol { @@ -9,7 +10,7 @@ class RuuviCloudTableViewCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.bold, size: 16) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewController.swift index 99188f8c1..9e860e057 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Ruuvi Cloud/View/UI/RuuviCloudTableViewController.swift @@ -46,7 +46,7 @@ extension RuuviCloudTableViewController: RuuviCloudViewInput { private extension RuuviCloudTableViewController { func setUpUI() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color setUpTableView() } @@ -98,7 +98,7 @@ extension RuuviCloudTableViewController { override func tableView(_: UITableView, viewForFooterInSection _: Int) -> UIView? { let footerView = UIView() let footerLabel = UILabel() - footerLabel.textColor = RuuviColor.ruuviTextColor + footerLabel.textColor = RuuviColor.textColor.color footerLabel.font = UIFont.Muli(.regular, size: 13) footerLabel.numberOfLines = 0 footerLabel.text = RuuviLocalization.Settings.Label.CloudMode.description diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Selection/View/Table/SelectionTableViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Selection/View/Table/SelectionTableViewController.swift index 3e7bcbd6b..8218c875f 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Selection/View/Table/SelectionTableViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Settings/Submodules/Selection/View/Table/SelectionTableViewController.swift @@ -136,11 +136,11 @@ extension SelectionTableViewController { ) { if title == viewModel?.selection { cell.accessoryType = .checkmark - cell.nameLabel.textColor = RuuviColor.ruuviMenuTextColor + cell.nameLabel.textColor = RuuviColor.menuTextColor.color cell.nameLabel.font = UIFont.Muli(.bold, size: 16) } else { cell.accessoryType = .none - cell.nameLabel.textColor = RuuviColor.ruuviTextColor + cell.nameLabel.textColor = RuuviColor.textColor.color cell.nameLabel.font = UIFont.Muli(.regular, size: 16) } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Share/View/ViewController/ShareViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Share/View/ViewController/ShareViewController.swift index ee90bde01..4d5b14476 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Share/View/ViewController/ShareViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/Share/View/ViewController/ShareViewController.swift @@ -1,5 +1,6 @@ import RuuviLocalization import UIKit + extension ShareViewController { enum Section: Int { case addFriend = 0 @@ -88,7 +89,7 @@ class ShareViewController: UITableViewController { let section = Section(value: section) let headerView = UIView(color: .clear) let titleLabel = UILabel() - titleLabel.textColor = RuuviColor.ruuviMenuTextColor + titleLabel.textColor = RuuviColor.menuTextColor.color titleLabel.font = UIFont.Muli(.bold, size: 16) titleLabel.numberOfLines = 0 switch section { @@ -210,7 +211,7 @@ extension ShareViewController { let description = RuuviLocalization.ShareViewController.description cell.descriptionLabel.text = description.trimmingCharacters(in: .whitespacesAndNewlines) - cell.descriptionLabel.textColor = RuuviColor.ruuviTextColor + cell.descriptionLabel.textColor = RuuviColor.textColor.color return cell } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/Submodules/Sign In Benefits/View/SignInBenefitsViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/Submodules/Sign In Benefits/View/SignInBenefitsViewController.swift index 14911f47f..107accc9c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/Submodules/Sign In Benefits/View/SignInBenefitsViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/Submodules/Sign In Benefits/View/SignInBenefitsViewController.swift @@ -75,7 +75,7 @@ class SignInBenefitsViewController: UIViewController, SignInBenefitsViewInput { private lazy var continueButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle( @@ -148,7 +148,7 @@ extension SignInBenefitsViewController { } private func setUpBase() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color view.addSubview(bgLayer) bgLayer.fillSuperview() @@ -284,7 +284,7 @@ extension SignInBenefitsViewController { ) attrString.addAttribute( .foregroundColor, - value: RuuviColor.ruuviOrangeColor ?? UIColor.systemOrange, + value: RuuviColor.orangeColor.color, range: boldRange ) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/Helper/SignInView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/Helper/SignInView.swift index fdd764b40..f633582a7 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/Helper/SignInView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/Helper/SignInView.swift @@ -64,7 +64,7 @@ class SignInView: UIView { private lazy var requestCodeButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle( diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/SignInViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/SignInViewController.swift index f352547b1..bda968102 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/SignInViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/SignIn/View/UI/SignInViewController.swift @@ -186,7 +186,7 @@ extension SignInViewController { } private func setUpBase() { - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color view.addSubview(bgLayer) bgLayer.fillSuperview() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/DFU/View/SwiftUI/DFUUIView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/DFU/View/SwiftUI/DFUUIView.swift index e897bf587..abea5d4e1 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/DFU/View/SwiftUI/DFUUIView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/DFU/View/SwiftUI/DFUUIView.swift @@ -50,7 +50,8 @@ struct DFUUIView: View { ) } } - .background(Color(RuuviColor.ruuviPrimarySUI!).edgesIgnoringSafeArea(.all)) + .background(RuuviColor.primary.swiftUIColor) + .edgesIgnoringSafeArea(.all) .navigationBarTitle( texts.navigationTitle ) @@ -78,7 +79,7 @@ struct DFUUIView: View { return VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -96,13 +97,13 @@ struct DFUUIView: View { return VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -117,13 +118,13 @@ struct DFUUIView: View { return VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -137,21 +138,21 @@ struct DFUUIView: View { return VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) if let currentVersion = currentRelease?.version { Text(currentVersion) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } else { Text(texts.notReportingDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } } .frame( @@ -165,7 +166,7 @@ struct DFUUIView: View { case let .noNeedToUpgrade(_, currentRelease): return Text(texts.alreadyOnLatest) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, @@ -179,21 +180,21 @@ struct DFUUIView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) if let currentVersion = currentRelease?.version { Text(currentVersion) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } else { Text(texts.notReportingDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: { @@ -210,7 +211,7 @@ struct DFUUIView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) @@ -246,13 +247,13 @@ struct DFUUIView: View { return VStack(alignment: .center, spacing: 16) { Text(texts.downloadingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) ProgressBar(value: $viewModel.downloadProgress) .frame(height: 16) .padding() Text("\(Int(viewModel.downloadProgress * 100))%") .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } .frame( maxWidth: .infinity, @@ -269,25 +270,25 @@ struct DFUUIView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.prepareTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(texts.openCoverTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.localBootButtonTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.setUpdatingModeTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeTwoButtonsDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeOneButtonDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeSuccessTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: {}, @@ -302,7 +303,7 @@ struct DFUUIView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: true ) @@ -328,25 +329,25 @@ struct DFUUIView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.prepareTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(texts.openCoverTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.localBootButtonTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.setUpdatingModeTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeTwoButtonsDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeOneButtonDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeSuccessTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: { @@ -368,7 +369,7 @@ struct DFUUIView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) @@ -389,17 +390,17 @@ struct DFUUIView: View { return VStack(alignment: .center, spacing: 24) { Text(texts.updatingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) ProgressBar(value: $viewModel.flashProgress) .frame(height: 16) Text("\(Int(viewModel.flashProgress * 100))%") .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.doNotCloseTitle) .font(muliBold16) .bold() .multilineTextAlignment(.center) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } .frame( maxWidth: .infinity, @@ -411,7 +412,7 @@ struct DFUUIView: View { case .successfulyFlashed: return Text(texts.updatingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, @@ -422,7 +423,7 @@ struct DFUUIView: View { case .servingAfterUpdate: return Text(texts.updatingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, @@ -434,7 +435,7 @@ struct DFUUIView: View { viewModel.storeUpdatedFirmware(currentRelease: currentRelease) return Text(texts.successfulTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/View/UI/SensorForceClaimViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/View/UI/SensorForceClaimViewController.swift index 44d9d3b19..9036507f8 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/View/UI/SensorForceClaimViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/View/UI/SensorForceClaimViewController.swift @@ -18,7 +18,7 @@ class SensorForceClaimViewController: UIViewController { private lazy var messageLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.text = RuuviLocalization.forceClaimSensorDescription1 @@ -28,7 +28,7 @@ class SensorForceClaimViewController: UIViewController { private lazy var claimSensorButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle(RuuviLocalization.forceClaim, for: .normal) @@ -43,7 +43,7 @@ class SensorForceClaimViewController: UIViewController { }() private lazy var sensorClaimNotesViewContainer: UIView = .init( - color: RuuviColor.ruuviPrimary + color: RuuviColor.primary.color ) private lazy var sensorClaimNotesView: UITextView = { let tv = UITextView() @@ -51,7 +51,7 @@ class SensorForceClaimViewController: UIViewController { tv.isEditable = false tv.textAlignment = .left tv.text = RuuviLocalization.forceClaimSensorDescription2 - tv.textColor = RuuviColor.ruuviTextColor + tv.textColor = RuuviColor.textColor.color tv.backgroundColor = .clear tv.font = UIFont.Muli(.regular, size: 16) tv.isScrollEnabled = true @@ -60,7 +60,7 @@ class SensorForceClaimViewController: UIViewController { private lazy var useNFCButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle( @@ -79,7 +79,7 @@ class SensorForceClaimViewController: UIViewController { private lazy var useBluetoothButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle( @@ -173,7 +173,7 @@ extension SensorForceClaimViewController { private func setUpBase() { title = RuuviLocalization.forceClaimSensor - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color let backBarButtonItemView = UIView() backBarButtonItemView.addSubview(backButton) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift index e7d9f9ee9..8c9a6afb8 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift @@ -164,12 +164,12 @@ extension OffsetCorrectionAppleViewController: OffsetCorrectionViewInput { // make text color gray attrString.addAttribute( .foregroundColor, - value: RuuviColor.ruuviTextColor ?? UIColor.secondaryLabel, + value: RuuviColor.textColor.color, range: NSRange(location: 0, length: attrString.length) ) descriptionTextView.attributedText = attrString - descriptionTextView.textColor = RuuviColor.ruuviTextColor + descriptionTextView.textColor = RuuviColor.textColor.color } func showCalibrateDialog() { diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Owner/View/OwnerViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Owner/View/OwnerViewController.swift index a9009d4d8..ac7068648 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Owner/View/OwnerViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Owner/View/OwnerViewController.swift @@ -13,7 +13,7 @@ final class OwnerViewController: UIViewController { private lazy var removeCloudHistoryTitleLabel: UILabel = { let label = UILabel() label.text = RuuviLocalization.removeCloudHistoryTitle - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 14) @@ -23,7 +23,7 @@ final class OwnerViewController: UIViewController { private lazy var removeCloudHistoryDescriptionLabel: UILabel = { let label = UILabel() label.text = RuuviLocalization.removeCloudHistoryDescription - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 14) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Removal/View/UI/SensorRemovalViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Removal/View/UI/SensorRemovalViewController.swift index 12514a7c4..35b947ae6 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Removal/View/UI/SensorRemovalViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/Submodules/Removal/View/UI/SensorRemovalViewController.swift @@ -18,7 +18,7 @@ class SensorRemovalViewController: UIViewController { private lazy var messageLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 16) @@ -29,7 +29,7 @@ class SensorRemovalViewController: UIViewController { private lazy var removeCloudHistoryTitleLabel: UILabel = { let label = UILabel() label.text = RuuviLocalization.removeCloudHistoryTitle - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 14) @@ -39,7 +39,7 @@ class SensorRemovalViewController: UIViewController { private lazy var removeCloudHistoryDescriptionLabel: UILabel = { let label = UILabel() label.text = RuuviLocalization.removeCloudHistoryDescription - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 14) @@ -54,7 +54,7 @@ class SensorRemovalViewController: UIViewController { private lazy var removeButton: UIButton = { let button = UIButton( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 25 ) button.setTitle(RuuviLocalization.remove, for: .normal) @@ -142,7 +142,7 @@ extension SensorRemovalViewController { private func setUpBase() { title = RuuviLocalization.TagSettings.ConfirmTagRemovalDialog.title - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color let backBarButtonItemView = UIView() backBarButtonItemView.addSubview(backButton) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertDetailsCellChildView/RUAlertDetailsCellChildView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertDetailsCellChildView/RUAlertDetailsCellChildView.swift index 7639fe97a..74dc3dc19 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertDetailsCellChildView/RUAlertDetailsCellChildView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertDetailsCellChildView/RUAlertDetailsCellChildView.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol RUAlertDetailsCellChildViewDelegate: NSObjectProtocol { @@ -22,7 +23,7 @@ class RUAlertDetailsCellChildView: UIView { let iv = UIImageView() iv.backgroundColor = .clear iv.image = RuuviAssets.editPenImage - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color iv.contentMode = .scaleAspectFit return iv }() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertExpandButton/RUAlertExpandButton.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertExpandButton/RUAlertExpandButton.swift index fa6b50c4e..d0095de03 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertExpandButton/RUAlertExpandButton.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/RUAlertExpandButton/RUAlertExpandButton.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol RUAlertExpandButtonDelegate: NSObjectProtocol { @@ -15,7 +16,7 @@ class RUAlertExpandButton: UIView { let iv = UIImageView() iv.backgroundColor = .clear iv.image = UIImage(named: "chevron.down") - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color iv.contentMode = .scaleAspectFit return iv }() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsAlertConfigCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsAlertConfigCell.swift index 1991de466..7cbefda37 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsAlertConfigCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsAlertConfigCell.swift @@ -75,10 +75,10 @@ class TagSettingsAlertConfigCell: UITableViewCell { slider.handleDiameter = 18 slider.enableStep = true slider.minDistance = 1 - slider.colorBetweenHandles = RuuviColor.ruuviTintColor - slider.handleColor = RuuviColor.ruuviTintColor + slider.colorBetweenHandles = RuuviColor.tintColor.color + slider.handleColor = RuuviColor.tintColor.color slider.backgroundColor = .clear - slider.tintColor = RuuviColor.ruuviTintColor?.withAlphaComponent(0.2) + slider.tintColor = RuuviColor.tintColor.color.withAlphaComponent(0.2) slider.hideLabels = true return slider }() @@ -134,7 +134,7 @@ extension TagSettingsAlertConfigCell { private func setUpUI() { contentView.isUserInteractionEnabled = true - backgroundColor = RuuviColor.ruuviPrimary + backgroundColor = RuuviColor.primary.color addSubview(noticeView) noticeView.anchor( @@ -191,7 +191,7 @@ extension TagSettingsAlertConfigCell { statusSwitch.centerYInSuperview() let statusSeparator = UIView() - statusSeparator.backgroundColor = RuuviColor.ruuviLineColor + statusSeparator.backgroundColor = RuuviColor.lineColor.color addSubview(statusSeparator) statusSeparator.anchor( top: statusContainerView.bottomAnchor, @@ -212,7 +212,7 @@ extension TagSettingsAlertConfigCell { ) let customDescriptionSeparator = UIView() - customDescriptionSeparator.backgroundColor = RuuviColor.ruuviLineColor + customDescriptionSeparator.backgroundColor = RuuviColor.lineColor.color addSubview(customDescriptionSeparator) customDescriptionSeparator.anchor( top: setCustomDescriptionView.bottomAnchor, diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBackgroundSelectionView.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBackgroundSelectionView.swift index c6810a81f..e43dadf1c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBackgroundSelectionView.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBackgroundSelectionView.swift @@ -22,7 +22,7 @@ class TagSettingsBackgroundSelectionView: UIView { private lazy var cameraIconContainer: UIView = { let container = UIView( - color: RuuviColor.ruuviTintColor, + color: RuuviColor.tintColor.color, cornerRadius: 30 ) let cameraIconView = UIImageView() diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBasicCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBasicCell.swift index 1ef4b1a80..081c166c7 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBasicCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsBasicCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit enum TagSettingsBasicAccessory { @@ -11,7 +12,7 @@ enum TagSettingsBasicAccessory { class TagSettingsBasicCell: UITableViewCell { lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.bold, size: 14) @@ -20,7 +21,7 @@ class TagSettingsBasicCell: UITableViewCell { private lazy var valueLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .right label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 14) @@ -35,7 +36,7 @@ class TagSettingsBasicCell: UITableViewCell { private var iconHiddenWidthConstraints: [NSLayoutConstraint] = [] - private lazy var separator = UIView(color: RuuviColor.ruuviLineColor) + private lazy var separator = UIView(color: RuuviColor.lineColor.color) override init( style: UITableViewCell.CellStyle, @@ -113,7 +114,7 @@ class TagSettingsBasicCell: UITableViewCell { switch type { case .pencil: iconView.image = RuuviAssets.editPenImage - iconView.tintColor = RuuviColor.ruuviTintColor + iconView.tintColor = RuuviColor.tintColor.color iconHiddenWidthConstraints.forEach { anchor in anchor.isActive = false } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsExpandableSectionHeader.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsExpandableSectionHeader.swift index 475eb6dd1..02096b71b 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsExpandableSectionHeader.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsExpandableSectionHeader.swift @@ -17,7 +17,7 @@ class TagSettingsExpandableSectionHeader: UIView { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 16) @@ -35,7 +35,7 @@ class TagSettingsExpandableSectionHeader: UIView { let label = UILabel() label.textAlignment = .center label.numberOfLines = 0 - label.textColor = RuuviColor.ruuviTextColor?.withAlphaComponent(0.7) + label.textColor = RuuviColor.textColor.color.withAlphaComponent(0.7) label.font = UIFont.Muli(.regular, size: 14) return label }() @@ -44,7 +44,7 @@ class TagSettingsExpandableSectionHeader: UIView { let iv = UIImageView() iv.backgroundColor = .clear iv.image = RuuviAssets.dropDownArrowImage - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color iv.contentMode = .scaleAspectFit return iv }() @@ -53,7 +53,7 @@ class TagSettingsExpandableSectionHeader: UIView { private lazy var noValueLabel: UILabel = { let label = UILabel() label.text = RuuviLocalization.TagSettings.Label.NoValues.text - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .right label.numberOfLines = 0 label.font = UIFont.Muli(.regular, size: 12) @@ -63,11 +63,11 @@ class TagSettingsExpandableSectionHeader: UIView { private lazy var iconView: UIImageView = { let iv = UIImageView() iv.image = UIImage(systemName: "info.circle") - iv.tintColor = RuuviColor.ruuviTintColor + iv.tintColor = RuuviColor.tintColor.color return iv }() - lazy var seprator = UIView(color: RuuviColor.ruuviPrimary) + lazy var seprator = UIView(color: RuuviColor.primary.color) override init(frame: CGRect) { super.init(frame: frame) @@ -81,7 +81,7 @@ class TagSettingsExpandableSectionHeader: UIView { // swiftlint:disable:next function_body_length private func setUpUI() { - backgroundColor = RuuviColor.tagSettingsSectionHeaderColor + backgroundColor = RuuviColor.tagSettingsSectionHeaderColor.color addSubview(titleLabel) titleLabel.anchor( top: topAnchor, @@ -200,7 +200,7 @@ extension TagSettingsExpandableSectionHeader { if let color = backgroundColor { self.backgroundColor = color } else { - self.backgroundColor = RuuviColor.tagSettingsItemHeaderColor + self.backgroundColor = RuuviColor.tagSettingsItemHeaderColor.color } if let font { titleLabel.font = font @@ -250,12 +250,12 @@ extension TagSettingsExpandableSectionHeader { .shared .shortTimeString(from: date) alertIcon.image = RuuviAssets.alertOffImage - alertIcon.tintColor = RuuviColor.logoTintColor + alertIcon.tintColor = RuuviColor.logoTintColor.color return } else { mutedTillLabel.isHidden = true alertIcon.image = isOn ? RuuviAssets.alertOnImage : nil - alertIcon.tintColor = RuuviColor.logoTintColor + alertIcon.tintColor = RuuviColor.logoTintColor.color removeAlertAnimations() } @@ -267,11 +267,11 @@ extension TagSettingsExpandableSectionHeader { switch state { case .registered: alertIcon.image = RuuviAssets.alertOnImage - alertIcon.tintColor = RuuviColor.logoTintColor + alertIcon.tintColor = RuuviColor.logoTintColor.color removeAlertAnimations() case .firing: alertIcon.alpha = 1.0 - alertIcon.tintColor = RuuviColor.ruuviOrangeColor + alertIcon.tintColor = RuuviColor.orangeColor.color alertIcon.image = RuuviAssets.alertActiveImage DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { UIView.animate( diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsPlainCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsPlainCell.swift index 546217cd1..e998114c5 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsPlainCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsPlainCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit /// Leading title label and trailing aligned value label @@ -6,7 +7,7 @@ import UIKit class TagSettingsPlainCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 14) @@ -15,7 +16,7 @@ class TagSettingsPlainCell: UITableViewCell { private lazy var valueLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .right label.numberOfLines = 1 label.font = UIFont.Muli(.regular, size: 14) diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSimpleSectionHeader.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSimpleSectionHeader.swift index f19011c3f..d7e20e54c 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSimpleSectionHeader.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSimpleSectionHeader.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol TagSettingsSimpleSectionHeaderDelegate: NSObjectProtocol {} @@ -8,7 +9,7 @@ class TagSettingsSimpleSectionHeader: UIView { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.dashboardIndicatorTextColor + label.textColor = RuuviColor.dashboardIndicator.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 18) @@ -26,7 +27,7 @@ class TagSettingsSimpleSectionHeader: UIView { } private func setUpUI() { - backgroundColor = RuuviColor.tagSettingsSectionHeaderColor + backgroundColor = RuuviColor.tagSettingsSectionHeaderColor.color addSubview(titleLabel) titleLabel.fillSuperviewToSafeArea( padding: .init(top: 8, left: 8, bottom: 8, right: 8)) @@ -42,7 +43,7 @@ class TagSettingsSimpleSectionHeader: UIView { if let color = backgroundColor { self.backgroundColor = color } else { - self.backgroundColor = RuuviColor.tagSettingsSectionHeaderColor + self.backgroundColor = RuuviColor.tagSettingsSectionHeaderColor.color } } } diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSwitchCell.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSwitchCell.swift index ebcf00450..df2a77933 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSwitchCell.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsSwitchCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol TagSettingsSwitchCellDelegate: NSObjectProtocol { @@ -9,7 +10,7 @@ class TagSettingsSwitchCell: UITableViewCell { private lazy var titleLabel: UILabel = { let label = UILabel() - label.textColor = RuuviColor.ruuviTextColor + label.textColor = RuuviColor.textColor.color label.textAlignment = .left label.numberOfLines = 0 label.font = UIFont.Muli(.bold, size: 14) @@ -18,7 +19,7 @@ class TagSettingsSwitchCell: UITableViewCell { private lazy var pairingAnimationView: UIActivityIndicatorView = { let activityIndicator = UIActivityIndicatorView(style: .medium) - activityIndicator.tintColor = RuuviColor.ruuviTintColor + activityIndicator.tintColor = RuuviColor.tintColor.color return activityIndicator }() @@ -29,7 +30,7 @@ class TagSettingsSwitchCell: UITableViewCell { return toggle }() - lazy var seprator = UIView(color: RuuviColor.ruuviLineColor) + lazy var seprator = UIView(color: RuuviColor.lineColor.color) override init( style: UITableViewCell.CellStyle, diff --git a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsViewController.swift b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsViewController.swift index 763ce9153..d7ac9ae34 100644 --- a/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsViewController.swift +++ b/Apps/RuuviStation/Sources/Classes/Presentation/Modules/TagSettings/View/UI/TagSettingsViewController.swift @@ -2607,7 +2607,7 @@ extension TagSettingsViewController { cells: offsetCorrectionItems, collapsed: true, headerType: .expandable, - backgroundColor: RuuviColor.tagSettingsSectionHeaderColor, + backgroundColor: RuuviColor.tagSettingsSectionHeaderColor.color, font: UIFont.Muli(.bold, size: 18) ) return section @@ -2847,7 +2847,7 @@ extension TagSettingsViewController { ], collapsed: true, headerType: .expandable, - backgroundColor: RuuviColor.tagSettingsSectionHeaderColor, + backgroundColor: RuuviColor.tagSettingsSectionHeaderColor.color, font: UIFont.Muli(.bold, size: 18) ) return section @@ -3045,7 +3045,7 @@ extension TagSettingsViewController { if let batteryLow { // swiftlint:disable:next line_length let batteryStatus = batteryLow ? "(\(RuuviLocalization.TagSettings.BatteryStatusLabel.Replace.message))" : "(\(RuuviLocalization.TagSettings.BatteryStatusLabel.Ok.message))" - let indicatorColor = batteryLow ? .red : RuuviColor.ruuviTintColor + let indicatorColor = batteryLow ? .red : RuuviColor.tintColor.color return (status: batteryStatus, color: indicatorColor) } else { return (status: nil, color: nil) @@ -3095,7 +3095,7 @@ extension TagSettingsViewController { ], collapsed: true, headerType: .expandable, - backgroundColor: RuuviColor.tagSettingsSectionHeaderColor, + backgroundColor: RuuviColor.tagSettingsSectionHeaderColor.color, font: UIFont.Muli(.bold, size: 18) ) return section @@ -3149,7 +3149,7 @@ extension TagSettingsViewController { ], collapsed: true, headerType: .expandable, - backgroundColor: RuuviColor.tagSettingsSectionHeaderColor, + backgroundColor: RuuviColor.tagSettingsSectionHeaderColor.color, font: UIFont.Muli(.bold, size: 18) ) return section @@ -3524,7 +3524,7 @@ private extension TagSettingsViewController { func setUpUI() { title = RuuviLocalization.TagSettings.NavigationItem.title - view.backgroundColor = RuuviColor.ruuviPrimary + view.backgroundColor = RuuviColor.primary.color let backBarButtonItemView = UIView() backBarButtonItemView.addSubview(backButton) diff --git a/Apps/RuuviStation/Sources/Extensions/Classess/RuuviLinkTextView.swift b/Apps/RuuviStation/Sources/Extensions/Classess/RuuviLinkTextView.swift index 4b02184d5..7f09b9670 100644 --- a/Apps/RuuviStation/Sources/Extensions/Classess/RuuviLinkTextView.swift +++ b/Apps/RuuviStation/Sources/Extensions/Classess/RuuviLinkTextView.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol RuuviLinkTextViewDelegate: NSObjectProtocol { @@ -6,9 +7,9 @@ protocol RuuviLinkTextViewDelegate: NSObjectProtocol { class RuuviLinkTextView: UITextView { private var textRegularColor: UIColor? = RuuviColor - .dashboardIndicatorTextColor? + .dashboardIndicator.color .withAlphaComponent(0.6) - private var textLinkColor: UIColor? = RuuviColor.ruuviTextColor + private var textLinkColor: UIColor? = RuuviColor.textColor.color private var fullTextString: String? private var linkString: String? private var link: String? @@ -16,8 +17,8 @@ class RuuviLinkTextView: UITextView { weak var linkDelegate: RuuviLinkTextViewDelegate? convenience init( - textColor: UIColor? = RuuviColor.dashboardIndicatorTextColor?.withAlphaComponent(0.6), - linkColor: UIColor? = RuuviColor.ruuviTextColor, + textColor: UIColor? = RuuviColor.dashboardIndicator.color.withAlphaComponent(0.6), + linkColor: UIColor? = RuuviColor.textColor.color, fullTextString: String?, linkString: String?, link: String? diff --git a/Apps/RuuviStation/Sources/Extensions/Classess/RuuviUISwitch.swift b/Apps/RuuviStation/Sources/Extensions/Classess/RuuviUISwitch.swift index b4864ee02..3f561699d 100644 --- a/Apps/RuuviStation/Sources/Extensions/Classess/RuuviUISwitch.swift +++ b/Apps/RuuviStation/Sources/Extensions/Classess/RuuviUISwitch.swift @@ -1,9 +1,9 @@ +import RuuviLocalization import UIKit class RuuviUISwitch: UISwitch { - private let activeThumbColor: UIColor? = - RuuviColor.ruuviTintColor - private let inactiveThumbColor: UIColor? = RuuviColor.ruuviSwitchDisabledThumbTint + private let activeThumbColor: UIColor? = RuuviColor.tintColor.color + private let inactiveThumbColor: UIColor? = RuuviColor.switchDisabledThumbTint.color override init(frame: CGRect) { super.init(frame: frame) diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardBG.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardBG.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardBG.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardCardBG.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardCardBG.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardCardBG.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardIndicator.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicator.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardIndicator.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardIndicatorBig.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDashboardIndicatorBig.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DashboardIndicatorBig.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DustyBlue.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviDustyBlue.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/DustyBlue.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphBGColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphBGColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphBGColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphFillColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphFillColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphFillColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphLineColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphLineColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphLineColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphMarkerColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGraphMarkerColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/GraphMarkerColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGreen.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Green.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviGreen.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Green.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLineColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/LineColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLineColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/LineColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/LogoTintColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviLogoTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/LogoTintColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/MenuTextColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTextColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/MenuTextColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/MenuTintColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviMenuTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/MenuTintColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/OrangeColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviOrangeColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/OrangeColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPrimary.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Primary.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPrimary.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Primary.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPurple.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Purple.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviPurple.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Purple.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSecondary.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Secondary.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSecondary.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/Secondary.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchDisabledThumbTint.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledThumbTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchDisabledThumbTint.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchDisabledTint.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchDisabledTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchDisabledTint.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchEnabledTint.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviSwitchEnabledTint.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/SwitchEnabledTint.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TagSettingsItemHeaderColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TagSettingsSectionHeaderColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTextColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TextColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTextColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TextColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTintColor.colorset/Contents.json b/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TintColor.colorset/Contents.json similarity index 100% rename from Common/RuuviLocalization/Sources/Resources/Colors.xcassets/RuuviTintColor.colorset/Contents.json rename to Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets/TintColor.colorset/Contents.json diff --git a/Common/RuuviLocalization/target.yml b/Common/RuuviLocalization/target.yml index 1dfecdf03..34b8d90f2 100644 --- a/Common/RuuviLocalization/target.yml +++ b/Common/RuuviLocalization/target.yml @@ -15,7 +15,7 @@ targets: name: Generate Resources inputFiles: - $(SRCROOT)/station.localization/station.localization.json - - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/Colors.xsassets + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/RuuviColors.xsassets outputFiles: - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings diff --git a/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableHeaderView.swift b/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableHeaderView.swift index 771e1956d..0c9b0162e 100644 --- a/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableHeaderView.swift +++ b/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableHeaderView.swift @@ -1,5 +1,6 @@ import CoreBluetooth import CoreNFC +import RuuviLocalization import UIKit protocol DiscoverTableHeaderViewDelegate: NSObjectProtocol { @@ -93,7 +94,7 @@ class DiscoverTableHeaderView: UIView { if let font = UIFont(name: "Muli-Regular", size: 16) { button.titleLabel?.font = font } - button.tintColor = UIColor(named: "RuuviTintColor") + button.tintColor = RuuviColor.tintColor.color button.addTarget( self, action: #selector(handleButtonTap), diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/Common/ProgressBar.swift b/Modules/RuuviFirmware/Sources/RuuviFirmware/Common/ProgressBar.swift index f0fc2ad45..1fbafd850 100644 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/Common/ProgressBar.swift +++ b/Modules/RuuviFirmware/Sources/RuuviFirmware/Common/ProgressBar.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import SwiftUI public struct ProgressBar: View { @@ -16,14 +17,14 @@ public struct ProgressBar: View { height: geometry.size.height ) .opacity(0.3) - .foregroundColor(RuuviColor.green) + .foregroundColor(RuuviColor.green.swiftUIColor) Rectangle() .frame( width: min(CGFloat(value) * geometry.size.width, geometry.size.width), height: geometry.size.height ) - .foregroundColor(RuuviColor.green) + .foregroundColor(RuuviColor.green.swiftUIColor) .animation(.linear) }.cornerRadius(6) } diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviMenuTextColor.colorset/Contents.json b/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviMenuTextColor.colorset/Contents.json deleted file mode 100644 index 4f4b48058..000000000 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviMenuTextColor.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "0.239", - "green" : "0.235", - "red" : "0.031" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000", - "red" : "1.000" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTextColor.colorset/Contents.json b/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTextColor.colorset/Contents.json deleted file mode 100644 index efe8a9b96..000000000 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTextColor.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "0.239", - "green" : "0.235", - "red" : "0.031" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "0.800", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTintColor.colorset/Contents.json b/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTintColor.colorset/Contents.json deleted file mode 100644 index 67e2f95b3..000000000 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/Resources/RuuviFirmware.xcassets/RuuviTintColor.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "0.624", - "green" : "0.677", - "red" : "0.209" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/SwiftUI/FirmwareView.swift b/Modules/RuuviFirmware/Sources/RuuviFirmware/SwiftUI/FirmwareView.swift index 8b5bfeba8..f3784967b 100644 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/SwiftUI/FirmwareView.swift +++ b/Modules/RuuviFirmware/Sources/RuuviFirmware/SwiftUI/FirmwareView.swift @@ -1,4 +1,5 @@ // swiftlint:disable file_length +import RuuviLocalization import SwiftUI // swiftlint:disable:next type_body_length @@ -51,7 +52,7 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -69,13 +70,13 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -90,13 +91,13 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Spinner(isAnimating: true, style: .medium).eraseToAnyView() } .frame( @@ -110,21 +111,21 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) if let currentVersion = currentRelease?.version { Text(currentVersion) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } else { Text(texts.notReportingDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } } .frame( @@ -139,7 +140,7 @@ struct FirmwareView: View { VStack { Text(texts.alreadyOnLatest) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, @@ -158,7 +159,7 @@ struct FirmwareView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) @@ -172,21 +173,21 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.latestTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(latestRelease.version) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.currentTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) if let currentVersion = currentRelease?.version { Text(currentVersion) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } else { Text(texts.notReportingDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: { @@ -203,7 +204,7 @@ struct FirmwareView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) @@ -227,13 +228,13 @@ struct FirmwareView: View { VStack(alignment: .center, spacing: 16) { Text(texts.downloadingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) ProgressBar(value: $viewModel.downloadProgress) .frame(height: 16) .padding() Text("\(Int(viewModel.downloadProgress * 100))%") .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } .frame( maxWidth: .infinity, @@ -250,25 +251,25 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.prepareTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(texts.openCoverTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.localBootButtonTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.setUpdatingModeTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeTwoButtonsDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeOneButtonDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeSuccessTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: {}, @@ -283,7 +284,7 @@ struct FirmwareView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: true ) @@ -309,25 +310,25 @@ struct FirmwareView: View { VStack(alignment: .leading, spacing: 16) { Text(texts.prepareTitle).bold() .font(muliBold16) - .foregroundColor(RuuviColor.ruuviTitleTextColorSUI) + .foregroundColor(RuuviColor.menuTextColor.swiftUIColor) Text(texts.openCoverTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.localBootButtonTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.setUpdatingModeTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeTwoButtonsDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeOneButtonDescription) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.toBootModeSuccessTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } Button( action: { @@ -349,7 +350,7 @@ struct FirmwareView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) @@ -370,17 +371,17 @@ struct FirmwareView: View { VStack(alignment: .center, spacing: 24) { Text(texts.updatingTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) ProgressBar(value: $viewModel.flashProgress) .frame(height: 16) Text("\(Int(viewModel.flashProgress * 100))%") .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) Text(texts.doNotCloseTitle) .font(muliBold16) .bold() .multilineTextAlignment(.center) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) } .frame( maxWidth: .infinity, @@ -393,7 +394,7 @@ struct FirmwareView: View { VStack { Text(texts.successfulTitle) .font(muliRegular16) - .foregroundColor(RuuviColor.ruuviTextColorSUI) + .foregroundColor(RuuviColor.textColor.swiftUIColor) .frame( maxWidth: .infinity, maxHeight: .infinity, @@ -412,7 +413,7 @@ struct FirmwareView: View { ) .buttonStyle( LargeButtonStyle( - backgroundColor: RuuviColor.ruuviTintColorSUI, + backgroundColor: RuuviColor.tintColor.swiftUIColor, foregroundColor: Color.white, isDisabled: false ) diff --git a/Modules/RuuviFirmware/Sources/RuuviFirmware/Util/RuuviColor.swift b/Modules/RuuviFirmware/Sources/RuuviFirmware/Util/RuuviColor.swift deleted file mode 100644 index 9a01acf6e..000000000 --- a/Modules/RuuviFirmware/Sources/RuuviFirmware/Util/RuuviColor.swift +++ /dev/null @@ -1,8 +0,0 @@ -import SwiftUI - -enum RuuviColor { - static let green = Color("RuuviGreen") - static let ruuviTintColorSUI = Color("RuuviTintColor") - static let ruuviTextColorSUI = Color("RuuviTextColor") - static let ruuviTitleTextColorSUI = Color("RuuviMenuTextColor") -} diff --git a/Modules/RuuviFirmware/target.yml b/Modules/RuuviFirmware/target.yml index 58c77d97e..8b0f80002 100644 --- a/Modules/RuuviFirmware/target.yml +++ b/Modules/RuuviFirmware/target.yml @@ -12,3 +12,4 @@ targets: dependencies: - package: BTKit - target: RuuviDFU + - target: RuuviLocalization diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Assests/RuuviAssets.swift b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Assests/RuuviAssets.swift index 880d25bda..989ad260d 100644 --- a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Assests/RuuviAssets.swift +++ b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Assests/RuuviAssets.swift @@ -12,7 +12,4 @@ enum RuuviAssets { static let web = "onboarding_web" static let beaver_sign_in = "onboarding_beaver_sign_in" static let gateway = "gateway" - - // Color - static let ruuviTintColor = UIColor(named: "RuuviTintColor") } diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardGatewayFeaturesCell.swift b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardGatewayFeaturesCell.swift index 891407685..c8d864bcf 100644 --- a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardGatewayFeaturesCell.swift +++ b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardGatewayFeaturesCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit class RuuviOnboardGatewayFeaturesCell: UICollectionViewCell { @@ -105,7 +106,7 @@ private extension RuuviOnboardGatewayFeaturesCell { appImageView.fillSuperview(padding: .init(top: 30, left: 30, bottom: 30, right: 30)) } - let footerView = UIView(color: RuuviAssets.ruuviTintColor) + let footerView = UIView(color: RuuviColor.tintColor.color) container.addSubview(footerView) footerView.anchor( top: appImageViewContainer.bottomAnchor, diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardSignInCell.swift b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardSignInCell.swift index cbded7754..8fe141cdc 100644 --- a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardSignInCell.swift +++ b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardSignInCell.swift @@ -1,3 +1,4 @@ +import RuuviLocalization import UIKit protocol RuuviOnboardSignInCellDelegate: NSObjectProtocol { @@ -38,7 +39,7 @@ class RuuviOnboardSignInCell: UICollectionViewCell { }() private lazy var continueButton: UIButton = { - let button = UIButton(color: RuuviAssets.ruuviTintColor, cornerRadius: 22) + let button = UIButton(color: RuuviColor.tintColor.color, cornerRadius: 22) button.setTitle( "onboarding_continue".localized(for: Self.self), for: .normal diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Resources/RuuviOnboard.xcassets/Resources/RuuviTintColor.colorset/Contents.json b/Modules/RuuviOnboard/Sources/RuuviOnboard/Resources/RuuviOnboard.xcassets/Resources/RuuviTintColor.colorset/Contents.json deleted file mode 100644 index 986f01823..000000000 --- a/Modules/RuuviOnboard/Sources/RuuviOnboard/Resources/RuuviOnboard.xcassets/Resources/RuuviTintColor.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "0.624", - "green" : "0.678", - "red" : "0.208" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} From 26f99b50313ab51bd33f0c012177bccf1c9d94b6 Mon Sep 17 00:00:00 2001 From: Rinat Enikeev Date: Thu, 14 Dec 2023 00:01:33 +0200 Subject: [PATCH 6/6] fix crash on not debug mode --- .../Sources/Extensions/Color+Ruuvi.swift | 16 ---------------- Common/RuuviLocalization/target.yml | 5 ++++- 2 files changed, 4 insertions(+), 17 deletions(-) delete mode 100644 Apps/RuuviStation/Sources/Extensions/Color+Ruuvi.swift diff --git a/Apps/RuuviStation/Sources/Extensions/Color+Ruuvi.swift b/Apps/RuuviStation/Sources/Extensions/Color+Ruuvi.swift deleted file mode 100644 index 2b2e19a89..000000000 --- a/Apps/RuuviStation/Sources/Extensions/Color+Ruuvi.swift +++ /dev/null @@ -1,16 +0,0 @@ -import UIKit - -extension UIColor { - static var normalButtonBackground: UIColor { - UIColor( - red: 21.0 / 255, - green: 141.0 / 255, - blue: 165.0 / 255, - alpha: 1 - ) - } - - static var disableButtonBackground: UIColor { - UIColor.darkGray - } -} diff --git a/Common/RuuviLocalization/target.yml b/Common/RuuviLocalization/target.yml index 34b8d90f2..452f2cc84 100644 --- a/Common/RuuviLocalization/target.yml +++ b/Common/RuuviLocalization/target.yml @@ -1,6 +1,9 @@ --- targets: RuuviLocalization: + settings: + base: + MERGEABLE_LIBRARY: false templates: - CommonFramework sources: @@ -15,7 +18,7 @@ targets: name: Generate Resources inputFiles: - $(SRCROOT)/station.localization/station.localization.json - - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/RuuviColors.xsassets + - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/RuuviColors.xcassets outputFiles: - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/en.lproj/Localizable.strings - $(SRCROOT)/Common/RuuviLocalization/Sources/Resources/sv.lproj/Localizable.strings