我正在尝试为来自不同语言环境的请求返回不同的消息,下面的示例代码是我的OAuth
自我主机应用程序(.exe应用程序)的一部分,用于请求的授予凭据用户名和密码,为简化起见,我将语言环境硬编码为zh
,即中文:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
string culture = "zh";
CultureInfo ci = new CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
Resources.Culture = ci;
context.SetError("invalid_grant", Resources.UserNameOrPwdError_ErrorMsg);
// omit other stuff....
}
而且,我也尝试过:
var testStr = Resources.ResourceManager.GetString("UserNameOrPwdError_ErrorMsg", ci);
两个案例都返回英语文字。
顺便说一下,我已将system.web
部分添加到我的 App.config (自我主机没有web.config):
<system.web>
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"></globalization>
</system.web>
我不确定将中文文本资源文件放在何处,因为它不是传统的ASP.NET项目,并且没有那些特殊项目文件夹,所以通过查看Project文件夹结构,我放了一个除了默认存在的文件之外的文件并添加了翻译的键/值对,我将Access Modifer
设置为public:
使用其他客户端测试,返回的字符串总是英文,任何人都可以帮忙吗?
答案 0 :(得分:0)
从截图中我假设AuthService
是一个类库。
就个人而言,我将我的resx文件放在一个名为Resources的单独文件夹中,或者沿着那些行。
在您的代码中,您只需使用ResourceManager:
//Namespace.Folder.File.Resourcemanager
AuthService.Resources.Resources.ResourceManager.GetString("ResourceKey", ci);
确保您已将resx文件访问修饰符设置为public。默认为内部。
如果要向Asp.Net Web应用程序项目添加资源,请在解决方案资源管理器中右键单击您的项目,转到“添加文件夹”并添加App_GlobalResources
文件夹。把你的resx文件放在那里。
答案 1 :(得分:0)
我希望这会对你有所帮助!
尝试在web.config(system.web部分)中添加以下行
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"></globalization>
您需要实例化新的当前文化。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
string culture = "zh";
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
context.SetError("invalid_grant", Resources.UserNameOrPwdError_ErrorMsg);
}