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
พิมพ์