Internalizacja Java - szybki przewodnik

Internalizacja

Internalizacja lub I18N odnosi się do zdolności aplikacji do obsługi użytkowników w wielu różnych językach. Java ma wbudowaną obsługę internalizacji. Java zapewnia również formatowanie liczb, walut oraz odpowiednie dostosowywanie daty i godziny.

Java Internationalization pomaga sprawić, że aplikacja Java obsługuje różne języki, formaty liczb, waluty, formatowanie czasu w zależności od regionu.

Lokalizacja

Lokalizacja lub L10N to zdolność adaptacyjna aplikacji, czyli sposób, w jaki aplikacja dostosowuje się do określonego języka, formatów liczb, ustawień daty i godziny itp.

Aplikacja java powinna być umiędzynarodowiona, aby móc się lokalizować.

Informacje zależne od kultury

Poniższe informacje często różnią się w zależności od strefy czasowej lub kultury.

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • Numery telefoniczne

  • Adresy pocztowe

  • Etykiety GUI

Zajęcia z internacjonalizacji

Java ma zestaw wbudowanych klas, które pomagają w internacjonalizacji aplikacji. Te klasy są następujące:

Sr.No.Klasa i opis
1

Locale

Reprezentuje język wraz z krajem / regionem.

2

ResourceBundle

Zawiera zlokalizowany tekst lub obiekty.

3

NumberFormat

Służy do formatowania liczb / walut zgodnie z ustawieniami regionalnymi.

4

DecimalFormat

Służy do formatowania liczb zgodnie z niestandardowym formatem i według ustawień regionalnych.

5

DateFormat

Służy do formatowania dat według ustawień regionalnych.

6

SimpleDateFormat

Służy do formatowania dat zgodnie z niestandardowym formatem i według ustawień regionalnych.

Internalizacja Java - konfiguracja środowiska

W tym rozdziale omówimy różne aspekty konfigurowania odpowiedniego środowiska dla języka Java.

Konfiguracja środowiska lokalnego

Jeśli nadal chcesz skonfigurować swoje środowisko pod kątem języka programowania Java, w tej sekcji omówiono sposób pobierania i konfigurowania środowiska Java na komputerze. Poniżej przedstawiono kroki konfiguracji środowiska.

Java SE jest dostępna bezpłatnie pod linkiem Pobierz Javę . Możesz pobrać wersję opartą na systemie operacyjnym.

Postępuj zgodnie z instrukcjami, aby pobrać Javę i uruchomić .exeaby zainstalować Javę na swoim komputerze. Po zainstalowaniu Javy na komputerze należy ustawić zmienne środowiskowe, aby wskazywały prawidłowe katalogi instalacyjne -

Konfigurowanie ścieżki dla systemu Windows

Zakładając, że zainstalowałeś Javę w katalogu c: \ Program Files \ java \ jdk -

  • Kliknij prawym przyciskiem myszy „Mój komputer” i wybierz „Właściwości”.

  • Kliknij przycisk „Zmienne środowiskowe” na karcie „Zaawansowane”.

  • Teraz zmień zmienną „Path”, aby zawierała również ścieżkę do pliku wykonywalnego Java. Na przykład, jeśli ścieżka jest obecnie ustawiona na „C: \ WINDOWS \ SYSTEM32”, ​​zmień ścieżkę na „C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin”.

Konfigurowanie ścieżki dla systemów Linux, UNIX, Solaris, FreeBSD

Zmienna środowiskowa PATH powinna być ustawiona tak, aby wskazywała, gdzie zostały zainstalowane pliki binarne Java. Zajrzyj do dokumentacji powłoki, jeśli masz z tym problem.

Na przykład, jeśli używasz bash jako powłoki, dodasz następujący wiersz na końcu swojego '.bashrc: export PATH = / path / to / java: $ PATH'

Popularne edytory Java

Do pisania programów w języku Java potrzebny będzie edytor tekstu. Na rynku dostępne są jeszcze bardziej wyrafinowane środowiska IDE. Ale na razie możesz rozważyć jedną z następujących rzeczy -

  • Notepad - Na komputerze z systemem Windows możesz użyć dowolnego prostego edytora tekstu, takiego jak Notatnik (zalecany w tym samouczku), TextPad.

  • Netbeans - Środowisko Java IDE o otwartym kodzie źródłowym i bezpłatne, które można pobrać z witryny https://www.netbeans.org/index.html.

  • Eclipse - Środowisko Java IDE opracowane przez społeczność eclipse open source i można je pobrać z witryny https://www.eclipse.org/.

Co jest następne?

W następnym rozdziale nauczysz się, jak napisać i uruchomić swój pierwszy program w języku Java, a także przedstawimy kilka ważnych podstawowych składni w języku Java potrzebnych do tworzenia aplikacji.

Internalizacja Java - klasa ustawień regionalnych

Obiekt Locale reprezentuje określony region geograficzny / polityczny / kulturowy. Każda operacja wymagająca ustawienia regionalnego do wykonania swojego zadania jest nazywana operacją zależną od ustawień regionalnych i używa ustawień regionalnych do nadrzędnych informacji dotyczących użytkownika. Na przykład wyświetlanie liczby jest operacją uwzględniającą ustawienia regionalne. Numer powinien być sformatowany zgodnie ze zwyczajami i konwencjami kraju, regionu lub kultury ojczystej użytkownika.

Treść ustawień regionalnych

Obiekt Locale zawiera następujące elementy:

  • Language- Kod języka ISO 639 alpha-2 lub alpha-3 lub podtagi zarejestrowanego języka do 8 liter alfabetu. Kod alfa-2 musi być użyty, jeśli obecny jest zarówno kod alfa-2, jak i alfa-3. W polu językowym nie jest rozróżniana wielkość liter, ale ustawienia regionalne zawsze są kanonizowane na małe litery.

  • Script- Kod skryptu ISO 15924 alfa-4. W polu skryptu nie jest rozróżniana wielkość liter, ale ustawienie regionalne jest zawsze kanonizowane na wielkość liter w tytule.

  • Country (region)- Kod kraju ISO 3166 alpha-2 lub numeryczny kod 3 obszaru UN M.49. W polu kraju wielkość liter nie jest rozróżniana, ale język lokalny zawsze konwertuje na wielkie litery.

  • Variant- dowolna wartość używana do wskazania odmiany ustawienia regionalnego. Tam, gdzie istnieją co najmniej dwie wartości wariantowe, z których każda wskazuje własną semantykę, wartości te należy uporządkować według ważności, z najważniejszymi na początku, oddzielonymi podkreśleniem („_”). W polu wariantu rozróżniana jest wielkość liter.

  • Extensions- Mapa od kluczy jednoznakowych do wartości ciągów, wskazująca rozszerzenia oprócz identyfikacji języka. Rozszerzenia w Locale implementują semantykę i składnię podtagów rozszerzeń BCP 47 i podtagów użytku prywatnego. W rozszerzeniach wielkość liter nie jest rozróżniana, ale ustawienia regionalne kanonizują wszystkie klucze rozszerzeń i wartości na małe litery.

Internalizacja Java - przykład - szczegóły ustawień regionalnych

W tym przykładzie otrzymamy domyślne ustawienie regionalne i wydrukujemy jego szczegóły. Następnie utwórz ustawienia regionalne dla „fr” i wydrukuj jego szczegóły.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale =Locale.getDefault();  

      System.out.println("Default Locale Properties:\n");

      System.out.println(locale.getDisplayCountry());  
      System.out.println(locale.getDisplayLanguage());  
      System.out.println(locale.getDisplayName());  
      System.out.println(locale.getISO3Country());  
      System.out.println(locale.getISO3Language());  
      System.out.println(locale.getLanguage());  
      System.out.println(locale.getCountry());  

      Locale frenchLocale = new Locale("fr","fr");

      System.out.println("\nfr Locale Properties:\n");
      System.out.println(frenchLocale.getDisplayCountry());  
      System.out.println(frenchLocale.getDisplayLanguage());  
      System.out.println(frenchLocale.getDisplayName());  
      System.out.println(frenchLocale.getISO3Country());  
      System.out.println(frenchLocale.getISO3Language());  
      System.out.println(frenchLocale.getLanguage());  
      System.out.println(frenchLocale.getCountry());  
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Default Locale Properties:

United States
English
English (United States)
USA
eng
en
US

fr Locale Properties:

