Csharp/CSharp Tutorial/I18N Internationalization/Culture Format
Содержание
- 1 An culture-friendly money matching expression
- 2 Culture formatting: en-GB
- 3 Culture formatting: en-US
- 4 Culture information: Currency Format
- 5 Culture information: Days
- 6 Culture information: DisplayName, NativeName and LCID
- 7 Culture information: Long Date Format and Short Date Format
- 8 Culture information: Months
- 9 Culture information: Number Format
- 10 Culture information: Number Group Separator
- 11 Culture information: primary Calendar and optional Calendar
- 12 Culture-specific formatting: en-US, en-GB, ja, ar
- 13 Get datetime formatting info from a CultureInfo
- 14 Get numeric formatting info from a CultureInfo
- 15 Implement Format for different Culture Information
- 16 Save CultureInfo, its DateTimeFormatInfo and NumberFormatInfo to a text file
- 17 Use current culture to format currency
An culture-friendly money matching expression
<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{
public static void Main(){ string[] money = new string[] { "$0.99", "$0,99", "$1000000.00", "$10.25", "$90,000.00", "$90.000,00", "$1,000,000.00", "$1,000000.00" }; NumberFormatInfo info = CultureInfo.CurrentCulture.NumberFormat; Regex moneyint = new Regex(String.Format(@"\{0}(\dШаблон:1,3\{0})*\d+\{1}\dШаблон:2", info.CurrencyGroupSeparator, info.CurrencyDecimalSeparator)); foreach (string m in money) { Console.WriteLine("{0}: {1}", m, moneyint.IsMatch(m)); } }
}</source>
$0.99: False $0,99: False $1000000.00: False $10.25: False $90,000.00: True $90.000,00: False $1,000,000.00: True $1,000000.00: True
Culture formatting: en-GB
<source lang="csharp">using System; using System.Globalization; class MainClass {
public static void Main() { DateTime dtNow = DateTime.Now; Double curOriginal = 12345.67; CultureInfo ci2 = new CultureInfo("en-GB"); string sLocalizedDate2 = dtNow.ToString("d", ci2); string sLocalizedCur2 = curOriginal.ToString("c", ci2); Console.WriteLine(sLocalizedDate2); Console.WriteLine(sLocalizedCur2); }
}</source>
25/03/2007 ?12,345.67
Culture formatting: en-US
<source lang="csharp">using System; using System.Globalization; class MainClass {
public static void Main() { DateTime dtNow = DateTime.Now; Double curOriginal = 12345.67; CultureInfo ci = new CultureInfo("en-US"); string sLocalizedDate = dtNow.ToString("d", ci); string sLocalizedCur = curOriginal.ToString("c", ci); // print them out Console.WriteLine(sLocalizedDate); Console.WriteLine(sLocalizedCur); }
}</source>
3/25/2007 $12,345.67
Culture information: Currency Format
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); double number = -100299.55; sw.WriteLine(" Currency: {0}", number.ToString("C", ci.NumberFormat)); } } }
}</source>
Currency: ($100,299.55) Currency: -?100,299.55 Currency: -$100,299.55 Currency: -100.299,55 � Currency: -?100,300
Culture information: Days
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); sw.Write(" Days: "); foreach (string d in ci.DateTimeFormat.DayNames) sw.Write(", {0}", d); sw.WriteLine(); } } }
}</source>
Days: , Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday Days: , Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday Days: , domingo, lunes, martes, mi�rcoles, jueves, viernes, s�bado Days: , Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag Days: , ???, ???, ???, ???, ???, ???, ???
Culture information: DisplayName, NativeName and LCID
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); sw.WriteLine("{0}: {1}", ci.Name, ci.DisplayName); sw.WriteLine(" English Name: {0}", ci.EnglishName); sw.WriteLine(" Native Name: {0}", ci.NativeName); sw.WriteLine(" LCID: {0}", ci.LCID); } } }
}</source>
en-US: English (United States) English Name: English (United States) Native Name: English (United States) LCID: 1033 en-GB: English (United Kingdom) English Name: English (United Kingdom) Native Name: English (United Kingdom) LCID: 2057 es-MX: Spanish (Mexico) English Name: Spanish (Mexico) Native Name: Espa?ol (M�xico) LCID: 2058 de-DE: German (Germany) English Name: German (Germany) Native Name: Deutsch (Deutschland) LCID: 1031 ja-JP: Japanese (Japan) English Name: Japanese (Japan) Native Name: ??? (??) LCID: 1041
Culture information: Long Date Format and Short Date Format
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); DateTime dt = new DateTime(1980, 9, 12, 0, 30, 55); sw.WriteLine("Short Date Example: {0}", dt.ToString(ci.DateTimeFormat.ShortDatePattern, ci.DateTimeFormat)); sw.WriteLine("Long Date Example: {0}", dt.ToString(ci.DateTimeFormat.LongDatePattern, ci.DateTimeFormat)); } } }
}</source>
Short Date Example: 9/12/1980 Long Date Example: Friday, September 12, 1980 Short Date Example: 12/09/1980 Long Date Example: 12 September 1980 Short Date Example: 12/09/1980 Long Date Example: viernes, 12 de septiembre de 1980 Short Date Example: 12.09.1980 Long Date Example: Freitag, 12. September 1980 Short Date Example: 1980/09/12 Long Date Example: 1980?9?12?
Culture information: Months
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); sw.Write(" Months: "); foreach (string m in ci.DateTimeFormat.MonthNames) sw.Write(", {0}", m); sw.WriteLine(); } } }
}</source>
Months: , January, February, March, April, May, June, July, August, September, October, November , December, Months: , January, February, March, April, May, June, July, August, September, October, November , December, Months: , enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviemb re, diciembre, Months: , Januar, Februar, M?rz, April, Mai, Juni, Juli, August, September, Oktober, November, D ezember, Months: , 1?, 2?, 3?, 4?, 5?, 6?, 7?, 8?, 9?, 10?, 11?, 12?,
Culture information: Number Format
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); double number = -100299.55; sw.WriteLine(" Number Format: {0}", number.ToString(ci)); } } }
}</source>
Number Format: -100299.55 Number Format: -100299.55 Number Format: -100299.55 Number Format: -100299,55 Number Format: -100299.55
Culture information: Number Group Separator
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); sw.WriteLine(ci.NumberFormat.NumberGroupSeparator); } } }
}</source>
, , , . ,
Culture information: primary Calendar and optional Calendar
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { string[] cultures = new string[] { "en-US", "en-GB", "es-MX", "de-DE", "ja-JP" }; using (TextWriter sw = Console.Out) { foreach (string c in cultures) { CultureInfo ci = new CultureInfo(c); sw.Write(" Calendars: "); sw.Write(" {0} (primary)", ci.Calendar.GetType().Name); foreach (Calendar cal in ci.OptionalCalendars) sw.Write(", {0}", cal.GetType().Name); sw.WriteLine(); } } }
}</source>
Calendars: GregorianCalendar (primary), GregorianCalendar, GregorianCalendar Calendars: GregorianCalendar (primary), GregorianCalendar, GregorianCalendar Calendars: GregorianCalendar (primary), GregorianCalendar Calendars: GregorianCalendar (primary), GregorianCalendar Calendars: GregorianCalendar (primary), GregorianCalendar, JapaneseCalendar, GregorianCale ndar
Culture-specific formatting: en-US, en-GB, ja, ar
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Resources; using System.Text; using System.Threading; using System.Globalization; public class MainClass {
public static void Main() { decimal money = 1250.75m; string[] cultures = { "en-US", "en-GB", "ja", "ar" }; Console.OutputEncoding = Encoding.UTF8; foreach (string culture in cultures) { CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture(culture); Console.WriteLine("{0} = {1}", cultureInfo.DisplayName,money.ToString("C", cultureInfo)); } }
}</source>
Get datetime formatting info from a CultureInfo
<source lang="csharp">using System; using System.Globalization; class MainClass {
public static void Main() { CultureInfo ci = new CultureInfo("nl-BE"); DateTimeFormatInfo dtfi = ci.DateTimeFormat; Console.WriteLine("Long date pattern: " + dtfi.LongDatePattern); }
}</source>
Long date pattern: dddd d MMMM yyyy
Get numeric formatting info from a CultureInfo
<source lang="csharp">using System; using System.Globalization; class MainClass {
public static void Main() { CultureInfo ci = new CultureInfo("nl-BE"); NumberFormatInfo nfi = ci.NumberFormat; Console.WriteLine("Currency symbol: " + nfi.CurrencySymbol); Console.WriteLine("Decimal seperator: " + nfi.NumberDecimalSeparator); }
}</source>
Currency symbol: Decimal seperator: ,
Implement Format for different Culture Information
<source lang="csharp">using System; using System.Globalization; public sealed class ComplexNumber : IFormattable {
public ComplexNumber( double real, double imaginary ) { this.real = real; this.imaginary = imaginary; } public override string ToString() { return ToString( "G", null ); } public string ToString( string format, IFormatProvider formatProvider ) { string result = "(" + real.ToString(format, formatProvider) + " " + real.ToString(format, formatProvider) + ")"; return result; } private readonly double real; private readonly double imaginary;
} public sealed class MainClass {
static void Main() { ComplexNumber num1 = new ComplexNumber( 1.12345678, 2.12345678 ); Console.WriteLine( "US format: {0}", num1.ToString( "F5", new CultureInfo("en-US") ) ); Console.WriteLine( "DE format: {0}", num1.ToString( "F5", new CultureInfo("de-DE") ) ); Console.WriteLine( "Object.ToString(): {0}",num1.ToString() ); }
}</source>
Save CultureInfo, its DateTimeFormatInfo and NumberFormatInfo to a text file
<source lang="csharp">using System; using System.Globalization; using System.IO; class MainClass {
public static void Main() { CultureInfo ci = new CultureInfo("nl-BE"); FileStream outStream = File.Create("CultureInfo.txt"); StreamWriter sw = new StreamWriter(outStream); sw.WriteLine("Native Name: " + ci.NativeName); sw.WriteLine("English Name: " + ci.EnglishName); DateTimeFormatInfo dtfi = ci.DateTimeFormat; sw.WriteLine("Long date pattern: " + dtfi.LongDatePattern); NumberFormatInfo nfi = ci.NumberFormat; sw.WriteLine("Currency symbol: " + nfi.CurrencySymbol); sw.WriteLine("Decimal seperator: " + nfi.NumberDecimalSeparator); sw.Flush(); sw.Close(); }
}</source>
Use current culture to format currency
<source lang="csharp">using System; using System.Globalization; using System.Windows.Forms; public class MainClass {
static void Main() { CultureInfo current = CultureInfo.CurrentCulture; double money = 123.45; string localMoney = money.ToString( "C", current ); MessageBox.Show( localMoney, "Local Money" ); }
}</source>