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.
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.
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!
Đâ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ó.
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
Đố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
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
Đâ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.
Để lại một văn bản mô tả nhỏ –
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).
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. –
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
Đ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ũ. –