-
-
Save mattclay/fe370d37781ffe884514409d65e25937 to your computer and use it in GitHub Desktop.
T4 template to export .NET culture information for use with Script#
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<#@ template debug="true" hostspecific="false" language="C#" #> | |
<#@ output extension=".js" #> | |
<#@ assembly name="System.Core.dll" #> | |
<#@ import namespace="System.Collections.Generic" #> | |
<#@ import namespace="System.Globalization" #> | |
<#@ import namespace="System.Linq" #> | |
<# | |
// Configuration: Begin | |
// List the cultures you want to export to JS. | |
var cultureNames = new List<string> | |
{ | |
"en-US", | |
"zh-CN", | |
"es-MX", | |
}; | |
// Override currency culture if your site only operates under a single currency, otherwise set to null. | |
CultureInfo currencyCulture = CultureInfo.GetCultureInfo("en-US"); | |
// The object to store the culture database in. | |
string cultureTarget = "Iris.Culture.CultureDB"; | |
// The object to store the metric database in. | |
string metricTarget = "Iris.Culture.MetricDB"; | |
// Configuration: End | |
var cultures = cultureNames.Select(t => CultureInfo.GetCultureInfo(t)).ToList(); | |
var percentPositivePattern = new string[] { "n %", "n%", "%n", "% n" }; | |
var percentNegativePattern = new string[] { "-n %", "-n%", "-%n", "%-n", "%n-", "n-%", "n%-", "-% n", "n %-", "% n-", "% -n", "n- %" }; | |
var currencyPositivePattern = new string[] { "$n", "n$", "$ n", "n $" }; | |
var currencyNegativePattern = new string[] { "($n)", "-$n", "$-n", "$n-", "(n$)", "-n$", "n-$", "n$-", "-n $", "-$ n", "n $-", "$ n-", "$ -n", "n- $", "($ n)", "(n $)" }; | |
#> | |
<# foreach(CultureInfo culture in cultures) { #> | |
<# CultureInfo currency = currencyCulture ?? culture; #> | |
<# RegionInfo region = new RegionInfo(culture.Name); #> | |
<#= metricTarget #>[<#= Quote(culture.Name) #>] = <#= Quote(region.IsMetric) #>; | |
<#= cultureTarget #>[<#= Quote(culture.Name) #>] = new ss.CultureInfo(<#= Quote(culture.Name) #>, | |
{ | |
naNSymbol: <#= Quote(culture.NumberFormat.NaNSymbol) #>, | |
negativeSign: <#= Quote(culture.NumberFormat.NegativeSign) #>, | |
positiveSign: <#= Quote(culture.NumberFormat.PositiveSign) #>, | |
negativeInfinityText: <#= Quote(culture.NumberFormat.NegativeInfinitySymbol) #>, | |
positiveInfinityText: <#= Quote(culture.NumberFormat.PositiveInfinitySymbol) #>, | |
percentSymbol: <#= Quote(culture.NumberFormat.PercentSymbol) #>, | |
percentGroupSizes: <#= Quote(culture.NumberFormat.PercentGroupSizes) #>, | |
percentDecimalDigits: <#= culture.NumberFormat.PercentDecimalDigits #>, | |
percentDecimalSeparator: <#= Quote(culture.NumberFormat.PercentDecimalSeparator) #>, | |
percentGroupSeparator: <#= Quote(culture.NumberFormat.PercentGroupSeparator) #>, | |
percentPositivePattern: <#= QuoteNumericPattern(percentPositivePattern[culture.NumberFormat.PercentPositivePattern]) #>, | |
percentNegativePattern: <#= QuoteNumericPattern(percentNegativePattern[culture.NumberFormat.PercentNegativePattern]) #>, | |
currencySymbol: <#= Quote(currency.NumberFormat.CurrencySymbol) #>, | |
currencyGroupSizes: <#= Quote(currency.NumberFormat.CurrencyGroupSizes) #>, | |
currencyDecimalDigits: <#= currency.NumberFormat.CurrencyDecimalDigits #>, | |
currencyDecimalSeparator: <#= Quote(currency.NumberFormat.CurrencyDecimalSeparator) #>, | |
currencyGroupSeparator: <#= Quote(currency.NumberFormat.CurrencyGroupSeparator) #>, | |
currencyNegativePattern: <#= QuoteNumericPattern(currencyNegativePattern[currency.NumberFormat.CurrencyNegativePattern]) #>, | |
currencyPositivePattern: <#= QuoteNumericPattern(currencyPositivePattern[currency.NumberFormat.CurrencyPositivePattern]) #>, | |
numberGroupSizes: <#= Quote(culture.NumberFormat.NumberGroupSizes) #>, | |
numberDecimalDigits: <#= culture.NumberFormat.NumberDecimalDigits #>, | |
numberDecimalSeparator: <#= Quote(culture.NumberFormat.NumberDecimalSeparator) #>, | |
numberGroupSeparator: <#= Quote(culture.NumberFormat.NumberGroupSeparator) #> | |
}, | |
{ | |
amDesignator: <#= Quote(culture.DateTimeFormat.AMDesignator) #>, | |
pmDesignator: <#= Quote(culture.DateTimeFormat.PMDesignator) #>, | |
dateSeparator: <#= Quote(culture.DateTimeFormat.DateSeparator) #>, | |
timeSeparator: <#= Quote(culture.DateTimeFormat.TimeSeparator) #>, | |
gmtDateTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.RFC1123Pattern) #>, | |
universalDateTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.UniversalSortableDateTimePattern) #>, | |
sortableDateTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.SortableDateTimePattern) #>, | |
dateTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.FullDateTimePattern) #>, | |
longDatePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.LongDatePattern) #>, | |
shortDatePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.ShortDatePattern) #>, | |
longTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.LongTimePattern) #>, | |
shortTimePattern: <#= QuoteDateTimePattern(culture.DateTimeFormat.ShortTimePattern) #>, | |
firstDayOfWeek: <#= (int)culture.DateTimeFormat.FirstDayOfWeek #>, | |
dayNames: <#= Quote(culture.DateTimeFormat.DayNames) #>, | |
shortDayNames: <#= Quote(culture.DateTimeFormat.AbbreviatedDayNames) #>, | |
minimizedDayNames: <#= Quote(culture.DateTimeFormat.ShortestDayNames) #>, | |
monthNames: <#= Quote(culture.DateTimeFormat.MonthGenitiveNames) #>, | |
shortMonthNames: <#= Quote(culture.DateTimeFormat.AbbreviatedMonthGenitiveNames) #> | |
}); | |
<# } #> | |
<#+ | |
string Quote(string input) | |
{ | |
return @"'" + | |
input | |
.Replace(@"\", @"\\") | |
.Replace(@"'", @"\'") | |
+ @"'"; | |
} | |
string Quote(bool input) | |
{ | |
return input.ToString().ToLower(); | |
} | |
string Quote(int[] input) | |
{ | |
return "[" + String.Join(", ", input) + "]"; | |
} | |
string Quote<T>(T[] input) | |
{ | |
return "[" + String.Join(", ", input.Select(t => Quote(t.ToString()))) + "]"; | |
} | |
string QuoteNumericPattern(string input) | |
{ | |
return Quote(input.Replace("n", "{0}")); | |
} | |
string QuoteDateTimePattern(string input) | |
{ | |
return Quote(input); | |
} | |
#> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment