2017-07-26 34 views
0

我试图从不同语言环境请求返回不同的消息,下面的示例代码是我的一部分OAuth自主应用程序(.exe应用程序)for授予证书与用户名和密码的要求,为简化起见,我硬编码的语言环境zh这是中国:ASP.NET WEB API的文本字符串本地化2自主应用程序

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); 

两种情况retur请输入英文文本。

顺便说一句,我已经添加system.web节我的App.config(自主机不具备的web.config):

<system.web> 
     <globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"></globalization> 
    </system.web> 

我不知道在哪里把中国的文字资源文件,因为它不是传统的ASP.NET项目,并且没有那些特殊项目文件夹,所以通过查看Project文件夹结构,除了默认存在的文件之外,我还添加了一个文件并添加了翻译的键/值对,I'已将Access Modifer设置为公开:

enter image description here

用其他客户端测试过,返回的字符串总是英文,任何人都可以帮忙?

回答

0

从截图中我假设AuthService是一个类库。

就我个人而言,我会将我的resx文件放在一个名为Resources或独立文件夹的文件夹中。

在你的代码就可以只使用ResourceManager:

//Namespace.Folder.File.Resourcemanager 
AuthService.Resources.Resources.ResourceManager.GetString("ResourceKey", ci); 

确保,您已设置您的RESX文件访问修饰符为public。默认是内部的。

如果要将资源添加到Asp.Net Web应用程序项目,请右键单击解决方案资源管理器中的项目,转到添加文件夹并添加App_GlobalResources文件夹。把你的resx文件放在那里。

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); 
    } 
+0

根据@Marco答案,将resx文件移动到App_GlobalResources文件夹中是可取的。 –

相关问题