Nội bộ hóa Java - Hướng dẫn nhanh

Nội bộ hóa

Nội bộ hóa hoặc I18N đề cập đến khả năng của một Ứng dụng có thể phục vụ người dùng bằng nhiều ngôn ngữ khác nhau. Java có sẵn hỗ trợ cho Internalization. Java cũng cung cấp định dạng số, tiền tệ và điều chỉnh ngày giờ cho phù hợp.

Java Internationalization giúp ứng dụng java xử lý các ngôn ngữ khác nhau, định dạng số, tiền tệ, định dạng thời gian cụ thể theo khu vực.

Bản địa hóa

Bản địa hóa hoặc L10N là khả năng thích ứng của ứng dụng là cách ứng dụng tự điều chỉnh với ngôn ngữ cụ thể, định dạng số, cài đặt ngày và giờ, v.v.

Một ứng dụng java nên được quốc tế hóa để có thể bản địa hóa chính nó.

Thông tin phụ thuộc vào văn hóa

Các mục thông tin sau đây thường thay đổi theo các múi giờ hoặc nền văn hóa khác nhau.

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • Số điện thoại

  • Địa chỉ Bưu điện

  • Nhãn GUI

Các lớp quốc tế hóa

Java có một tập hợp các lớp tích hợp giúp quốc tế hóa một ứng dụng. Các lớp sau đây:

Sr.No. Lớp & Mô tả
1

Locale

Trình bày một ngôn ngữ cùng với quốc gia / khu vực.

2

ResourceBundle

Chứa văn bản hoặc đối tượng được bản địa hóa.

3

NumberFormat

Sử dụng để định dạng số / đơn vị tiền tệ theo ngôn ngữ.

4

DecimalFormat

Sử dụng để định dạng số theo định dạng tùy chỉnh và theo ngôn ngữ.

5

DateFormat

Sử dụng để định dạng ngày tháng theo ngôn ngữ.

6

SimpleDateFormat

Sử dụng để định dạng ngày theo định dạng tùy chỉnh và theo ngôn ngữ.

Nội bộ hóa Java - Thiết lập môi trường

Trong chương này, chúng ta sẽ thảo luận về các khía cạnh khác nhau của việc thiết lập một môi trường tương thích cho Java.

Thiết lập môi trường cục bộ

Nếu bạn vẫn sẵn sàng thiết lập môi trường của mình cho ngôn ngữ lập trình Java, thì phần này sẽ hướng dẫn bạn cách tải xuống và thiết lập Java trên máy của bạn. Sau đây là các bước để thiết lập môi trường.

Java SE có sẵn miễn phí từ liên kết Tải xuống Java . Bạn có thể tải xuống phiên bản dựa trên hệ điều hành của mình.

Làm theo hướng dẫn để tải xuống Java và chạy .exeđể cài đặt Java trên máy của bạn. Khi bạn đã cài đặt Java trên máy của mình, bạn sẽ cần đặt các biến môi trường để trỏ đến các thư mục cài đặt chính xác -

Thiết lập đường dẫn cho Windows

Giả sử bạn đã cài đặt Java trong thư mục c: \ Program Files \ java \ jdk -

  • Nhấp chuột phải vào 'Máy tính của tôi' và chọn 'Thuộc tính'.

  • Nhấp vào nút 'Biến môi trường' trong tab 'Nâng cao'.

  • Bây giờ, hãy thay đổi biến 'Đường dẫn' để nó cũng chứa đường dẫn đến tệp thực thi Java. Ví dụ, nếu đường dẫn hiện được đặt thành 'C: \ WINDOWS \ SYSTEM32', thì hãy thay đổi đường dẫn của bạn thành 'C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin'.

Thiết lập đường dẫn cho Linux, UNIX, Solaris, FreeBSD

Biến môi trường PATH nên được đặt để trỏ đến nơi các tệp nhị phân Java đã được cài đặt. Tham khảo tài liệu shell của bạn, nếu bạn gặp khó khăn khi thực hiện việc này.

Ví dụ, nếu bạn sử dụng bash làm trình bao, thì bạn sẽ thêm dòng sau vào cuối '.bashrc: export PATH = / path / to / java: $ PATH'

Trình chỉnh sửa Java phổ biến

