如何获取特定的资源字符串,无论c#.net web app中的当前文化如何

时间:2012-04-12 00:58:19

标签: c# .net email localization resources

我需要向用户发送批量电子邮件,但他们有不同的语言偏好设置。 电子邮件位于资源文件中: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 个答案:

答案 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);
}