Java – technologie zaawansowane Wykład 8 (9 maja 2011)

Slides:



Advertisements
Podobne prezentacje
Plan wykładu i18n o kontekście w aplikacji z GUI narzędzia ułatwiające życie: JOptionPane Swing i wielowątkowość użycie klasy SwingUtilities użycie klasy.
Advertisements

Wstęp do strumieni danych
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Klasy i obiekty.
Wzorce.
Zaawansowane metody programowania – Wykład V
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Implementacja ekstensji klasy
Nguyen Hung Son Uniwersytet Warszawski
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Przetwarzanie tekstów i AWK Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Wyrażenia regularne i język AWK
Wykład 2 struktura programu elementy języka typy zmienne
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
dr Anna Kwiatkowska Instytut Informatyki
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Język Java Wielowątkowość.
Techniki i języki programowania
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Podstawy C# Grupa .NET PO.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Strona formalna tekstu
Podstawy programowania
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
A ctive S erver P ages Technologia dostępu do danych.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Tworzenie aplikacji mobilnych
Budowanie tabel i relacji
Obsługa systemu wejścia-wyjścia
Programowanie obiektowe – zastosowanie języka Java SE
JAVA.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Java 3 MPDI Programowanie obiektowe W5. Java - obiektowy język programowania stworzony przez firmę Sun Microsystems. Java jest językiem tworzenia programów.
Visual Basic for Applications Poziom podstawowy Zajęcia 2
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Programowanie sieciowe w Javie
Modelowanie obiektowe Diagramy klas
Kurs języka C++ – wykład 9 ( )
Projektowanie stron WWW
Podstawy języka Instrukcje - wprowadzenie
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Obiekty DOM.
Typy danych, klucz podstawowy, klucz obcy
Iga Lewandowska I EMII MU
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
Kolekcje (3) Zbiory. Porównywanie i porządkowanie elementów kolekcji. (c) Krzysztof Barteczko 2014.
Asocjacja,Kompozycja,Agregacja
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Programowanie Obiektowe – Wykład 6
Przypomnienie wiadomości – kilka zadań
(według:
Programowanie obiektowe II
Programowanie Obiektowe – Wykład 2
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
(c) Krzysztof Barteczko 2014
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
PGO - Projektowanie i implementacja pierwszych klas
PGO Porównywanie obiektów
Zapis prezentacji:

Java – technologie zaawansowane Wykład 8 (9 maja 2011) Lokalizacja programów

Lokalizacja Lokalizacja to specyficzne dla danego języka, kraju i regionu reguły dotyczące prezentacji różnych informacji (formatowania liczb, formatowania dat, pisowni tekstów, porządku alfabetycznego, itp). Programy powinny być dostosowane do różnych lokalizacji bez ponownego kompilowania kodu.

Lokalizacja W pakiecie java.text mamy cały zestaw klas rozwiązujący zagadnienia lokalizacyjne. Lokalizacja w Javie jest reprezentowana przez klasę Locale z pakietu java.util. Lokalizacja jest określana przez kombinację kodu języka, kraju i wariantu (regionu): Kod języka to dwuliterowy skrót (małe litery) wg standardu ISO-639: http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt Kod kraju to dwuliterowy skrót (duże litery) wg standardu ISO-3166: http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt Kod wariantu (regionu) to dodatkowa informacja, która nie spełnia określonych standardów.

Lokalizacja Lokalizacja w Javie jest określana przez kombinację kodu języka, kraju i wariantu (regionu): Locale (String lang) Locale (String lang, String coun) Locale (String lang, String coun, String var) Przykłady obiektów lokalizacyjnych: Locale a = new Locale("pl","PL"); Locale b = new Locale("en","GB"); Locale c = new Locale("en","US"); Locale d = new Locale("en"); Każdy program w Javie uzyskuje domyślną lokalizację podstawie właściwości ustawionych dla platformy systemowej. Bieżącą lokalizację możemy odczytać za pomocą: Locale.getDefault(); Domyślną lokalizację można zmienić za pomocą: Locale.setDefault(newLocale);

Lokalizacja Klasa Locale posiada kilka użytecznych getterów: String getLanguage() String getCountry() String getVariant() Klasa Locale posiada kilka metod prezentacyjnych: String getDisplayLanguage(); String getDisplayCountry(); String getDisplayVariant(); String getDisplayName(); Klasa Locale posiada kilka informacyjnych metod statycznych: String[] getISOLanguages() String[] getISOCountries() Locale[] getAvailableLocales()

Lokalizacja Klasy lokalizacyjnie czułe biorą pod uwagę lokalizację – zaliczamy do nich: NumberFormat (formatowanie liczb) DateFormat (formatowanie dat) Calendar (data i czas) Collator (porządek alfabetyczny) BreakIterator (rozbiór tekstu)

Formatowanie Do formatowania liczb (całkowitych i zmiennopozycyjnych) służą klasy NumberFormat i DecimalFormat. Klasa Currency opisuje waluty. Strefy czasowe opisuje klasa TimeZone. Informację o dacie i godzinie przechowuje się w obiekcie Calendar lub Date, a do formatowania czasu używa się klasy DateFormat.

Rozbiór tekstów Zlokalizowanego rozbioru tekstu dokonujemy za pomocą klasy BreakIterator. BreakIterator pozwala dzielić tekst pisany w określonym języku na wiersze, zdania, słowa i znaki. Do wyodrębnienia każdego z wymienionych elementów tekstu należy użyć odrębnego iteratora: getLineInstance() getSentenceInstance() getWordInstance() getCharacterInstance() Przykład: BreakIterator brit = BreakIterator.getWordInstance();

Rozbiór tekstów Najważniejsze metody iteratorów: first () – indeks pierwszej pozycji podziału tekstu na elementy; last () – indeks ostatniej pozycji; next () – indeks następnej pozycji; previous () – indeks poprzedniej pozycji; next (int n) i preceding (int n) – indeks pozycji podziału tekstu oddalonego o n od pozycji bieżącej. Iterator do wyodrębniania słów, w przeciwieństwie do innych iteratorów, zwraca indeksy słów i indeksy separatorów.

Rozbiór tekstów Przykład rozbioru tekstu: public static void main (String args[]) { if (args.length == 1) { String stringToExamine = args[0]; // print each word in order BreakIterator boundary = BreakIterator.getWordInstance(); boundary.setText(stringToExamine); printEachForward(boundary,stringToExamine); // print each sentence in reverse order boundary = BreakIterator.getSentenceInstance(Locale.US); printEachBackward(boundary,stringToExamine); printFirst(boundary,stringToExamine); printLast(boundary,stringToExamine); }

Rozbiór tekstów Przykład rozbioru tekstu: public static void printEachForward (BreakIterator boundary, String source) { int start = boundary.first(); for (int end=boundary.next(); end!=BreakIterator.DONE; start=end, end=boundary.next()) { System.out.println(source.substring(start,end)); } public static void printEachBackward int end = boundary.last(); for (int start=boundary.previous(); start!=BreakIterator.DONE; end=start, start=boundary.previous()) {

Porównywanie napisów Różne języki mają różny porządek alfabetyczny napisów. Właściwe porównywanie napisów dokonuje się za pomocą lokalizacyjnie czułego obiektu Collator. Klasa Collator implementuje interfejs Comparator<Object>. Klasa Collator jest abstrakcyjna.

Porównywanie napisów Konkretne kolatory są nieabstrakcyjnymi obiektami RuleBasedCollator (podklasa Collator). Instancję kolatora uzyskujemy za pomocą metod: Collator.getInstance() – kolator domyślny Collator.getInstance(loc) – kolator dla lokalizacji loc Metodą compare(…) kolatora porównujemy parę napisów.

Porównywanie napisów Uporządkowanie za pomocą kolatorów typu RuleBasedCollator odbywa się na podstawie porównywania kolejnych znaków z wykorzystaniem reguł zapisanych w tym obiekcie. Reguły te określają cztery porządki: PRIMARY – rozróżniane są znaki zdefiniowane w zestawie reguł, SECONDARY – wyodrębnia różnice w znakach akcentowanych, TERTIARY – rozróżnienie na podstawie wielkości liter, IDENTICAL – jeśli znaki uznane za takie same według poprzednich trzech reguł są rozróżniane na podstawie kodu.

Porównywanie napisów Siła kolatora to stosowany do porównywania porządek. Domyślna siła kolatora to TERTIARY. Siłę kolatora ustawiamy metodą setStrength(…). Zbiór reguł kolatora można odczytać metodą getRules() i ustawić metodą setRules(String). Reguła to ciąg znaków uporządkowanych relacjami mniejszości (<) dla PRIMARY, średnika (;) dla SECONDARY, przecinka (,) dla TERTIARY i równości (=) dla IDENTICAL. Przykład: "…9<a,A<b,B<c,C…" Kolejne reguły łączymy ze sobą za pomocą ampersanda (&). Przykład: "A<B & B<C"

Porównywanie napisów Kolatory można wykorzystać do sortowania tablic napisów metodą Arrays.sort(…). Przykład: String[] tab = …; Collator col = Collator.getInstance(); Arrays.sort(tab,col);

Internacjonalizacja aplikacji Aplikacja powinna być przygotowana na działanie w różnych środowiskach językowych. Nie tylko liczby, daty i czas powinny być prezentowane zgodnie z wymaganiami danej lokalizacji – również komunikacja aplikacji z użytkownikiem powinna spełniać kryteria lokalizacyjne. Mechanizmem umożliwiającym odseparowanie języka komunikatów od kodu są w Javie zasoby dodatkowe (ang. resource bundle): oparte na tekstowych plikach właściwości PropertiesResourceBundle (odseparowanie napisów), oraz oparte na listach obiektów ListResourceBundle (odseparowanie dowolnych obiektów).

Internacjonalizacja aplikacji Plik właściwości może mieć dowolną nazwę i rozszerzenie .properties. W pliku takim zapisujemy pary: klucz = napis Rolę komentarza pełnią linie rozpoczynające się od znaku #. Gdy do nazwy pliku dołożymy sufiks z nazwą lokalizacji, to utworzymy zbiór napisów dla jakiejś konkretnej lokalizacji.

Internacjonalizacja aplikacji Plik o odpowiedniej nazwie możliwie bliskiej bieżącej lokalizacji zostanie odnaleziony i Java pobierze z niego napis przypisany do odpowiedniego klucza. Przykład wyboru pliku właściwości, gdy bieżąca lokalizacja to pl_PL: Messages.properties Messages_pl.properties Java wybierze plik Messages_pl.properties nie znajdując Messages_pl_PL.properties.

Internacjonalizacja aplikacji Plik właściwości ze znakami diakrytycznymi należy przetworzyć do pliku w formacie ASCII (zamieniając każdy znak spoza alfabetu angielskiego na sekwencję znaków kodujących szesnastkowo daną literę \uHHHH w Unicodzie). Zamiany tej można dokonać automatycznie za pomocą programu native2ascii. Przykład: $ native2ascii plik.properties.nat > plik.properties

Internacjonalizacja aplikacji W programie odwołujemy się do zewnętrznego pliku właściwości podając nazwę i lokalizację. Przykład: Locale loc = Locale.getDefault(); ResourceBundle msg = ResourceBundle.getBundle("name",loc); Pobranie napisu skojarzonego z podanym kluczem w zasobie ResourceBundle dokonujemy metodą getString. Przykład: String napis = msg.getString(klucz); Metoda getBundle najpierw szuka obiektów dziedziczących po ListResourceBundle a dopiero później plików właściwości. Użycie ListResourceBundle wymaga pisania kodu ale pozwala kojarzyć z kluczami obiekty innych typów niż String.

Literatura K.Barteczko: Java – od podstaw do technologii. Tom 1. Wydawnictwo MIKOM, Warszawa 2004. Internationalization (Java Tutorial): http://download.oracle.com/ javase/tutorial/i18n/