Локализация системы сгенерированных сообщений о состоянии - PullRequest
4 голосов
/ 11 декабря 2008

Я работаю в среде .NET, где система иногда создает записи в журнале для клиента. Затем сообщения добавляются в журнал клиентов, который можно просмотреть позже.

Например, если клиент подписывается на новую услугу или у клиента произошла неудачная попытка оплаты, эти сообщения добавляются в журнал клиента.

В настоящий момент все сообщения жестко закодированы в код, например, «Клиент не смог завершить платеж XX».

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

Как лучше всего справиться с этим сценарием?

Ответы [ 2 ]

4 голосов
/ 12 декабря 2008
  • Регистрировать идентификаторы событий, а не сообщения.
  • Захват специфических данных события вместе с идентификатором события.
  • Когда пользователь просматривает журнал, локализуйте сообщение о событии на основе уникального идентификатора.

Проблема, с которой вы столкнетесь, заключается в том, что вы пытаетесь вставить динамические данные в сообщения диалоговым способом. Например, если вам нужно написать «Не найдено ни одного сообщения» или «Одно сообщение найдено» или «Найдены X сообщения», это проблематично - в английском языке мы имеем разные множественные числа для нуля, одного и более чем одного ... но это не обязательно так на других языках. Такие вещи, как числа или даты, менее проблематичны для вставки в форму String.Format, но вам не нужно пытаться динамически генерировать реальный язык локализованным способом.

Я бы порекомендовал следовать шаблону, такому как журнал событий Windows, где вы выводите идентификатор события, локализованное сообщение на основе идентификатора события, а затем захватывать определенные «поля», где вы локализуете имя поля и отображать формат поля, например, «Сумма: $ 2,00» или что-то еще. Это может быть не самый красивый способ, но если у вас нет полностью занятого лингвиста, и вы намерены учесть все мелкие нюансы каждого языка, я бы выбрал более простой формат вывода журнала .

В данном примере вы бы отделили сообщение журнала от данных, например:

Клиент не смог завершить платеж.
Сумма: XX

Вы регистрируете идентификатор сообщения, например, «13579» может быть уникальным идентификатором события, когда клиент не может завершить платеж. Наконец, вы можете сохранить значение в отдельном поле.

Как выяснить, сколько полей выделить для события или как хранить данные ... это упражнение лучше всего оставить читателю.

1 голос
/ 11 декабря 2008

Вы можете определить локализованные строки в вашей базе данных и просто записать идентификатор сообщения журнала в вашу таблицу журнала. Таблица сообщений журнала также будет содержать поле для указания языка.

Если вы ведете много журналирования, это также уменьшит размер вашего журнала (даже если это, вероятно, не актуально, учитывая объем памяти, доступный на современных компьютерах; -)

У этого метода есть две проблемы:

  1. Вам необходимо синхронизировать запись в приложении с таблицей сообщений журнала.
  2. Вы не можете регистрировать любые динамические данные, например, имя клиента.

С первым пунктом можно разобраться, используя перечисление с описательными именами, например,

enum LogMessages
{
    OutOfDiskSpace = 1;
    OutOfMemory = 2;
    OutOfCoffee = 3;
}

В вашем приложении вы бы назвали void LogToDatabase(LogMessages) так:

// forgot to buy coffee again!
Log(OutOfCoffee);

Вторая проблема требует дополнительной работы. Вы можете определить свои строки так, чтобы вы могли использовать string.Format():

 string.format("{0} forgot to buy coffee again. Lazy geek!", "I");
// yields: "I forgot to buy coffee again. Lazy geek!"

Для этого вам необходимо сохранить данные вариации («Я», «Вы», «Мой младший брат» ...) в вашей таблице журнала вместе с идентификатором сообщения журнала. (Или вы немного нормализуете его и помещаете в третью таблицу, но это вполне может быть преждевременной нормализацией; -).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...