При получении строк из ресурсных файлов при разработке под 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, в этом случае ваши решения будут использовать тот же формат, что выставлен в настройках узла.