France
French
French (France)
FRA
fra
fr
FR

Internalizacja Java - przykład - język wyświetlania

W tym przykładzie otrzymamy język wyświetlania według ustawień regionalnych przekazany jako argument.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale defaultLocale = Locale.getDefault();
      Locale enLocale = new Locale("en", "US");  
      Locale frLocale = new Locale("fr", "FR");  
      Locale esLocale = new Locale("es", "ES");

      System.out.println(defaultLocale.getDisplayLanguage(enLocale));
      System.out.println(defaultLocale.getDisplayLanguage(frLocale));
      System.out.println(defaultLocale.getDisplayLanguage(esLocale));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

English
anglais
inglés

Internalizacja języka Java - klasa ResourceBundle

Klasa ResourceBundle służy do przechowywania tekstu i obiektów uwzględniających ustawienia regionalne. Zwykle używamy plików właściwości do przechowywania tekstu specyficznego dla lokalizacji, a następnie reprezentujemy je za pomocą obiektu ResourceBundle. Poniżej przedstawiono kroki, aby użyć pliku właściwości specyficznych dla ustawień regionalnych w aplikacji opartej na Javie.

Krok 1: Utwórz pliki właściwości.

Załóżmy, że potrzebujemy pliku właściwości dla języka angielskiego. Następnie utwórz nazwę pliku właściwości XXX_en_US.properties, gdzie XXX to nazwa pliku, a en_US reprezentuje język angielski (USA).

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

Utwórzmy teraz plik właściwości dla francuskich ustawień regionalnych. Następnie utwórz nazwę pliku właściwości XXX_fr_FR.properties, gdzie XXX jest nazwą pliku, a fr_FR reprezentuje język francuski (Francja).

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

Tutaj możesz dowiedzieć się, że klucz jest taki sam, ale wartość jest specyficzna dla ustawień regionalnych w obu plikach właściwości.

Krok 2: Utwórz obiekt ResourceBundle

Utwórz obiekt ResourceBundle z nazwą pliku właściwości i ustawieniami narodowymi, używając następującej składni.

ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);

Krok 3: Pobierz wartość z obiektu ResourceBundle.

Pobierz wartość z obiektu ResourceBundle, przekazując klucz.

String value = bundle.getString("message");

Przykład

Poniższy przykład ilustruje użycie obiektów ResourceBundle do wyświetlania wartości specyficznych dla ustawień regionalnych z plików właściwości.

IOTester.java

import java.util.Locale;
import java.util.ResourceBundle;

public class I18NTester {
   public static void main(String[] args) {
      ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);  
      System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));  

      bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);  
      System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!

Uwagi dotyczące konwencji nazewnictwa

Poniżej przedstawiono konwencje nazewnictwa dla pliku właściwości.

  • W przypadku pliku właściwości zamapowanego na domyślne ustawienia regionalne nie jest wymagany żaden przedrostek. message_en_US.properties jest równoważne z message.properties.

  • W przypadku pliku właściwości zamapowanego na język, przedrostek można dołączyć na dwa sposoby. message_fr.properties jest odpowiednikiem message_fr_FR.properties.

Internalizacja Java - klasa NumberFormat

Klasa java.text.NumberFormat służy do formatowania liczb i walut zgodnie z określonymi ustawieniami regionalnymi. Formaty liczb różnią się w zależności od kraju. Na przykład w Danii ułamki liczby są oddzielane od części całkowitej przecinkiem, podczas gdy w Anglii separatorem jest kropka.

Przykład - formatowanie liczb

W tym przykładzie formatujemy liczby na podstawie ustawień regionalnych dla Stanów Zjednoczonych i języka duńskiego.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

100,76
100.76

Internalizacja Java - formatowanie walut

W tym przykładzie formatujemy waluty na podstawie ustawień regionalnych dla Stanów Zjednoczonych i języka duńskiego.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getCurrencyInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

kr 100,76
$100.76

Internalizacja Java - procenty formatów

W tym przykładzie formatujemy liczby w formacie procentowym.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");        

      NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);

      System.out.println(numberFormat.format(0.76));    
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

76%

Internalizacja Java - ustaw minimalną / maksymalną dokładność

