Java Internalization - คู่มือฉบับย่อ

Internalization

Internalization หรือ I18N หมายถึงความสามารถของแอปพลิเคชันที่สามารถให้บริการผู้ใช้ในหลายภาษาและต่างกัน Java มีการสนับสนุน Internalization ในตัว Java ยังมีการจัดรูปแบบตัวเลขสกุลเงินและการปรับวันที่และเวลาให้สอดคล้องกัน

Java Internationalization ช่วยให้แอปพลิเคชัน java จัดการกับภาษารูปแบบตัวเลขสกุลเงินการจัดรูปแบบเวลาเฉพาะภูมิภาคต่างๆ

การแปล

การแปลเป็นภาษาท้องถิ่นหรือ L10N คือความสามารถในการปรับตัวของแอปพลิเคชันซึ่งเป็นวิธีที่แอปพลิเคชันปรับตัวเองด้วยภาษารูปแบบตัวเลขการตั้งค่าวันที่และเวลา

แอปพลิเคชัน java ควรเป็นสากลเพื่อให้สามารถแปลได้เอง

ข้อมูลที่ขึ้นอยู่กับวัฒนธรรม

รายการข้อมูลต่อไปนี้มักจะแตกต่างกันไปตามเขตเวลาหรือวัฒนธรรมที่แตกต่างกัน

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • หมายเลขโทรศัพท์

  • ที่อยู่ไปรษณีย์

  • ป้ายกำกับ GUI

Internationalization Classes

Java มีชุดของคลาสในตัวซึ่งช่วยในการทำให้แอปพลิเคชันเป็นสากล ชั้นเรียนเหล่านี้มีดังต่อไปนี้:

ซีเนียร์ชั้นเรียนและคำอธิบาย
1

Locale

แสดงภาษาพร้อมกับประเทศ / ภูมิภาค

2

ResourceBundle

มีข้อความหรือวัตถุที่แปลเป็นภาษาท้องถิ่น

3

NumberFormat

ใช้เพื่อจัดรูปแบบตัวเลข / สกุลเงินตามสถานที่

4

DecimalFormat

ใช้เพื่อจัดรูปแบบตัวเลขตามรูปแบบที่กำหนดเองและตามสถานที่

5

DateFormat

ใช้เพื่อจัดรูปแบบวันที่ตามสถานที่

6

SimpleDateFormat

ใช้เพื่อจัดรูปแบบวันที่ตามรูปแบบที่กำหนดเองและตามสถานที่

Java Internalization - การตั้งค่าสภาพแวดล้อม

ในบทนี้เราจะพูดถึงแง่มุมต่างๆของการตั้งค่าสภาพแวดล้อมที่เหมาะสำหรับ Java

การตั้งค่าสภาพแวดล้อมท้องถิ่น

หากคุณยังเต็มใจที่จะตั้งค่าสภาพแวดล้อมของคุณสำหรับภาษาการเขียนโปรแกรม Java ส่วนนี้จะแนะนำคุณเกี่ยวกับวิธีดาวน์โหลดและตั้งค่า Java บนเครื่องของคุณ ต่อไปนี้เป็นขั้นตอนในการตั้งค่าสภาพแวดล้อม

Java SE เป็นอิสระที่มีอยู่จากการเชื่อมโยงดาวน์โหลด Java คุณสามารถดาวน์โหลดเวอร์ชันตามระบบปฏิบัติการของคุณ

ทำตามคำแนะนำเพื่อดาวน์โหลด Java และเรียกใช้ไฟล์ .exeเพื่อติดตั้ง Java บนเครื่องของคุณ เมื่อคุณติดตั้ง Java บนเครื่องของคุณคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมเพื่อชี้ไปที่ไดเร็กทอรีการติดตั้งที่ถูกต้อง -

การตั้งค่าเส้นทางสำหรับ Windows

สมมติว่าคุณติดตั้ง Java ในไดเร็กทอรีc: \ Program Files \ java \ jdk -

  • คลิกขวาที่ 'My Computer' และเลือก 'Properties'

  • คลิกปุ่ม "ตัวแปรสภาพแวดล้อม" ใต้แท็บ "ขั้นสูง"

  • ตอนนี้เปลี่ยนตัวแปร 'Path' เพื่อให้มีพา ธ ไปยังไฟล์ปฏิบัติการ Java ตัวอย่างหากเส้นทางถูกตั้งค่าเป็น 'C: \ WINDOWS \ SYSTEM32' ให้เปลี่ยนเส้นทางของคุณเป็นอ่าน 'C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin'

