вторник, 4 декабря 2012 г.

Локализация в SharePoint. Получение строк из ресурсов

При получении строк из ресурсных файлов при разработке под SharePoint используют метод SPUtility.GetLocalizedString.

Одним из параметров идёт язык (uint language), т.е. для какого языка нам нужна строка. Проблема возникает откуда узнать текущий язык.

Самая первая ошибка - это использовать SPWeb.Language. Но это всего лишь дефолтный язык создания узла, только чтение, совсем нам не подходит. Вы могли создать узел на английском языке, а потом поменять язык на русский (SPWeb.Language останется английским)

Следующая ошибка - System.Threading.Thread.CurrentThread.CurrentCulture или CultureInfo.CurrentCulture, либо не CurrentCulture, а CurrentUICulture. В любом случае не верно. Тред может быть под любой культурой, ещё хуже, что эту культуру можно изменить, например в какой-нить другой веб-части. Ну и просто архитектурно не верно - мы опускаемся ниже объектной модели SharePoint, а это чревато игнорированием его особенностей, что, собственно, и произошло.

Верный способSPWeb.Locale - вернёт региональные настройки (в SiteSettings которые). Зависят/влияют ли они на культуру треда, язык операционки сервера или клиента нас не волнует.

Таким образом, для SPUtility.GetLocalizedString надо использовать SPWeb.Locale.LCID в качестве параметра language, в этом случае ваши решения будут использовать тот же формат, что выставлен в настройках узла.

Комментариев нет: