a

Câu hỏi Hàm gettext PHP chỉ trả về chuỗi chưa được dịch gốc


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 đã làm theo các hướng dẫn khác nhau về cách thiết lập gettext và đã làm như sau:

Tôi đã tạo các tệp và thư mục sau trong 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.

Sau đó tôi đã tạo ra một tập lệnh PHP có tên là test.php có mã sau:

<?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 "Đây là một thử nghiệm". để 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 ra 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.


7
2018-03-11 14:12


gốc




Các câu trả lời:


Vấn đề của bạn có thể liên quan đến một miền địa phương bị thiếu trên hệ thống của bạn. Vui lòng cài đặt miền địa phương của Đức và mọi thứ sẽ hoạt động:

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

Sau đó, đưa ra lệnh sau và bạn sẽ thấy các ngôn ngữ của Đức:

locale -a

Sau đó, đoạn mã sau sẽ hoạt động, giả sử bạn vẫn có các tệp .po và .mo trên cấu trúc thư mục mà bạn đã mô tả:

  <?php

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

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

  ?>

14
2018-03-15 18:14



Vì vậy, nó đã làm việc? 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
Vâng! Nó hoạt động. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn. - Camsoft
Không vấn đề gì! Tôi rất vui vì tôi có thể giúp! - bpedro


Vâng, vâng, hỗ trợ gettext của PHP một lần nữa. Chỉ là một gợi ý, điều đó có thể hoặc có thể 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 dự á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 dự án của mình, và tôi không thể nói rằng tôi nhớ bất cứ điều gì.

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


1
2018-03-11 14:36



Hấp dẫn. Tôi sẽ xem xét điều này. Mặc dù nó là GPL sẽ là một vấn đề. - Camsoft
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
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


thử những điều 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
2018-03-11 14:23



Thật không may điều này đã không làm việc. Nó vẫn chỉ hiển thị phiên bản tiếng Anh. - Camsoft