Существует ли строка "Today", зависящая от культуры .NET?
-
22-08-2019 - |
Вопрос
Я пишу элемент управления в стиле месячного календаря, и мне нужно отобразить строку, указывающую сегодняшнюю дату.Таким образом, на машине с английской культурой это показало бы '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" кажется, работает нормально в календаре, я не могу сказать для китайского или японского.Это иллюстрирует проблемы, с которыми вы можете столкнуться, когда думаете, что локализация - это просто перевод.