我需要向用户发送批量电子邮件,但他们有不同的语言偏好设置。 电子邮件位于资源文件中:Email.resx,Email.fr.resx
如何从一个或另一个强制获取字符串?例如,我说我使用en-CA文化登录,但我想发送法语电子邮件?
我试过了:
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fr-CA");
System.Resources.ResourceSet rSet = Resources.Emails.ResourceManager.GetResourceSet(ci ,true, false);
string bodyMessageResource = rSet.GetString("EmailBody");
但是rSet为空。
我只是希望能够选择我所选语言的字符串。
答案 0 :(得分:3)
我想你差不多了。试试这个:
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fr-CA");
ResourceManager resourceManager = new ResourceManager("MyResource", Assembly.GetExecutingAssembly());
string bodyMessageResource = resourceManager.GetString("EmailBody", ci);
答案 1 :(得分:1)
我插入使用你的资源的全名空间我被困在那里将近3个小时才能弄明白; 使用线程设置当前的文化信息。
Application.CurrentCulture = new System.Globalization.CultureInfo("fr");
System.Threading.Thread.CurrentThread.CurrentUICulture = Application.CurrentCulture;
ResourceManager resourceManager = new ResourceManager("ProjectName.ResourcesFolder.MainApplicationResource", System.Reflection.Assembly.GetExecutingAssembly());
string msg = resourceManager.GetString("yourResourcedMsgName");
答案 2 :(得分:1)
试试这个:
ResourceManager resourceManager = FrenchLanguage.ResourceManager;
string msg = resourceManager.GetString("MyString");
答案 3 :(得分:1)
您可以将CultureInfo传递给Ressource文件,而不是更改当前文化。我写了这个扩展方法,它从我的核心返回翻译后的字符串。{language-code} .resx file
public static string Translate(this string resourceId, CultureInfo cultureInfo)
{
return Resources.Text.Core.ResourceManager.GetString(resourceId, cultureInfo) ?? String.Format("Missing translation for Core resx ResourceId '{0}'", resourceId);
}