การตั้งค่าเส้นทางสำหรับ Linux, UNIX, Solaris, FreeBSD

ควรตั้งค่า PATH ตัวแปรสภาพแวดล้อมให้ชี้ไปที่ตำแหน่งที่ติดตั้งไบนารี Java โปรดดูเอกสารประกอบเชลล์ของคุณหากคุณมีปัญหาในการดำเนินการนี้

ตัวอย่างเช่นหากคุณใช้bashเป็นเชลล์ของคุณคุณจะต้องเพิ่มบรรทัดต่อไปนี้ต่อท้าย '.bashrc: export PATH = / path / to / java: $ PATH'

บรรณาธิการ Java ยอดนิยม

ในการเขียนโปรแกรม Java ของคุณคุณจะต้องมีโปรแกรมแก้ไขข้อความ มี IDE ที่ซับซ้อนมากขึ้นในตลาด แต่ในตอนนี้คุณสามารถพิจารณาข้อใดข้อหนึ่งต่อไปนี้ -

  • Notepad - บนเครื่อง Windows คุณสามารถใช้โปรแกรมแก้ไขข้อความง่ายๆเช่น Notepad (แนะนำสำหรับบทช่วยสอนนี้), TextPad

  • Netbeans - Java IDE ที่เป็นโอเพ่นซอร์สและฟรีซึ่งสามารถดาวน์โหลดได้จาก https://www.netbeans.org/index.html.

  • Eclipse - Java IDE ที่พัฒนาโดยชุมชนโอเพนซอร์ส eclipse และสามารถดาวน์โหลดได้จาก https://www.eclipse.org/.

Next คืออะไร?

บทต่อไปจะสอนวิธีเขียนและรันโปรแกรม Java ตัวแรกของคุณและไวยากรณ์พื้นฐานที่สำคัญบางอย่างใน Java ที่จำเป็นสำหรับการพัฒนาแอปพลิเคชัน

Java Internalization - คลาสโลแคล

ออบเจ็กต์สถานที่แสดงถึงภูมิภาคทางภูมิศาสตร์ / การเมือง / วัฒนธรรมที่เฉพาะเจาะจง การดำเนินการใด ๆ ที่ต้องใช้ Locale เพื่อดำเนินการเรียกว่าการดำเนินการตามโลแคลและใช้ Locale เพื่อควบคุมข้อมูลหลักที่สัมพันธ์กับผู้ใช้ ตัวอย่างเช่นการแสดงตัวเลขเป็นการดำเนินการที่คำนึงถึงโลแคล ควรจัดรูปแบบหมายเลขตามประเพณีและอนุสัญญาของประเทศต้นทางภูมิภาคหรือวัฒนธรรมของผู้ใช้

สารบัญสถานที่

ออบเจ็กต์ Locale ประกอบด้วยสิ่งต่อไปนี้:

  • Language- รหัสภาษา ISO 639 alpha-2 หรือ alpha-3 หรือแท็กย่อยภาษาที่ลงทะเบียนไม่เกิน 8 ตัวอักษรอัลฟ่า ต้องใช้รหัส alpha-2 หากมีทั้งรหัส alpha-2 และ alpha-3 ช่องภาษาไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ แต่ภาษาจะกำหนดเป็นตัวพิมพ์เล็กเสมอ

  • Script- รหัสสคริปต์ ISO 15924 alpha-4 ฟิลด์สคริปต์ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ Locale จะกำหนดเป็นตัวพิมพ์ใหญ่เสมอ

  • Country (region)- รหัสประเทศ ISO 3166 alpha-2 หรือรหัสพื้นที่ UN M.49 ตัวเลข -3 ช่องประเทศไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ แต่ภาษาจะกำหนดเป็นตัวพิมพ์ใหญ่เสมอ

  • Variant- ค่าที่กำหนดเองใด ๆ ที่ใช้เพื่อระบุรูปแบบของสถานที่ ในกรณีที่มีค่าตัวแปรสองค่าขึ้นไปซึ่งแต่ละค่าบ่งชี้ความหมายของตัวเองค่าเหล่านี้ควรเรียงลำดับตามความสำคัญโดยที่สำคัญที่สุดก่อนคั่นด้วยเครื่องหมายขีดล่าง ('_') ฟิลด์ตัวแปรจะคำนึงถึงขนาดตัวพิมพ์

  • Extensions- แผนที่จากคีย์อักขระเดี่ยวไปจนถึงค่าสตริงซึ่งระบุส่วนขยายนอกเหนือจากการระบุภาษา ส่วนขยายใน Locale ใช้ความหมายและไวยากรณ์ของแท็กย่อยส่วนขยาย BCP 47 และแท็กย่อยสำหรับการใช้งานส่วนตัว ส่วนขยายไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ แต่ Locale จะกำหนดคีย์ส่วนขยายและค่าทั้งหมดให้เป็นตัวพิมพ์เล็ก

