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

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

  • Upload
    jubal

  • View
    51

  • Download
    4

Embed Size (px)

DESCRIPTION

Java Advanced. Интернационализация программ. Содержание. Локали Локализация данных Форматирование Работа с текстом Заключение. Введение. Интернационализация программы Написание программы, работающий в различных языковых окружениях Локализация программы - PowerPoint PPT Presentation

Citation preview

Page 1: Интернационализация программ

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

Java Advanced

Page 2: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Содержание

ЛокалиЛокализация данныхФорматированиеРабота с текстомЗаключение

Page 3: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Введение

Интернационализация программы Написание программы, работающий в

различных языковых окружениях

Локализация программы Адаптация интернационализированной

программы к конкретным языковым окружением

Пакеты java.util java.text

Page 4: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Область действия

СообщенияЧислаДата и времяЕдиницы измеренияАдресаНомера телефоновИнтерфейс…

Page 5: Интернационализация программ

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

Page 6: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Локаль

Идентифицирует используемое языковое окружение

Класс Locale

Page 7: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Задание локали

Составные локали Язык getLanguage() Страна getCountry() Вариант getVariant()

Конструкторы класса Locale Locale(language) – по языку Locale(language, country) – по языку и стране Locale(language, country, variant) – по языку

стране и варианту

Page 8: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Пример: локализованные данные

en_UK_windowschoose the foldercontaining colourinformation

en_UK_unixchoose the directory

containing colourinformation

en_USchoose the foldercontaining colorinformation

ru_RU_unixВыберите каталог,содержащийцветовую информацию

Page 9: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Работа с локалями

Получение getAvailableLocales() – список доступных

локалей Поля UK, US, FRANCE, …

Локаль по умолчанию getDefault() – получение локали по умолчанию setDefault(Locale locale) – установка локали по

умолчанию

Вывод пользователю getDisplayName() – имя локали

Page 10: Интернационализация программ

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

Page 11: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Локализация данных

Хранение данных, зависящих от локали в одном месте

Класс ResourceBundle

Page 12: Интернационализация программ

Java Advanced / Collections Framework 12Georgiy Korneev

Операции с данными

Получение данных getObject(String key) – произвольный объект getString(String key) – в виде строки getStringArray(String[] key) – массив строк Исключение MissingResouceException

Получение информации о ресурсе getLocale() – локаль Enumeration<String> getKeys() – ключи

Page 13: Интернационализация программ

Java Advanced / Collections Framework 13Georgiy Korneev

Пример: Интернационализация

До интернационализации void printUsage() {

System.out.println(

"Usage: Test [<options>] <commands>\n" +

"Options:\n" +

" -o write output\n" +

"... "

);

}

Page 14: Интернационализация программ

Java Advanced / Collections Framework 14Georgiy Korneev

Пример: Интернационализация

После интернационализациия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 ));}

Page 15: Интернационализация программ

Java Advanced / Collections Framework 15Georgiy Korneev

Загрузка ресурсов

Методы getBundle(String baseName) – по имени getBundle(baseName, Locale) – по локали getBundle(baseName, Locale, ClassLoader) – из

заданного ClassLoader’а

Page 16: Интернационализация программ

Java Advanced / Collections Framework 16Georgiy Korneev

Порядок загрузки ресурсов

1 – указанная локаль

2– локаль по умолчанию baseName_language1_country1_variant1 baseName_language1_country1 baseName_language1 baseName_language2_country2_variant2 baseName_language2_country2 baseName_language2 baseName

Page 17: Интернационализация программ

Java Advanced / Collections Framework 17Georgiy Korneev

Пример: загрузка ресурса

Ресурс UsageResouceBundle

локаль en_US

ResourceBundle bundle =

ResourceBundle.getBundle(

"UsageResouceBundle",

Locale.US

);

printUsage(bundle);

Page 18: Интернационализация программ

Java Advanced / Collections Framework 18Georgiy Korneev

Задание ресурсов

Произвольные Класс ListResouceBundle

Строковые Класс PropertyResouceBundle

Page 19: Интернационализация программ

Java Advanced / Collections Framework 19Georgiy Korneev

ListResouceBundle

Данные задаются в классеМетод

Object[][] getContents() – локализованные данные

Page 20: Интернационализация программ

Java Advanced / Collections Framework 20Georgiy Korneev

Пример: ListResouceBundle

Данные для локали en_USpublic 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;}}

Page 21: Интернационализация программ

Java Advanced / Collections Framework 21Georgiy Korneev

PropertyResouceBundle

Данные задаются в .property файлеСтруктура .property файла

key1 = value1

key2 : value2

key3 = very long value \

continues on next line

# Comment