Để viết các chương trình Java của bạn, bạn sẽ cần một trình soạn thảo văn bản. Thậm chí có nhiều IDE phức tạp hơn có sẵn trên thị trường. Nhưng hiện tại, bạn có thể xem xét một trong những điều sau:

  • Notepad - Trên máy Windows, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản đơn giản nào như Notepad (Khuyến nghị cho hướng dẫn này), TextPad.

  • Netbeans - Một IDE Java là mã nguồn mở và miễn phí có thể được tải xuống từ https://www.netbeans.org/index.html.

  • Eclipse - Một IDE Java được phát triển bởi cộng đồng nguồn mở eclipse và có thể được tải xuống từ https://www.eclipse.org/.

Tiếp theo là gì?

Chương tiếp theo sẽ hướng dẫn bạn cách viết và chạy chương trình Java đầu tiên của bạn và một số cú pháp cơ bản quan trọng trong Java cần thiết để phát triển ứng dụng.

Nội bộ hóa Java - Lớp ngôn ngữ

Đối tượng Locale đại diện cho một khu vực địa lý / chính trị / văn hóa cụ thể. Bất kỳ hoạt động nào yêu cầu Ngôn ngữ thực hiện nhiệm vụ của nó được gọi là hoạt động nhạy cảm với ngôn ngữ và sử dụng Ngôn ngữ để nắm vững thông tin liên quan đến người dùng. Ví dụ: hiển thị một số là một hoạt động nhạy cảm với ngôn ngữ. Số phải được định dạng theo phong tục và quy ước của quốc gia, khu vực hoặc văn hóa bản địa của người dùng.

Nội dung ngôn ngữ

Một đối tượng Locale chứa những điều sau:

  • Language- ISO 639 mã ngôn ngữ alpha-2 hoặc alpha-3, hoặc ngôn ngữ đã đăng ký gắn thẻ phụ lên đến 8 chữ cái alpha. Mã alpha-2 phải được sử dụng nếu có cả mã alpha-2 và alpha-3. Trường ngôn ngữ không phân biệt chữ hoa chữ thường, nhưng Ngôn ngữ luôn chuẩn hóa thành chữ thường.

  • Script- Mã tập lệnh ISO 15924 alpha-4. Trường script không phân biệt chữ hoa chữ thường, nhưng Locale luôn chuẩn hóa thành chữ hoa tiêu đề.

  • Country (region)- Mã quốc gia ISO 3166 alpha-2 hoặc mã vùng UN M.49 số-3. Trường quốc gia không phân biệt chữ hoa chữ thường, nhưng Ngôn ngữ luôn chuẩn hóa thành chữ hoa.

  • Variant- Bất kỳ giá trị tùy ý nào được sử dụng để chỉ ra một biến thể của Ngôn ngữ. Trong trường hợp có hai hoặc nhiều giá trị biến thể, mỗi giá trị chỉ ra ngữ nghĩa riêng của nó, các giá trị này phải được sắp xếp theo mức độ quan trọng, quan trọng nhất trước, được phân tách bằng dấu gạch dưới ('_'). Trường biến thể phân biệt chữ hoa chữ thường.

  • Extensions- Bản đồ từ các phím ký tự đơn đến các giá trị chuỗi, chỉ ra các phần mở rộng ngoài nhận dạng ngôn ngữ. Các phần mở rộng trong Ngôn ngữ triển khai ngữ nghĩa và cú pháp của thẻ phụ mở rộng BCP 47 và thẻ phụ sử dụng riêng. Các tiện ích mở rộng không phân biệt chữ hoa chữ thường, nhưng Locale chuẩn hóa tất cả các khóa và giá trị của tiện ích mở rộng thành chữ thường.

Nội bộ hóa Java - Ví dụ - Chi tiết ngôn ngữ

Trong ví dụ này, chúng tôi sẽ lấy ngôn ngữ mặc định và in chi tiết của nó. Sau đó, tạo một ngôn ngữ cho "fr" và in các chi tiết của nó.

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());  
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

Default Locale Properties:

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

fr Locale Properties:

France
French
French (France)
FRA
fra
fr
FR

Nội bộ hóa Java - Ví dụ - Ngôn ngữ hiển thị

Trong ví dụ này, chúng ta sẽ lấy ngôn ngữ hiển thị cho mỗi ngôn ngữ được truyền làm đối số.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

English
anglais
inglés

Nội bộ hóa Java - Lớp ResourceBundle

