2009-12-08 9 views
8

Làm cách nào để biên dịch tệp .po bằng cách sử dụng xgettext với tệp PHP bằng một lệnh một cách đệ quy?Xgettext Recusive?

Các tệp PHP của tôi tồn tại trong một hệ thống phân cấp và lệnh xgettext thẳng không có vẻ đào sâu một cách đệ quy.

Trả lời

17

Got it:

find . -iname "*.php" | xargs xgettext 

Tôi đã cố gắng sử dụng -exec trước, nhưng điều đó sẽ chỉ chạy một tập tin tại một thời điểm. Điều này chạy chúng trên bó.

Yay Google!

+0

cũng không hiệu quả đối với tôi, nhưng bạn đã chỉ cho tôi một cách để có thể chấp nhận và sống với nó như thể không có cách nào tốt hơn. –

+0

Xin chào, Công việc tốt, nhưng becarefull để thêm -j vào cuối lệnh này, trừ khi nó không hoạt động – Ata

+2

Điều này là sai, bởi vì nếu có quá nhiều tệp để phù hợp trên một dòng lệnh, xargs sẽ chạy xgettext nhiều lần, khiến các lời gọi trước đó bị ghi đè. Chỉ cần thêm -j là không đúng, vì bạn cần xóa tệp trước hoặc bạn sẽ tham gia với dữ liệu cũ. –

0

Đây là giải pháp cho Windows. Lúc đầu, cài đặt gettext và tìm từ bộ sưu tập công cụ GnuWin32.

Bạn có thể chạy lệnh sau sau:

find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ; 

Các tập tin đầu ra có tồn tại trước chạy lệnh, vì vậy các định nghĩa mới có thể được hợp nhất với nó.

+0

Có lẽ cài đặt và sử dụng Cygwin? Tôi biết nó không phải là một giải pháp bản địa, nhưng sẽ giúp bạn có được kết quả tương tự. – neezer

6

Đối với dòng lệnh WINDOWS một giải pháp simpe là:

@echo off 
echo Generating file list.. 
dir html\wp-content\themes\wpt\*.php /L /B /S > %TEMP%\listfile.txt 
echo Generating .POT file... 
xgettext -k_e -k__ --from-code utf-8 -o html\wp-content\themes\wpt\lang\wpt.pot -L PHP --no-wrap -D html\wp-content\themes\wpt -f %TEMP%\listfile.txt 
echo Done. 
del %TEMP%\listfile.txt 
+0

Một số cảnh báo chỉ trong trường hợp: 'pygettext.py' không hỗ trợ tùy chọn' -f'. – Morwenn

0

Đây là giải pháp tôi đã tìm thấy cho tìm kiếm đệ quy trên Mac:

xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"` 

Tạo mục cho tất cả các công dụng của phương pháp gettext trong các tập tin mà mở rộng là php, bao gồm cả thư mục con và chèn chúng vào bản dịch/messages.pot.

+2

Để lại một văn bản mô tả nhỏ –

0

Bạn không thể thực hiện điều này bằng một lệnh duy nhất. Tùy chọn xgettext --files-from là bạn của bạn.

find . -name '*.php' >POTFILES 
xgettext --files-from=POTFILES 

Nếu bạn là tích cực mà bạn không có quá nhiều file nguồn bạn cũng có thể sử dụng find với xargs:

find . -name "*.php" -print0 | xargs -0 xgettext 

Tuy nhiên, nếu bạn có quá nhiều file nguồn, xargs sẽ gọi xgettext nhiều thời gian sao cho chiều dài dòng lệnh tối đa của nền tảng của bạn không bị vượt quá. Để tự bảo vệ mình chống lại trường hợp đó, bạn phải sử dụng tùy chọn xgettext -j, --join-existing, loại bỏ các tin nhắn cũ nộp đầu tiên, và bắt đầu với một một trống để xgettext mà không giải cứu:

rm -f messages.po 
echo >messages.po 
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing 

Hãy so sánh điều đó với giải pháp đơn giản được đưa ra đầu tiên với danh sách các tệp nguồn trong POTFILES!

Sử dụng find với --exec không hiệu quả vì nó sẽ gọi xgettext -j một lần cho mọi tệp nguồn để tìm kiếm chuỗi có thể dịch.Trong trường hợp cụ thể của xgettext -j, nó thậm chí còn kém hiệu quả hơn vì xgettext phải đọc tệp đầu ra hiện tại đang phát triển messages.po với mọi lời gọi (nghĩa là với mọi tệp nguồn đầu vào).