Java Internalization - ตัวอย่าง - รายละเอียดโลแคล

ในตัวอย่างนี้เราจะได้รับตำแหน่งที่ตั้งเริ่มต้นและพิมพ์รายละเอียด จากนั้นสร้างโลแคลสำหรับ "fr" และพิมพ์รายละเอียด

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

Default Locale Properties:

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

fr Locale Properties:

France
French
French (France)
FRA
fra
fr
FR

Java Internalization - ตัวอย่าง - ภาษาที่แสดง

ในตัวอย่างนี้เราจะได้รับภาษาที่แสดงต่อสถานที่ที่ส่งผ่านเป็นอาร์กิวเมนต์

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

English
anglais
inglés

Java Internalization - คลาส ResourceBundle

คลาส ResourceBundle ใช้ในการจัดเก็บข้อความและอ็อบเจ็กต์ที่มีความอ่อนไหวด้านโลแคล โดยทั่วไปเราใช้ไฟล์คุณสมบัติเพื่อจัดเก็บข้อความเฉพาะโลแคลจากนั้นแสดงโดยใช้อ็อบเจ็กต์ ResourceBundle ต่อไปนี้เป็นขั้นตอนในการใช้ไฟล์คุณสมบัติเฉพาะโลแคลในแอ็พพลิเคชันที่ใช้ java

ขั้นตอนที่ 1: สร้างไฟล์คุณสมบัติ

สมมติว่าเราต้องการไฟล์คุณสมบัติสำหรับโลแคลภาษาอังกฤษ จากนั้นสร้างชื่อไฟล์คุณสมบัติ XXX_en_US.properties โดยที่ XXX เป็นชื่อของไฟล์และ en_US แทนโลแคลสำหรับภาษาอังกฤษ (US)

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

ตอนนี้มาสร้างไฟล์คุณสมบัติสำหรับภาษาฝรั่งเศส จากนั้นสร้างชื่อไฟล์คุณสมบัติ XXX_fr_FR.properties โดยที่ XXX เป็นชื่อของไฟล์และ fr_FR แทนโลแคลสำหรับ French (ฝรั่งเศส)

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

ที่นี่คุณสามารถทราบได้ว่าคีย์นั้นเหมือนกัน แต่ค่าเป็นโลแคลเฉพาะในทั้งไฟล์คุณสมบัติ

ขั้นตอนที่ 2: สร้างวัตถุ ResourceBundle

สร้างอ็อบเจ็กต์ ResourceBundle ด้วยชื่อไฟล์คุณสมบัติและโลแคลโดยใช้ไวยากรณ์ต่อไปนี้

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

ขั้นตอนที่ 3: รับค่าจากวัตถุ ResourceBundle

รับค่าจากวัตถุ ResourceBundle โดยการส่งผ่านคีย์

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

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้อ็อบเจ็กต์ ResourceBundle เพื่อแสดงค่าเฉพาะโลแคลจากไฟล์คุณสมบัติ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

หมายเหตุสำหรับหลักการตั้งชื่อ

ต่อไปนี้เป็นหลักการตั้งชื่อสำหรับไฟล์คุณสมบัติ

  • สำหรับไฟล์คุณสมบัติที่แมปกับโลแคลเริ่มต้นไม่จำเป็นต้องมีคำนำหน้า message_en_US.properties เทียบเท่ากับ message.properties

  • สำหรับไฟล์คุณสมบัติที่แมปกับโลแคลสามารถแนบคำนำหน้าได้สองวิธี message_fr.properties เทียบเท่ากับ message_fr_FR.properties