Lớp ResourceBundle được sử dụng để lưu trữ văn bản và các đối tượng nhạy cảm với ngôn ngữ. Nói chung, chúng tôi sử dụng các tệp thuộc tính để lưu trữ văn bản cụ thể của ngôn ngữ và sau đó biểu diễn chúng bằng đối tượng ResourceBundle. Sau đây là các bước để sử dụng tệp thuộc tính ngôn ngữ cụ thể trong một ứng dụng dựa trên java.

Bước 1: Tạo tệp thuộc tính.

Giả sử chúng ta cần tệp thuộc tính cho ngôn ngữ tiếng Anh. Sau đó, tạo một tên tệp thuộc tính XXX_en_US.properties trong đó XXX là tên của tệp và en_US đại diện cho ngôn ngữ cho tiếng Anh (Mỹ).

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

Bây giờ chúng ta hãy tạo tệp thuộc tính cho ngôn ngữ Pháp. Sau đó, tạo tên tệp thuộc tính XXX_fr_FR.properties trong đó XXX là tên của tệp và fr_FR đại diện cho ngôn ngữ cho tiếng Pháp (Pháp).

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

Ở đây bạn có thể tìm ra rằng khóa giống nhau nhưng giá trị là ngôn ngữ cụ thể trong cả tệp thuộc tính.

Bước 2: Tạo đối tượng ResourceBundle

Tạo đối tượng ResourceBundle với tên tệp thuộc tính và ngôn ngữ bằng cú pháp sau.

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

Bước 3: Lấy giá trị từ đối tượng ResourceBundle.

Nhận giá trị từ đối tượng ResourceBundle bằng cách chuyển khóa.

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

Thí dụ

Ví dụ sau minh họa việc sử dụng các đối tượng ResourceBundle để hiển thị các giá trị ngôn ngữ cụ thể từ các tệp thuộc tính.

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"));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Lưu ý cho Quy ước Đặt tên

Sau đây là các quy ước đặt tên cho tệp thuộc tính.

  • Đối với tệp thuộc tính được ánh xạ tới ngôn ngữ mặc định, không có tiền tố nào là bắt buộc. message_en_US.properties tương đương với message.properties.

  • Đối với tệp thuộc tính được ánh xạ tới ngôn ngữ, tiền tố có thể được đính kèm theo hai cách. message_fr.properties tương đương với message_fr_FR.properties.

Java Internalization - Lớp NumberFormat

Lớp java.text.NumberFormat được sử dụng để định dạng số và tiền tệ theo Ngôn ngữ cụ thể. Các định dạng số khác nhau giữa các quốc gia. Ví dụ: Ở Đan Mạch, các phân số của một số được phân tách khỏi phần nguyên bằng dấu phẩy trong khi ở Anh, họ sử dụng dấu chấm làm dấu phân cách.

Ví dụ - Định dạng số

Trong ví dụ này, chúng tôi đang định dạng số dựa trên ngôn ngữ Hoa Kỳ và ngôn ngữ Đan Mạch.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

100,76
100.76

Nội bộ hóa Java - Định dạng tiền tệ

Trong ví dụ này, chúng tôi đang định dạng tiền tệ dựa trên ngôn ngữ Hoa Kỳ và Ngôn ngữ Đan Mạch.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

kr 100,76
$100.76

Java Internalization - Định dạng Phần trăm

Trong ví dụ này, chúng tôi đang định dạng số ở định dạng phần trăm.

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));    
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

76%

Nội bộ hóa Java - Đặt độ chính xác tối thiểu / tối đa

Trong ví dụ này, chúng tôi đang đặt các chữ số tối thiểu và tối đa cho cả phần nguyên cũng như phần thập phân của một số.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

234.763

Java Internalization - Đặt chế độ làm tròn

Trong ví dụ này, chúng tôi đang giới thiệu Chế độ làm tròn.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

100
99

Nội bộ hóa Java - Số phân tích cú pháp

Trong ví dụ này, chúng tôi đang giới thiệu việc phân tích cú pháp của số có ở các ngôn ngữ khác nhau.

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"));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

100.76
10076

Nội bộ hóa Java - Lớp DecimalFormat

Lớp java.text.DecimalFormat được sử dụng để định dạng số theo định dạng tùy chỉnh và theo ngôn ngữ.

Ví dụ - Định dạng số

Trong ví dụ này, chúng tôi đang định dạng các số dựa trên một mẫu nhất định.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

1.23456789123E8
1,2345,6789.12

Java Internalization - Mẫu định dạng

Tiếp theo là việc sử dụng các ký tự trong các mẫu định dạng.

Sr.No. Lớp & Mô tả
1

0

