wolkenkit: как к локализации - PullRequest
       50

wolkenkit: как к локализации

0 голосов
/ 27 декабря 2018

Данные, которые я храню, на данный момент написаны на английском языке.Поэтому я планирую сделать этот контент локализованным / переводимым и хотел бы предоставить эту возможность пользователям.

Вот мои истории пользователей:

(1) Как пользователь, я хочу выбрать предпочтительныйязык моего содержания (например, немецкий).Если текст не доступен на немецком языке, пожалуйста, дайте мне содержание на резервном языке (например, английском).

(2) Как пользователь, я хочу иметь возможность переводить данную модель.

Учитывая следующее:

1) Модель, например, Message с двумя свойствами: title и description.Можно ожидать, что эти два свойства на английском языке (по умолчанию).

2) Команда, например translateMessage, которая получит полезную нагрузку с: title, description и locale.

Каков приемлемый способ локализации этих моделей?

1 Ответ

0 голосов
/ 04 января 2019

Решение, которое я придумаю:

Допустим, у нашего 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'
    }
  }
}

Видите какие-нибудь проблемы с этим?Существуют ли другие уже признанные передовые практики, как это сделать?

...