【问题标题】:Project level Culture setting for Azure Functions AppAzure Functions 应用程序的项目级文化设置
【发布时间】:2020-07-01 19:33:24
【问题描述】:

是否可以在 Azure Functions App 上更改项目级别的文化?

https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings

应用正在使用消费计划或高级计划,而不是通过 ASP.NET Core。

我的Startup.cs 文件如下:

  public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
       }
}

基于不同Startup.cs的ASP.NET Core可以使用Consumption plan还是Premium plan??

必须使用应用服务计划的 Asp.net Core,如下所示: https://andrewlock.net/adding-localisation-to-an-asp-net-core-application/

【问题讨论】:

  • 你能解释清楚你在做什么吗?看不懂……
  • 是否可以在 Azure Functions 应用程序上更改项目级别的文化?
  • 嗨,这个问题有什么更新吗?
  • 可能没有内置支持atm。

标签: azure azure-functions


【解决方案1】:

将在服务器上运行的旧应用程序迁移到 Azure 时,您始终需要注意最初从计算机获取的时区和文化设置。对于 Azure Functions,您可以在应用设置中设置时区:

WEBSITE_TIME_ZONE=Europe/London

在这里找到可能的值https://en.wikipedia.org/wiki/List_of_tz_database_time_zones。对于似乎使用 TZ for Linux 和 WEBSITE_TIME_ZONE for Windows 的应用服务,这实际上是不同的。

对于文化来说,它更复杂。使用 aspnet 核心,您可以在 Startup 类的 Configure 中定义它

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, 
ILoggerFactory loggerFactory)
    {
        var cultureInfo = new CultureInfo("en-US");
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture(cultureInfo),
            SupportedCultures = new List<CultureInfo>
            {
                cultureInfo,
            },
            SupportedUICultures = new List<CultureInfo>
            {
                cultureInfo,
            }
        });
    }

这在 Azure 函数应用中是不可能的。您可以做的是创建一个 Setup 类,然后为 appdomain 和当前线程设置区域性。只要 Azure 不更改 Appdomain,这可能会起作用。

[assembly: FunctionsStartup(typeof(Startup))]
namespace FunctionApp
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder app)
        {
            var cultureInfo = new CultureInfo("en-US");
            CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
            CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
        }
    }
}

【讨论】:

    【解决方案2】:

    Azure Function 没有提供改变文化的内置方法。

    将其放在函数应用的开头:

    using System.Threading;
    using System.Globalization;
    
    //......
    
    string culture = "en-US";
    CultureInfo CI = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = CI;
    

    以上代码会将文化更改为en-US。您可以将其设置为其他值。

    这是文件:

    https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.currentculture?view=netcore-3.1

    这解决了你的问题吗?

    【讨论】:

    • 这就是我正在使用的解决方案。但这不是 Function App 的内置方法。
    • 另一个问题,即使对于 async/await 也有效。即多个线程连续读取同一个方法。
    • @Pingpong 不,没有内置方法可以更改 azure 函数应用程序中的文化。我还是无法理解你的问题。您似乎想通过托管计划改变文化?如果是这样的话,我需要提醒你,计划只是虚拟机资源分配的一种手段,并不影响文化。文化的改变需要基于代码。 azure 函数中没有这样的内置方法。
    • @Pingpong Azure 函数没有提供改变文化的内置方法。我们现在可以结束这个问题了吗?:)
    • 好的,我暂时把它打开,当它可用时会回答。
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2017-03-08
    相关资源
    最近更新 更多