2

我需要向用户发送大量电子邮件,但他们有不同的语言偏好。电子邮件消息位于资源文件中: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 为空。

我只想能够选择我选择的语言的字符串。

4

4 回答 4

4

我想你几乎在那里。尝试这个:

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fr-CA");
ResourceManager resourceManager = new ResourceManager("MyResource", Assembly.GetExecutingAssembly());
string bodyMessageResource = resourceManager.GetString("EmailBody", ci);
于 2012-04-12T13:02:02.387 回答
1

尝试这个:

ResourceManager resourceManager = FrenchLanguage.ResourceManager;
string msg = resourceManager.GetString("MyString");
于 2013-07-11T06:37:46.813 回答
1

您可以将 CultureInfo 传递给 Ressource 文件,而不是更改当前胎面的文化。我编写了这个扩展方法,它从我的 core.{language-code}.resx 文件中返回翻译后的字符串

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);
}
于 2015-03-09T11:59:52.230 回答
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");
于 2013-02-25T20:52:50.697 回答