2010-03-11 26 views
7

Tôi đang cố gắng sử dụng gettext thêm hỗ trợ bản địa hóa cho trang web của mình. Tôi đã theo hướng dẫn khác nhau về cách thiết lập gettext và đã làm như sau:Chức năng gettext PHP chỉ trả về chuỗi ký tự chưa được dịch mã số

tôi đã tạo ra các tập tin và thư mục sau vào thư mục gốc của thư mục dự án của tôi:

test.php 

locale/ 
    de_DE 
    LC_MESSAGES 
     messages.mo 
     messages.po 

    en_GB 
    LC_MESSAGES 
     messages.mo 
     messages.po 

Tôi đã sử dụng Poedit để tạo các tệp .po và mo ở trên. Tôi đã thực hiện kiện nó sử dụng kết thúc dòng Unix, UTF-8 và thiết lập ngôn ngữ và quốc gia cho phù hợp.

Tôi đã sau đó tạo ra một tập tin PHP tên test.php trong đó có đoạn mã sau: "Đây là một thử nghiệm"

<?php 

    define('LOCALE', 'de_DE'); 

    // Set up environmental variables 
    putenv("LC_ALL=" . LOCALE); 
    setlocale(LC_ALL, LOCALE); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", LOCALE .".utf8"); 
    textdomain("messages"); 

    die(gettext('This is a test.')); 

?> 

tôi đã nhập văn bản để Poedit và cung cấp bản dịch và lưu nó.

Nhưng vì lý do nào đó, tập lệnh test.php sẽ chỉ xuất văn bản gốc chưa được dịch. Nó từ chối tải phiên bản cho các tập tin dịch thuật.

Cần lưu ý rằng máy chủ đang chạy Linux (Ubuntu), Apache 2.2.11 và PHP 5.2.6-3ubuntu4.5. Tôi đã kiểm tra phpinfo() và gettext được bật.

Ai đó có thể giúp tôi không? Cảm ơn.

Trả lời

14

Sự cố của bạn có thể liên quan đến ngôn ngữ bị thiếu trên hệ thống của bạn. Vui lòng cài đặt các locale Đức và tất cả mọi thứ nên làm việc:

sudo apt-get install language-pack-de-base 

Sau đó, dùng lệnh sau đây và bạn sẽ thấy những miền địa phương Đức:

locale -a 

Sau đó, các mã sau đây nên làm việc, giả sử bạn vẫn có tệp .po và .mo trên cấu trúc thư mục bạn đã mô tả:

<?php 

    setlocale(LC_ALL, 'de_DE.UTF-8'); 
    bindtextdomain('messages', './locale'); 
    textdomain('messages'); 

    echo gettext('This is a test.'); 

    ?> 
+0

Vì vậy, nó đã hoạt động? Thực ra nó có phải là một vấn đề liên quan đến một miền địa phương mất tích hay cái gì khác không? – bpedro

+0

Có! Nó hoạt động. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn. – Camsoft

+0

Không sao cả! Tôi rất vui vì tôi có thể giúp! – bpedro

0

hãy thử như sau

<?php 

    define(LC_MESSAGES, 'de_DE'); 

    // Set up environmental variables 
    putenv("LANGUAGE=de_DE"); 
    bindtextdomain("*", dirname(__FILE__).'/locale'); 
    bind_textdomain_codeset("messages", 'UTF-8');  

    die(gettext('This is a test.')); 

?> 
+0

Thật không may điều này không có tác dụng. Nó vẫn chỉ hiển thị phiên bản tiếng Anh. – Camsoft

1

Vâng, vâng, hỗ trợ gettext PHP một lần nữa. Chỉ cần một gợi ý, điều đó có thể hoặc không hữu ích cho bạn:

Do thực thi gettext khủng khiếp của PHP, nhiều dự án mã nguồn mở như WordPress đã chuyển sang phiên bản này: http://savannah.nongnu.org/projects/php-gettext/ và hoàn toàn bỏ qua phiên bản gốc.

Tôi cũng đã làm điều đó, trong một trong các dự án của mình và tôi không thể nói rằng tôi bỏ lỡ bất cứ điều gì.

Bất lợi cho các dự án thương mại: Đó là theo GPL.

+0

Thú vị. Tôi sẽ xem xét điều này. Mặc dù nó là GPL sẽ là một vấn đề. – Camsoft

+0

Không thể sử dụng điều này vì như bạn đã nói đó là GPL và vấn đề này tôi đang gặp phải là một dự án thương mại. – Camsoft

+0

Tôi biết vấn đề. Chúng ta cũng có một dự án nguồn đóng, và chúng ta còn lại để thực hiện một cái gì đó, bởi vì chúng ta không thể sử dụng php-gettext (hoặc muốn dựa vào mô-đun gettext của PHP).Tuy nhiên, tôi nghĩ nó xứng đáng là một câu trả lời, vì nó là một dự án quan trọng để kết hợp trong phần mềm GPL'ed PHP khác. – Boldewyn

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