<clocale> là header của thư viện bản địa hóa (localization library), cung cấp hỗ trợ định dạng ngày tháng, ký hiệu tiền tệ theo quốc gia. Ban đầu từ C <locale.h>.
Các macro phân loại locale
- LC_ALL: Tất cả các hạng mục
- LC_COLLATE: Sắp xếp chuỗi (strcoll, strxfrm)
- LC_CTYPE: Phân loại ký tự (isalpha, toupper...)
- LC_MONETARY: Định dạng tiền tệ (localeconv)
- LC_NUMERIC: Định dạng số (dấu thập phân, grouping)
- LC_TIME: Định dạng thời gian (strftime)
Hai hàm chính
setlocale()
Thiết lập/đọc locale hiện tại.
char* setlocale(int category, const char* locale);
Trả về con trỏ chuỗi locale mới, hoặc NULL nếu thất bại.
localeconv()
Trả về con trỏ struct lconv chứa thông tin định dạng số/tiền tệ của locale hiện tại.
struct lconv* localeconv();
Ví dụ: Lấy ký hiệu tiền tệ Anh
#include <iostream>
#include <clocale>
using namespace std;
int main() {
setlocale(LC_MONETARY, "en_GB");
struct lconv* lc = localeconv();
cout << "Currency symbol: " << lc->currency_symbol << endl;
cout << "Decimal point: " << lc->decimal_point << endl;
cout << "Thousands sep: " << lc->thousands_sep << endl;
return 0;
}
Kết quả
Currency symbol: £ Decimal point: . Thousands sep: ,
Giải thích: setlocale(LC_MONETARY, "en_GB") thiết lập locale tiền tệ Anh. localeconv() trả về struct chứa currency_symbol = "£".
Lưu ý: Locale phụ thuộc hệ thống. "en_GB" có thể không có trên mọi máy. Dùng setlocale(LC_ALL, "") để lấy locale mặc định của môi trường.