文本字符串ASP.NET WEB API 2自托管应用程序的本地化

时间:2017-07-26 12:40:38

标签: asp.net-mvc asp.net-web-api

我正在尝试为来自不同语言环境的请求返回不同的消息,下面的示例代码是我的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:

enter image description here

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

2 个答案:

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