2014-04-24 13 views

Trả lời

3

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.

+0

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. –

+1

@what 'locale -a | grep -i de_de' sẽ giúp bạn. – sjas

2

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

0

Đâ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.

0

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

Các vấn đề liên quan