locale --- Dịch vụ quốc tế hóa¶
Source code: Lib/locale.py
Mô-đun locale mở quyền truy cập vào chức năng và cơ sở dữ liệu ngôn ngữ POSIX. Cơ chế ngôn ngữ POSIX cho phép lập trình viên giải quyết một số vấn đề văn hóa nhất định trong ứng dụng mà không yêu cầu lập trình viên phải biết tất cả thông tin cụ thể của từng quốc gia nơi phần mềm được thực thi.
Mô-đun locale được triển khai bên trên mô-đun _locale, do đó mô-đun này sử dụng triển khai ngôn ngữ ANSI C nếu có.
Mô-đun locale xác định các ngoại lệ và chức năng sau:
- exception locale.Error¶
Ngoại lệ nảy sinh khi ngôn ngữ được chuyển tới
setlocale()không được nhận dạng.
- locale.setlocale(category, locale=None)¶
Nếu locale được cung cấp chứ không phải
None,setlocale()sẽ sửa đổi cài đặt ngôn ngữ cho category. Các danh mục có sẵn được liệt kê trong phần mô tả dữ liệu bên dưới. locale có thể là string hoặc một cặp, mã ngôn ngữ và mã hóa. Một chuỗi trống chỉ định cài đặt mặc định của người dùng. Nếu việc sửa đổi ngôn ngữ không thành công, ngoại lệErrorsẽ xuất hiện. Nếu thành công, cài đặt ngôn ngữ mới sẽ được trả về.Nếu locale là một cặp, nó sẽ được chuyển đổi thành tên miền địa phương bằng cách sử dụng công cụ đặt bí danh miền địa phương. Mã ngôn ngữ có cùng định dạng với locale name nhưng không có mã hóa và công cụ sửa đổi
@. Mã ngôn ngữ và mã hóa có thể làNone.Nếu locale bị bỏ qua hoặc
None, cài đặt hiện tại cho category sẽ được trả về.Ví dụ:
>>> nhập ngôn ngữ >>> loc = locale.setlocale(locale.LC_ALL) # get ngôn ngữ hiện tại # use ngôn ngữ tiếng Đức; tên và tính khả dụng khác nhau tùy theo nền tảng >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') >>> locale.strcoll('f\xe4n', 'foo') # compare một chuỗi chứa âm sắc >>> locale.setlocale(locale.LC_ALL, '') # use ngôn ngữ ưa thích của người dùng >>> locale.setlocale(locale.LC_ALL, 'C') # use ngôn ngữ mặc định (C) >>> locale.setlocale(locale.LC_ALL, loc) # restore đã lưu ngôn ngữ
setlocale()không an toàn cho luồng trên hầu hết các hệ thống. Các ứng dụng thường bắt đầu bằng lệnh gọi:ngôn ngữ nhập khẩu locale.setlocale(locale.LC_ALL, '')
Điều này đặt ngôn ngữ cho tất cả các danh mục thành cài đặt mặc định của người dùng (thường được chỉ định trong biến môi trường
LANG). Nếu ngôn ngữ không bị thay đổi sau đó thì việc sử dụng đa luồng sẽ không gây ra vấn đề gì.
- locale.localeconv()¶
Trả về cơ sở dữ liệu về các quy ước địa phương dưới dạng từ điển. Từ điển này có các chuỗi sau làm khóa:
Danh mục
Chìa khóa
Ý nghĩa
'decimal_point'Ký tự dấu thập phân.
'grouping'Chuỗi số xác định vị trí tương đối của
'thousands_sep'. Nếu chuỗi kết thúc bằngCHAR_MAXthì việc phân nhóm tiếp theo sẽ không được thực hiện. Nếu chuỗi kết thúc bằng0, kích thước nhóm cuối cùng sẽ được sử dụng nhiều lần.'thousands_sep'Ký tự được sử dụng giữa các nhóm.
'int_curr_symbol'Ký hiệu tiền tệ quốc tế.
'currency_symbol'Ký hiệu tiền tệ địa phương.
'p_cs_precedes/n_cs_precedes'Liệu ký hiệu tiền tệ có đứng trước giá trị hay không (đối với các giá trị âm tương ứng dương).
'p_sep_by_space/n_sep_by_space'Liệu ký hiệu tiền tệ có được phân tách khỏi giá trị bằng dấu cách hay không (đối với các giá trị âm tương ứng dương).
'mon_decimal_point'Dấu thập phân được sử dụng cho giá trị tiền tệ.
'frac_digits'Số chữ số phân số được sử dụng trong định dạng cục bộ của giá trị tiền tệ.
'int_frac_digits'Số chữ số phân số được sử dụng trong định dạng quốc tế của giá trị tiền tệ.
'mon_thousands_sep'Dấu phân cách nhóm được sử dụng cho các giá trị tiền tệ.
'mon_grouping'Tương đương với
'grouping', được sử dụng cho các giá trị tiền tệ.'positive_sign'Biểu tượng được sử dụng để chú thích một giá trị tiền tệ tích cực.
'negative_sign'Ký hiệu dùng để chú thích một giá trị tiền tệ âm.
'p_sign_posn/n_sign_posn'Vị trí của dấu hiệu (đối với các giá trị âm tương ứng dương), xem bên dưới.
Tất cả các giá trị số có thể được đặt thành
CHAR_MAXđể cho biết rằng không có giá trị nào được chỉ định trong ngôn ngữ này.Các giá trị có thể có cho
'p_sign_posn'và'n_sign_posn'được đưa ra dưới đây.Giá trị
Giải thích
0Tiền tệ và giá trị được bao quanh bởi dấu ngoặc đơn.
1Dấu hiệu phải đứng trước giá trị và ký hiệu tiền tệ.
2Dấu hiệu phải theo sau giá trị và ký hiệu tiền tệ.
3Dấu hiệu phải ngay trước giá trị.
4Dấu hiệu phải ngay lập tức theo sau giá trị.
CHAR_MAXKhông có gì được chỉ định trong ngôn ngữ này.
Hàm tạm thời đặt ngôn ngữ
LC_CTYPEthành ngôn ngữLC_NUMERIChoặc ngôn ngữLC_MONETARYnếu các ngôn ngữ khác nhau và các chuỗi số hoặc tiền tệ không phải là ASCII. Thay đổi tạm thời này ảnh hưởng đến các chủ đề khác.Thay đổi trong phiên bản 3.7: Hàm hiện tạm thời đặt ngôn ngữ
LC_CTYPEthành ngôn ngữLC_NUMERICtrong một số trường hợp.
- locale.nl_langinfo(option)¶
Trả về một số thông tin cụ thể theo miền địa phương dưới dạng chuỗi. Chức năng này không có sẵn trên tất cả các hệ thống và tập hợp các tùy chọn có thể có cũng có thể khác nhau giữa các nền tảng. Các giá trị đối số có thể có là các số, trong đó các hằng số ký hiệu có sẵn trong mô-đun ngôn ngữ.
Hàm
nl_langinfo()chấp nhận một trong các phím sau. Hầu hết các mô tả được lấy từ mô tả tương ứng trong thư viện GNU C.- locale.CODESET¶
Nhận một chuỗi có tên mã hóa ký tự được sử dụng trong ngôn ngữ đã chọn.
- locale.D_T_FMT¶
Nhận một chuỗi có thể được sử dụng làm chuỗi định dạng cho
time.strftime()để biểu thị ngày và giờ theo cách dành riêng cho từng miền địa phương.
- locale.D_FMT¶
Nhận một chuỗi có thể được sử dụng làm chuỗi định dạng cho
time.strftime()để thể hiện một ngày theo cách dành riêng cho miền địa phương.
- locale.T_FMT¶
Nhận một chuỗi có thể được sử dụng làm chuỗi định dạng cho
time.strftime()để biểu thị thời gian theo cách dành riêng cho miền địa phương.
- locale.T_FMT_AMPM¶
Nhận chuỗi định dạng cho
time.strftime()để biểu thị thời gian ở định dạng sáng/chiều.
- locale.DAY_1¶
- locale.DAY_2¶
- locale.DAY_3¶
- locale.DAY_4¶
- locale.DAY_5¶
- locale.DAY_6¶
- locale.DAY_7¶
Lấy tên của ngày thứ n trong tuần.
Ghi chú
Điều này tuân theo quy ước của Hoa Kỳ về
DAY_1là Chủ nhật, không phải quy ước quốc tế (ISO 8601) rằng thứ Hai là ngày đầu tuần.
- locale.ABDAY_1¶
- locale.ABDAY_2¶
- locale.ABDAY_3¶
- locale.ABDAY_4¶
- locale.ABDAY_5¶
- locale.ABDAY_6¶
- locale.ABDAY_7¶
Lấy tên viết tắt của ngày thứ n trong tuần.
- locale.MON_1¶
- locale.MON_2¶
- locale.MON_3¶
- locale.MON_4¶
- locale.MON_5¶
- locale.MON_6¶
- locale.MON_7¶
- locale.MON_8¶
- locale.MON_9¶
- locale.MON_10¶
- locale.MON_11¶
- locale.MON_12¶
Lấy tên của tháng thứ n.
- locale.ABMON_1¶
- locale.ABMON_2¶
- locale.ABMON_3¶
- locale.ABMON_4¶
- locale.ABMON_5¶
- locale.ABMON_6¶
- locale.ABMON_7¶
- locale.ABMON_8¶
- locale.ABMON_9¶
- locale.ABMON_10¶
- locale.ABMON_11¶
- locale.ABMON_12¶
Lấy tên viết tắt của tháng thứ n.
- locale.RADIXCHAR¶
Lấy ký tự cơ số (dấu chấm thập phân, dấu phẩy thập phân, v.v.).
- locale.THOUSEP¶
Lấy ký tự phân cách cho hàng nghìn (nhóm ba chữ số).
- locale.YESEXPR¶
Nhận biểu thức chính quy có thể được sử dụng với hàm biểu thức chính quy để nhận ra câu trả lời tích cực cho câu hỏi có/không.
- locale.NOEXPR¶
Nhận biểu thức chính quy có thể được sử dụng với hàm
regex(3)để nhận ra câu trả lời phủ định cho câu hỏi có/không.
- locale.CRNCYSTR¶
Lấy ký hiệu tiền tệ, đứng trước "-" nếu ký hiệu xuất hiện trước giá trị, "+" nếu ký hiệu xuất hiện sau giá trị hoặc "." nếu ký hiệu nên thay thế ký tự cơ số.
- locale.ERA¶
Nhận một chuỗi mô tả cách tính và hiển thị số năm cho từng thời đại ở một ngôn ngữ.
Hầu hết các địa phương không xác định giá trị này. Một ví dụ về ngôn ngữ xác định giá trị này là ngôn ngữ tiếng Nhật. Ở Nhật Bản, cách thể hiện ngày tháng theo truyền thống bao gồm tên của thời đại tương ứng với triều đại của hoàng đế lúc bấy giờ.
Thông thường không cần thiết phải sử dụng trực tiếp giá trị này. Việc chỉ định công cụ sửa đổi
Etrong chuỗi định dạng của chúng sẽ khiến hàmtime.strftime()sử dụng thông tin này. Định dạng của chuỗi trả về được chỉ định trong The Open Group Base Specifications Issue 8, đoạn 7.3.5.2 LC_TIME C-Language Access.
- locale.ERA_D_T_FMT¶
Nhận chuỗi định dạng cho
time.strftime()để biểu thị ngày và giờ theo cách dựa trên thời đại cụ thể của miền địa phương.
- locale.ERA_D_FMT¶
Nhận chuỗi định dạng cho
time.strftime()để thể hiện một ngày theo cách dựa trên thời đại cụ thể của miền địa phương.
- locale.ERA_T_FMT¶
Nhận chuỗi định dạng cho
time.strftime()để thể hiện thời gian theo cách dựa trên thời đại cụ thể của miền địa phương.
- locale.ALT_DIGITS¶
Nhận một chuỗi bao gồm tối đa 100 ký hiệu được phân tách bằng dấu chấm phẩy được sử dụng để biểu thị các giá trị từ 0 đến 99 theo cách dành riêng cho miền địa phương. Ở hầu hết các địa phương, đây là một chuỗi trống.
Hàm tạm thời đặt ngôn ngữ
LC_CTYPEthành ngôn ngữ của danh mục xác định giá trị được yêu cầu (LC_TIME,LC_NUMERIC,LC_MONETARYhoặcLC_MESSAGES) nếu các ngôn ngữ khác nhau và chuỗi kết quả không phải là ASCII. Thay đổi tạm thời này ảnh hưởng đến các chủ đề khác.Thay đổi trong phiên bản 3.14: Chức năng này hiện tạm thời đặt ngôn ngữ
LC_CTYPEtrong một số trường hợp.
- locale.getdefaultlocale([envvars])¶
Cố gắng xác định cài đặt ngôn ngữ mặc định và trả về chúng dưới dạng một bộ dữ liệu có dạng
(language code, encoding).Theo POSIX, một chương trình chưa có tên
setlocale(LC_ALL, '')chạy bằng ngôn ngữ'C'di động. Việc gọisetlocale(LC_ALL, '')cho phép nó sử dụng ngôn ngữ mặc định như được xác định bởi biếnLANG. Vì chúng tôi không muốn can thiệp vào cài đặt ngôn ngữ hiện tại nên chúng tôi mô phỏng hành vi theo cách được mô tả ở trên.Để duy trì khả năng tương thích với các nền tảng khác, không chỉ biến
LANGđược kiểm tra mà còn kiểm tra danh sách các biến được cung cấp dưới dạng tham số envvars. Cái đầu tiên được tìm thấy được xác định sẽ được sử dụng. envvars mặc định là đường dẫn tìm kiếm được sử dụng trong gettext GNU; nó phải luôn chứa tên biến'LANG'. Đường dẫn tìm kiếm gettext GNU chứa'LC_ALL','LC_CTYPE','LANG'và'LANGUAGE', theo thứ tự đó.Mã ngôn ngữ có cùng định dạng với locale name nhưng không có mã hóa và công cụ sửa đổi
@. Mã ngôn ngữ và mã hóa có thể làNonenếu không thể xác định được giá trị của chúng. Ngôn ngữ "C" được biểu thị dưới dạng(None, None).Không được dùng nữa kể từ phiên bản 3.11, sẽ bị xóa trong phiên bản 3.15.
- locale.getlocale(category=LC_CTYPE)¶
Trả về cài đặt hiện tại cho danh mục ngôn ngữ đã cho dưới dạng một bộ chứa mã ngôn ngữ và mã hóa. category có thể là một trong các giá trị
LC_*ngoại trừLC_ALL. Nó mặc định làLC_CTYPE.Mã ngôn ngữ có cùng định dạng với locale name nhưng không có mã hóa và công cụ sửa đổi
@. Mã ngôn ngữ và mã hóa có thể làNonenếu không thể xác định được giá trị của chúng. Ngôn ngữ "C" được biểu thị dưới dạng(None, None).
- locale.getpreferredencoding(do_setlocale=True)¶
Trả về locale encoding được sử dụng cho dữ liệu văn bản, tùy theo sở thích của người dùng. Tùy chọn của người dùng được thể hiện khác nhau trên các hệ thống khác nhau và có thể không có sẵn theo chương trình trên một số hệ thống, vì vậy chức năng này chỉ trả về giá trị đoán.
Trên một số hệ thống, cần phải gọi
setlocale()để lấy tùy chọn của người dùng, vì vậy chức năng này không an toàn cho luồng. Nếu việc gọi setlocale là không cần thiết hoặc không mong muốn, thì do_setlocale nên được đặt thànhFalse.Trên Android hoặc nếu Python UTF-8 Mode được bật, luôn trả về
'utf-8', đối số locale encoding và do_setlocale sẽ bị bỏ qua.Zz000zz định cấu hình ngôn ngữ LC_CTYPE. Xem thêm filesystem encoding and error handler.
Thay đổi trong phiên bản 3.7: Hàm hiện luôn trả về
"utf-8"trên Android hoặc nếu Python UTF-8 Mode được bật.
- locale.getencoding()¶
Lấy locale encoding hiện tại:
Trên Android và VxWorks, trả về
"utf-8".Trên Unix, trả về mã hóa của ngôn ngữ
LC_CTYPEhiện tại. Trả về"utf-8"nếunl_langinfo(CODESET)trả về một chuỗi trống: ví dụ: nếu ngôn ngữ LC_CTYPE hiện tại không được hỗ trợ.Trên Windows trả về trang mã ANSI.
Zz000zz định cấu hình ngôn ngữ LC_CTYPE. Xem thêm filesystem encoding and error handler.
Chức năng này tương tự như
getpreferredencoding(False)ngoại trừ chức năng này bỏ qua Python UTF-8 Mode.Added in version 3.11.
- locale.normalize(localename)¶
Trả về mã miền địa phương đã chuẩn hóa cho tên miền địa phương đã cho. Mã ngôn ngữ trả về được định dạng để sử dụng với
setlocale(). Nếu chuẩn hóa không thành công, tên gốc sẽ được trả về không thay đổi.Nếu không biết mã hóa đã cho, hàm sẽ mặc định mã hóa mặc định cho mã miền địa phương giống như
setlocale().
- locale.strcoll(string1, string2)¶
So sánh hai chuỗi theo cài đặt
LC_COLLATEhiện tại. Giống như bất kỳ hàm so sánh nào khác, trả về giá trị âm hoặc giá trị dương hoặc0, tùy thuộc vào việc string1 đối chiếu trước hay sau string2 hay bằng nó.
- locale.strxfrm(string)¶
Chuyển đổi một chuỗi thành một chuỗi có thể được sử dụng trong các so sánh nhận biết ngôn ngữ. Ví dụ:
strxfrm(s1) < strxfrm(s2)tương đương vớistrcoll(s1, s2) < 0. Hàm này có thể được sử dụng khi cùng một chuỗi được so sánh nhiều lần, ví dụ: khi đối chiếu một chuỗi các chuỗi.
- locale.format_string(format, val, grouping=False, monetary=False)¶
Định dạng số val theo cài đặt
LC_NUMERIChiện tại. Định dạng tuân theo các quy ước của toán tử%. Đối với các giá trị dấu phẩy động, dấu thập phân được sửa đổi nếu thích hợp. Nếu grouping làTrue, thì việc phân nhóm cũng được tính đến.Nếu monetary là đúng, thì quá trình chuyển đổi sẽ sử dụng các chuỗi phân tách và nhóm hàng nghìn bằng tiền tệ.
Xử lý các thông số định dạng như trong
format % valnhưng có tính đến cài đặt ngôn ngữ hiện tại.Thay đổi trong phiên bản 3.7: Tham số từ khóa monetary đã được thêm vào.
- locale.currency(val, symbol=True, grouping=False, international=False)¶
Định dạng số val theo cài đặt
LC_MONETARYhiện tại.Chuỗi trả về bao gồm ký hiệu tiền tệ nếu symbol là đúng, đây là ký hiệu mặc định. Nếu grouping là
True(không phải là mặc định), việc nhóm sẽ được thực hiện với giá trị. Nếu international làTrue(không phải là mặc định), ký hiệu tiền tệ quốc tế sẽ được sử dụng.Ghi chú
Chức năng này sẽ không hoạt động với ngôn ngữ 'C', vì vậy trước tiên bạn phải đặt ngôn ngữ qua
setlocale().
- locale.str(float)¶
Định dạng số dấu phẩy động bằng cách sử dụng cùng định dạng với hàm cài sẵn
str(float)nhưng có tính đến dấu thập phân.
- locale.delocalize(string)¶
Chuyển đổi một chuỗi thành chuỗi số chuẩn hóa, tuân theo cài đặt
LC_NUMERIC.Added in version 3.5.
- locale.localize(string, grouping=False, monetary=False)¶
Chuyển đổi chuỗi số chuẩn hóa thành chuỗi được định dạng theo cài đặt
LC_NUMERIC.Added in version 3.10.
- locale.atof(string, func=float)¶
Chuyển đổi một chuỗi thành một số, theo cài đặt
LC_NUMERIC, bằng cách gọi func theo kết quả của việc gọidelocalize()trên string.
- locale.atoi(string)¶
Chuyển đổi một chuỗi thành số nguyên, tuân theo quy ước
LC_NUMERIC.
- locale.LC_CTYPE¶
Danh mục ngôn ngữ cho các hàm loại ký tự. Quan trọng nhất, danh mục này xác định mã hóa văn bản, tức là cách byte được hiểu là điểm mã Unicode. Xem PEP 538 và PEP 540 để biết cách biến này có thể được tự động ép buộc thành
C.UTF-8nhằm tránh các sự cố do cài đặt không hợp lệ trong vùng chứa hoặc cài đặt không tương thích được truyền qua các kết nối SSH từ xa tạo ra.Python không sử dụng nội bộ các hàm chuyển đổi ký tự phụ thuộc vào miền địa phương từ
ctype.h. Thay vào đó,pyctype.hcung cấp các giá trị tương đương độc lập với miền địa phương nhưPy_TOLOWER.
- locale.LC_COLLATE¶
Danh mục ngôn ngữ để sắp xếp chuỗi. Các chức năng
strcoll()vàstrxfrm()của mô-đunlocalebị ảnh hưởng.
- locale.LC_TIME¶
Danh mục ngôn ngữ để định dạng thời gian. Hàm
time.strftime()tuân theo các quy ước này.
- locale.LC_MONETARY¶
Danh mục ngôn ngữ để định dạng giá trị tiền tệ. Các tùy chọn khả dụng có sẵn từ chức năng
localeconv().
- locale.LC_MESSAGES¶
Danh mục ngôn ngữ để hiển thị tin nhắn. Python hiện không hỗ trợ các thông báo nhận biết ngôn ngữ cụ thể của ứng dụng. Các tin nhắn được hệ điều hành hiển thị, chẳng hạn như những tin nhắn được trả về bởi
os.strerror()có thể bị ảnh hưởng bởi danh mục này.Giá trị này có thể không có trên các hệ điều hành không tuân theo tiêu chuẩn POSIX, đặc biệt là Windows.
- locale.LC_NUMERIC¶
Danh mục ngôn ngữ để định dạng số. Các chức năng
format_string(),atoi(),atof()vàstr()của mô-đunlocalebị ảnh hưởng bởi danh mục đó. Tất cả các thao tác định dạng số khác không bị ảnh hưởng.
- locale.LC_ALL¶
Kết hợp tất cả các cài đặt ngôn ngữ. Nếu cờ này được sử dụng khi ngôn ngữ được thay đổi thì việc đặt ngôn ngữ cho tất cả các danh mục sẽ được thử. Nếu điều đó không thành công đối với bất kỳ danh mục nào thì không có danh mục nào bị thay đổi cả. Khi miền địa phương được truy xuất bằng cờ này, một chuỗi biểu thị cài đặt cho tất cả các danh mục sẽ được trả về. Chuỗi này sau này có thể được sử dụng để khôi phục cài đặt.
- locale.CHAR_MAX¶
Đây là hằng số tượng trưng được sử dụng cho các giá trị khác nhau được trả về bởi
localeconv().
Bối cảnh, chi tiết, gợi ý, mẹo và cảnh báo¶
Tiêu chuẩn C xác định ngôn ngữ là thuộc tính toàn chương trình có thể tương đối tốn kém để thay đổi. Trên hết, một số triển khai bị hỏng theo cách mà việc thay đổi ngôn ngữ thường xuyên có thể gây ra hiện tượng kết xuất lõi. Điều này làm cho miền địa phương hơi khó sử dụng một cách chính xác.
Ban đầu, khi một chương trình được khởi động, ngôn ngữ là ngôn ngữ C, bất kể ngôn ngữ ưa thích của người dùng là gì. Có một ngoại lệ: danh mục LC_CTYPE được thay đổi khi khởi động để đặt mã hóa ngôn ngữ hiện tại thành mã hóa ngôn ngữ ưa thích của người dùng. Chương trình phải nói rõ ràng rằng nó muốn cài đặt ngôn ngữ ưa thích của người dùng cho các danh mục khác bằng cách gọi setlocale(LC_ALL, '').
Nói chung, việc gọi setlocale() trong một số quy trình thư viện là một ý tưởng tồi vì nó ảnh hưởng đến toàn bộ chương trình như một tác dụng phụ. Việc lưu và khôi phục nó cũng tệ như vậy: nó tốn kém và ảnh hưởng đến các luồng khác chạy trước khi cài đặt được khôi phục.
Nếu, khi mã hóa một mô-đun cho mục đích sử dụng chung, bạn cần một phiên bản hoạt động độc lập với ngôn ngữ bị ảnh hưởng bởi ngôn ngữ đó (chẳng hạn như một số định dạng nhất định được sử dụng với time.strftime()), bạn sẽ phải tìm cách thực hiện điều đó mà không cần sử dụng quy trình thư viện chuẩn. Tốt hơn nữa là thuyết phục bản thân rằng sử dụng cài đặt ngôn ngữ là được. Biện pháp cuối cùng là bạn nên ghi lại rằng mô-đun của bạn không tương thích với cài đặt ngôn ngữ không phải C.
Cách duy nhất để thực hiện các phép toán số theo ngôn ngữ là sử dụng các hàm đặc biệt được xác định bởi mô-đun này: atof(), atoi(), format_string(), str().
Không có cách nào để thực hiện chuyển đổi kiểu chữ và phân loại ký tự theo ngôn ngữ. Đối với chuỗi văn bản (Unicode), những chuỗi này chỉ được thực hiện theo giá trị ký tự, trong khi đối với chuỗi byte, việc chuyển đổi và phân loại được thực hiện theo giá trị ASCII của byte và các byte có bit cao được đặt (tức là các byte không phải ASCII) không bao giờ được chuyển đổi hoặc được coi là một phần của lớp ký tự như chữ cái hoặc khoảng trắng.
Tên miền địa phương¶
Định dạng của tên ngôn ngữ phụ thuộc vào nền tảng và tập hợp các ngôn ngữ được hỗ trợ có thể phụ thuộc vào cấu hình hệ thống.
Trên nền tảng Posix, nó thường có định dạng [1]:
language ["_" territory] ["." charset] ["@" modifier]
trong đó language là mã ngôn ngữ gồm hai hoặc ba chữ cái từ ISO 639, territory là mã quốc gia hoặc mã vùng gồm hai chữ cái từ ISO 3166, charset là mã hóa ngôn ngữ và modifier là tên tập lệnh, thẻ phụ ngôn ngữ, mã định danh thứ tự sắp xếp hoặc công cụ sửa đổi ngôn ngữ khác (ví dụ: "latin", "valencia", "đột quỵ" và "euro").
Trên Windows, một số định dạng được hỗ trợ. [2] [3] Một tập hợp con của thẻ IETF BCP 47:
language ["-" script] ["-" territory] ["." charset] language ["-" script] "-" territory "-" modifier
trong đó language và territory có cùng ý nghĩa như trong Posix, script là mã tập lệnh gồm bốn chữ cái từ ISO 15924 và modifier là thẻ phụ ngôn ngữ, mã định danh thứ tự sắp xếp hoặc công cụ sửa đổi tùy chỉnh (ví dụ: "valencia", "đột quỵ" hoặc "x-python"). Cả hai dấu phân cách dấu gạch ngang ('-') và dấu gạch dưới ('_') đều được hỗ trợ. Chỉ cho phép mã hóa UTF-8 đối với thẻ BCP 47.
Windows cũng hỗ trợ tên miền địa phương ở định dạng:
language ["_" territory] ["." charset]
trong đó language và territory là tên đầy đủ, chẳng hạn như "tiếng Anh" và "Hoa Kỳ" và charset là số trang mã (ví dụ: "1252") hoặc UTF-8. Chỉ có dấu phân cách gạch dưới được hỗ trợ ở định dạng này.
Ngôn ngữ "C" được hỗ trợ trên tất cả các nền tảng.
Dành cho người viết phần mở rộng và chương trình nhúng Python¶
Các mô-đun mở rộng không bao giờ được gọi setlocale(), ngoại trừ việc tìm hiểu ngôn ngữ hiện tại là gì. Nhưng vì giá trị trả về chỉ có thể được sử dụng một cách linh hoạt để khôi phục nó nên điều đó không hữu ích lắm (có lẽ ngoại trừ việc tìm hiểu xem ngôn ngữ có phải là C hay không).
Khi mã Python sử dụng mô-đun locale để thay đổi ngôn ngữ, điều này cũng ảnh hưởng đến ứng dụng nhúng. Nếu ứng dụng nhúng không muốn điều này xảy ra thì nó phải xóa mô-đun mở rộng _locale (thực hiện tất cả công việc) khỏi bảng mô-đun tích hợp trong tệp config.c và đảm bảo rằng mô-đun _locale không thể truy cập được dưới dạng thư viện dùng chung.
Truy cập vào danh mục tin nhắn¶
- locale.gettext(msg)¶
- locale.dgettext(domain, msg)¶
- locale.dcgettext(domain, msg, category)¶
- locale.textdomain(domain)¶
- locale.bindtextdomain(domain, dir)¶
- locale.bind_textdomain_codeset(domain, codeset)¶
Mô-đun ngôn ngữ hiển thị giao diện gettext của thư viện C trên các hệ thống cung cấp giao diện này. Nó bao gồm các hàm gettext(), dgettext(), dcgettext(), textdomain(), bindtextdomain() và bind_textdomain_codeset(). Các chức năng này tương tự như các chức năng tương tự trong mô-đun gettext, nhưng sử dụng định dạng nhị phân của thư viện C cho danh mục thư và thuật toán tìm kiếm của thư viện C để định vị danh mục thư.
Các ứng dụng Python thường không cần phải gọi các hàm này và thay vào đó nên sử dụng gettext. Một ngoại lệ đã biết đối với quy tắc này là các ứng dụng liên kết với các thư viện C bổ sung gọi nội bộ các hàm C gettext hoặc dcgettext. Đối với các ứng dụng này, có thể cần phải liên kết miền văn bản để các thư viện có thể định vị đúng danh mục thư của họ.