diff --git a/apps/lang/english-us.lang b/apps/lang/english-us.lang
index b926b4e37e..618ee114fd 100644
--- a/apps/lang/english-us.lang
+++ b/apps/lang/english-us.lang
@@ -16027,3 +16027,17 @@
*: ""
+
+ id: LANG_VOICED_DATE_FORMAT
+ desc: format string for how dates will be read back. Y == 4-digit year, A == month name, m == numeric month, d == numeric day. For example, "AdY" will read "January 21 2021"
+ user: core
+
+
+ *: "AdY"
+
+
+ *: ""
+
+
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 60cb17d245..dab9ed8508 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -16094,3 +16094,17 @@
*: ""
+
+ id: LANG_VOICED_DATE_FORMAT
+ desc: format string for how dates will be read back. Y == 4-digit year, A == month name, m == numeric month, d == numeric day. For example, "AdY" will read "January 21 2021"
+ user: core
+
+
+ *: "dAY"
+
+
+ *: ""
+
+
diff --git a/apps/talk.c b/apps/talk.c
index e627337162..e440dd98b5 100644
--- a/apps/talk.c
+++ b/apps/talk.c
@@ -1496,9 +1496,30 @@ void talk_setting(const void *global_settings_variable)
void talk_date(const struct tm *tm, bool enqueue)
{
- talk_id(LANG_MONTH_JANUARY + tm->tm_mon, enqueue);
- talk_number(tm->tm_mday, true);
- talk_number(1900 + tm->tm_year, true);
+ const char *format = str(LANG_VOICED_DATE_FORMAT);
+ const char *ptr;
+
+ if (!enqueue)
+ talk_shutup(); /* cut off all the pending stuff */
+
+ for (ptr = format ; *ptr ; ptr++) {
+ switch(*ptr) {
+ case 'Y':
+ talk_number(1900 + tm->tm_year, true);
+ break;
+ case 'A':
+ talk_id(LANG_MONTH_JANUARY + tm->tm_mon, true);
+ break;
+ case 'm':
+ talk_number(tm->tm_mon + 1, true);
+ break;
+ case 'd':
+ talk_number(tm->tm_mday, true);
+ break;
+ default:
+ break;
+ }
+ }
}
void talk_time(const struct tm *tm, bool enqueue)