You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#多语言应用:下拉框统一德语样式与日期时间格式设置

解决Kendo Grid下拉框样式统一与日期时间格式问题

我来帮你搞定这个多语言应用里的两个问题——让时长选择下拉框不管是英语还是德语环境都保持德语样式,同时设置正确的日期时间格式。下面分步骤给你说具体怎么做:

一、把下拉框样式统一成德语环境的样子

1. 强制Kendo下拉框用德语文化渲染

Kendo控件的部分渲染逻辑会跟着加载的文化走,所以咱们直接给下拉框指定de-DE文化,不管当前应用是什么语言,它都会按德语的规则来渲染:

假设你的时长下拉框是Grid里的一个列编辑器,先在Grid列定义里指定模板:

columns.Bound(p => p.Duration)
       .Title(Html.LabelFor(m => m.Duration).ToString())
       .Width(120)
       .EditorTemplateName("DurationDropDown") // 指定编辑器模板
       .ClientTemplate("#: getGermanDurationText(Duration) #"); // 前端显示用德语文本

然后在对应的编辑器模板(比如DurationDropDown.cshtml)里,初始化DropDownList时加上Culture("de-DE"):

@model int?

@(Html.Kendo().DropDownListFor(m => m)
    .Name("Duration")
    .Culture("de-DE") // 关键:强制用德语文化
    .DataTextField("Text")
    .DataValueField("Value")
    .BindTo(ViewBag.DurationOptions) // 绑定你的时长选项
    .HtmlAttributes(new { style = "width: 100%;" })
)

2. 用CSS强制覆盖样式(如果是样式差异)

要是不同文化下Kendo默认的CSS样式不一样,咱们直接写自定义CSS把下拉框的样式固定成德语环境的样子:

/* 覆盖下拉框按钮的样式 */
.k-dropdown .k-dropdown-wrap .k-select {
    border-left: 1px solid #ccc;
    /* 把德语环境下这个元素的CSS属性都复制过来 */
}

/* 覆盖下拉菜单的样式 */
.k-dropdown .k-list-container {
    font-family: "Segoe UI", Arial, sans-serif;
    /* 其他德语环境下的样式属性 */
}

3. 固定下拉框的显示文本模板

如果下拉框的显示文本是从语言资源里取的,那咱们直接在前端写个函数,返回德语的文本:

function getGermanDurationText(duration) {
    // 这里可以直接写死德语选项,或者从后端传的德语选项里匹配
    const durationMap = {
        1: "1 Stunde",
        2: "2 Stunden",
        4: "4 Stunden",
        // 其他时长选项...
    };
    return durationMap[duration] || duration;
}

二、设置正确的日期时间格式

1. 让日期格式适配当前语言(或强制德语格式)

如果要对应不同语言显示正确格式,就用Kendo的Format方法结合文化;要是想统一用德语格式,直接指定德语的格式字符串就行:

方式一:适配当前语言

columns.Bound(p => p.ActivationTime)
       .Title(Html.LabelFor(m => m.ActivationTime).ToString())
       .Width(160)
       .Format("{0:d}") // 用当前文化的短日期格式
       .ParseFormats(new string[] { "yyyy-MM-dd HH:mm:ss" }); // 解析后端传的日期格式

方式二:强制德语格式

columns.Bound(p => p.ActivationTime)
       .Title("Aktivierungszeit")
       .Width(160)
       .Format("{0:dd.MM.yyyy HH:mm}"); // 德语常用的日.月.年 时:分格式

2. 确保Kendo文化脚本加载正确

要让日期格式生效,别忘了在页面里加载德语的Kendo文化脚本,并且设置当前文化:

<script src="@Url.Content("~/Scripts/kendo.culture.de-DE.js")"></script>
<script>
    // 可以根据应用当前语言设置,或者直接强制设为德语
    kendo.culture("de-DE");
</script>

三、整合到你的Grid里的完整示例

把上面的代码整合到你现有的Grid中,大概是这样:

@(Html.Kendo().Grid<WorkTimesViewModel>(Model.WorkTimes)
    .Name("grid")
    .Columns(columns => {
        columns.Bound(p => p.Project)
               .Title(Html.LabelFor(m => m.Projekt).ToString())
               .Width(140)
               .ClientTemplate("#: Project.Name #");
        // 时长选择列
        columns.Bound(p => p.Duration)
               .Title(Html.LabelFor(m => m.Duration).ToString())
               .Width(120)
               .EditorTemplateName("DurationDropDown")
               .ClientTemplate("#: getGermanDurationText(Duration) #");
        // 日期时间列
        columns.Bound(p => p.ActivationTime)
               .Title(Html.LabelFor(m => m.ActivationTime).ToString())
               .Width(160)
               .Format("{0:dd.MM.yyyy HH:mm}");
        // 其他列继续你的原有定义...
    })
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => model.Id(p => p.Id))
        .Read(read => read.Action("GetWorkTimes", "Work"))
        .Update(update => update.Action("UpdateWorkTime", "Work"))
    )
)

<script>
    function getGermanDurationText(duration) {
        // 也可以从后端传的德语选项数组里匹配,更灵活
        const germanOptions = @Html.Raw(Json.Encode(ViewBag.GermanDurationOptions));
        const match = germanOptions.find(opt => opt.Value == duration);
        return match ? match.Text : duration;
    }

    // 强制设置Kendo文化为德语,保证控件和格式都正确
    kendo.culture("de-DE");
</script>

这样操作后,你的下拉框就会始终保持德语环境的样式,日期时间也会显示正确的格式啦~

内容的提问来源于stack exchange,提问作者MrLakish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:28