19 августа 2023 , Обновлено 31 августа 2023
Date в SSML относится к атрибуту interpret-as тега say-as и используется для корректного произношения дат. Это позволяет контролировать, как система синтеза речи интерпретирует и произносит различные форматы дат.
Date работает в соответствии с международной SSML спецификацией https://www.w3.org/TR/ssml-sayas/#S3.1.
В качестве разделителя можно ставить знаки дефис "-", слеш "/", точку "."
Атрибут format задает формат даты, в котором d = день, m = месяц, y = год.
Поле | Диапазон | Пример |
---|---|---|
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. Приведем пример для каждого формата.
<say-as interpret-as="date" format="dmy" detail="1">10-10-2016</say-as>
Можно сократить год до двух чисел, записать месяц и день без нулей:
<say-as interpret-as="date" format="dmy" detail="1">5/7/24</say-as>
<say-as interpret-as="date" format="mdy" detail="1">11.09.23</say-as>
<say-as interpret-as="date" format="ymd" detail="1">1945.05.09</say-as>
<say-as interpret-as="date" format="ym" detail="1">1917/10</say-as>
<say-as interpret-as="date" format="my" detail="1">7.98</say-as>
<say-as interpret-as="date" format="md" detail="1">03/08</say-as>
<say-as interpret-as="date" format="dm" detail="1">31/12</say-as>
<say-as interpret-as="date" format="d" detail="1">12</say-as>
<say-as interpret-as="date" format="m" detail="1">01</say-as>
<say-as interpret-as="date" format="y" detail="1">998</say-as>
Содержимое date произносится в соответствии с принятыми в языке правилами. Например, дата 05/07/07 с форматом "dmy" (день-месяц-год), в контексте en-US может быть произнесена как "июль, пятое, ноль седьмое", причем ноль будет читать не "зиро", а "оу", как принято заменять нули в на буквы в штатах.
<say-as interpret-as="date" format="dmy" detail="1">05/07/07</say-as>
К сожалению, голоса Алена, Филипп, Оксана, Джейн, Омаж, Захар, Эрмил, Мартын не поддерживают данную технологию.
А голоса Наталья, Борислав, Марфа, Тарас, Александра, Сергей обрабатывают это тег иначе, но они более продвинутые в плане настроек.
Эти голоса Наталья, Борислав, Марфа, Тарас, Александра, Сергей обладают продвинутым способом работы с тегом date. У них есть очень точные настройки падежей. Запись тега выглядит несколько иначе:
<say-as interpret-as="date" format="CASE" detail="TEMPLATE">VALUE</say-as>
В атрибут format указывается падеж:
Шаблон даты тут передается в параметр detail. Атрибут detail определяет последовательность, в которой перечислены число, месяц и год. Вы можете указать только две или даже лишь одну из этих частей. Например, это может быть число и месяц без уточнения года, либо только год.
При этом всегда должна быть соблюдена последовательность день-месяц-год. Нельзя ставить месяц-день-год или в какой то другой последовательности.
В качестве разделителей используйте дефис "-".
<say-as interpret-as="date" format="accusative" detail="d-m-y">25-1-2000</say-as>
Марфа произнесла в винительном падеже и добавила в конце "года".
<say-as interpret-as="date" format="accusative" detail="m-yw">02-2000</say-as>
Тут Марфа озвучила также в винительном падеже но за счет указания "yw", вместо "y", опустила слова "года".
Приведем примеры как читают во всех падежах дату "1 января".
Атрибут date полезен, когда вы хотите контролировать, насколько подробно дата будет произнесена в определенном контексте. Например, при рассказе о будущем событии может потребоваться упомянуть только день и месяц, а год может быть излишним.