.NET Framework Classes
CultureInfo
- CurrentUICulture
RegionInfo
CompareInfo and CompareOptions enumeration
DateTimeFormatInfo
NumberFormatInfo
CultureAndRegionInfoBuilder and CultureAndRegionModifiers
Sample Code
Here is some IronPython code demonstrating the use of these classes
from System.Threading import *
from System.Globalization import *
#CultureInfo
MyCultureInfo = Thread.CurrentThread.CurrentCulture
MyCultureInfo
MyCultureInfo = Thread.CurrentThread.CurrentCulture
print MyCultureInfo.Name
print MyCultureInfo.NativeName
print MyCultureInfo.TwoLetterISOLanguageName
#RegionInfo
MyRegionInfo = RegionInfo(Thread.CurrentThread.CurrentCulture.LCID)
print MyRegionInfo.DisplayName
print MyRegionInfo.EnglishName
print MyRegionInfo.CurrencySymbol
print
#CompareInfo, DateTimeFormatInfo, NumberFormatInfo
OtherCultureInfo = CultureInfo("fr-FR")
MyMonday = MyCultureInfo.DateTimeFormat.DayNames[1]
print MyMonday
OtherMonday = OtherCultureInfo.DateTimeFormat.DayNames[1]
print OtherMonday
MyCompareInfo = MyCultureInfo.CompareInfo
print MyCompareInfo.Compare(MyMonday, MyMonday, CompareOptions.IgnoreCase)
print MyCompareInfo.Compare(MyMonday, OtherMonday, CompareOptions.IgnoreCase)
print
#NumberFormatInfo
print MyCultureInfo.NumberFormat.PositiveSign
print
# CultureAndRegionInfoBuiler and CultureAndRegionModifiers
# some additonal steps needed to access this class
# import the clr module and add reference to the sysglobl assembly
# do an import again to bring these into the namespace
import clr
clr.AddReferenceToFileAndPath(r"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\sysglobl.dll")
from System.Globalization import CultureAndRegionInfoBuilder
from System.Globalization import CultureAndRegionModifiers
MyCultureBuilder = CultureAndRegionInfoBuilder("my-culture", CultureAndRegionModifiers.None)
MyCultureBuilder.LoadDataFromCultureInfo( CultureInfo("en-US") )
MyCultureBuilder.LoadDataFromRegionInfo( RegionInfo("US") )
MyNumberFormatInfo = NumberFormatInfo()
MyNumberFormatInfo.CurrencySymbol = "$!"
MyCultureBuilder.NumberFormat = MyNumberFormatInfo
try:
# note static method
CultureAndRegionInfoBuilder.Unregister("my-culture")
except:
print "my-culture was already registered, re-registering"
MyCultureBuilder.Register()
MyCustomCulture = CultureInfo("my-culture")
print MyCustomCulture.NumberFormat.CurrencySymbol
print The expected output is
en-US English (United States) en United States United States $ Monday lundi 0 1 + $!
Book Feedback
The book start off explaining a bit about different categories of culture including Netural, Invariant and Specific Culture - it does a pretty poor job. This sample chapter from http://www.dotneti18n.com does a bit better job. A small excerpt here explains:
- An invariant culture is represented as an empty string. E.g. "". (As opposed to "en-US".)
- A netural culture is represented by just the language portion, E.g. "en", and does not represent localization
- A specific culture specifies all details - both languge and culture, e.g. "en-US"