W tym przykładzie ustawiamy minimalne i maksymalne cyfry zarówno dla części całkowitej, jak i części ułamkowej liczby.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  

      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
      numberFormat.setMinimumIntegerDigits(2);
      numberFormat.setMaximumIntegerDigits(3);

      numberFormat.setMinimumFractionDigits(2);
      numberFormat.setMaximumFractionDigits(3);

      System.out.println(numberFormat.format(12234.763443));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

234.763

Internalizacja Java - Ustaw tryb zaokrąglania

W tym przykładzie prezentujemy tryb zaokrąglania.

IOTester.java

import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
 
      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);

      numberFormat.setMinimumFractionDigits(0);
      numberFormat.setMaximumFractionDigits(0);

      System.out.println(numberFormat.format(99.50));

      numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);

      System.out.println(numberFormat.format(99.50));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

100
99

Internalizacja Java - analizowanie liczb

W tym przykładzie prezentujemy analizę liczby występującej w różnych lokalizacjach.

IOTester.java

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.parse("100,76"));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.parse("100,76"));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

100.76
10076

Internalizacja Java - klasa DecimalFormat

Klasa java.text.DecimalFormat służy do formatowania liczb zgodnie z formatem niestandardowym i ustawieniami narodowymi.

Przykład - formatowanie liczb

W tym przykładzie formatujemy liczby na podstawie podanego wzorca.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "####,####.##";
      double number = 123456789.123;
      
      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);
      
      System.out.println(numberFormat.format(number));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

1.23456789123E8
1,2345,6789.12

Internalizacja języka Java - wzorce formatowania

Poniżej przedstawiono użycie znaków we wzorcach formatowania.

Sr.No.Klasa i opis
1

0

Aby wyświetlić 0, jeśli jest mniej cyfr.

2

#

Wyświetla cyfry bez wiodących zer.

3

.

Separator liczb dziesiętnych.

4

,

Separator grupujący.

5

E

Separator mantysy i wykładnika dla formatów wykładniczych.

6

;

Separator formatu.

7

-

Prefiks liczby ujemnej.

8

%

Pokazuje liczbę jako procent po pomnożeniu przez 100.

9

?

Pokazuje liczbę w milach po pomnożeniu przez 1000.

10

X

Oznaczanie znaku jako prefiksu / sufiksu numeru.

11

'

Aby zaznaczyć cudzysłów wokół znaków specjalnych.

W tym przykładzie formatujemy liczby na podstawie różnych wzorców.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.###";
      double number = 123456789.123;

      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);

      //pattern ###.###
      System.out.println(numberFormat.format(number));

      //pattern ###.#
      numberFormat.applyPattern("###.#");
      System.out.println(numberFormat.format(number));

      //pattern ###,###.##
      numberFormat.applyPattern("###,###.##");
      System.out.println(numberFormat.format(number));

      number = 9.34;

      //pattern 000.###
      numberFormat.applyPattern("000.##");
      System.out.println(numberFormat.format(number));           
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

1.23456789123E8
1,2345,6789.12

Internalizacja Java - DecimalFormat specyficzny dla języka

Domyślnie obiekt DecimalFormat używa ustawień regionalnych maszyny JVM. Możemy zmienić domyślne locale podczas tworzenia obiektu DecimalFormat za pomocą klasy NumberFormat. W poniższym przykładzie użyjemy tego samego wzorca dla dwóch różnych ustawień regionalnych i możesz zauważyć różnicę w wynikach.

IOTester.java

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.##";
      double number = 123.45;

      Locale enlocale  = new Locale("en", "US");
      Locale dalocale  = new Locale("da", "DK");

      DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));
   

      decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));     
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

123.45
123,45

Internalizacja języka Java - klasa DecimalFormatSymbols

Używając klasy DecimalFormatSymbols, można zmienić domyślne symbole separatorów, symbole separatorów grupujących itp. Poniższy przykład ilustruje to samo.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

126,473.457
126:473;457

Internalizacja Java - grupowanie cyfr

Używając metody setGroupingSize () klasy DecimalFormat, można zmienić domyślne grupowanie liczb. Poniższy przykład ilustruje to samo.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      double number = 121223232473.4567;

      DecimalFormat decimalFormat = new DecimalFormat();

      System.out.println(number);
      System.out.println(decimalFormat.format(number));
   

      decimalFormat.setGroupingSize(4);
      System.out.println(decimalFormat.format(number));
   
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457

Internalizacja Java - klasa DateFormat

Klasa java.text.DateFormat formatuje daty zgodnie z ustawieniami narodowymi. Ponieważ różne kraje używają różnych formatów do wyświetlania dat. Ta klasa jest niezwykle przydatna w przypadku terminów w internalizacji aplikacji. Poniższy przykład pokazuje, jak utworzyć i używać klasy DateFormat.

IOTester.java

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale = new Locale("da","DK");

      DateFormat dateFormat = DateFormat.getDateInstance();

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);

      System.out.println(dateFormat.format(new Date()));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Nov 29, 2017
29-11-2017

Internalizacja Java - formatowanie dat

Klasa DateFormat udostępnia różne formaty do formatowania daty. Poniżej znajduje się lista niektórych formatów.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

W poniższym przykładzie pokażemy, jak używać różnych formatów.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017

Internalizacja Java - czas formatowania

Klasa DateFormat udostępnia różne formaty formatowania godziny. Należy użyć metody DateFormat.getTimeInstance (). Zobacz poniższy przykład.

W poniższym przykładzie pokażemy, jak używać różnych formatów do formatowania czasu.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST

Internalizacja Java - formatowanie daty i godziny

Klasa DateFormat udostępnia różne formaty do wspólnego formatowania daty i godziny. Należy użyć metody DateFormat.getDateTimeInstance (). Zobacz poniższy przykład.

W poniższym przykładzie pokażemy, jak używać różnych formatów do formatowania daty i godziny.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {

      DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  

   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST

Internalizacja języka Java - klasa SimpleDateFormat

Klasa java.text.SimpleDateFormat formatuje daty zgodnie z podanym wzorcem. Służy również do analizowania dat z łańcucha, w którym ciąg zawiera datę we wspomnianym formacie. Zobacz poniższy przykład użycia klasy SimpleDateFormat.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      String pattern = "dd-MM-yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      String dateText = "29-11-2017";

      date = simpleDateFormat.parse(dateText);

      System.out.println(simpleDateFormat.format(date));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017

Internalizacja Java - SimpleDateFormat specyficzny dla lokalizacji

Ustawienia regionalne mogą służyć do tworzenia formatowania specyficznego dla ustawień regionalnych we wzorcu w klasie SimpleDateFormat. Zobacz poniższy przykład użycia klasy SimpleDateFormat specyficznej dla ustawień regionalnych.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      Locale locale = new Locale("da", "DK");
      String pattern = "EEEEE MMMMM yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      simpleDateFormat = new SimpleDateFormat(pattern,locale);

      System.out.println(simpleDateFormat.format(date));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017

Internalizacja języka Java - klasa DecimalFormatSymbols

Używając klasy DecimalFormatSymbols, można zmienić domyślne symbole separatorów, symbole separatorów grupujących itp. Poniższy przykład ilustruje to samo.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

126,473.457
126:473;457

Internalizacja Java - wzorce formatu daty

Poniżej przedstawiono użycie znaków we wzorcach formatowania daty.

Sr.No.Klasa i opis
1

G

Aby wyświetlić Era.

2

y

Aby wyświetlić rok. Prawidłowe wartości yy, yyyy.

3

M

Aby wyświetlić miesiąc. Prawidłowe wartości MM, MMM lub MMMMM.

4

d

Aby wyświetlić dzień miesiąca. Prawidłowe wartości d, dd.

5

h

Aby wyświetlić godzinę dnia (1-12 AM / PM). Prawidłowa wartość hh.

6

H

Aby wyświetlić godzinę dnia (0-23). Prawidłowa wartość HH.

7

m

Aby wyświetlić minuty godziny (0-59). Ważna wartość mm.

8

s

Aby wyświetlić sekundę minuty (0-59). Prawidłowa wartość ss.

9

S

Aby wyświetlić milisekundy minuty (0-999). Ważna wartość SSS.

10

E

Aby wyświetlić dzień w tygodniu (np. Poniedziałek, wtorek itp.)

11

D

Aby wyświetlić dzień w roku (1-366).

12

F

Aby wyświetlić dzień tygodnia w miesiącu (np. 1. czwartek grudnia).

13

w

Aby wyświetlić tydzień w roku (1-53).

14

W

Aby wyświetlić tydzień w miesiącu (0-5)

15

a

Aby wyświetlić AM / PM

16

k

Aby wyświetlić godzinę w dzień (1-24).

17

K

Aby wyświetlić godzinę w dzień, AM / PM (0-11).

18

z

Aby wyświetlić strefę czasową.

W tym przykładzie formatujemy daty na podstawie różnych wzorców.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      String pattern = "dd-MM-yy";
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
      Date date = new Date();
      System.out.println(simpleDateFormat.format(date));

      pattern = "MM-dd-yyyy";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "yyyy-MM-dd HH:mm:ss";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));
}
}

