2012-05-22 5 views
0

Я хочу отправить пользователю локализованное электронное письмо, но, похоже, текст, полученный из файла ресурсов, основан на моей культуре.Как отправить локализованный адрес электронной почты

SmtpClient client = new SmtpClient(); 
client.Host = "xxx.xxx.xxx"; 
client.Credentials = new NetworkCredential("name", "password"); 
MailMessage mm = new MailMessage(); 
mm.Sender = new MailAddress("[email protected]"); 
mm.From = new MailAddress("[email protected]"); 
mm.To.Add(new MailAddress(email)); 
mm.Subject = Localization.EmailUserActiveTitle; 
mm.Body = "<div><h3>" + Localization.EmailUserActiveBodyPart1 + "</h3></div></br>" + 
      "<div>" + Localization.EmailUserActiveBodyPart2 + "</div>" + 
      "<div><b>" + content + "</b></div></br>" + 
      "<div>" + Localization.EmailUserActiveBodyPart3 + "</div>" + 
      "<div>" + Localization.EmailUserActiveBodyPart4 + "</div>"; 
mm.IsBodyHtml = true; 
mm.Priority = MailPriority.Normal; 
client.Send(mm); 

Но когда я получить Localization.EmailUserActiveBodyPart1 локализуется базы на моей нынешней культуре.

Как я могу получить указанный файл ресурсов культуры?

+0

Проверьте установку [CurrentUICulture] (http://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture.aspx#Y456). – Filburt

+0

@Filburt Я знаю этот подход, но он, похоже, меняет мою культуру, а не возвращает соответствующий текст ресурса культуры. – Timeless

+0

Вы не упомянули об этом в своем вопросе, поэтому я хочу дать подсказку. См. Подробный ответ Clafou, как справиться с этим в вашем конкретном случае. – Filburt

ответ

1

ResourceManager использует свойство Thread.CurrentThread.CurrentUICulture, чтобы определить, какую локализованную версию ресурса загружать.

Так что, если вы хотите, чтобы заставить локализацию на определенном языке (например, языковые предпочтения, связанные с пользователем вы посылаете электронную почту к), то просто сделайте это перед кодом:

var previousUICulture = Thread.CurrentThread.CurrentUICulture; 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); // Replace with the relevant culture name for your user 

И очистить * сразу после вашего кода:

Thread.CurrentThread.CurrentUICulture = previousUICulture; 

* Очевидно, что это ненадежная очистка. A finally блокирует эту функцию коммутации языков в IDisposable и использует блок using, чтобы ваш код работал на случайном языке в случае сбоя, но это не соответствует точке.

+0

спасибо. можно указать культуру и получить ее, не устанавливая мою собственную культуру. – Timeless

+0

Это зависит от вашего требования по выбору языка, который будет использоваться при отправке электронной почты. Предполагая, что язык зависит от пользователя, как вы определяете, какой язык использовать для данного пользователя? – Clafou

Смежные вопросы