There’s been a shift of handling culture data in .NET 4. This may have influences on attempts in fixing Persian culture.
The shift is simple, while prior to version 4, CLR insisted on using privately stored culture data in a “culture.nlp” binary resource, version 4 gave up and uses Windows API to get data from the operating system. This is why some complained about missing CultureTableRecord
while using PersianCalendar.
Culture Data Prior to .NET 4
The following sequence shows how culture data was handled prior to version 4:
CultureInfo
constructor calls CultureTableRecord.GetCultureTableRecord
:
CultureTableRecord
constructor uses CultureTable.Default.GetDataItemFromCultureName
:
- The
Default
property returns m_defaultInstance
field which is initialized in class initializer:
- Finally,
InitializeBaseInfoTablePointers
loads “culture.nlp” from assembly resources:
- where “culture.nlp” can be found in
mscorlib
resources:
There’s also a CalendarTable
class with virtually the same approach.
CultureData in .NET 4
The above approach has been totally deprecated in .NET 4. Now CLR prefers to use Windows API to retrieve culture data. For instance, the following excerpt is from disassembly of CalandarData
code where CLR attempts to enumerate optional calendars by calling EnumCalendarInfoExEx
:
Conclusion
There’s been a shift in handling culture data in .NET 4: Now CLR prefers to use Windows API to get culture data. This will have influences in fixing Persian culture as I will describe in later posts.
CodeProject
I've been programming since 1990, C, Basic, Pascal, Assembly, C++ and...
Since I restablished Gostareh Negar in 1999, I've been quite busy localizing internationally accepted software for Persian natives. So I feel quite aware of various aspects of localization, specially when Persian language is the case.