Java Internalization - คลาส NumberFormat

คลาส java.text.NumberFormat ใช้สำหรับการจัดรูปแบบตัวเลขและสกุลเงินตามสถานที่เฉพาะ รูปแบบตัวเลขแตกต่างกันไปในแต่ละประเทศ ตัวอย่างเช่นในเดนมาร์กเศษส่วนของตัวเลขจะถูกแยกออกจากส่วนจำนวนเต็มโดยใช้ลูกน้ำในขณะที่ในอังกฤษจะใช้จุดเป็นตัวคั่น

ตัวอย่าง - จัดรูปแบบตัวเลข

ในตัวอย่างนี้เรากำลังจัดรูปแบบตัวเลขตามภาษาของสหรัฐอเมริกาและภาษาเดนมาร์ก

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

100,76
100.76

Java Internalization - จัดรูปแบบสกุลเงิน

ในตัวอย่างนี้เรากำลังจัดรูปแบบสกุลเงินตามสถานที่ตั้งของสหรัฐอเมริกาและภาษาเดนมาร์ก

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

kr 100,76
$100.76

Java Internalization - รูปแบบเปอร์เซ็นต์

ในตัวอย่างนี้เรากำลังจัดรูปแบบตัวเลขในรูปแบบเปอร์เซ็นต์

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

76%

Java Internalization - ตั้งค่าความแม่นยำต่ำสุด / สูงสุด

ในตัวอย่างนี้เรากำลังตั้งค่าตัวเลขขั้นต่ำและสูงสุดสำหรับทั้งจำนวนเต็มและส่วนที่เป็นเศษส่วนของตัวเลข

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

234.763

Java Internalization - ตั้งค่าโหมดการปัดเศษ

ในตัวอย่างนี้เรากำลังแสดงโหมดการปัดเศษ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

100
99

Java Internalization - การแยกวิเคราะห์ตัวเลข

ในตัวอย่างนี้เรากำลังแสดงการแยกวิเคราะห์จำนวนที่มีอยู่ในภาษาที่ต่างกัน

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

100.76
10076

Java Internalization - คลาส DecimalFormat

คลาส java.text.DecimalFormat ใช้สำหรับการจัดรูปแบบตัวเลขตามรูปแบบที่กำหนดเองและตามโลแคล

ตัวอย่าง - จัดรูปแบบตัวเลข

ในตัวอย่างนี้เรากำลังจัดรูปแบบตัวเลขตามรูปแบบที่กำหนด

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

1.23456789123E8
1,2345,6789.12

Java Internalization - รูปแบบรูปแบบ

สิ่งที่ตามมาคือการใช้อักขระในการจัดรูปแบบรูปแบบ

ซีเนียร์ชั้นเรียนและคำอธิบาย
1

0

เพื่อแสดง 0 หากมีตัวเลขน้อยกว่า

2

#

เพื่อแสดงตัวเลขที่นำเลขศูนย์นำหน้า

3

.

ตัวคั่นทศนิยม

4

,

ตัวคั่นการจัดกลุ่ม

5

E

ตัวคั่น Mantissa และ Exponent สำหรับรูปแบบเอกซ์โพเนนเชียล

6

;

ตัวคั่นรูปแบบ

7

-

คำนำหน้าจำนวนลบ

8

%

แสดงตัวเลขเป็นเปอร์เซ็นต์หลังจากคูณด้วย 100

9

?

แสดงจำนวนเป็นล้านหลังจากคูณด้วย 1000

10

X

เพื่อทำเครื่องหมายอักขระเป็นคำนำหน้าตัวเลข / คำต่อท้าย

11

'

เพื่อทำเครื่องหมายคำพูดรอบอักขระพิเศษ

ในตัวอย่างนี้เรากำลังจัดรูปแบบตัวเลขตามรูปแบบต่างๆ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

1.23456789123E8
1,2345,6789.12

Java Internalization - DecimalFormat เฉพาะโลแคล

