C# 是否存在依赖于.NET区域性的';今天';一串

C# 是否存在依赖于.NET区域性的';今天';一串,c#,.net,datetime,monthcalendar,C#,.net,Datetime,Monthcalendar,我正在编写一个月历样式的控件,需要显示一个指示今天日期的字符串。因此,在英国文化机器上,它会显示“今日:11/02/2009” 如果碰巧使用了不同的文化,比如法语,那么我想用法语来形容“今天” NET平台是否将此单词作为区域性信息的一部分公开,以便我可以自动检索它?我找不到任何公开的内容,但可能我找的地方不对。是对.Net本地化的一个相当全面的概述 简而言之,DateTime结构的方法将根据系统区域设置格式化日期。您可以通过指定自己的语言环境来覆盖默认语言环境 编辑:对不起,我误解了你的问题。不

我正在编写一个月历样式的控件,需要显示一个指示今天日期的字符串。因此,在英国文化机器上,它会显示“今日:11/02/2009”

如果碰巧使用了不同的文化,比如法语,那么我想用法语来形容“今天”

NET平台是否将此单词作为区域性信息的一部分公开,以便我可以自动检索它?我找不到任何公开的内容,但可能我找的地方不对。

是对.Net本地化的一个相当全面的概述

简而言之,DateTime结构的方法将根据系统区域设置格式化日期。您可以通过指定自己的语言环境来覆盖默认语言环境

编辑:对不起,我误解了你的问题。不,没有这样的事。您可以使用翻译网站获取需要支持的“今日”翻译,并将其保存在代码的字典中。 不过,仔细检查后,我不建议这样做,因为生成的字符串“Today:xx/xx/xxx”在其他语言中可能会感到尴尬。虽然德语版的“Heute:11.2.2009”或法语版的“Aujourd'hui:11.2.2009”在日历中似乎可以使用,但我不能说是中文版还是日文版。这说明了当您认为本地化只是翻译时可能遇到的问题。

Old。。但仍然有用(多旧?VB6旧)

基本上,Windows在Comctl32.dll中保留了“今日”的本地化版本。您可以通过loadstringex调用将其搜索出来:

Private Const IDM_TODAY As Long = 4163
Private Const IDM_GOTODAY As Long = 4164

Public Function GetTodayLocalized(ByVal LocaleId As Long) As String
    Static hComCtl32 As Long
    Static hComCtl32Initialized As Boolean
    Static hComCtl32MustBeFreed As Boolean

    Dim s As String

    If Not hComCtl32Initialized Then
        hComCtl32 = GetModuleHandle("Comctl32.dll")
        If hComCtl32 <> 0 Then
            hComCtl32MustBeFreed = False
            hComCtl32Initialized = True
        Else
            hComCtl32 = LoadLibrary("Comctl32.Dll")
            If Not hComCtl32 = 0 Then
                hComCtl32MustBeFreed = True
                hComCtl32Initialized = True
            End If
        End If
    End If

    If hComCtl32Initialized = False Then
        s = "Today"
    Else
        s = LoadStringEx(hComCtl32, IDM_TODAY, LocaleId)
        If s = "" Then
            s = "Today"
        End If
    End If

    If hComCtl32MustBeFreed Then
        FreeLibrary hComCtl32
        hComCtl32MustBeFreed = False
        hComCtl32Initialized = False
        hComCtl32 = 0
    End If

    s = Replace(s, "&", "")
    If Right(s, 1) = ":" Then
        s = Left(s, Len(s) - 1)
    End If

    GetTodayLocalized = s
End Function
Private Const IDM_当前长度=4163
私用Const IDM_GOTODAY,长度=4164
公共函数GetTodayLocalized(ByVal LocaleId长度)为字符串
静态hComCtl32长度为
静态hcomctl32初始化为布尔值
静态HCOMCTL32必须以布尔形式显示
像线一样变暗
如果未初始化HCOMCTL32,则
hComCtl32=GetModuleHandle(“Comctl32.dll”)
如果hComCtl32为0,则
hComCtl32MustBeFreed=False
hComCtl32Initialized=True
其他的
hComCtl32=LoadLibrary(“Comctl32.Dll”)
如果不是hComCtl32=0,则
hComCtl32MustBeFreed=True
hComCtl32Initialized=True
如果结束
如果结束
如果结束
如果hComCtl32Initialized=False,则
s=“今天”
其他的
s=LoadStringEx(hComCtl32,今日IDM_,本地EID)
如果s=”“,则
s=“今天”
如果结束
如果结束
如果必须使用HCOMCTL32,则
免费图书馆hComCtl32
hComCtl32MustBeFreed=False
hComCtl32Initialized=False
hComCtl32=0
如果结束
s=替换(s,&,“”)
如果右(s,1)=“:”则
s=左(s,透镜-1)
如果结束
GetTodayLocalized=s
端函数

谢谢。遗憾的是,解释中没有提到检索“Today”字符串的格式值或区域性值。需要了解的是:在某些语言中,使用单词“Today”然后提供日期可能是错误的。他们可能就是不遵守这个惯例。