.NET 문화 의존적 '오늘'문자열이 있습니까?
-
22-08-2019 - |
문제
한 달 달력 스타일 컨트롤을 작성하고 있으며 오늘 날짜를 나타내는 문자열을 표시해야합니다. 영어 문화 기계에서는 보여줄 것입니다 'Today : 11/02/2009'
.
프랑스어와 같은 다른 문화가 사용되면 '오늘'에 프랑스어 단어를 사용하고 싶습니다.
.NET 플랫폼 이이 단어를 문화 정보의 일부로 노출시켜 자동으로 검색 할 수 있습니까? 노출 된 것을 찾을 수는 없지만 올바른 장소를보고 있지 않을 수도 있습니다.
해결책
오래된 .. 그러나 여전히 유용합니다 (얼마나 오래? vb6 old).
기본적으로 Windows는 Comctl32.dll에 현지화 된 "Today"버전을 유지합니다. aa 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"는 달력에서 잘 작동하는 것처럼 보이지만 중국어 나 일본어는 말할 수 없습니다. 이것은 현지화가 번역이라고 생각할 때 발생할 수있는 문제를 보여줍니다.