- Регистрировать идентификаторы событий, а не сообщения.
- Захват специфических данных события вместе с идентификатором события.
- Когда пользователь просматривает журнал, локализуйте сообщение о событии на основе уникального идентификатора.
Проблема, с которой вы столкнетесь, заключается в том, что вы пытаетесь вставить динамические данные в сообщения диалоговым способом. Например, если вам нужно написать «Не найдено ни одного сообщения» или «Одно сообщение найдено» или «Найдены X сообщения», это проблематично - в английском языке мы имеем разные множественные числа для нуля, одного и более чем одного ... но это не обязательно так на других языках. Такие вещи, как числа или даты, менее проблематичны для вставки в форму String.Format, но вам не нужно пытаться динамически генерировать реальный язык локализованным способом.
Я бы порекомендовал следовать шаблону, такому как журнал событий Windows, где вы выводите идентификатор события, локализованное сообщение на основе идентификатора события, а затем захватывать определенные «поля», где вы локализуете имя поля и отображать формат поля, например, «Сумма: $ 2,00» или что-то еще. Это может быть не самый красивый способ, но если у вас нет полностью занятого лингвиста, и вы намерены учесть все мелкие нюансы каждого языка, я бы выбрал более простой формат вывода журнала .
В данном примере вы бы отделили сообщение журнала от данных, например:
Клиент не смог завершить платеж.
Сумма: XX
Вы регистрируете идентификатор сообщения, например, «13579» может быть уникальным идентификатором события, когда клиент не может завершить платеж. Наконец, вы можете сохранить значение в отдельном поле.
Как выяснить, сколько полей выделить для события или как хранить данные ... это упражнение лучше всего оставить читателю.