Интернационализация программ Java AdvancedИнтернационализация программ Java Advanced.

Презентация:



Advertisements
Похожие презентации
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Advertisements

Урок повторения по теме: «Сила». Задание 1 Задание 2.
Школьная форма Презентация для родительского собрания.
Michael Jackson
Типовые расчёты Растворы
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.

1. Определить последовательность проезда перекрестка
Ф. Т. Алескеров, Л. Г. Егорова НИУ ВШЭ VI Московская международная конференция по исследованию операций (ORM2010) Москва, октября 2010 Так ли уж.

Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.

Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
1 1. Все внешние силы лежат в одной плоскости, проходящей через главную ось сечения 2. Силы перпендикулярны продольной оси Вначале рассматривается наиболее.
1Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 1 Метод void dump(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Object.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от
Непараметрические критерии согласия Критерии Купера и Ватсона Тел
1 I. Загрузка файлов Начало сессии. 4 II. Отображение окна.
Тренировочное тестирование-2008 Ответы к заданиям КИМ Часть I.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
Транксрипт:

Интернационализация программ Java Advanced

2 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Содержание Локали Локализация данных Форматирование Работа с текстом Заключение

3 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Введение Интернационализация программы Написание программы, работающий в различных языковых окружениях Локализация программы Адаптация интернационализированной программы к конкретным языковым окружением Пакеты java.util java.text

4 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Область действия Сообщения Числа Дата и время Единицы измерения Адреса Номера телефонов Интерфейс …

Локали Часть 1

6 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Локаль Идентифицирует используемое языковое окружение Класс Locale

7 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Задание локали Составные локали Язык getLanguage() Страна getCountry() Вариант getVariant() Конструкторы класса Locale Locale(language) – по языку Locale(language, country) – по языку и стране Locale(language, country, variant) – по языку стране и варианту

8 СПбГУ ИТМО Georgiy KorneevJava 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 Выберите каталог, содержащий цветовую информацию

9 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Работа с локалями Получение getAvailableLocales() – список доступных локалей Поля UK, US, FRANCE, … Локаль по умолчанию getDefault() – получение локали по умолчанию setDefault(Locale locale) – установка локали по умолчанию Вывод пользователю getDisplayName() – имя локали

Локализация данных Часть 2

11 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Локализация данных Хранение данных, зависящих от локали в одном месте Класс ResourceBundle

12Georgiy KorneevJava Advanced / Collections Framework Операции с данными Получение данных getObject(String key) – произвольный объект getString(String key) – в виде строки getStringArray(String[] key) – массив строк Исключение MissingResouceException Получение информации о ресурсе getLocale() – локаль Enumeration getKeys() – ключи

13Georgiy KorneevJava Advanced / Collections Framework Пример: Интернационализация До интернационализации void printUsage() { System.out.println( "Usage: Test [ ] \n" + "Options:\n" + " -o write output\n" + "... " ); }

14Georgiy KorneevJava 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"),// bundle.getString("commands"),// bundle.getString("Options"),// Options: bundle.getString("-o")// Write output )); }

15Georgiy KorneevJava Advanced / Collections Framework Загрузка ресурсов Методы getBundle(String baseName) – по имени getBundle(baseName, Locale) – по локали getBundle(baseName, Locale, ClassLoader) – из заданного ClassLoaderа

16Georgiy KorneevJava Advanced / Collections Framework Порядок загрузки ресурсов 1 – указанная локаль 2– локаль по умолчанию baseName_language1_country1_variant1 baseName_language1_country1 baseName_language1 baseName_language2_country2_variant2 baseName_language2_country2 baseName_language2 baseName

17Georgiy KorneevJava Advanced / Collections Framework Пример: загрузка ресурса Ресурс UsageResouceBundle локаль en_US ResourceBundle bundle = ResourceBundle.getBundle( "UsageResouceBundle", Locale.US ); printUsage(bundle);

18Georgiy KorneevJava Advanced / Collections Framework Задание ресурсов Произвольные Класс ListResouceBundle Строковые Класс PropertyResouceBundle

19Georgiy KorneevJava Advanced / Collections Framework ListResouceBundle Данные задаются в классе Метод Object[][] getContents() – локализованные данные

20Georgiy KorneevJava Advanced / Collections Framework Пример: ListResouceBundle Данные для локали en_US public class UsageResouceBundle_en_US extends ListResourceBundle { private static final Object[][] CONTENTS = { {"usage", "Usage:"}, {"options", " "}, {"commands", " "}, {"Options", "Options:"}, {"-o", "Write output"}, }; protected Object[][] getContents() {return CONTENTS;} }

21Georgiy KorneevJava Advanced / Collections Framework PropertyResouceBundle Данные задаются в.property файле Структура.property файла key1 = value1 key2 : value2 key3 = very long value \ continues on next line # Comment …

22Georgiy KorneevJava Advanced / Collections Framework Пример: PropertyResouceBundle Данные для локали en_US UsageResouceBundle_en_US.properties usage =Usage: options = Commands= Options =Options: -o =Write output

Форматирование Часть 3

24 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Форматирование Вывод данных в соответствии с языковым контекстом Типы данных Числа Время и дата Сообщения Пакет java.text

25 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Форматирование чисел Класс NumberFormat Методы format(long) – форматировать целое число format(double) – форматировать число с плавающей точкой Number parse(String) – разобрать локализованное число Исключение ParseException – ошибка разбора

26 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Стандартные форматировщики чисел Получение форматировщиков чисел Методы getNumberInstance(locale?) – обычные числа getIntegerIntance(locale?) – целые числа (с округлением) getPercentInstance(locale?) – проценты getCurrencyInstance(locale?) – валюта

27 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Свойства форматировщиков чисел Currency currency – тип валюты maximum(minimum)FractionDigits – число цифр в дробной части maximum(minimum)IntegerDigits – число цифр в целой части groupingUsed – группировка разрядов parseIntegerOnly – разбор только целых чисел

28 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Специальное форматирование чисел Класс DecimalFormat Шаблоны форматирования ###,###.### Класс DecimalFormatSymbols – символы используемые при форматировании Десятичная запятая Разделители групп Бесконечности …

29 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Специальное форматировани чисел Класс ChoiceFormat Конструкторы ChoiceFormat(double[] limits, String[] formats) – программно ChoiceFormat(String pattern) – по шаблону Использование форматов i-й если limits[i]

30 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Форматирование времени и дат Класс DateFormat Методы format(date) – форматировать дату/время Date parse(String) – разобрать локализованную дату/время Исключение ParseException – ошибка разбора

31 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Стандартные форматировщики Получение форматировщиков времени и дат Методы getDateInstance([dateStyle[, locale]]) – даты getTimeIntance([timeStyle[, locale]]) – времени getDateTimeIntance([dateStyle, timeStyle, [locale]]) – даты и времени Стили DEFAULT, FULL, LONG, MEDIUM, SHORT

32 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Свойства форматировщиков Свойства форматировщиков даты/времени calendar – тип календаря timeZone – временная зона

33 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Специальное форматирование Задание правил форматирования Класс SimpleDateFormat Шаблоны форматирования yyyy.MM.dd G 'at' HH:mm:ss z Класс DateFormatSymbols – символы используемые при форматировании Дни недели Месяца …

34 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Форматирование сообщений Класс MessageFormat Методы format(Object[] arguments) – форматировать сообщение Static format(String pattern, Object … arguments) – форматировать сообщение по шаблону

35 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Шаблоны сообщений Вид шаблон := (текст { параметр })* параметр := индекс[, тип[, стиль]] тип := number | date | time | choice Пример // Aug 2, 2005: $10.80 available MessageFormat.fomat( "{0,date}: {1,number,currency} available, new Date(), amount )

Работа с текстом Часть 4

37 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Сравнение строк Лексикографический порядок зависит от языка Класс Collator implements Comparator getInstance([locale]) – получение экземпляра Класс RuleBasedCollator Сравнивает строки в соответствии с заданными правилами

38 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Разбиение текста на элементы Разбиение текста на символы, слова, предложения и строки зависит от языка Класс BreakIterator Создание get( Character / Word / Line / Sentense )Instance([locale]) – получение экземпляра Методы first() / last() / next() / previous() – передвижение итератора

39 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Задание текста Текст читается в кодировке Latin-1 Программа native2ascii Перекодирует в (из) Latin-1 native2ascii [options] [inputfile [outputfile]] Опции -reverse – перекодирование их Latin-1 -encoding encoding – установка кодировки

40 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Пример: сообщения на русском (1) До перекодировки usage=Применение options= Commands= Options=Опции: -o=Запись выходного файла

41 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Пример: сообщения на русском (2) После перекодировки usage=\u040f\u0430\u0401\u00ac\u0490\u00ad\u0 490\u00ad\u0401\u0490 options= Commands= 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

Заключение Часть 6

43 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Ссылки Internationalization (guide) // Trail: Internationalization (Java Tutorial) // Internationalization // Properties // il/Properties.html il/Properties.html

44 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интернационализация программ Вопросы