โดยค่าเริ่มต้นวัตถุ DecimalFormat กำลังใช้โลแคลของ JVM เราสามารถเปลี่ยนตำแหน่งเริ่มต้นในขณะที่สร้างวัตถุ DecimalFormat โดยใช้คลาส NumberFormat ในตัวอย่างด้านล่างเราจะใช้รูปแบบเดียวกันสำหรับสองภาษาที่แตกต่างกันและคุณสามารถระบุความแตกต่างในผลลัพธ์ได้

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

123.45
123,45

Java Internalization - คลาส DecimalFormatSymbols

การใช้คลาส DecimalFormatSymbols สัญลักษณ์ตัวคั่นเริ่มต้นสัญลักษณ์ตัวคั่นการจัดกลุ่ม ฯลฯ สามารถเปลี่ยนแปลงได้ ตัวอย่างต่อไปนี้แสดงให้เห็นเช่นเดียวกัน

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

126,473.457
126:473;457

Java Internalization - การจัดกลุ่มตัวเลข

การใช้ setGroupingSize () วิธีการของ DecimalFormat การจัดกลุ่มตัวเลขเริ่มต้นสามารถเปลี่ยนแปลงได้ ตัวอย่างต่อไปนี้แสดงให้เห็นเช่นเดียวกัน

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - คลาส DateFormat

java.text.DateFormat รูปแบบวันที่ตามโลแคล เนื่องจากร้านค้าต่าง ๆ ใช้รูปแบบที่แตกต่างกันเพื่อแสดงวันที่ คลาสนี้มีประโยชน์อย่างยิ่งในการจัดการกับวันที่ในการทำให้แอปพลิเคชันเป็นภายใน ตัวอย่างต่อไปนี้แสดงวิธีการสร้างและใช้ 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()));
   }
}

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

Nov 29, 2017
29-11-2017

Java Internalization - การจัดรูปแบบวันที่

คลาส DateFormat จัดเตรียมรูปแบบต่างๆในการจัดรูปแบบวันที่ ต่อไปนี้เป็นรายการรูปแบบบางส่วน

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

ในตัวอย่างต่อไปนี้เราจะแสดงวิธีใช้รูปแบบต่างๆ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - เวลาในการจัดรูปแบบ

คลาส DateFormat มีรูปแบบต่างๆในการจัดรูปแบบเวลา DateFormat.getTimeInstance () method จะถูกใช้ ดูตัวอย่างด้านล่าง

ในตัวอย่างต่อไปนี้เราจะแสดงวิธีใช้รูปแบบต่างๆเพื่อจัดรูปแบบเวลา

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - การจัดรูปแบบวันที่และเวลา

คลาส DateFormat จัดเตรียมรูปแบบต่างๆเพื่อจัดรูปแบบวันที่และเวลาเข้าด้วยกัน DateFormat.getDateTimeInstance () วิธีการที่จะใช้ ดูตัวอย่างด้านล่าง

ในตัวอย่างต่อไปนี้เราจะแสดงวิธีใช้รูปแบบต่างๆเพื่อจัดรูปแบบวันที่และเวลา

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

   }
}

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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 - คลาส SimpleDateFormat

java.text.SimpleDateFormat รูปแบบวันที่ตามรูปแบบที่กำหนด นอกจากนี้ยังใช้เพื่อแยกวิเคราะห์วันที่จากสตริงที่สตริงมีวันที่ในรูปแบบที่กล่าวถึง ดูตัวอย่างการใช้คลาส 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));
   }
}

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - SimpleDateFormat เฉพาะโลแคล

สามารถใช้โลแคลเพื่อสร้างการจัดรูปแบบเฉพาะโลแคลบนรูปแบบในคลาส SimpleDateFormat ดูตัวอย่างต่อไปนี้ของการใช้คลาส SimpleDateFormat เฉพาะโลแคล

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - คลาส DecimalFormatSymbols

การใช้คลาส DecimalFormatSymbols สัญลักษณ์ตัวคั่นเริ่มต้นสัญลักษณ์ตัวคั่นการจัดกลุ่ม ฯลฯ สามารถเปลี่ยนแปลงได้ ตัวอย่างต่อไปนี้แสดงให้เห็นเช่นเดียวกัน

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

126,473.457
126:473;457

Java Internalization - รูปแบบรูปแบบวันที่

