Существует ли строка "Today", зависящая от культуры .NET?

StackOverflow https://stackoverflow.com/questions/535360

Вопрос

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

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

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

Это было полезно?

Решение

Старый..но все еще полезный (сколько ему лет?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', которые вам нужно поддерживать, и сохранить их в словаре в вашем коде.Однако при ближайшем рассмотрении я бы вообще не рекомендовал этого делать, поскольку результирующая строка "Today:xx / xx / xxx" может показаться неловким на других языках.В то время как немецкая версия:"Heute:11.2.2009", или французское "Aujourd'hui:11.2.2009" кажется, работает нормально в календаре, я не могу сказать для китайского или японского.Это иллюстрирует проблемы, с которыми вы можете столкнуться, когда думаете, что локализация - это просто перевод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top