针对中性文化的剑道MVC网格本地化

时间:2015-09-22 15:55:31

标签: asp.net-mvc kendo-ui internationalization kendo-grid kendo-asp.net-mvc

我们正在使用Kendo UI ASP.NET MVC包装器来呈现我们的网格。我已经按照this article中的描述进行了本地化工作,但我遇到的问题是,如果浏览器文化被解析为语言中立(只是语言级别,例如" fr"而不是& #34; fr-FR")本地化不起作用,网格呈现为" en-US"。

在这种情况下,是否有一种简单的方法可以使包装器使用本地化?

我想我可以以某种方式强制文化,在最坏的情况下用额外的资源编译Kendo dll,但我想先问一下。

感谢您的任何指示!

1 个答案:

答案 0 :(得分:0)

好的,所以我现在有了一个解决方案 - 我已经制作了一个文化切换器,我用一个围绕网格构建代码的using语句包装。

namespace Kendo.Mvc.UI
{
    public class KendoCultureSwitcher : IDisposable
    {
        private readonly CultureInfo _culture;
        private readonly List<string> _cultures = new List<string>()
        {
            "bg-BG",
            "cs-CZ",
            "da-DK",
            "de-DE",
            "es-ES",
            "fr-FR",
            "it-IT",
            "nl-NL",
            "pl-PL",
            "pt-PT", // Note before pt-BR
            "pt-BR",
            "ro-RO",
            "ru-RU",
            "sv-SE",
            "tr-TR",
            "uk-UA",
            "zh-CN"
        };

        public KendoCultureSwitcher()
        {
            _culture = CultureInfo.CurrentUICulture;

            var currentCultureName = _culture.ToString();
            if (!_cultures.Contains(currentCultureName, StringComparer.OrdinalIgnoreCase))
            {
                var switchCulture = _cultures.FirstOrDefault(c => c.StartsWith(currentCultureName, StringComparison.OrdinalIgnoreCase));
                if (switchCulture != null)
                {
                    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(switchCulture);
                }
            }
        }

        public void Dispose()
        {
            if (Thread.CurrentThread.CurrentUICulture != _culture)
            {
                Thread.CurrentThread.CurrentUICulture = _culture;
            }
        }
    }
}