Để hiển thị 0 nếu có ít chữ số hơn.

2

#

Để hiển thị các số 0 đứng đầu bỏ dấu chữ số.

3

.

Phân số thập phân.

4

,

Phân tách nhóm.

5

E

Mantissa và dấu phân tách số mũ cho các định dạng hàm mũ.

6

;

Dấu phân cách định dạng.

7

-

Tiền tố số âm.

số 8

%

Hiển thị số dưới dạng phần trăm sau khi nhân với 100.

9

?

Hiển thị số dưới dạng mille sau khi nhân với 1000.

10

X

Để đánh dấu ký tự dưới dạng tiền tố / hậu tố số.

11

'

Để đánh dấu trích dẫn xung quanh các ký tự đặc biệt.

Trong ví dụ này, chúng tôi đang định dạng các số dựa trên các mẫu khác nhau.

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));           
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

1.23456789123E8
1,2345,6789.12

Nội bộ hóa Java - Định dạng thập phân cụ thể theo ngôn ngữ địa phương

Theo mặc định, đối tượng DecimalFormat đang sử dụng ngôn ngữ của JVM. Chúng ta có thể thay đổi ngôn ngữ mặc định trong khi tạo đối tượng DecimalFormat bằng cách sử dụng lớp NumberFormat. Trong ví dụ dưới đây, chúng tôi sẽ sử dụng cùng một mẫu cho hai ngôn ngữ khác nhau và bạn có thể nhận ra sự khác biệt trong kết quả đầu ra.

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));     
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

123.45
123,45

Nội bộ hóa Java - Lớp DecimalFormatSymbols

Sử dụng lớp DecimalFormatSymbols, các ký hiệu phân tách mặc định, ký hiệu phân tách nhóm, v.v. có thể được thay đổi. Ví dụ sau đây là minh họa tương tự.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

126,473.457
126:473;457

Nội bộ hóa Java - Chữ số nhóm

Sử dụng phương thức setGroupingSize () của DecimalFormat, có thể thay đổi nhóm số mặc định. Ví dụ sau đây là minh họa tương tự.

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));
   
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Nội bộ hóa Java - Lớp DateFormat

java.text.DateFormat định dạng lớp ngày tháng theo ngôn ngữ. Vì các hệ số khác nhau sử dụng các định dạng khác nhau để hiển thị ngày tháng. Lớp này cực kỳ hữu ích trong việc xử lý ngày tháng trong nội bộ ứng dụng. Ví dụ sau đây cho thấy cách tạo và sử dụng DateFormat Class.

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()));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

Nov 29, 2017
29-11-2017

Java Internalization - Định dạng ngày

Lớp DateFormat cung cấp nhiều định dạng khác nhau để định dạng ngày tháng. Sau đây là danh sách một số định dạng.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

Trong ví dụ sau, chúng tôi sẽ chỉ ra cách sử dụng các định dạng khác nhau.

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()));
  
  
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Nội bộ hóa Java - Thời gian định dạng

Lớp DateFormat cung cấp nhiều định dạng khác nhau để định dạng thời gian. Phương thức DateFormat.getTimeInstance () sẽ được sử dụng. Xem ví dụ bên dưới.

Trong ví dụ sau, chúng tôi sẽ trình bày cách sử dụng các định dạng khác nhau để định dạng thời gian.

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()));
  
  
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Java Internalization - Định dạng Ngày và Giờ

Lớp DateFormat cung cấp nhiều định dạng khác nhau để định dạng ngày và giờ cùng nhau. Phương thức DateFormat.getDateTimeInstance () sẽ được sử dụng. Xem ví dụ bên dưới.

Trong ví dụ sau, chúng tôi sẽ chỉ ra cách sử dụng các định dạng khác nhau để định dạng ngày và giờ.

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()));
  

   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Java Internalization - Lớp SimpleDateFormat

lớp java.text.SimpleDateFormat định dạng ngày tháng theo mẫu đã cho. Nó cũng được sử dụng để phân tích cú pháp ngày từ chuỗi trong đó chuỗi chứa ngày ở định dạng được đề cập. Xem ví dụ sau về việc sử dụng lớp 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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Java Internalization - SimpleDateFormat theo ngôn ngữ cụ thể

Ngôn ngữ có thể được sử dụng để tạo định dạng ngôn ngữ cụ thể trên một mẫu trong lớp SimpleDateFormat. Xem ví dụ sau về việc sử dụng lớp SimpleDateFormat dành riêng cho ngôn ngữ địa phương.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Nội bộ hóa Java - Lớp DecimalFormatSymbols

