Сценарий проблемы:
Реализация локализации ASP.Net в приложении на основе SaaS.
Дополнительная сложность: арендатор должен иметь возможность редактировать локализованный контент. Таким образом, если размещенное приложение имеет 10 арендаторов, каждый из которых поддерживает 5 языков, мы можем получить 50 единиц контента перевода.
Пожалуйста, предложите, какой подход был бы идеальным, учитывая приведенный выше сценарий.
Ниже перечислены подходы, использовавшиеся в прошлом (для других моих приложений), и почему они не актуальны сейчас:
Вариант 1:
Файлы ресурсов ASP.Net
Проблема:
Для каждого локализуемого ресурса создается только один языковой файл (страница ASPX). Следовательно, невозможно иметь один файл Home.aspx.resx для каждого перевода арендатора.
Хотя ключи resx можно изменить, чтобы они содержали TenantId (lblFirstName_44) и сохранялись в одном и том же файле resx, но это будет трудно поддерживать, и мы можем получить большие файлы.
Вариант 2:
Хранение многоязычного контента в специальных таблицах базы данных (метки, сообщения, элементы меню)
Проблема:
Это работало хорошо в прошлом (в сценариях, где конечный пользователь требует динамического обновления локализуемого контента). Предыдущее решение в значительной степени опиралось на кэшированные данные, в случае мультитенантного решения данные требовали бы обширного кэширования на страницу - на каждого арендатора. Кэширование также может выполняться для каждого типа контента (метки, сообщения, элементы меню)
Альтернативным подходом может быть реализация пользовательского поставщика ресурсов (на основе существующего поставщика .Net)
Вариант 3:
Сторонние решения с открытым исходным кодом, такие как FairlyLocal
Проблема:
Хотя он очень прост в реализации, он обладает тем же недостатком, что и файлы .resx, - он не предназначен для того, чтобы позволить конечному пользователю изменять содержимое и поддерживать несколько версий (для арендатора) одного и того же файла.
Примечание. В случае отсутствия другого решения, мы, вероятно, выберем вариант 2
.