Глобализация и локализация Локализация – адаптация приложения к национальным особенностям страны (региональные настройки). Глобализация - адаптация приложения к работе с разными языками и региональными настройками. Региональные настройки (culture) ( другой термин – региональные стандарты ) определяют • язык • символ валюты • формат даты • формат вывода чисел (точка/запятая) В .Net Framework для этих целей предусмотрены • механизм сателлитных сборок (satellite assemblies) • классы из пространств имен System.Globalization System.Resources Региональные настройки (culture) Региональные настройки (culture) идентифицируются строкой, содержащей главный (primary) и вспомогательный (secondary) тэги, или Int32 кодом (LCID - local culture identifier). Коды определены в стандарте Internet RFC 1766. Имена “язык” – “страна/регион” определены в стандартах ISO (International Standards Organization) Региональные настройки делятся на три группы: Invariant – не зависят от языка и страны, имя “ ” ( код !=0); Neutral – определяют только язык, имя “ru”, “en” ( два символа в нижнем регистре); Specific – определяют язык и страну/регион, имя “en-CA”, “en-GB”, “ru-RU”, “tt-RU”; Класс System.Globalization.CultureInfo Текущие региональные настройки определяются значениями двух свойств выполняемого потока: Thread.CurrentCulture – формат даты/чисел/валюты Thread.CurrentUICulture – загружаемые ресурсы Свойства имеют тип CultureInfo. [Serializable] public class CultureInfo : ICloneable, IFormatProvider Ссылка на объекты класса CultureInfo передается как параметр методам, использующим информацию о региональных настройках (culture). Конструкторы класса System.Globalization.CultureInfo (4) public public public public CultureInfo( CultureInfo( CultureInfo( CultureInfo( int culture ); string name ); int culture, bool useUserOverride ); string name, bool useUserOverride ); Класс System.Globalization.CultureInfo -2 С каждым региональным стандартом (culture) по умолчанию связаны конкретные форматы даты/числа/валюты. Пользователь может изменить эти установки в ControlPanel (Date, Time, Language, and Regional Options). Конструкторы с одним параметром инициализируют CultureInfo пользовательскими значениями форматов даты/числа/валюты. Конструкторы с двумя параметрами могут инициализировать CultureInfo как пользовательскими значениями форматов даты/числа/валюты (true), так и значениями по умолчанию (false). В классе CultureInfo определены свойства (более 20), связанные с региональными настройками и форматами даты/числа/валюты, например, public public public public virtual DateTimeFormatInfo DateTimeFormat {get; set;} virtual NumberFormatInfo NumberFormat {get; set;} virtual TextInfo TextInfo {get;} bool UseUserOverride {get;} Региональные настройки в методе ToString() В некоторых классах ( например, Int32, Double) метод ToString() перегружен и использует значения свойства класса CultureInfo с информацией о текущих значениях региональных настроек (culture): public virtual string ToString( IFormatProvider provider ); public virtual string ToString( string format, IFormatProvider provider ); Интерфейс IFormatProvider. public interface IFormatProvider {object GetFormat( Type formatType ); } реализуют классы CultureInfo, DateTimeFormatInfo, NumberFormatInfo, в которых есть информация о региональных стандартах(culture). Региональные настройки в методе ToString(). Пример int i = 100; // CultureInfo для английского языка в USA CultureInfo us = new CultureInfo("en-US"); Console.WriteLine(i.ToString("c", us)); // CultureInfo для России, форматы по умолчанию CultureInfo ru = new CultureInfo("ru-RU", false); Console.WriteLine(i.ToString("c", ru)); // CultureInfo для России, форматы из установок пользователя CultureInfo ruu = new CultureInfo("ru-RU", true); Console.WriteLine(i.ToString("c", ruu)); /* Output для настройки в ControlPanel CurrencySymbol: рб $100.00 100,00р. 100,00рб */ Класс System.Globalization.CultureInfo -3 Региональные настройки (culture) – это свойство потока. По умолчанию региональные настройки потока определяются значениями, заданными в профиле пользователя. Чтобы программно изменить региональные настройки, необходимо присвоить значение свойству потока. Свойства класса CultureInfo с информацией о текущих значениях региональных настроек (culture): public static CultureInfo CurrentCulture {get;}// установки //CurrentThread public static CultureInfo CurrentUICulture {get;} // установки, // которые использует ResourceManager public virtual bool IsNeutralCulture {get;} // являются ли // региональные настройки CurrentThread нейтральными