diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt
new file mode 100644
index 0000000000..dcaec39af4
--- /dev/null
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2025 Vitor Pamplona
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package com.vitorpamplona.amethyst.ui.screen.loggedIn.calendars
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.res.pluralStringResource
+import com.vitorpamplona.amethyst.R
+import com.vitorpamplona.amethyst.ui.stringRes
+
+// Picks calendar_day_a11y_no_events when count is 0 because ICU/CLDR maps 0 to
+// the `other` category for every locale we ship, which would otherwise render
+// "[date], 0 events" instead of "[date], no events".
+@Composable
+fun calendarDayA11yLabel(
+ dateLabel: String,
+ count: Int,
+): String =
+ if (count == 0) {
+ stringRes(R.string.calendar_day_a11y_no_events, dateLabel)
+ } else {
+ pluralStringResource(R.plurals.calendar_day_a11y_events, count, dateLabel, count)
+ }
diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt
index 648210bee6..69322f2b74 100644
--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt
@@ -46,7 +46,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
@@ -266,8 +265,7 @@ private fun DayCell(
MaterialTheme.colorScheme.surface
}
- val baseDescription =
- pluralStringResource(R.plurals.calendar_day_a11y_events, totalEventCount, dateLabel, totalEventCount)
+ val baseDescription = calendarDayA11yLabel(dateLabel, totalEventCount)
val todaySuffix = stringRes(R.string.calendar_day_a11y_today_suffix)
val selectedSuffix = stringRes(R.string.calendar_day_a11y_selected_suffix)
val a11y =
diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt
index c71f126c2a..46b9d8b4d9 100644
--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt
@@ -44,7 +44,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
@@ -202,7 +201,7 @@ private fun WeekStrip(
}
val dateLabel = formatLongDate(date.atStartOfDay(ZoneId.systemDefault()).toEpochSecond())
- val baseA11y = pluralStringResource(R.plurals.calendar_day_a11y_events, count, dateLabel, count)
+ val baseA11y = calendarDayA11yLabel(dateLabel, count)
val todaySuffix = stringRes(R.string.calendar_day_a11y_today_suffix)
val selectedSuffix = stringRes(R.string.calendar_day_a11y_selected_suffix)
val a11y =
diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml
index ec275a1b81..6cc5303a6d 100644
--- a/amethyst/src/main/res/values-cs-rCZ/strings.xml
+++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml
@@ -2784,12 +2784,12 @@
- %1$d událostí
- - %1$s, žádné události
- %1$s, %2$d událost
- %1$s, %2$d události
- %1$s, %2$d událostí
- %1$s, %2$d událostí
+ %1$s, žádné události
- Začíná za %1$d minutu
- Začíná za %1$d minuty
diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml
index c8de7d114b..36fa2c5134 100644
--- a/amethyst/src/main/res/values-de-rDE/strings.xml
+++ b/amethyst/src/main/res/values-de-rDE/strings.xml
@@ -2754,10 +2754,10 @@ anz der Bedingungen ist erforderlich
- %1$d Termine
- - %1$s, keine Termine
- %1$s, %2$d Termin
- %1$s, %2$d Termine
+ %1$s, keine Termine
- Beginnt in %1$d Minute
- Beginnt in %1$d Minuten
diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml
index 04414f4d48..febd5b47b3 100644
--- a/amethyst/src/main/res/values-pt-rBR/strings.xml
+++ b/amethyst/src/main/res/values-pt-rBR/strings.xml
@@ -2752,10 +2752,10 @@
- %1$d eventos
- - %1$s, sem eventos
- %1$s, %2$d evento
- %1$s, %2$d eventos
+ %1$s, sem eventos
- Começa em %1$d minuto
- Começa em %1$d minutos
diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml
index b3663a1f7f..dd64ca4dc2 100644
--- a/amethyst/src/main/res/values-sv-rSE/strings.xml
+++ b/amethyst/src/main/res/values-sv-rSE/strings.xml
@@ -2752,10 +2752,10 @@
- %1$d händelser
- - %1$s, inga händelser
- %1$s, %2$d händelse
- %1$s, %2$d händelser
+ %1$s, inga händelser
- Börjar om %1$d minut
- Börjar om %1$d minuter
diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml
index 557cfb208c..15b09c7920 100644
--- a/amethyst/src/main/res/values/strings.xml
+++ b/amethyst/src/main/res/values/strings.xml
@@ -1932,10 +1932,10 @@
Add to phone calendar
Jump to today
- - %1$s, no events
- %1$s, %2$d event
- %1$s, %2$d events
+ %1$s, no events
today
selected
Create a new calendar event