8

Tôi đã cố tạo một chuỗi ngày được bản địa hóa với strftime, trình giữ chỗ mà tôi sử dụng là %x. Ngôn ngữ/ngôn ngữ là setlocale(LC_ALL, array('jp','japanese')), tuy nhiên không có ngôn ngữ nào có sẵn để tạo ra một chuỗi ký tự không đúng. Sau đó tôi đã cài đặt miền địa phương ja_JP.utf8 và chỉ định rằng làm phần tử đầu tiên trong mảng và vấn đề định dạng ngày tôi đã được giải quyết.Có khả thi dựa trên setlocale và dựa vào các ngôn ngữ được cài đặt không?

Câu hỏi của tôi là, tôi có nên luôn dựa vào các ngôn ngữ đang được cài đặt không? Tôi biết cách cài đặt chúng trên các hộp tôi có quyền truy cập root, nhưng nếu tôi không có quyền truy cập thì sao?

Tôi tin rằng Zend_LocaleZend_Translate không phụ thuộc vào setlocale chút nào nhưng bằng cách nào đó thực hiện nội bộ, mang lại cho tôi ấn tượng rằng nó không thực tế khả thi cho các ứng dụng cấp doanh nghiệp.

Tôi biết tôi có thể sử dụng Zend_LocaleZend_Translate trong đơn đăng ký nhưng cũng cần hỗ trợ PHP4, ít nhất là một năm nữa đó là lý do tôi không thể chỉ dựa vào những điều đó.

Trả lời

6

Nếu kiểm tra của tôi về setlocale() là chính xác, câu trả lời là: Không và không. Phạm vi của các ngôn ngữ được cài đặt khác nhau, cũng như tên của chúng và tính sẵn có của một miền địa phương nhất định cuối cùng không thể dự đoán được với sự chắc chắn hoàn toàn.

0

Khả thi, có. Khôn ngoan, không hề!

+1

Bạn sử dụng phương pháp nào cho ngày được bản địa hóa? –

+2

intl (http://www.php.net/manual/en/book.intl.php) là một giao diện cho ICU, vì vậy tôi tin tưởng nó. Tuy nhiên: tin tưởng nhưng xác minh, như Ronnie thường nói. –

4

Bạn có thể kiểm tra giá trị trả về của setlocale và ít nhất là kiểm tra xem nó đã được cài đặt chưa. Nếu không, bạn sẽ bị lỗi thầm lặng:

setlocale(LC_ALL, 'en_US') or die('Locale not installed'); 
Các vấn đề liên quan