Wynik

Zostanie wydrukowany następujący wynik.

29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530

Internalizacja Java - UTC

UTC oznacza skoordynowany czas uniwersalny. Jest to standard czasowy i jest powszechnie stosowany na całym świecie. Wszystkie strefy czasowe są obliczane porównawczo z przesunięciem czasu UTC. Na przykład czas w Kopenhadze w Danii to UTC + 1 oznacza czas UTC plus jedna godzina. Jest niezależny od czasu letniego i powinien być używany do przechowywania daty i godziny w bazach danych.

Konwersja stref czasowych

Poniższy przykład pokaże konwersję różnych stref czasowych. Wydrukujemy godzinę dnia i godzinę w milisekundach. Pierwsza będzie się różnić, a druga pozostanie taka sama.

IOTester.java

import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      Calendar date = new GregorianCalendar();

      date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
      date.set(Calendar.HOUR_OF_DAY, 12);

      System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("UTC: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
      System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("CPH: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
      System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("NYC: " + date.getTimeInMillis());
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540

Dostępne strefy czasowe

Poniższy przykład pokaże strefy czasowe dostępne w systemie.

IOTester.java

import java.text.ParseException;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      String[] availableIDs = TimeZone.getAvailableIDs();

      for(String id : availableIDs) {
         System.out.println("Timezone = " + id);
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST

Internalizacja Java - konwersja do Unicode z / na ciąg

W Javie tekst jest wewnętrznie przechowywany w formacie Unicode. Jeśli wejście / wyjście ma inny format, wymagana jest konwersja.

Konwersja

Poniższy przykład ilustruje konwersję łańcucha Unicode na bajt UTF8 [] i bajt UTF8 [] na bajt Unicode [].

IOTester.java

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, UnsupportedEncodingException {

      String unicodeString = "\u00C6\u00D8\u00C5" ;

      //convert Unicode to UTF8 format
      byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
      printBytes(utf8Bytes, "UTF 8 Bytes");

      //convert UTF8 format to Unicode
      String converted = new String(utf8Bytes, "UTF8");
      byte[] unicodeBytes = converted.getBytes();
      printBytes(unicodeBytes, "Unicode Bytes");
   }

   public static void printBytes(byte[] array, String name) {
      for (int k = 0; k < array.length; k++) {
         System.out.println(name + "[" + k + "] = " + array[k]);
          
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59

Internalizacja Java - Konwersja Unicode z / do czytnika / pisarza

Klasy Reader i Writer to klasy strumieniowe zorientowane na znaki. Można ich używać do odczytywania i konwertowania znaków Unicode.

Konwersja

Poniższy przykład przedstawia konwersję ciągu znaków Unicode na bajt UTF8 [] i bajt [] UTF8 na bajt [] w formacie Unicode przy użyciu klas Reader i Writer.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, IOException {

      String input = "This is a sample text" ;

      InputStream inputStream = new ByteArrayInputStream(input.getBytes());

      //get the UTF-8 data
      Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

      //convert UTF-8 to Unicode
      int data = reader.read();
      while(data != -1){
         char theChar = (char) data;
         System.out.print(theChar);
         data = reader.read();
      }
      reader.close();

      System.out.println();

      //Convert Unicode to UTF-8 Bytes
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));

      writer.write(input);
      writer.close();

      String out = new String(outputStream.toByteArray());
   
      System.out.println(out);
   }  
}

Wynik

Zostanie wydrukowany następujący wynik.

This is a sample text
This is a sample text
Wydrukować