บทนำ
งานนี้แสดงการใช้งาน header file <clocale> ใน C++
<clocale> เป็นส่วนหนึ่งของ Localization Library ซึ่งเป็นส่วนหนึ่งของ C++ Standard Library เดิมอยู่ใน C Standard Library ชื่อ <locale.h>
ฟังก์ชันและการประกาศใน header นี้ใช้สำหรับงานที่ต้องการรูปแบบวันที่และสัญลักษณ์สกุลเงินของประเทศต่างๆ
ฟังก์ชันใน <clocale> ได้แก่ setlocale() และ localeconv()
Macro ที่กำหนดใน header นี้และใช้ในฟังก์ชันทั้งสอง:
- LC_ALL - ตั้งค่าทุกอย่าง
- LC_COLLATE - ส่งผลต่อ strcoll และ strxfrm
- LC_CTYPE - ส่งผลต่อฟังก์ล์ชันตัวอักษรทั้งหมด
- LC_MONETARY - ส่งผลต่อข้อมูลสกุลเงินจาก localeconv
- LC_NUMERIC - ส่งผลต่อรูปแบบจุดทศนิยมและข้อมูลจาก localeconv
- LC_TIME - ส่งผลต่อ strftime
localeconv()
ฟังก์ชัน localeconv() ตั้งค่าหรืออ่านข้อมูลที่ขึ้นอยู่กับ Locale
Syntax
Struct lconv* localeconv()
setlocale()
ฟังก์ชัน setlocale() ติดตั้ง System Locale ที่ระบุ และตั้งค่าข้อมูล Locale ตามโปรแกรมปัจจุบัน
Syntax
char* setlocale(int category, const char* locale)
ตัวอย่าง
Input: setlocale(LC_ALL, "en_GB") s = setlocale(LC_ALL, NULL) Output: C
setlocale() คืนค่า Pointer ไปยังสตริง ถ้าระบุได้จะคืน C Locale มิฉะนั้นคืน Null Pointer ในกรณีนี้คืน "C"
แนวทางในโปรแกรม
- เรียก setlocale() ใน main() ตั้ง category = LC_MONETARY, locale = "en_GB"
- สร้าง struct lconv ด้วย char pointer lc = localeconv()
- ใช้ printf พิมพ์สัญลักษณ์สกุลเงินปัจจุบัน
ตัวอย่างโค้ด
#include <iostream>
#include <locale.h>
using namespace std;
int main() {
setlocale(LC_MONETARY, "en_GB");
struct lconv* lc = localeconv();
printf("%s ", lc->currency_symbol);
return 0;
}
ผลลัพธ์
£
ได้สัญลักษณ์ปอนด์ (£) สกุลเงินของสหราชอาณาจักร เพราะตั้ง LC_MONETARY และ locale "en_GB" (GB = Great Britain) แล้วใช้ lconv แสดงสัญลักษณ์สกุลเงิน