updatepo.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/sh
  2. # Update/create minetest po files
  3. # an auxiliary function to abort processing with an optional error
  4. # message
  5. abort() {
  6. test -n "$1" && echo >&2 "$1"
  7. exit 1
  8. }
  9. # The po/ directory is assumed to be parallel to the directory where
  10. # this script is. Relative paths are fine for us so we can just
  11. # use the following trick (works both for manual invocations and for
  12. # script found from PATH)
  13. scriptisin="$(dirname "$(which "$0")")"
  14. # The script is executed from the parent of po/, which is also the
  15. # parent of the script directory and of the src/ directory.
  16. # We go through $scriptisin so that it can be executed from whatever
  17. # directory and still work correctly
  18. cd "$scriptisin/.."
  19. test -e po || abort "po/ directory not found"
  20. test -d po || abort "po/ is not a directory!"
  21. # Get a list of the languages we have to update/create
  22. cd po || abort "couldn't change directory to po!"
  23. # This assumes that we won't have dirnames with space, which is
  24. # the case for language codes, which are the only subdirs we expect to
  25. # find in po/ anyway. If you put anything else there, you need to suffer
  26. # the consequences of your actions, so we don't do sanity checks
  27. langs=""
  28. for lang in * ; do
  29. if test ! -d $lang; then
  30. continue
  31. fi
  32. langs="$langs $lang"
  33. done
  34. # go back
  35. cd ..
  36. # First thing first, update the .pot template. We place it in the po/
  37. # directory at the top level. You a recent enough xgettext that supports
  38. # --package-name
  39. potfile=po/minetest.pot
  40. xgettext --package-name=minetest \
  41. --sort-by-file \
  42. --add-location=file \
  43. --keyword=N_ \
  44. --keyword=wgettext \
  45. --keyword=fgettext \
  46. --keyword=fgettext_ne \
  47. --keyword=strgettext \
  48. --keyword=wstrgettext \
  49. --keyword=showTranslatedStatusText \
  50. --output $potfile \
  51. --from-code=utf-8 \
  52. `find src/ -name '*.cpp' -o -name '*.h'` \
  53. `find builtin/ -name '*.lua'`
  54. # Now iterate on all languages and create the po file if missing, or update it
  55. # if it exists already
  56. for lang in $langs ; do # note the missing quotes around $langs
  57. pofile=po/$lang/minetest.po
  58. if test -e $pofile; then
  59. echo "[$lang]: updating strings"
  60. msgmerge --update --sort-by-file $pofile $potfile
  61. else
  62. # This will ask for the translator identity
  63. echo "[$lang]: NEW strings"
  64. msginit --locale=$lang --output-file=$pofile --input=$potfile
  65. fi
  66. done