setlocale(LC_CTYPE, "de_DE.UTF8")
hoặcsetlocale (LC_CTYPE, "de_DE.UTF8") hoặc setlocale (LC_CTYPE, "de_DE.UTF-8")?
setlocale(LC_CTYPE, "de_DE.UTF-8")
Có hoặc không có dấu gạch ngang? Tôi đã nhìn thấy cả hai trong câu trả lời.
setlocale(LC_CTYPE, "de_DE.UTF8")
hoặcsetlocale (LC_CTYPE, "de_DE.UTF8") hoặc setlocale (LC_CTYPE, "de_DE.UTF-8")?
setlocale(LC_CTYPE, "de_DE.UTF-8")
Có hoặc không có dấu gạch ngang? Tôi đã nhìn thấy cả hai trong câu trả lời.
Tôi muốn chạy locale -a
và sử dụng chuỗi kết quả đầu ra. Trên OS X 10.9, tôi nhận được de_DE.UTF-8
. Trên Debian 6, tôi nhận được . dpkg-reconfigure locales
sử dụng mặt khác de_DE.UTF-8
. Cách an toàn nhất có lẽ là để kiểm tra giá trị trả lại của setlocale
và thử các biến thể khác nhau nếu nó không thành công.
Điều đó nói rằng, tất cả các phiên bản thường hoạt động: có hoặc không có dấu gạch ngang, chữ hoa hoặc chữ thường.
Tên mã hóa là UTF-8.
nhưng trong trường hợp này cả hai tham số là chính xác và họ đang làm cùng một công việc cho bạn
Đây là giải pháp thực dụng để giải quyết nó theo chương trình. Khi setlocale
không thành công, nó sẽ trả về false.
if (!setlocale(LC_ALL, str_replace('utf-8', 'utf8', $locale))
&& !setlocale(LC_ALL, str_replace('utf8', 'utf-8', $locale))) {
/* fail gracefully */
}
/* your locale has been set up properly
Trong trường hợp của tôi, máy Mac sẽ hoạt động trên các máy tính Linux CI, vì vậy giải pháp này giúp kiểm tra vượt qua cả hai.
Btw; hãy cẩn thận với LC_ALL. Đặt ngôn ngữ cho phạm vi yếu nhất bạn cần.
Bạn thực sự có thể chuyển một mảng giá trị đến setLocale()
. Tôi đã chỉ chạy vào vấn đề này trong khi phát triển trên OSX và thử nghiệm tại lưu trữ đang chạy trên Linux. Vì vậy, bây giờ tôi làm điều này: setLocale(LC_ALL, ["de.utf", "de_DE.utf", "de_DE.UTF-8", "de", "de_DE"])
Việc đầu tiên để phù hợp là một đi. Tài liệu: https://secure.php.net/setlocale
Hoàn hảo. Tôi có «Debian GNU/Linux 6.0.9 (squeeze)' và 'đầu ra locale -a'' de_DE.utf8' - trong số hàng trăm cái khác. –
@what 'locale -a | grep -i de_de' sẽ giúp bạn. – sjas