Решение, которое я придумаю:
Допустим, у нашего Message
будут следующие свойства (в Typescript):
{
title: string;
description: string;
}
Я бы расширил его с помощью объекта переводов.Там, где каждый ключ, есть локаль и объект с переведенными строками.
{
title: string;
description: string;
translations: {
[key: string]: {
title: string;
description: string;
}
}
}
readModel
будет таким же, как указано выше, и клиент сам решит, какие строки отображать.
Команда translateMessage
получит полезную нагрузку, как описано выше, и опубликует событие с этим.readModel
будет реагировать на это событие таким образом, что он помещает новые данные полезной нагрузки в объект translations
в этой модели.
Для создания модели, если данные получены в другой локали, чемпо умолчанию, тогда обработчик событий поместит префикс этих переведенных строк с локалью, в которой они были записаны, в корень, например, model.title
может быть чем-то вроде [de] Nachrichtentitel
.Модель будет выглядеть так:
{
title: '[de] Nachrichtentitel'
description: '[de] Nachrichteninhalt'
translations: {
de: {
title: 'Nachrichtentitel'
description: 'Nachrichteninhalt'
}
}
}
Видите какие-нибудь проблемы с этим?Существуют ли другие уже признанные передовые практики, как это сделать?