Recursive xgettext?

前端 未结 5 1900
故里飘歌
故里飘歌 2021-02-02 02:35

How can I compile a .po file using xgettext with PHP files with a single command recursively?

My PHP files exist in a hierarchy, and the straight xget

5条回答
  •  一整个雨季
    2021-02-02 03:13

    You cannot achieve this with one single command. The xgettext option --files-from is your friend.

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

    If you are positive that you do not have too many source files you can also use find with xargs:

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

    However, if you have too many source files, xargs will invoke xgettext multiple times so that the maximum command-line length of your platform is not exceeded. In order to protect yourself against that case you have to use the xgettext option -j, --join-existing, remove the stale messages file first, and start with an empty one so that xgettext does not bail out:

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

    Compare that with the simple solution given first with the list of source files in POTFILES!

    Using find with --exec is very inefficient because it will invoke xgettext -j once for every source file to search for translatable strings. In the particular case of xgettext -j it is even more inefficient because xgettext has to read the evergrowing existing output file messages.po with every invocation (that is with every input source file).

提交回复
热议问题