Page 22: Интернационализация программ

Java Advanced / Collections Framework 22Georgiy Korneev

Пример: PropertyResouceBundle

Данные для локали en_USUsageResouceBundle_en_US.properties

usage =Usage:

options =<options>

Commands =<commands>

Options =Options:

-o =Write output

Page 23: Интернационализация программ

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

Page 24: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Форматирование

Вывод данных в соответствии с языковым контекстом

Типы данных Числа Время и дата Сообщения

Пакет java.text

Page 25: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Форматирование чисел

Класс NumberFormatМетоды

format(long) – форматировать целое число format(double) – форматировать число с

плавающей точкой Number parse(String) – разобрать

локализованное число

Исключение ParseException – ошибка разбора

Page 26: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Стандартные форматировщики чисел

Получение форматировщиков чиселМетоды

getNumberInstance(locale?) – обычные числа getIntegerIntance(locale?) – целые числа (с

округлением) getPercentInstance(locale?) – проценты getCurrencyInstance(locale?) – валюта

   

Page 27: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Свойства форматировщиков чисел

Свойства форматировщиков чисел Currency currency – тип валюты maximum(minimum)FractionDigits – число цифр

в дробной части maximum(minimum)IntegerDigits – число цифр в

целой части groupingUsed – группировка разрядов parseIntegerOnly – разбор только целых чисел

   

Page 28: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Специальное форматирование чисел

Класс DecimalFormat Шаблоны форматирования ###,###.###

Класс DecimalFormatSymbols – символы используемые при форматировании Десятичная запятая Разделители групп Бесконечности …

   

Page 29: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Специальное форматировани чисел

Класс ChoiceFormatКонструкторы

ChoiceFormat(double[] limits, String[] formats) –программно

ChoiceFormat(String pattern) – по шаблону

Использование форматов i-й если limits[i] <= n && n < limits[i + 1]

Формат шаблона limit # format | limit # format | …

   

Page 30: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Форматирование времени и дат

Класс DateFormatМетоды

format(date) – форматировать дату/время Date parse(String) – разобрать локализованную

дату/время

Исключение ParseException – ошибка разбора

Page 31: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Стандартные форматировщики

Получение форматировщиков времени и дат

Методы getDateInstance([dateStyle[, locale]]) – даты getTimeIntance([timeStyle[, locale]]) – времени getDateTimeIntance([dateStyle, timeStyle,

[locale]]) – даты и времени

Стили DEFAULT, FULL, LONG, MEDIUM, SHORT

   

Page 32: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Свойства форматировщиков

Свойства форматировщиков даты/времени calendar – тип календаря timeZone – временная зона

   

Page 33: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Специальное форматирование

Задание правил форматированияКласс SimpleDateFormat

Шаблоны форматирования

yyyy.MM.dd G 'at' HH:mm:ss z

Класс DateFormatSymbols – символы используемые при форматировании Дни недели Месяца …

   

Page 34: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Форматирование сообщений

Класс MessageFormatМетоды

format(Object[] arguments) – форматировать сообщение

Static format(String pattern, Object … arguments) – форматировать сообщение по шаблону

Page 35: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Шаблоны сообщений

Вид шаблон := (текст { параметр })* параметр := индекс[, тип[, стиль]] тип := number | date | time | choice

Пример// Aug 2, 2005: $10.80 available

MessageFormat.fomat(

"{0,date}: {1,number,currency} available“,

new Date(), amount

)

Page 36: Интернационализация программ

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

Page 37: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Сравнение строк

Лексикографический порядок зависит от языка

Класс Collator implements Comparator<String> getInstance([locale]) – получение экземпляра

Класс RuleBasedCollator Сравнивает строки в соответствии с

заданными правилами

Page 38: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Разбиение текста на элементы

Разбиение текста на символы, слова, предложения и строки зависит от языка

Класс BreakIteratorСоздание

get(

Character / Word / Line / Sentense

)Instance([locale]) – получение экземпляра

Методы first() / last() / next() / previous() – передвижение

итератора

Page 39: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Задание текста

Текст читается в кодировке Latin-1Программа native2ascii

Перекодирует в (из) Latin-1 native2ascii [options] [inputfile [outputfile]] Опции

-reverse – перекодирование из Latin-1 -encoding encoding – установка кодировки

Page 40: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Пример: сообщения на русском (1)

До перекодировкиusage=Применение

options=<Опции>

Commands=<команды>

Options=Опции:

-o=Запись выходного файла

Page 41: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Пример: сообщения на русском (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

Page 42: Интернационализация программ

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

Page 43: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Ссылки

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

Page 44: Интернационализация программ

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

СПбГУ ИТМО

Georgiy Korneev

Вопросы