internal static CultureTableRecord GetCultureTableRecordForRegion(string regionName, bool useUserOverride)
{
BCLDebug.Assert(regionName != null, "[CultureTableRecord::GetCultureTableRecordForRegion] regionName should be valid.");
// Make sure the cache is valid.
if (CultureTableRecordRegionCache == null)
{
lock (InternalSyncObject)
{
if (CultureTableRecordRegionCache == null)
CultureTableRecordRegionCache = new Hashtable();
}
}
regionName = ValidateCulturePieceToLower(regionName, "regionName", MAXSIZE_FULLTAGNAME);
CultureTableRecord [] cultureRecordArray = (CultureTableRecord []) CultureTableRecordRegionCache[regionName];
if (cultureRecordArray != null)
{
int index = useUserOverride ? 0 : 1;
if (cultureRecordArray[index] == null)
{
cultureRecordArray[index] = cultureRecordArray[index == 0 ? 1 : 0].CloneWithUserOverride(useUserOverride);
}
return cultureRecordArray[index];
}
int dataItem = CultureTable.Default.GetDataItemFromRegionName(regionName);
CultureTableRecord cultureRecord = null;
if (dataItem > 0)
{
cultureRecord = new CultureTableRecord(regionName, dataItem, useUserOverride);
}
else
{
try
{
cultureRecord = GetCultureTableRecord(regionName, useUserOverride);
}
catch (ArgumentException)
{
throw new ArgumentException(
String.Format(
CultureInfo.CurrentCulture,
Environment.GetResourceString("Argument_InvalidRegionName"), regionName), "name");
}
}
BCLDebug.Assert(cultureRecord != null, "[CultureTableRecord::GetCultureTableRecordForRegion] cultureRecord should be valid.");
lock (InternalSyncObject)
{
if (CultureTableRecordRegionCache[regionName] == null)
{
cultureRecordArray = new CultureTableRecord[2];
cultureRecordArray[useUserOverride ? 0 : 1] = cultureRecord.CloneWithUserOverride(useUserOverride);
CultureTableRecordRegionCache[regionName] = cultureRecordArray;
}
}
return cultureRecord;
}