updatepo.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  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. --add-comments='~' \
  42. --sort-by-file \
  43. --add-location=file \
  44. --keyword=N_ \
  45. --keyword=wgettext \
  46. --keyword=fwgettext \
  47. --keyword=fgettext \
  48. --keyword=fgettext_ne \
  49. --keyword=strgettext \
  50. --keyword=wstrgettext \
  51. --keyword=core.gettext \
  52. --keyword=showTranslatedStatusText \
  53. --keyword=fmtgettext \
  54. --output $potfile \
  55. --from-code=utf-8 \
  56. `find src/ -name '*.cpp' -o -name '*.h'` \
  57. `find builtin/ -name '*.lua'`
  58. # Now iterate on all languages and create the po file if missing, or update it
  59. # if it exists already
  60. for lang in $langs ; do # note the missing quotes around $langs
  61. pofile=po/$lang/minetest.po
  62. if test -e $pofile; then
  63. echo "[$lang]: updating strings"
  64. msgmerge --update --sort-by-file $pofile $potfile
  65. else
  66. # This will ask for the translator identity
  67. echo "[$lang]: NEW strings"
  68. msginit --locale=$lang --output-file=$pofile --input=$potfile
  69. fi
  70. done