Есть ли.NET Культурно-зависимая строка "Сегодня"?

Я пишу элемент управления в стиле календаря месяца, и мне нужно отобразить строку, которая указывает сегодняшнюю дату. Так что на англоязычной машине это показало бы 'Today : 11/02/2009',

Если будет использоваться другая культура, например, французская, то я бы хотел использовать французское слово "сегодня".

Платформа.NET предоставляет это слово как часть информации о культуре, чтобы я мог получить его автоматически? Я не могу найти ничего разоблаченного, но, возможно, я не смотрю в нужном месте.

2 ответа

Решение

Старый.. но все же полезный (сколько лет? VB6 старый).

В основном Windows сохраняет локализованную версию "Today" в 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

Это довольно полный обзор локализации.Net.

В двух словах, методы структуры DateTime будут форматировать дату на основе языкового стандарта системы. Вы можете переопределить локаль по умолчанию, указав свою собственную.

Изменить: Извините, я неправильно понял ваш вопрос. Нет, такого нет. Вы можете использовать сайт перевода, чтобы получить переводы "Сегодня", которые вам необходимо поддерживать, и хранить их в словаре в своем коде. Однако при ближайшем рассмотрении я бы не стал этого рекомендовать, поскольку полученная строка "Today: xx/xx/xxx" может показаться неудобной на других языках. Хотя немецкая версия "Heute: 11.2.2009" или французская "Aujourd'hui: 11.2.2009" в календаре работают нормально, я не могу сказать ни о китайском, ни о японском. Это иллюстрирует проблемы, с которыми вы можете столкнуться, когда думаете, что локализация - это просто перевод.

Другие вопросы по тегам