Проект, над которым я работаю, поддерживает несколько языков. Решение основано на использовании некоего механизма Castle Monorail. Соответствующий класс контроллера отмечен следующим образом:
[Resource ("pageResx", "... Controllers.Static")]
Где StaticTemplate - это префикс имени контроллера, а файл ресурсов помещается в '.. \ Resources \ Controllers \ StaticTemplate *'.
С другой стороны, StatiController наследуется от класса BaseController, который помечен следующим образом:
[LocalizationFilter (RequestStore.Session, "языковой стандарт")]
Итак, языковой стандарт для пользователя сохраняется в сеансе. Вот и все. Последний шаг - это vm-файл NVelocity, в котором соответствующий ресурс берется следующим образом:
$ pageResx.Buttons_Download
Таким образом, строка ресурса с ID = 'Buttons_Download' для пользователя с locale = 'de' берется из файла '.. \ Resources \ Controllers \ Static.de.resx'.
Однако есть еще одно место в проекте, где проводится локализация - создание писем. Там реализована следующая логика:
public class EmailPersonalizer : IEmailPersonalizer
{
...
printJobResourceManager = new ResourceManager("...Resources.PrintJob",
typeof (EmailPersonalizer).Assembly);
public string ToLocalizedString(string resourceId, VendorUser user,
params object[] args)
{
...
var resourceString = printJobResourceManager.GetString(resourceId,
culture);
...
}
...
}
При заданных значениях параметров resourceString вычисляется правильно. Но...
А вот и Магия. Есть файл ресурсов для бразильской локали. Он имеет суффикс «pt-BR». Также есть португальский язык, но нет подходящего файла ресурсов - нет файла pt. Что касается страниц просмотра, Monorail получает локализованный ресурс из файла pt-BR для пользователя pt. Но логика, реализующая построение электронного письма, не делает того же. Вместо этого он получает локализованную строку из базового ресурса, который используется как en.
Я читал о механизме .NET для сопоставления ресурсов (http://msdn.microsoft.com/en-us/library/sb6a8618.aspx). Но описания монорельса найти не удалось.
Вопрос в том, как монорельс (или кто-то еще) отображает «pt» на «pt-BR»? И что я должен сделать, чтобы реализовать ту же логику снаружи?
заранее спасибо
culture
? а что такое CurrentCulture и CurrentUICulture? - person Ken Egozi   schedule 02.05.2013