代码之家  ›  专栏  ›  技术社区  ›  Phil Wright

是否存在依赖于.NET区域性的“今日”字符串?

  •  0
  • Phil Wright  · 技术社区  · 16 年前

    我正在编写月历样式的控件,需要显示一个指示今天日期的字符串。所以在一台英语文化机器上 'Today : 11/02/2009' .

    如果一种不同的文化恰好被使用,比如法语,那么我想用法语来表示“今天”。

    .NET平台是否将此词作为区域性信息的一部分公开,以便我自动检索它?我找不到任何暴露的东西,但也许我找不到合适的地方。

    2 回复  |  直到 16 年前
        1
  •  6
  •   user53794    16 年前

    老的…但仍然有用(多大年龄?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
    
        2
  •  2
  •   cdonner    14 年前

    This 是对.NET本地化的相当全面的概述。

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

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