Мультиязычность в MOSS (WSS 3.0)

Мультиязычность в MOSS

Многие интересуются – возможна ли такая настройка MOSS которая бы позволила менять язык интерфейса портала (меню, и.т.п) «на лету» - или в зависимости от language settings internet explorer, например как в OWA или Project Server 2003. Возможно. Метод этот реализуем на динамической подмене ресурсов. При этом можно поддерживать хоть 20 языков.

Реализуется это с помощью ASP.NET runtime, некоторого шаманства, возможностей хинта resourceProviderFactoryType и подмены expressionBuilders. Само собой разумеется, нужно самим написать имплементирующие классы, взяв за основу родные expression builders которые есть в sharepoint. Замена производится в web.config того узла, которому нужно обеспечить мультиязычность, и некоторых других web приложений которые работают в wss и moss (в TEMPLATE\LAYOUTS\web.config например)

Подменить нужно следующие expressionbuilders:

  1. Resources (Microsoft.SharePoint.SPResourceExpressionBuilder)
  2. SPHtmlEncodedResources (Microsoft.SharePoint.SPHtmlEncodedResourceExpressionBuilder)
  3. SPSimpleFormattingEncodedResources (Microsoft.SharePoint.SPSimpleFormattingEncodedResourceExpressionBuilder)
  4. SPUrl (Microsoft.SharePoint.Publishing.WebControls.SPUrlExpressionBuilder)

Заменив эти классы, можно реализовать логику динамической подгрузки ресурсов в зависимости от ASP.NET хидера приходящего со стороны клиента, или пользовательских настроек локали Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.RegionalSettings.LocaleId.

Подгружать ресурсные файлы можно с помощью файлового ресурсного менеджера ResourceManager rm = ResourceManager.CreateFileBasedResourceManager(…)

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