Files
clockula/app/src/main/res/values/strings.xml
T
makiolaj fb81bfbf2e feat(widgets): next alarm, timer and clock home-screen widgets
Three Glance widgets, mirroring state the app already computes rather
than owning any of their own: the next alarm (AlarmEngine.upcoming()),
the live pill's subject timer (same selection logic, no ticker of its
own — a running countdown is the platform chronometer, exactly like
the ring notification), and the local time growing to world clocks at
larger sizes. WidgetSync collects the same read-only flows the shell
already reads and redraws on change, event-driven (updatePeriodMillis
= 0) — it touches no engine, only re-renders, and covers every write
path including SystemEventReceiver's since the process is already
alive whenever those run.

Tapping a widget reuses the same internal navigation actions the
AlarmClock contract's door already produces; the timer buttons send
the same unexported broadcasts its notification does. A widget is
just another caller of machinery that already exists.

ManifestRulesTest is updated deliberately: three GlanceAppWidgetReceivers
join the exported set, each pinned to exactly the platform-required
APPWIDGET_UPDATE filter and no permission — no new permission is
requested anywhere in this change.
2026-10-01 22:32:07 +02:00

354 lines
20 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<resources>
<string name="app_name">Clockula</string>
<string name="app_tagline">A modern Material 3 Expressive clock app.\nComing into bloom.</string>
<!-- Alarms (M3): the notification channels and the ring actions -->
<string name="channel_alarm_ring_name">Ringing alarms</string>
<string name="channel_alarm_ring_description">The full-screen alarm while it is ringing. Turning this off does not silence an alarm.</string>
<string name="channel_alarm_snoozed_name">Snoozed alarms</string>
<string name="channel_alarm_snoozed_description">A quiet reminder that an alarm is snoozed, and when it comes back.</string>
<string name="alarm_notification_title">Alarm</string>
<string name="alarm_action_snooze">Snooze</string>
<string name="alarm_action_dismiss">Dismiss</string>
<string name="alarm_snoozed_until">Snoozed until %1$s</string>
<!-- Crash reporting (floret-kit core-crash) -->
<string name="report_issue_url" translatable="false">https://codeberg.org/jlmakiola/clockula/issues/new</string>
<!-- M4: the app shell's four tabs -->
<string name="tab_alarms">Alarms</string>
<string name="tab_timers">Timers</string>
<string name="tab_stopwatch">Stopwatch</string>
<string name="tab_world_clock">World clock</string>
<!-- M4: the tabs' empty states -->
<string name="alarms_empty">No alarms yet</string>
<string name="world_clocks_empty">No world clocks yet</string>
<!-- M6: the timers tab, its rows and the setup panel -->
<string name="timers_set_title">Set timer</string>
<string name="timers_setup_start">Start</string>
<string name="timers_setup_range_hint">Between 1 second and 24 hours</string>
<string name="timers_presets">Presets</string>
<string name="timers_preset_save">Save</string>
<string name="timers_preset_remove">Remove preset</string>
<string name="timer_keypad_backspace">Delete a digit</string>
<string name="timer_keypad_digit">Type %1$s</string>
<string name="timer_keypad_double_zero">Type 00</string>
<string name="timers_setup_clear">Clear</string>
<string name="timer_unit_hours">h</string>
<string name="timer_unit_minutes">m</string>
<string name="timer_unit_seconds">s</string>
<string name="timer_start">Start</string>
<string name="timer_pause">Pause</string>
<string name="timer_resume">Resume</string>
<string name="timer_reset">Reset</string>
<string name="timer_stop">Stop</string>
<string name="timer_add_minute">+1 min</string>
<string name="timer_subtract_minute">−1 min</string>
<string name="timer_adjustment_added">+%1$d min</string>
<string name="timer_adjustment_removed">−%1$d min</string>
<string name="timer_finished">Finished</string>
<string name="timer_paused_at">Paused \u00b7 %1$s</string>
<string name="timer_untitled">Timer</string>
<string name="timer_row_progress">%1$s left</string>
<string name="timer_row_open">Timer settings</string>
<!-- M6: the timer editor -->
<string name="timer_editor_title">Countdown</string>
<string name="timer_editor_label">Label</string>
<string name="timer_editor_duration">Length</string>
<string name="timer_editor_duration_locked">Reset the timer to change its length</string>
<string name="timer_editor_sound">Sound</string>
<string name="timer_editor_delete">Delete timer</string>
<string name="timer_editor_delete_confirm">Delete this timer?</string>
<!-- M6: the timer notification. One channel, one id, however many timers. -->
<string name="channel_timers_name">Timers</string>
<string name="channel_timers_description">The running countdown and the sound when a timer finishes. Turning this off does not silence a timer.</string>
<string name="timer_notification_title">Timer</string>
<plurals name="timer_more_active">
<item quantity="one">+%1$d more timer</item>
<item quantity="other">+%1$d more timers</item>
</plurals>
<!-- M4: the live pill -->
<string name="live_pill_pause">Pause</string>
<string name="live_pill_resume">Resume</string>
<string name="live_pill_stop">Stop</string>
<plurals name="live_pill_more_timers">
<item quantity="one">+%1$d more</item>
<item quantity="other">+%1$d more</item>
</plurals>
<string name="live_pill_timer_running">Timer %1$s, %2$s remaining</string>
<string name="live_pill_timer_paused">Timer %1$s paused, %2$s remaining</string>
<string name="live_pill_timer_expired">Timer %1$s finished</string>
<string name="live_pill_timer_untitled">Timer</string>
<string name="live_pill_stopwatch_running">Stopwatch running, %1$s</string>
<string name="live_pill_stopwatch_paused">Stopwatch paused at %1$s</string>
<!-- M4: the ring screen's dismiss challenge -->
<string name="ring_challenge_math_prompt">What is %1$s?</string>
<string name="ring_challenge_math_hint">Answer</string>
<string name="ring_challenge_wrong">Not quite \u2014 here is another</string>
<string name="ring_challenge_hold">Hold to dismiss</string>
<string name="ring_challenge_escape">Dismiss without solving</string>
<string name="ring_snooze_unavailable">No snoozes left</string>
<!-- M5: the alarms list -->
<string name="alarms_add">Add alarm</string>
<string name="alarms_empty_hint">Tap + to set your first alarm</string>
<string name="alarm_row_toggle">Alarm at %1$s</string>
<string name="alarm_next_imminent">in less than a minute</string>
<plurals name="alarm_next_in_minutes">
<item quantity="one">in %1$d min</item>
<item quantity="other">in %1$d min</item>
</plurals>
<string name="alarm_next_in_hours">in %1$dh</string>
<string name="alarm_next_in_hours_minutes">in %1$dh %2$dm</string>
<string name="alarm_next_in_days">in %1$dd</string>
<string name="alarm_next_in_days_hours">in %1$dd %2$dh</string>
<string name="alarm_next_ringing">Ringing now</string>
<string name="alarm_next_snoozed">Snoozed \u00b7 %1$s</string>
<string name="alarm_skipping_next">Skipping next</string>
<string name="alarm_repeat_once">Once</string>
<string name="alarm_repeat_every_day">Every day</string>
<string name="alarm_repeat_weekdays">Weekdays</string>
<string name="alarm_repeat_weekends">Weekends</string>
<string name="alarm_summary_separator" translatable="false">" \u00b7 "</string>
<!-- M5: the alarm editor -->
<string name="editor_title">Alarm</string>
<string name="editor_repeat">Repeat</string>
<string name="editor_skip_next">Skip next alarm</string>
<string name="editor_skip_next_summary">Ring the one after this</string>
<string name="editor_label_placeholder">Alarm name</string>
<string name="editor_section_sound">Sound and vibration</string>
<string name="editor_section_snooze">Snooze and dismiss</string>
<string name="editor_ringtone">Sound</string>
<string name="editor_vibrate">Vibrate</string>
<string name="editor_volume_ramp">Gradual volume</string>
<string name="editor_snooze_length">Snooze length</string>
<string name="editor_snooze_limit">Snooze limit</string>
<string name="editor_dismiss_challenge">To dismiss</string>
<string name="editor_delete">Delete alarm</string>
<string name="editor_delete_title">Delete this alarm?</string>
<string name="editor_delete_message">The %1$s alarm will be removed.</string>
<string name="action_delete">Delete</string>
<string name="action_cancel">Cancel</string>
<string name="action_ok">OK</string>
<!-- M5: the per-alarm overrides -->
<string name="override_app_default">App default</string>
<string name="override_app_default_value">App default (%1$s)</string>
<string name="value_on">On</string>
<string name="value_off">Off</string>
<string name="volume_ramp_none">No gradual volume</string>
<plurals name="volume_ramp_seconds">
<item quantity="one">%1$d second</item>
<item quantity="other">%1$d seconds</item>
</plurals>
<plurals name="snooze_minutes">
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d minutes</item>
</plurals>
<string name="snooze_limit_none">No snoozing</string>
<plurals name="snooze_limit_times">
<item quantity="one">%1$d time</item>
<item quantity="other">%1$d times</item>
</plurals>
<string name="challenge_none">Just tap Dismiss</string>
<string name="challenge_math">Solve a sum</string>
<string name="challenge_hold">Press and hold</string>
<!-- M5: the ringtone picker -->
<string name="ringtone_picker_title">Alarm sound</string>
<string name="ringtone_silent">Silent</string>
<string name="ringtone_silent_summary">Vibration only</string>
<string name="ringtone_device_default">Device default alarm sound</string>
<string name="ringtone_pick_file">Choose from files\u2026</string>
<string name="ringtone_none_available">This device has no alarm sounds. Clockula will use the system default.</string>
<string name="ringtone_unavailable">Unavailable \u2014 the default alarm sound will be used</string>
<string name="ringtone_unknown">Unknown sound</string>
<string name="ringtone_access_may_lapse">Clockula may lose access to this file later</string>
<!-- M7: the stopwatch tab -->
<string name="stopwatch_start">Start</string>
<string name="stopwatch_pause">Pause</string>
<string name="stopwatch_resume">Resume</string>
<string name="stopwatch_reset">Reset</string>
<string name="stopwatch_lap">Lap</string>
<string name="stopwatch_lap_limit">Lap limit reached</string>
<string name="stopwatch_readout">Elapsed %1$s</string>
<string name="stopwatch_laps_header_lap">Lap</string>
<string name="stopwatch_laps_header_split">Split</string>
<string name="stopwatch_laps_header_total">Total</string>
<string name="stopwatch_lap_number">Lap %1$d</string>
<string name="stopwatch_lap_row">Lap %1$d, split %2$s, total %3$s</string>
<string name="stopwatch_lap_row_best">Lap %1$d, fastest, split %2$s, total %3$s</string>
<string name="stopwatch_lap_row_worst">Lap %1$d, slowest, split %2$s, total %3$s</string>
<string name="stopwatch_lap_row_in_progress">Lap %1$d in progress, split %2$s, total %3$s</string>
<!-- M7: the stopwatch notification. It makes no sound. -->
<string name="channel_stopwatch_name">Stopwatch</string>
<string name="channel_stopwatch_description">The running stopwatch and its controls. It makes no sound.</string>
<string name="stopwatch_notification_title">Stopwatch</string>
<string name="stopwatch_paused_at">Paused \u00b7 %1$s</string>
<plurals name="stopwatch_laps_recorded">
<item quantity="one">%1$d lap</item>
<item quantity="other">%1$d laps</item>
</plurals>
<!-- M8: the world clock tab, its rows and the zone picker -->
<string name="world_clock_add">Add city</string>
<string name="world_clock_limit">Add up to %1$d cities</string>
<string name="world_clock_home_action">Home time zone</string>
<string name="world_clock_home">Home</string>
<string name="world_clock_empty_hint">Add a city to compare its time with your own.</string>
<string name="world_clock_offset_same">Same time as home</string>
<string name="world_clock_ahead">%1$s ahead</string>
<string name="world_clock_behind">%1$s behind</string>
<string name="world_clock_hours_minutes">%1$s %2$s</string>
<string name="world_clock_summary">%1$s \u00b7 %2$s</string>
<string name="world_clock_day_yesterday">Yesterday</string>
<string name="world_clock_day_today">Today</string>
<string name="world_clock_day_tomorrow">Tomorrow</string>
<string name="world_clock_unknown_zone">This time zone is no longer on your device</string>
<string name="world_clock_face_description">%1$s, %2$s</string>
<string name="world_clock_row_description">%1$s, %2$s, %3$s</string>
<!-- A row whose zone the device no longer knows has no time to read out. -->
<string name="world_clock_row_description_unknown">%1$s, %2$s</string>
<string name="world_clock_row_drag">Reorder %1$s</string>
<string name="world_clock_row_move_up">Move up</string>
<string name="world_clock_row_move_down">Move down</string>
<string name="world_clock_row_remove">Remove</string>
<string name="world_clock_remove_title">Remove %1$s?</string>
<string name="world_clock_remove_message">The city will be removed from your world clocks.</string>
<string name="action_remove">Remove</string>
<string name="zone_picker_add_title">Add city</string>
<string name="zone_picker_home_title">Home time zone</string>
<string name="zone_picker_search">Search cities</string>
<string name="zone_picker_search_clear">Clear search</string>
<string name="zone_picker_no_results">No city matches \u201c%1$s\u201d</string>
<string name="zone_picker_device_zone">Device time zone</string>
<plurals name="world_clock_hours">
<item quantity="one">%d hour</item>
<item quantity="other">%d hours</item>
</plurals>
<plurals name="world_clock_minutes">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
</plurals>
<!-- M9: the one question the AlarmClock contract has to ask -->
<string name="interop_dismiss_title">Which alarm?</string>
<!-- %1$s is the time, followed by the label when the alarm has one. -->
<string name="interop_dismiss_row_description">Dismiss the alarm at %1$s</string>
<!-- M10: settings -->
<string name="settings_title">Settings</string>
<string name="settings_coming_soon">Coming soon</string>
<string name="settings_author" translatable="false">Jean-Luc Makiola</string>
<string name="settings_source">Source</string>
<string name="settings_source_url" translatable="false">https://codeberg.org/jlmakiola/clockula</string>
<string name="settings_section_appearance">Appearance</string>
<string name="settings_theme">Theme</string>
<string name="settings_theme_system">Follow system</string>
<string name="settings_theme_light">Light</string>
<string name="settings_theme_dark">Dark</string>
<string name="settings_dynamic_color">Dynamic colour</string>
<string name="settings_language">Language</string>
<string name="settings_language_auto">Follow system</string>
<string name="settings_section_alarm_defaults">Alarm defaults</string>
<string name="settings_section_timer_defaults">Timer defaults</string>
<string name="settings_timer_duration">Default duration</string>
<plurals name="settings_duration_minutes">
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d minutes</item>
</plurals>
<string name="settings_section_clock">Clock</string>
<string name="settings_home_zone">Home time zone</string>
<string name="settings_section_reliability">Reliability</string>
<string name="settings_self_check">Why might my alarm not ring?</string>
<string name="settings_self_check_title">Why might my alarm not ring?</string>
<string name="settings_self_check_summary">Check exact-alarm, notification and battery settings</string>
<plurals name="settings_self_check_problems">
<item quantity="one">%1$d problem found</item>
<item quantity="other">%1$d problems found</item>
</plurals>
<string name="settings_self_check_all_clear">Everything looks fine</string>
<string name="settings_section_data">Data</string>
<string name="settings_backup">Back up &amp; restore</string>
<string name="settings_backup_title">Back up &amp; restore</string>
<string name="settings_backup_summary">Export or import your alarms, timers and world clocks</string>
<string name="settings_section_help">Help</string>
<string name="settings_report_issue">Report an issue</string>
<string name="settings_send_crash_report">Send last crash report</string>
<string name="settings_version">Version</string>
<string name="settings_version_value" translatable="false">%1$s</string>
<string name="settings_ringtone_custom">Custom sound</string>
<!-- M10: backup -->
<string name="settings_backup_section">Back up &amp; restore</string>
<string name="settings_backup_export">Export backup</string>
<string name="settings_backup_export_summary">Choose a folder to save clockula-backup-v1.json in</string>
<string name="settings_backup_import">Import backup</string>
<string name="settings_backup_import_summary">Replaces all your alarms, timers and world clocks</string>
<string name="settings_backup_export_succeeded">Backup saved</string>
<string name="settings_backup_export_failed">Couldn\'t save the backup</string>
<string name="settings_backup_import_succeeded">Backup restored</string>
<string name="settings_backup_import_failed">Couldn\'t restore the backup</string>
<string name="settings_backup_import_confirm_title">Replace everything?</string>
<string name="settings_backup_import_confirm_message">This replaces all your current alarms, timers, world clocks and settings with what\'s in the backup file. This can\'t be undone.</string>
<string name="settings_backup_import_confirm_action">Replace</string>
<!-- M10: self-check -->
<string name="selfcheck_fix">Fix</string>
<string name="selfcheck_exact_alarm_title">Exact alarms</string>
<string name="selfcheck_exact_alarm_ok">Allowed — your alarm will fire on time</string>
<string name="selfcheck_exact_alarm_problem">Not allowed — alarms may fire late</string>
<string name="selfcheck_notifications_title">Notifications</string>
<string name="selfcheck_notifications_ok">Allowed — the ring screen can show over other apps</string>
<string name="selfcheck_notifications_warn">Off — your alarm will still sound, but no screen or heads-up banner will show</string>
<string name="selfcheck_alarm_channel_title">Alarm channel</string>
<string name="selfcheck_alarm_channel_ok">Not blocked</string>
<string name="selfcheck_alarm_channel_warn">Blocked — your alarm will still sound, but no screen or heads-up banner will show</string>
<string name="selfcheck_fsi_title">Full-screen alarm</string>
<string name="selfcheck_fsi_ok">Allowed — the ring screen can show over the lock screen</string>
<string name="selfcheck_fsi_warn">Not allowed — your alarm will still sound, as a heads-up notification instead</string>
<string name="selfcheck_battery_title">Battery optimisation</string>
<string name="selfcheck_battery_ok">Exempt</string>
<string name="selfcheck_battery_warn">Not exempt — exempting Clockula can make alarms more reliable</string>
<string name="selfcheck_background_restricted_title">Background activity</string>
<string name="selfcheck_background_restricted_ok">Not restricted</string>
<string name="selfcheck_background_restricted_problem">Restricted — alarms may not fire reliably</string>
<string name="selfcheck_dnd_title">Do Not Disturb</string>
<string name="selfcheck_dnd_ok">Not blocking alarms</string>
<string name="selfcheck_dnd_problem">Total silence is on — it blocks alarms too</string>
<string name="selfcheck_alarm_volume_title">Alarm volume</string>
<string name="selfcheck_alarm_volume_ok">On</string>
<string name="selfcheck_alarm_volume_problem">Muted — your alarm will fire silently</string>
<string name="selfcheck_oem_title">Device manufacturer</string>
<string name="selfcheck_oem_warn">Some manufacturers aggressively close background apps — see how to keep Clockula exempt</string>
<string name="selfcheck_next_alarm_title">Next alarm, as the system sees it</string>
<string name="selfcheck_next_alarm_ok">Matches what Clockula scheduled</string>
<string name="selfcheck_next_alarm_problem">Doesn\'t match what Clockula scheduled — open the app to re-check</string>
<!-- M10: widgets -->
<string name="widget_next_alarm_description">Next alarm</string>
<string name="widget_next_alarm_empty">No alarms set</string>
<string name="widget_next_alarm_today">Today</string>
<string name="widget_timer_description">Timer</string>
<string name="widget_timer_new">New timer</string>
<string name="widget_timer_expired">Time\'s up</string>
<string name="widget_clock_description">Clock</string>
</resources>