2012-05-22 42 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; 

*顯然這不是一個可靠的清理。使用finally塊或將這種語言切換功能封裝在IDisposable中,並使用using塊可以防止代碼在出現故障時以隨機語言運行,但這超出了這一點。

+0

謝謝。是否有可能指定文化並檢索它,而不設置自己的文化。 – Timeless

+0

這取決於您決定在發送電子郵件時使用哪種語言的要求。假設語言取決於用戶,您如何確定給定用戶使用哪種語言? – Clafou

相關問題