450 likes | 803 Views
Java Advanced. Интернационализация программ. Содержание. Локали Локализация данных Форматирование Работа с текстом Заключение. Введение. Интернационализация программы Написание программы, работающий в различных языковых окружениях Локализация программы
E N D
Java Advanced Интернационализация программ
Содержание • Локали • Локализация данных • Форматирование • Работа с текстом • Заключение Java Advanced / Интернационализация программ
Введение • Интернационализация программы • Написание программы, работающий в различных языковых окружениях • Локализация программы • Адаптация интернационализированной программы к конкретным языковым окружением • Пакеты • java.util • java.text Java Advanced / Интернационализация программ
Область действия • Сообщения • Числа • Дата и время • Единицы измерения • Адреса • Номера телефонов • Интерфейс • … Java Advanced / Интернационализация программ
Часть 1 Локали
Локаль • Идентифицирует используемое языковое окружение • Класс Locale Java Advanced / Интернационализация программ
Задание локали • Составные локали • Язык getLanguage() • СтранаgetCountry() • ВариантgetVariant() • Конструкторы класса Locale • Locale(language) – по языку • Locale(language, country) – по языку и стране • Locale(language, country, variant) – по языку стране и варианту Java Advanced / Интернационализация программ
Пример: локализованные данные • en_UK_windows choose the folder containing colour information • en_UK_unix choose the directory containing colour information • en_US choose the folder containing color information • ru_RU_unix Выберите каталог, содержащий цветовую информацию Java Advanced / Интернационализация программ
Работа с локалями • Получение • getAvailableLocales() – список доступных локалей • ПоляUK, US, FRANCE, … • Локаль по умолчанию • getDefault() – получение локали по умолчанию • setDefault(Locale locale) – установка локали по умолчанию • Вывод пользователю • getDisplayName() – имя локали Java Advanced / Интернационализация программ
Часть 2 Локализация данных
Локализация данных • Хранение данных, зависящих от локали в одном месте • Класс ResourceBundle Java Advanced / Интернационализация программ
Операции с данными • Получение данных • getObject(String key) – произвольный объект • getString(String key) – в виде строки • getStringArray(String[] key)– массив строк • Исключение MissingResouceException • Получение информации о ресурсе • getLocale() – локаль • Enumeration<String> getKeys()– ключи Java Advanced / Collections Framework
Пример: Интернационализация • До интернационализации void printUsage() { System.out.println( "Usage: Test [<options>] <commands>\n" + "Options:\n" + " -o write output\n" + "... " ); } Java Advanced / Collections Framework
Пример: Интернационализация • После интернационализациия void printUsage(ResourceBundle bundle) { System.out.println(String.format( "%s Test [%s] %s\n" + "%s\n" + " -o %s\n"+ "...", bundle.getString("usage"), // Usage: bundle.getString("options"), // <options> bundle.getString("commands"), // <commands> bundle.getString("Options"), // Options: bundle.getString("-o") // Write output )); } Java Advanced / Collections Framework
Загрузка ресурсов • Методы • getBundle(String baseName)– по имени • getBundle(baseName, Locale) – по локали • getBundle(baseName, Locale, ClassLoader) – из заданного ClassLoader’а Java Advanced / Collections Framework
Порядок загрузки ресурсов • 1 – указанная локаль 2– локаль по умолчанию • baseName_language1_country1_variant1 • baseName_language1_country1 • baseName_language1 • baseName_language2_country2_variant2 • baseName_language2_country2 • baseName_language2 • baseName Java Advanced / Collections Framework
Пример: загрузка ресурса • Ресурс UsageResouceBundle локаль en_US ResourceBundle bundle = ResourceBundle.getBundle( "UsageResouceBundle", Locale.US ); printUsage(bundle); Java Advanced / Collections Framework
Задание ресурсов • Произвольные • Класс ListResouceBundle • Строковые • Класс PropertyResouceBundle Java Advanced / Collections Framework
ListResouceBundle • Данные задаются в классе • Метод • Object[][] getContents() – локализованные данные Java Advanced / Collections Framework
Пример: ListResouceBundle • Данные для локали en_US public class UsageResouceBundle_en_US extends ListResourceBundle { private static final Object[][] CONTENTS = { {"usage", "Usage:"}, {"options", "<options>"}, {"commands", "<commands>"}, {"Options", "Options:"}, {"-o", "Write output"}, }; protected Object[][] getContents() {return CONTENTS;} } Java Advanced / Collections Framework
PropertyResouceBundle • Данные задаются в .property файле • Структура .property файла key1 = value1 key2 : value2 key3 = very long value \ continues on next line #Comment … Java Advanced / Collections Framework
Пример: PropertyResouceBundle • Данные для локали en_US • UsageResouceBundle_en_US.properties usage =Usage: options =<options> Commands =<commands> Options =Options: -o =Write output Java Advanced / Collections Framework
Часть 3 Форматирование
Форматирование • Вывод данных в соответствии с языковым контекстом • Типы данных • Числа • Время и дата • Сообщения • Пакет java.text Java Advanced / Интернационализация программ
Форматирование чисел • Класс NumberFormat • Методы • format(long)– форматировать целое число • format(double)– форматировать числос плавающей точкой • Number parse(String) – разобрать локализованное число • Исключение • ParseException – ошибка разбора Java Advanced / Интернационализация программ
Стандартные форматировщики чисел • Получение форматировщиков чисел • Методы • getNumberInstance(locale?) – обычные числа • getIntegerIntance(locale?)– целые числа (с округлением) • getPercentInstance(locale?) – проценты • getCurrencyInstance(locale?) – валюта Java Advanced / Интернационализация программ
Свойства форматировщиков чисел • Свойства форматировщиков чисел • Currency currency – тип валюты • maximum(minimum)FractionDigits–число цифр в дробной части • maximum(minimum)IntegerDigits –число цифр в целой части • groupingUsed – группировка разрядов • parseIntegerOnly – разбор только целых чисел Java Advanced / Интернационализация программ
Специальное форматирование чисел • Класс DecimalFormat • Шаблоны форматирования ###,###.### • Класс DecimalFormatSymbols– символы используемые при форматировании • Десятичная запятая • Разделители групп • Бесконечности • … Java Advanced / Интернационализация программ
Специальное форматировани чисел • Класс ChoiceFormat • Конструкторы • ChoiceFormat(double[] limits, String[] formats)–программно • ChoiceFormat(String pattern) –по шаблону • Использование форматов • i-й если limits[i] <= n && n < limits[i + 1] • Формат шаблона • limit # format | limit # format | … Java Advanced / Интернационализация программ
Форматирование времени и дат • Класс DateFormat • Методы • format(date)– форматировать дату/время • Date parse(String) – разобрать локализованную дату/время • Исключение • ParseException – ошибка разбора Java Advanced / Интернационализация программ
Стандартные форматировщики • Получение форматировщиков времени и дат • Методы • getDateInstance([dateStyle[, locale]]) – даты • getTimeIntance([timeStyle[, locale]])– времени • getDateTimeIntance([dateStyle, timeStyle, [locale]]) – даты и времени • Стили • DEFAULT, FULL, LONG, MEDIUM, SHORT Java Advanced / Интернационализация программ
Свойства форматировщиков • Свойства форматировщиков даты/времени • calendar – тип календаря • timeZone – временная зона Java Advanced / Интернационализация программ
Специальное форматирование • Задание правил форматирования • Класс SimpleDateFormat • Шаблоны форматирования yyyy.MM.dd G 'at' HH:mm:ss z • Класс DateFormatSymbols– символы используемые при форматировании • Дни недели • Месяца • … Java Advanced / Интернационализация программ
Форматирование сообщений • Класс MessageFormat • Методы • format(Object[] arguments) – форматировать сообщение • Static format(String pattern, Object … arguments)– форматировать сообщениепо шаблону Java Advanced / Интернационализация программ
Шаблоны сообщений • Вид • шаблон := (текст {параметр})* • параметр := индекс[, тип[, стиль]] • тип := number| date| time| choice • Пример // Aug 2, 2005: $10.80 available MessageFormat.fomat( "{0,date}: {1,number,currency} available“, new Date(), amount ) Java Advanced / Интернационализация программ
Часть 4 Работа с текстом
Сравнение строк • Лексикографический порядок зависит от языка • Класс Collator • implements Comparator<String> • getInstance([locale])– получение экземпляра • Класс RuleBasedCollator • Сравнивает строки в соответствии с заданными правилами Java Advanced / Интернационализация программ
Разбиение текста на элементы • Разбиение текста на символы, слова, предложения и строки зависит от языка • Класс BreakIterator • Создание • get( Character / Word / Line / Sentense )Instance([locale])– получение экземпляра • Методы • first() / last() / next() / previous()– передвижение итератора Java Advanced / Интернационализация программ
Задание текста • Текст читается в кодировке Latin-1 • Программа native2ascii • Перекодирует в (из)Latin-1 • native2ascii [options] [inputfile [outputfile]] • Опции • -reverse– перекодирование из Latin-1 • -encoding encoding– установка кодировки Java Advanced / Интернационализация программ
Пример: сообщения на русском (1) • До перекодировки usage=Применение options=<Опции> Commands=<команды> Options=Опции: -o=Запись выходного файла Java Advanced / Интернационализация программ
Пример: сообщения на русском (2) • После перекодировки usage=\u040f\u0430\u0401\u00ac\u0490\u00ad\u0490\u00ad\u0401\u0490 options=<\u040b\u0407\u0436\u0401\u0401> Commands=<\u0404\u00ae\u00ac\u00a0\u00ad\u00a4\u043b> Options=\u040b\u0407\u0436\u0401\u0401: -o=\u2021\u00a0\u0407\u0401\u0431\u043c \u045e\u043b\u0435\u00ae\u00a4\u00ad\u00ae\u0408\u00ae \u0434\u00a0\u00a9\u00ab\u00a0 Java Advanced / Интернационализация программ
Часть 6 Заключение
Ссылки • Internationalization(guide) // http://java.sun.com/j2se/1.5.0/docs/guide/intl/ • Trail: Internationalization (Java Tutorial) // http://java.sun.com/docs/books/tutorial/i18n/ • Internationalization // http://java.sun.com/j2se/corejava/intl/ • Properties // http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html Java Advanced / Интернационализация программ
Вопросы Java Advanced / Интернационализация программ