我正在编写一个月历式控件,需要显示一个表示今天日期的字符串。所以在英国文化机器上它会显示'Today : 11/02/2009'
。
如果恰好使用了不同的文化,例如法语,那么我想用法语单词“今天”。
.NET平台是否将此单词作为文化信息的一部分公开,以便我可以自动检索它?我找不到任何暴露但也许我找不到合适的地方。
答案 0 :(得分:6)
旧......但仍然有用(多大了?VB6旧)。
基本上,Windows在Comctl32.dll中保留了“今天”的本地化版本。您可以通过loadtringex调用将其捕获:
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
答案 1 :(得分:2)
This是对.Net本地化的全面概述。
简而言之,DateTime结构的方法将根据系统区域设置格式化日期。您可以通过指定自己的区域设置来覆盖默认区域设置。
编辑:对不起,我误解了你的问题。不,没有这样的事情。您可以使用翻译网站获取您需要支持的“今天”的翻译,并将其保存在代码中的字典中。 但仔细研究后,我根本不会推荐这个,因为结果字符串“Today:xx / xx / xxx”在其他语言中可能会感到尴尬。虽然德语版本:“Heute:11.2.2009”,或法语“Aujourd'hui:2009年11月11日”似乎在日历中工作正常,但我不能说中文或日文。这说明了当您认为本地化只是翻译时可能遇到的问题。