当“ Accept-Language”标头为“ en”时,为什么请求本地化不起作用?

时间:2019-08-15 07:05:41

标签: c# request localization asp.net-core-webapi

我正在尝试将请求本地化添加到我的ASP.NET Core Web Api项目中。配置完设置后,本地化仅适用于完整的“接受语言”标头,例如“ ru-RU”或“ en-US”,但不适用于“ en”,“ ru”标头,但是,我将它们添加到了“受支持的”中文化列表。

我在我的Resources文件夹中添加了3个文件:(“ Resources.resx”,“ Resources.ru-Ru.resx”,“ Resources.en-US.resx”)

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {

       ...

        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("en"),
            new CultureInfo("ru-RU"),
            new CultureInfo("ru"),
        };
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("uk"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });

        app.UseMvc();
    }

我希望服务器在“ Accept-Language”标头为“ ru”或“ en”时将响应本地化

2 个答案:

答案 0 :(得分:0)

最后,重命名资源文件后,我解决了该问题:

useEffect(() => {
  const fetchData = async () => {
    const result = await axios(url);
    setData(result.data);
  };

  fetchData();
}, [url, count]);

答案 1 :(得分:0)

您希望使用中性文化,但您的所有资源文件都是针对特定文化的。

同时具有语言和地区的文化(如en-USru-RU)称为特定文化。中立的文化只限于语言,例如 enru

您的原始资源文件集都是特定的文化。当您收到来自特定文化的请求时,请求本地化会查找该特定文化。如果找不到,它将尝试找到与该特定文化相对应的中性文化。 (可以在 RequestLocalizationOptions 中通过将 FallbackToParentCultures 设置为 false 来禁用此行为)

通过重命名它们,您将它们更改为中性文化。由于您不再定义特定的文化,对 en-US 的请求将始终回退到匹配的 en。如果您不是针对文化进行本地化(例如,美国和英国没有单独的本地化),这是一个非常好的解决方案。