Установка форматов дат при помощи атрибута date тега say-as для синтеза речи

, Обновлено 31 августа 2023

Date в SSML относится к атрибуту interpret-as тега say-as и используется для корректного произношения дат. Это позволяет контролировать, как система синтеза речи интерпретирует и произносит различные форматы дат.

Общие правила

Date работает в соответствии с международной SSML спецификацией https://www.w3.org/TR/ssml-sayas/#S3.1.

В качестве разделителя можно ставить знаки дефис "-", слеш "/",  точку "."

Атрибут format задает формат даты, в котором = день, = месяц, = год.

ПолеДиапазонПример
Day
(одна или 2 цифры)
0?[1...9]
[10...31]
03, 15
Month
(одна или 2 цифры)
0?[1...9]
[10...12]
7, 11
Year
(одна или 4 цифры)
0?0?0?[0...9]
0?0?[10...99]
0?[100..999]
[1000..9999]
45, 998, 2023

* Запись 0? означает, что 0 может быть использован или нет, в зависимости от того, как вам нужно.

Для дней и месяцев одна или две цифры, не обязательно ставить нули перед цифрой. Для  года не обязательно указывать век или начальные нули.

У тега выставлено значение detail="1" по умолчанию. Оставляйте его как есть.

Возможны следующие варианты записи дат:
dmy, mdy, ymd, ym, my, md, dm, d, m, y. Приведем пример для каждого формата.

dmy

<say-as interpret-as="date" format="dmy" detail="1">10-10-2016</say-as> 

Пример:

 
 
00:04

Можно сократить год до двух чисел, записать месяц и день без нулей:

<say-as interpret-as="date" format="dmy" detail="1">5/7/24</say-as>

Пример:

 
 
00:03

mdy

<say-as interpret-as="date" format="mdy" detail="1">11.09.23</say-as>

Пример:

 
 
00:03

ymd

<say-as interpret-as="date" format="ymd" detail="1">1945.05.09</say-as>

Пример:

 
 
00:04

ym

<say-as interpret-as="date" format="ym" detail="1">1917/10</say-as>

Пример:

 
 
00:03

my

<say-as interpret-as="date" format="my" detail="1">7.98</say-as>

Пример:

 
 
00:02

md

<say-as interpret-as="date" format="md" detail="1">03/08</say-as>

Пример:

 
 
00:02

dm

<say-as interpret-as="date" format="dm" detail="1">31/12</say-as>

Пример:

 
 
00:02

d

<say-as interpret-as="date" format="d" detail="1">12</say-as>

Пример:

 
 
00:02

m

<say-as interpret-as="date" format="m" detail="1">01</say-as>

Пример:

 
 
00:02

y

<say-as interpret-as="date" format="y" detail="1">998</say-as>

Пример:

 
 
00:03

Особенности в других языках

Содержимое date произносится в соответствии с принятыми в языке правилами. Например, дата 05/07/07 с форматом "dmy" (день-месяц-год), в контексте en-US может быть произнесена как "июль, пятое, ноль седьмое", причем ноль будет читать не "зиро", а "оу", как принято заменять нули в на буквы в штатах.

<say-as interpret-as="date" format="dmy" detail="1">05/07/07</say-as>

Пример:

 
 
00:02

Исключения

К сожалению, голоса Алена, Филипп, Оксана, Джейн, Омаж, Захар, Эрмил, Мартын не поддерживают данную технологию.

А голоса Наталья, Борислав, Марфа, Тарас, Александра, Сергей обрабатывают это тег иначе, но они более продвинутые в плане настроек.

Продвинутые голоса

Эти голоса Наталья, Борислав, Марфа, Тарас, Александра, Сергей обладают продвинутым способом работы с тегом date. У них есть очень точные настройки падежей. Запись тега выглядит несколько иначе:

<say-as interpret-as="date" format="CASE" detail="TEMPLATE">VALUE</say-as>

В атрибут format указывается падеж:

  • nominative — именительный;
  • genitive — родительный;
  • dative — дательный;
  • accusative — винительный для одушевленных;
  • accusative_dead — винительный для неодушевленных;
  • ablative — творительный;
  • prepositional — предложный.

Шаблон даты тут передается в параметр detail. Атрибут detail определяет последовательность, в которой перечислены число, месяц и год. Вы можете указать только две или даже лишь одну из этих частей. Например, это может быть число и месяц без уточнения года, либо только год. 

При этом всегда должна быть соблюдена последовательность день-месяц-год. Нельзя ставить месяц-день-год или в какой то другой последовательности.

В качестве разделителей используйте дефис "-".

  • "d" используется для представления числа дня в месяце;
  • "m" используется для представления месяца;
  • "y" используется для представления года;
  • "yw" (вместо "y") означает, что слово "год" будет опущено, таким образом, вместо "двух тысячный год" будет сказано "двухтысячный".

Базовые примеры

<say-as interpret-as="date" format="accusative" detail="d-m-y">25-1-2000</say-as>

Пример:

 
 
00:03

Марфа произнесла в винительном падеже и добавила в конце "года".

<say-as interpret-as="date" format="accusative" detail="m-yw">02-2000</say-as>

Пример:

 
 
00:02

Тут Марфа озвучила также в винительном падеже но за счет указания "yw", вместо "y", опустила слова "года".

Примеры всех падежей

Приведем примеры как читают во всех падежах дату "1 января".

nominative — именительный

 
 
00:02

genitive — родительный

 
 
00:02

dative — дательный

 
 
00:02

accusative — винительный для одушевленных

 
 
00:02

accusative_dead — винительный для неодушевленных

 
 
00:02

ablative — творительный

 
 
00:02

prepositional — предложный

 
 
00:02

Выводы

Атрибут date полезен, когда вы хотите контролировать, насколько подробно дата будет произнесена в определенном контексте. Например, при рассказе о будущем событии может потребоваться упомянуть только день и месяц, а год может быть излишним.

Поддержка

Если остались вопросы по озвучке, то задайте их в чате поддерки в телеграм @zvukogram
2024 - Звукограм