Tôi có một .po và một tập tin .mo trong một thư mục có địa chỉ là /locale/nld_nld/LC_MESSAGES/. Cả hai tên tập tin là tin nhắn. Tôi đã cố gắng sử dụng đoạn mã sau:Làm thế nào để sử dụng tập tin po/pot với php?
try.php:
<?php
require_once("Localization.php");
echo _("Hello World!");
?>
các Localization.php goes here:
<?php
$locale = "nld_nld";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");
?>
Cả try.php và các tập tin Localization là trong cùng một thư mục. Ngoài ra, tôi sử dụng xampp
. Tôi cũng đã triển khai phpinfo();
. Trong bảng, phía trước 'Hỗ trợ GetText', được bật đã được đề cập. Các tin nhắn .po và thư.mo là các tệp hợp lệ mà tôi đã tạo bằng cách sử dụng poEdit. Tôi là người dùng cửa sổ. Tuy nhiên, khi tôi mở try.php, nó đơn giản lặp lại Hello World! (không phải là chuỗi đã dịch của nó. Ngoài ra, tôi đã dịch .po tệp 100% (theo số poEdit
) .Tuy nhiên, tôi không nhận được kết quả, một chút trợ giúp về điều này sẽ được đánh giá cao
Cảm ơn ! trước
textdomain() thường là cuộc gọi hàm cuối cùng (thực sự nó có thể cần thiết trước mỗi gettext aka _() gọi nếu bạn làm việc với các tên miền mutiple.Trước tiên, bạn ràng buộc tất cả các tên miền, sau đó bạn chọn một tên miền. – eckes
Trong ví dụ của bạn, bạn sử dụng hai tên miền khác nhau 'es' và 'thư-es'. Điều đó có thể không hoạt động (và thông thường bạn không có mã định danh ngôn ngữ trong tên tệp vì nó được định nghĩa bởi thư mục thay thế). Vì vậy, "/full/path/here/application/locale/es_ES/LC_MESSAGES/messages.mo" sẽ là tên tệp của miền "tin nhắn" và các LC_TYPE es_ES. – eckes