Sử dụng lớp DecimalFormatSymbols, các ký hiệu phân tách mặc định, ký hiệu phân tách nhóm, v.v. có thể được thay đổi. Ví dụ sau đây là minh họa tương tự.

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));
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

126,473.457
126:473;457

Nội bộ hóa Java - Mẫu định dạng ngày

Tiếp theo là việc sử dụng các ký tự trong các mẫu định dạng ngày.

Sr.No. Lớp & Mô tả
1

G

Để hiển thị Kỷ nguyên.

2

y

Để hiển thị Năm. Giá trị hợp lệ yy, yyyy.

3

M

Để hiển thị Tháng. Giá trị hợp lệ MM, MMM hoặc MMMMM.

4

d

Để hiển thị ngày trong tháng. Các giá trị hợp lệ d, đ.

5

h

Để hiển thị giờ trong ngày (1-12 giờ sáng / giờ chiều). Giá trị hợp lệ hh.

6

H

Để hiển thị giờ trong ngày (0-23). Giá trị hợp lệ HH.

7

m

Để hiển thị phút của giờ (0-59). Giá trị hợp lệ mm.

số 8

s

Để hiển thị giây của phút (0-59). Giá trị hợp lệ ss.

9

S

Để hiển thị mili giây của phút (0-999). Giá trị hợp lệ SSS.

10

E

Để hiển thị Ngày trong tuần (ví dụ: Thứ Hai, Thứ Ba, v.v.)

11

D

Để hiển thị Ngày trong năm (1-366).

12

F

Để hiển thị Ngày trong tuần trong tháng (ví dụ: Thứ năm đầu tiên của tháng 12).

13

w

Để hiển thị Tuần trong năm (1-53).

14

W

Để hiển thị Tuần trong tháng (0-5)

15

a

Để hiển thị AM / PM

16

k

Để hiển thị Giờ trong ngày (1-24).

17

K

Để hiển thị Giờ trong ngày, SA / CH (0-11).

18

z

Để hiển thị Múi giờ.

Trong ví dụ này, chúng tôi đang định dạng ngày dựa trên các mẫu khác nhau.

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));
}
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Nội bộ hóa Java - UTC

UTC là viết tắt của Giờ quốc tế phối hợp. Nó là tiêu chuẩn thời gian và được sử dụng phổ biến trên toàn thế giới. Tất cả các múi giờ đều được tính toán so sánh với UTC là bù đắp. Ví dụ: thời gian ở Copenhagen, Đan Mạch là UTC + 1 có nghĩa là thời gian UTC cộng thêm một giờ. Nó độc lập với Tiết kiệm ánh sáng ban ngày và nên được sử dụng để lưu trữ ngày và giờ trong cơ sở dữ liệu.

Chuyển đổi múi giờ

Ví dụ sau sẽ giới thiệu việc chuyển đổi các múi giờ khác nhau. Chúng tôi sẽ in giờ trong ngày và thời gian tính bằng mili giây. Đầu tiên sẽ thay đổi và thứ hai sẽ vẫn như cũ.

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());
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Múi giờ khả dụng

Ví dụ sau sẽ hiển thị các múi giờ có sẵn với hệ thống.

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);
      }
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Nội bộ hóa Java - Chuyển đổi Unicode từ / sang chuỗi

Trong java, văn bản được lưu trữ nội bộ ở định dạng Unicode. Nếu đầu vào / đầu ra ở định dạng khác thì cần chuyển đổi.

Chuyển đổi

Ví dụ sau sẽ giới thiệu việc chuyển đổi Chuỗi Unicode sang byte UTF8 [] và byte UTF8 [] sang byte 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]);
          
      }
   }
}

Đầu ra

Nó sẽ in ra kết quả sau.

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

Java Internalization - Chuyển đổi Unicode từ / sang Reader / Writer

Các lớp Reader và Writer là các lớp luồng định hướng ký tự. Chúng có thể được sử dụng để đọc và chuyển đổi các ký tự Unicode.

Chuyển đổi

Ví dụ sau sẽ giới thiệu việc chuyển đổi Chuỗi Unicode thành byte UTF8 [] và byte UTF8 [] sang byte Unicode [] bằng cách sử dụng các lớp Reader và 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);
   }  
}

Đầu ra

Nó sẽ in ra kết quả sau.

This is a sample text
This is a sample text
In