Migrate legacy localized strings and remove runtime hardcoded UI text.

This copies old locale resources into the 2026 app, reuses legacy string keys where possible, and moves user-facing runtime text to string resources with missing entries added for all supported locales.

Made-with: Cursor
This commit is contained in:
2026-03-01 15:07:26 +01:00
parent 1823d0bf1b
commit a2cbb181d5
30 changed files with 1088 additions and 144 deletions

View File

@@ -1,25 +1,333 @@
<resources>
<string name="app_name">AirMQ</string>
<string name="map_sensor_dust">Dust</string>
<string name="map_sensor_air_quality">Air quality</string>
<string name="map_sensor_radioactivity">Radioactivity</string>
<string name="map_sensor_help_link">What does this mean?</string>
<string name="map_sensor_help_title">What do AirMQ sensors measure?</string>
<string name="map_search_action_content_desc">Search</string>
<string name="map_my_location_content_desc">My location</string>
<string name="map_back">Back</string>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name" translatable="false">AirMQ</string>
<string name="title_map">Map</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_manage">Manage</string>
<string name="title_settings">Settings</string>
<string name="title_device_config">Config</string>
<string name="title_device">Device</string>
<string name="title_location">Select location</string>
<!-- Actions -->
<!-- Dialog -->
<string name="dialog_internet">Connect to Internet</string>
<string name="dialog_exit_setup_title">Exit config</string>
<string name="dialog_exit_setup_text">Are you sure you want to exit setup? You may have to reset your AirMQ device after that.</string>
<string name="dialog_select_wifi_title">Choose Wi-Fi network</string>
<string name="dialog_enable_wifi_title">Enable WiFi</string>
<string name="dialog_are_you_sure">Are you sure?</string>
<string name="dialog_about_title">About</string>
<string name="dialog_about_text" translatable="false">App by Anton Betsun \nDesign by Alexander Prokhorov</string>
<string name="dialog_anonym_title">Continue anonymously?</string>
<string name="dialog_anonym_mesage">You will not be able to back up your preferences and add new AirMQ devices</string>
<string name="dialog_select_device_title">Select device</string>
<!-- Text -->
<string name="coming_soon" translatable="false">Coming soon</string>
<string name="text_sign_in">Sign in to AirMQ</string>
<string name="text_air_mq" translatable="false">AirMQ</string>
<string name="text_model_basic" translatable="false">Basic</string>
<string name="text_setup_error">"Error during setup: "</string>
<string name="text_setup_error_title">Error</string>
<string name="text_whats_new">What\'s new</string>
<string name="text_nothing_to_show">Nothing to show</string>
<string name="text_fixes">Fixes</string>
<string name="text_setup_uploading_config" translatable="false">Uploading config…</string>
<string name="text_setup_config_uploaded" translatable="false">Config uploaded.</string>
<string name="text_setup_uploading_rules" translatable="false">Uploading rules…</string>
<string name="text_setup_rules_uploaded" translatable="false">Rules uploaded.</string>
<string name="text_setup_setting_name" translatable="false">Setting name…</string>
<string name="text_setup_name_set" translatable="false">Name set.</string>
<string name="text_setup_setting_password" translatable="false">Setting password…</string>
<string name="text_setup_password_set" translatable="false">Password set.</string>
<string name="text_setup_setting_ssid" translatable="false">Setting SSID…</string>
<string name="text_setup_ssid_set" translatable="false">SSID set.</string>
<string name="text_setup_saving_wifi" translatable="false">Saving WiFi configuration…</string>
<string name="text_setup_wifi_saved" translatable="false">Saved.</string>
<string name="text_setup_checking_connection" translatable="false">Checking connection… </string>
<string name="text_setup_device_connected" translatable="false">Device connected to %1$s at %2$s.</string>
<string name="text_setup_waiting_internet" translatable="false">Waiting for Internet…</string>
<string name="text_setup_connected_internet" translatable="false">Connected to Internet, finishing…</string>
<string name="text_setup_disconnected" translatable="false">Disconnected!</string>
<string name="text_setup_1">Turn on or reboot your device, after that it will be discoverable for 90 seconds. When you are ready, press \'LOOK FOR A DEVICE\' button. On some Android devices enabled GPS service may be requied to continue.</string>
<string name="text_setup_2">Choose a name for your device and specify its model before connecting it to WiFi</string>
<string name="text_setup_3">Select the WiFi network to which you want to connect your device</string>
<string name="text_setup_steps">Step %d of 3</string>
<string name="text_setup_finish">Successfully added a new device!</string>
<string name="text_setup_label">Setting up a new device</string>
<string name="text_model_mobile" translatable="false">Mobile</string>
<string name="text_model_solar" translatable="false">Solar</string>
<string name="text_model_geiger" translatable="false">Geiger</string>
<string name="text_policy_label">By signing in you confirm that you agree with our %1$s and %2$s</string>
<string name="text_privacy_policy"><b><u>Privacy Policy</u></b></string>
<string name="text_terms_conditions"><b><u>Terms &amp; conditions</u></b></string>
<string name="text_your_devices">Your devices</string>
<string name="text_anonymous_user">Anonymous user</string>
<string name="text_please_sign_in">Your preferences are not being synced, please sign in</string>
<string name="text_sign_in_small">Sign in to add devices</string>
<string name="text_what_does_it_mean"><u>What does this mean?</u></string>
<!-- Errors -->
<string name="err_short_password">Wifi password must be at least 8 characters long</string>
<string name="err_no_name">You didn\'t select name</string>
<string name="err_no_model">You didn\'t select model</string>
<string name="err_no_device_ap">You didn\'t select wifi network</string>
<!-- Buttons -->
<string name="button_sign_in">Sign in</string>
<string name="button_ok">OK</string>
<string name="button_continue">Continue</string>
<string name="button_select">Select</string>
<string name="button_cancel">Cancel</string>
<string name="button_register">Register</string>
<string name="button_sign_in_google">Sign in with Google</string>
<string name="button_sign_in_facebook">Sign in with Facebook</string>
<string name="button_copy_log">Copy log</string>
<string name="button_look_for_device">Look for a device</string>
<string name="button_finish">Finish</string>
<string name="button_continue_anonym">Continue anonymously</string>
<string name="button_exit_setup">Exit setup</string>
<string name="button_abort">Abort</string>
<string name="button_wait">Wait</string>
<string name="button_setup">Add new device</string>
<string name="button_connecting">Connecting…</string>
<!-- Hints -->
<string name="hint_password">Password</string>
<string name="hint_device_name">Device name</string>
<string name="hint_setup_name">Name</string>
<string name="hint_setup_model">Model</string>
<string name="hint_setup_wifi">WiFi network</string>
<!-- Content descriptors -->
<string name="content_desc_user_pic">User Picture</string>
<string name="content_device_icon">Device icon</string>
<string name="content_network_icon">Network icon</string>
<string name="content_airmq_logo">AirMQ logo</string>
<string name="content_settings">Settings</string>
<!-- Sensor types -->
<string name="sensor_temperature">Temperature</string>
<string name="sensor_humidity">Humidity</string>
<string name="sensor_pressure">Pressure</string>
<string name="sensor_dust">Particulate matter</string>
<string name="sensor_co2" translatable="false" tools:ignore="UnusedResources">CO2</string>
<string name="sensor_voc" translatable="false" tools:ignore="UnusedResources">VOC</string>
<string name="sensor_radioactivity">Radioactivity</string>
<!-- Time filters -->
<string name="filter_hour">Hour</string>
<string name="filter_day">Day</string>
<string name="filter_week">Week</string>
<string name="filter_month">Month</string>
<!-- Preferences -->
<string name="pref_account_header">Account</string>
<string name="pref_logout_title">Log out</string>
<string name="pref_device_header">Device</string>
<string name="pref_prefix_title">AirMQ Hotspot Prefix</string>
<string name="pref_wpakey_title">Default WPA key</string>
<string name="pref_versions">Config versions</string>
<string name="pref_about">About</string>
<string name="pref_notifications_title">Notify when device becomes offline</string>
<!-- Notifications -->
<string name="notification_device_status_title">Your device became offline!</string>
<string name="notification_device_status_text">%s is now offline. Click this to open device config page</string>
<!-- Privacy Policy -->
<!-- Snackbars and toasts -->
<string name="toast_oauth_failed" tools:ignore="UnusedResources">Google authorisation failed</string>
<string name="toast_copied">Copied</string>
<string name="snackbar_not_registered">Device requires registration</string>
<string name="oauth_token" translatable="false" tools:ignore="Typos">21688843933-n04t4s1h7rjad12tdj1pc9j6kajgh2ka.apps.googleusercontent.com</string>
<string name="facebook_app_id" translatable="false">356744979027664</string>
<string name="fb_login_protocol_scheme" translatable="false">fb356744979027664</string>
<string name="text_air_quality">Air quality</string>
<string name="pref_fullscreen">Borderless layout</string>
<string name="text_error">Error</string>
<string name="text_error_connecting">Can\'t get response from device. Try to disable mobile data.</string>
<string name="button_setup_in_progress">Setup…</string>
<string name="button_start_setup">Start setup</string>
<string name="text_device_name">Name</string>
<string name="text_device_id">Device ID</string>
<string name="text_device_ip">IP Address</string>
<string name="text_device_firmware">Firmware version</string>
<string name="text_device_location">Location</string>
<string name="text_device_location_unset">Device is not registered</string>
<string name="text_device_location_set" translatable="false">%s, %s</string>
<string name="text_device_visibility">Visibility</string>
<string name="text_device_visibility_visible">Public</string>
<string name="text_device_visibility_private">Private</string>
<string name="text_device_visibility_not_registered">Register device to change visibility</string>
<string name="button_rename">Rename</string>
<string name="button_update">Update</string>
<string name="button_unregister">Unregister</string>
<string name="button_hide">Hide</string>
<string name="button_publish">Publish</string>
<string name="button_reboot">Reboot</string>
<string name="button_reset">Reset</string>
<string name="button_view_on_map">View on map</string>
<string name="hint_new_name">New name</string>
<string name="dialog_rename_title">Rename</string>
<string name="err_short_name">Name is too short!</string>
<string name="toast_error">Error</string>
<string name="toast_rebooting">Rebooting…</string>
<string name="toast_resetting">Resetting…</string>
<string name="pref_offline_devices_title">Show offline devices</string>
<string name="button_open">Open</string>
<string name="pref_advanced">Enable advanced options</string>
<string name="pref_advanced_header">Advanced</string>
<string name="pref_application_header">Application</string>
<string name="pref_advanced_config">Enable extended device config</string>
<string name="text_device_config_version">Config version </string>
<string name="text_device_uptime">Uptime</string>
<string name="content_sensor_icon">Sensor icon</string>
<string name="text_no_data">No data</string>
<string name="dialog_widget_delete_title">Delete widget</string>
<string name="dialog_widget_delete_text">Are you sure you want to delete this widget?</string>
<string name="button_add_widget">Add widget</string>
<string name="city_minsk">Minsk</string>
<string name="city_barauliany">Barauliany</string>
<string name="city_navapolack">Navapolack</string>
<string name="city_mahiliou">Mahilioŭ</string>
<string name="city_hrodna">Hrodna</string>
<string name="city_homiel">Homieĺ</string>
<string name="city_polack">Polack</string>
<string name="city_barysau">Barysaŭ</string>
<string name="city_narac">Narač</string>
<string name="city_salihorsk">Salihorsk</string>
<string name="city_brest">Brest</string>
<string name="city_babrujsk">Babrujsk</string>
<string name="pref_city_title">City in dashboard</string>
<string name="dialog_select_city_title">Select city</string>
<string name="toast_widget_login">Log in to add widgets</string>
<string name="text_yesterday">Yesterday</string>
<string name="text_now">Now</string>
<string name="text_no_device">This device was deleted</string>
<string name="text_hour_ago">Hour ago</string>
<string name="text_week_ago">Week ago</string>
<string name="text_month_ago">Month ago</string>
<string name="dialog_widget_add_title">Add widget</string>
<string name="text_device_wifi">WiFi network</string>
<string name="text_device_wifi_secondary">Secondary WiFi network</string>
<string name="text_days">d</string>
<string name="text_hours">h</string>
<string name="text_minutes">m</string>
<string name="text_move_up">Move up</string>
<string name="teext_move_down">Move down</string>
<string name="text_configure">Configure</string>
<string name="text_add_to_home_screen">Add to Home screen</string>
<string name="text_remove">Remove</string>
<string name="snackbar_widget_removed">Widget removed</string>
<string name="button_undo">Undo</string>
<string name="text_loading">Loading…</string>
<string name="content_back">Back</string>
<string name="title_widget_constructor">New widget</string>
<string name="text_choose_widget_layout">Choose widget layout</string>
<string name="text_no_location">Location is not specified</string>
<string name="text_display_heatmap">Display heatmap</string>
<string name="text_display_sensors">Display sensors</string>
<string name="text_display_both">Display both</string>
<string name="text_widget_map">Map</string>
<string name="text_device">Device</string>
<string name="text_widget_chart">Chart</string>
<string name="text_choose_sensor">Choose sensor</string>
<string name="text_choose_timeframe">Choose timeframe</string>
<string name="text_no_devices">You do not have configured devices</string>
<string name="text_latest_news">Latest news</string>
<string name="text_widget_news">News</string>
<string name="button_change">Change</string>
<string name="title_city">City</string>
<string name="text_detect_automatically">Detect automatically</string>
<string name="text_no_city_hint"><u>Don\'t see your city?</u></string>
<string name="text_wrong_city_hint"><u>Wrong city?</u></string>
<string name="text_no_city">If you dont see your city, there are not enough sensors there to provide reliable data just yet. Instead, data from the closest available city will be displayed when automatic detection is enabled</string>
<string name="text_city_warning">This setting affects what data is displayed in the dashboard. If no city is selected, default value will be set.</string>
<string name="button_enter_manual">Enter manually</string>
<string name="text_welcome">Welcome to AirMQ</string>
<string name="text_welcome_second">Learn what your city breathes</string>
<string name="text_permission">Permission requied:</string>
<string name="text_permission_second">• Location</string>
<string name="text_permission_third">Location permission is needed to provide accurate data about air quality in your area</string>
<string name="button_allow">Allow</string>
<string name="button_not_now">Not now</string>
<string name="button_skip">Skip</string>
<string name="button_next">Next</string>
<string name="text_link"><u>Link</u></string>
<string name="dialog_secondary_wifi">Secondary WiFi</string>
<string name="toast_done">Done</string>
<string name="toast_disconnected">Device disconnected</string>
<string name="toast_not_on_network">You need to be in the same WiFi network with your device.</string>
<string name="text_device_narodmon">Send data to <u>narodmon.ru</u></string>
<string name="text_device_narodmon_title">Narodmon.ru</string>
<string name="text_device_luftdata">Send data to <u>sensor.community</u></string>
<string name="text_device_luftdata_title">Sensor.community</string>
<string name="text_aqi_title">Качество атмосферного воздуха</string>
<string name="text_rad_title">Уровень радиоактивности</string>
<string name="text_rad">"Датчики радиоактивности сделаны на базе счетчика Гейгера-Мюллера и измеряют фоновое гамма-радиоактивное излучение в месте установки. Значения на индикаторах и графиках соответствуют мощности эквивалентной дозы радиоактивного излучения, которая характеризует степень воздействия гамма-излучения на организм. Мощность эквивалентной дозы измеряется в зивертах/час (Зв/ч), для удобства отображения принята единица миллизиверт/час (мЗв/ч) "</string>
<string name="text_aqi">"Датчики, применяемые в нашем проекте, собирают информацию о состоянии наружного окружающего воздуха, погоды, а также фонового радиоактивного излучения. Одним из важных показателей качества воздуха, непосредственно влияющих на здоровье человека, является содержание твердых взвешенных частиц и аэрозолей (Particulate Matter, PM), которые мы привыкли называть пылью. Частицы могут появляться в воздухе как в результате природных и стихийных явлений (пылевые бури, пожары, морская соляная пыль), так и в результате деятельности человека - промышленности, транспорта, домашнего отопления, сжигания мусора. Измерение количества твердых частиц производится по трем категориям: размером до 1, 2.5 и 10 мкм. Наиболее часто используемым показателем является массовая концентрация твердых частиц размером до 2.5 мкм, PM2.5, которая указывает на массу пылевых частиц в единице объема воздуха и измеряется в мкГ/м3. Для удобства индикации степени воздействия твердых частиц в атмосфере на организм человека применяется следующая цветовая шкала. Для оценки взяты средние значения концентрации частиц PM2.5 за последние 24 часа. "</string>
<string name="text_what_does_it_mean_title">Что измеряют датчики AirMQ?</string>
<string name="notification_device_config_title">Update is available</string>
<string name="notification_device_config_text">Your device \"%s\" is ready to update</string>
<string name="dialog_upload_title">Uploading…</string>
<string name="button_select_device">Select device</string>
<string name="content_search">Search</string>
<string name="content_my_location">My location</string>
<string name="button_close">Close</string>
<string name="map_search_hint">Device name or city</string>
<string name="map_search_empty">No results yet</string>
<string name="map_close">Close</string>
<string name="map_open_device">Open</string>
<string name="map_arrow_left">&lt;</string>
<string name="map_arrow_right">&gt;</string>
<string name="map_chart_placeholder">Chart placeholder</string>
<string name="map_filter_hour">Hour</string>
<string name="map_filter_day">Day</string>
<string name="map_filter_week">Week</string>
<string name="map_filter_month">Month</string>
<string name="map_device_sensor_temperature">Temperature</string>
<string name="map_device_sensor_dust">Dust</string>
<string name="map_device_sensor_radioactivity">Radioactivity</string>
<string name="map_open_device_not_wired">Open device %1$s is not wired yet</string>
<string name="map_status_online">Online</string>
<string name="map_status_offline">Offline</string>
<string name="map_my_location_coming_soon">My location logic will be added later</string>
<string name="map_previous_period">Previous %1$s</string>
<string name="map_next_period">Next %1$s</string>
<string name="map_failed_to_load_items">Failed to load map items</string>
<string name="map_no_city">No city</string>
<string name="map_time_last_hour">Last hour</string>
<string name="map_time_today">Today</string>
<string name="map_time_this_week">This week</string>
<string name="map_time_this_month">This month</string>
<string name="settings_save_failed">Failed to save settings</string>
<string name="title_debug">Debug</string>
<string name="manage_open_widget_constructor">Open Widget Constructor</string>
<string name="back_to_dashboard">Back to Dashboard</string>
<string name="manage_set_location">Set location</string>
<string name="dashboard_subtitle">Bottom-tab equivalent: dashboard</string>
<string name="dashboard_open_map">Open Map</string>
<string name="dashboard_open_manage">Open Manage</string>
<string name="dashboard_open_city">Open City</string>
<string name="dashboard_open_device">Open Device</string>
<string name="dashboard_open_news">Open News</string>
<string name="screen_splash_title">Splash</string>
<string name="screen_continue_to_wizard">Continue to Wizard</string>
<string name="screen_wizard_title">Wizard</string>
<string name="screen_finish_wizard">Finish Wizard</string>
<string name="screen_mock_device_id">Mock deviceId: %1$s</string>
<string name="back_to_settings">Back to Settings</string>
<string name="back_to_manage">Back to Manage</string>
<string name="screen_log_in_to_manage">Log In to Manage</string>
<string name="news_open_detail">Open News Detail</string>
<string name="news_detail_title">News Detail</string>
<string name="screen_mock_news_id">Mock newsId: %1$s</string>
<string name="widget_select_map_location">Select Map Widget Location</string>
<string name="widget_open_map_constructor">Open Map Constructor</string>
<string name="widget_open_chart_constructor">Open Chart Constructor</string>
<string name="widget_open_news_constructor">Open News Constructor</string>
<string name="back_to_widget_constructor">Back to Widget Constructor</string>
<string name="widget_map_constructor_title">Map Constructor</string>
<string name="widget_chart_constructor_title">Chart Constructor</string>
<string name="widget_news_constructor_title">News Constructor</string>
<string name="back_to_news">Back to News</string>
<string name="mock_user_name">Anton Betsun</string>
<string name="mock_user_email">messbees@gmail.com</string>
<string name="mock_device_name_42">AirMQ #42</string>
<string name="mock_device_name_17">AirMQ #17</string>
</resources>