Мы поддерживаем веб-продукт, который мы продали нескольким различным клиентам. Мы поддерживаем сайт на родном и английском языках. В рамках технического обслуживания мы начали обновление до .NET 3.5, и хотя во время этого мы хотели бы иметь лучшую поддержку для дифференцированного макета/локализации в продукте.Обработка локализации + дифференциация клиентов
Мы стараемся не иметь логики клиента внутри кода. Например, мы стараемся избегать такого кода:
if (config.Customer = customer1)
SetupPageForCustomer1();
else
SetupPageForCustomer2();
Вместо этого мы попытаться положить все дифференциацию клиентов в конфигурационных файлах, так что мы можем иметь гораздо более чистый код:
SetupPageForCustomer(customer1)
void SetupPageForCustomer(Customer c)
{
PageConfig pc = LoadPageConfig("config/" + c.Dir + "ThisPage.aspx.config");
SetupPage(pc);
}
Мы обработали Разделение макета, позволяя страницам, нуждающимся в дифференциации, иметь usercontrol для каждого клиента, который загружается динамически на page_load. Локализация в настоящее время обрабатывается с файлами ресурсов, которые отлично работают. Поскольку мы поддерживаем два языка, каждая страница поставляется с двумя файлами ресурсов. Однако, если нам нужно различать текст на этих страницах для клиентов, мы получим (количество языков * количество клиентов) файлы ресурсов, которые кажутся очень полезными.
Ваши мнения по этому вопросу? Каков наилучший способ справиться с такими вещами?
Это не меняет того факта, что нам понадобится огромное количество файлов. Скажем, у нас 10 клиентов, что означает, что у нас будет 20 файлов на страницу aspx. –
В конце концов мы решили спуститься по этой дороге.У нас есть файл базового ресурса, который содержит все, что разделяется между несколькими клиентами. Затем в каждом файле клиента (который существует только в случае наличия альтернативных ресурсов) существует возможность переопределения базовых ресурсов. Мы закодировали пользовательский обработчик ресурсов для выбора между файлами клиента. –