部署时未应用特定于文化的排序

问题描述 投票:0回答:1

我有一个对象列表,需要根据其中一个属性对列表进行排序。这种排序应该基于指定的文化来完成。我找到了许多资源来解释如何实现这一目标,并在本地成功实施它们。但是,当我部署代码时,似乎没有根据指定的区域性进行排序。

我尝试过使用 LINQ 的 OrderBy 和 List 的 Sort,两者都具有接受 StringComparer 的重载。

这些是片段:

nor = norwegianStrings.OrderBy(x => x, StringComparer.Create(new System.Globalization.CultureInfo("no-NO", true), true)).ToArray();
danishStrings.Sort(StringComparer.Create(new System.Globalization.CultureInfo("da-DK"), true));

这两个都在本地工作,作为参考,我尝试了数组和列表。但部署后,它只是正常排序,就像 InvariantCulture 一样。我还尝试手动设置

Thread.CurrentThread.CurrentCulture
,然后在 StringComparer 中使用它。

我尝试通过

在启动中添加文化
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[] { "no-NO", "sv-SE", "da-DK" };
        options.SetDefaultCulture(supportedCultures[0])
               .AddSupportedCultures(supportedCultures)
               .AddSupportedUICultures(supportedCultures);
    });

我很茫然。知道为什么会发生这种情况吗?我该如何解决这个问题,或者进一步排除故障?

提前致谢!

c# .net sorting locale cultureinfo
1个回答
0
投票

问题确实与机器中可用的区域设置有关。

应用程序本地 ICU 是不行的,或者至少我无法让我的容器启动并运行它。 dockerfile 已经包含了

RUN apk add --no-cache icu-libs
,但我确实发现在某些发行版中,icu-libs 只包含英语语言环境。
所以,我还必须包括
RUN apk add --no-cache icu-data-full

Program.cs 或 Startup.cs 中不需要任何内容。 .csproj 中不需要任何内容,只需确保在机器中包含正确的 icu 即可。

谢谢大家的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.