updatepo.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 -kN_ -kwgettext -F -n -o $potfile src/*.cpp src/*.h
  41. # Now iterate on all languages and create the po file if missing, or update it
  42. # if it exists already
  43. for lang in $langs ; do # note the missing quotes around $langs
  44. pofile=po/$lang/minetest.po
  45. if test -e $pofile; then
  46. echo "[$lang]: updating strings"
  47. msgmerge -F -U $pofile $potfile
  48. else
  49. # This will ask for the translator identity
  50. echo "[$lang]: NEW strings"
  51. msginit -l $lang -o $pofile -i $potfile
  52. fi
  53. done