การติดตามคือการใช้อักขระในรูปแบบการจัดรูปแบบวันที่

ซีเนียร์ชั้นเรียนและคำอธิบาย
1

G

เพื่อแสดงศักราช

2

y

เพื่อแสดงปี ค่าที่ถูกต้อง yy, yyyy

3

M

เพื่อแสดงเดือน ค่าที่ถูกต้อง MM, MMM หรือ MMMMM

4

d

เพื่อแสดงวันของเดือน ค่าที่ถูกต้อง d, dd.

5

h

เพื่อแสดงชั่วโมงของวัน (1-12 AM / PM) ค่าที่ถูกต้อง hh.

6

H

เพื่อแสดงชั่วโมงของวัน (0-23) ค่า HH. ที่ถูกต้อง

7

m

เพื่อแสดงนาทีของชั่วโมง (0-59) ค่ามม.

8

s

เพื่อแสดงวินาทีของนาที (0-59) ss ค่าที่ถูกต้อง

9

S

เพื่อแสดงมิลลิวินาทีของนาที (0-999) SSS ค่าที่ถูกต้อง

10

E

เพื่อแสดงวันในสัปดาห์ (เช่นวันจันทร์วันอังคารเป็นต้น)

11

D

เพื่อแสดงวันในปี (1-366)

12

F

เพื่อแสดงวันในสัปดาห์ในเดือน (เช่นวันพฤหัสบดีที่ 1 ของเดือนธันวาคม)

13

w

เพื่อแสดง Week in year (1-53)

14

W

เพื่อแสดง Week in month (0-5)

15

a

เพื่อแสดง AM / PM

16

k

เพื่อแสดงชั่วโมงในวัน (1-24)

17

K

เพื่อแสดงชั่วโมงในวัน AM / PM (0-11)

18

z

เพื่อแสดงโซนเวลา

ในตัวอย่างนี้เรากำลังจัดรูปแบบวันที่ตามรูปแบบต่างๆ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - UTC

UTC ย่อมาจาก Co-ordinated Universal Time เป็นเวลามาตรฐานและใช้กันทั่วไปทั่วโลก เขตเวลาทั้งหมดจะถูกคำนวณโดยเปรียบเทียบกับ UTC เป็นออฟเซ็ต ตัวอย่างเช่นเวลาในโคเปนเฮเกนเดนมาร์กคือ UTC + 1 หมายถึงเวลา UTC บวกหนึ่งชั่วโมง เป็นอิสระจากการประหยัดแสงกลางวันและควรใช้เพื่อจัดเก็บวันที่และเวลาในฐานข้อมูล

การแปลงเขตเวลา

ตัวอย่างต่อไปนี้จะแสดงการแปลงโซนเวลาต่างๆ เราจะพิมพ์ชั่วโมงของวันและเวลาเป็นมิลลิวินาที อันดับแรกจะแตกต่างกันไปและวินาทีจะยังคงเหมือนเดิม

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

โซนเวลาที่มี

ตัวอย่างต่อไปนี้จะแสดงเขตเวลาที่มีให้ในระบบ

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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

Java Internalization - การแปลง Unicode จาก / เป็น String

ใน java ข้อความจะถูกเก็บไว้ภายในในรูปแบบ Unicode หากอินพุต / เอาต์พุตอยู่ในรูปแบบที่แตกต่างกันจำเป็นต้องมีการแปลง

การแปลง

ตัวอย่างต่อไปนี้จะแสดงการแปลง Unicode String เป็น UTF8 byte [] และ UTF8 byte [] เป็น Unicode byte []

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

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

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 - การแปลง Unicode จาก / เป็น Reader / Writer

คลาส Reader และ Writer เป็นคลาสสตรีมที่เน้นอักขระ สิ่งเหล่านี้สามารถใช้เพื่ออ่านและแปลงอักขระ Unicode

การแปลง

ตัวอย่างต่อไปนี้จะแสดงการแปลง Unicode String เป็น UTF8 byte [] และ UTF8 byte [] เป็น Unicode byte [] โดยใช้คลาส Reader และ 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);
   }  
}

เอาต์พุต

มันจะพิมพ์ผลลัพธ์ต่อไปนี้

This is a sample text
This is a sample text
พิมพ์