2009-07-28 40 views
5

Tôi luôn luôn nghe về gettext - Tôi biết đó là một số lệnh unix để tra cứu một bản dịch dựa trên đối số chuỗi được cung cấp, và sau đó tạo tệp .pot nhưng ai đó có thể giải thích cho tôi về các thuật ngữ của giáo dân. trong một khung công tác web?Thêm hỗ trợ cho i18n bằng PHP với gettext?

Tôi có thể xem xét cách thức một số khuôn khổ đã được thực hiện, nhưng lời giải thích của giáo dân sẽ giúp bởi vì nó có thể giúp hình ảnh rõ ràng hơn trước khi tôi thực sự nghiên cứu về giải pháp của riêng mình.

Trả lời

12

Hệ thống gettext lặp lại chuỗi từ tập hợp các tệp nhị phân được tạo từ tệp văn bản nguồn có chứa bản dịch bằng các ngôn ngữ khác nhau cho cùng một câu.

Phím tra cứu là câu trong ngôn ngữ "cơ sở".

trong mã nguồn của bạn, bạn sẽ có một cái gì đó giống như

echo _("Hello, world!"); 

cho mỗi ngôn ngữ bạn sẽ có một tập tin văn bản tương ứng với phím và bản dịch (chú ý% s có thể được sử dụng với chức năng printf)

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

Đây là những bước chính bạn cần phải đi qua để tạo tin cục bộ của bạn

  • tất cả các đầu ra văn bản của bạn phải sử dụng chức năng gettext (gettext(), ngettext(), _())
  • sử dụng xgettext (* nix) để phân tích các file php của bạn và tạo ra các tập tin văn bản cơ sở .po
  • sử dụng poedit để thêm văn bản dịch vào các tập tin .po
  • msgfmt
  • sử dụng (* nix) để tạo ra các tập tin .mo nhị phân từ tập tin .po
  • đặt các file .mo trong một cấu trúc thư mục như

locale/de_DE/LC_MESSAGES/myPHPApp.mo

locale/en_EN/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

sau đó bạn script php phải thiết lập miền địa phương mà cần phải được sử dụng

Ví dụ từ php thủ công là rất rõ ràng cho phần đó

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

Luôn từ hướng dẫn php tìm here cho một hướng dẫn tốt

+0

Nhưng trên Ví dụ thủ công PHP dường như không dịch chuỗi đã cho. Có cái gì khác để làm với ví dụ? –