lang-add.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. #
  3. # lang-add.sh - multi-language support script
  4. # add new texts from list (lang_add.txt) to all dictionary files
  5. #
  6. # Input files:
  7. # lang_add.txt
  8. # Updated files:
  9. # lang_en.txt and all lang_en_xx.txt
  10. # List of supported languages
  11. LANGUAGES="cz de es fr it pl"
  12. # Community languages
  13. LANGUAGES+=" nl" #Dutch
  14. # Config:
  15. if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
  16. if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi
  17. if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
  18. LANGUAGES+=" $COMMUNITY_LANGUAGES"
  19. fi
  20. LANGUAGES=$(ls lang_en_*.txt|cut -d '_' -f3|cut -d '.' -f1)
  21. echo "lang-add languages:$LANGUAGES" >&2
  22. # insert single text to english dictionary
  23. # $1 - text to insert
  24. # $2 - metadata
  25. insert_en()
  26. {
  27. #replace '[' and ']' in string with '\[' and '\]'
  28. str=$(echo "$1" | sed 's/\[/\\\[/g;s/\]/\\\]/g')
  29. # extract english texts, merge new text, grep line number
  30. ln=$((cat lang_en.txt; echo "$1") | sed "/^$/d;/^#/d" | sort | grep -n "$str" | sed "s/:.*//;q")
  31. # calculate position for insertion
  32. ln=$((3*(ln-2)+1))
  33. [ "$ln" -lt 1 ] && ln=1
  34. # insert new text
  35. sed -i "$ln"'i\\' lang_en.txt
  36. sed -i "$ln"'i\'"$1"'\' lang_en.txt
  37. sed -i "${ln}i\\#$2" lang_en.txt
  38. }
  39. # insert single text to translated dictionary
  40. # $1 - text to insert
  41. # $2 - suffix
  42. # $3 - metadata
  43. insert_xx()
  44. {
  45. #replace '[' and ']' in string with '\[' and '\]'
  46. str=$(echo "$1" | sed 's/\[/\\\[/g;s/\]/\\\]/g')
  47. # extract english texts, merge new text, grep line number
  48. ln=$((cat lang_en_$2.txt; echo "$1") | sed "/^$/d;/^#/d" | sed -n 'p;n' | sort | grep -n "$str" | sed "s/:.*//;q")
  49. # calculate position for insertion
  50. ln=$((4*(ln-2)+1))
  51. [ "$ln" -lt 1 ] && ln=1
  52. # insert new text
  53. sed -i "$ln"'i\\' lang_en_$2.txt
  54. sed -i "$ln"'i\"\x00"\' lang_en_$2.txt
  55. sed -i "$ln"'i\'"$1"'\' lang_en_$2.txt
  56. sed -i "${ln}i\\#$3" lang_en_$2.txt
  57. }
  58. # find the metadata for the specified string
  59. # TODO: this is unbeliveably crude
  60. # $1 - text to search for
  61. find_metadata()
  62. {
  63. FIND_STR=$(echo $1|sed 's/\\/\\\\/g;s/\\\\x0a/\\\\n/g')
  64. sed -ne "s^.*\(_[iI]\|ISTR\)($FIND_STR).*////\(.*\)^\2^p" ../Firmware/*.[ch]* | head -1
  65. }
  66. # check if input file exists
  67. if ! [ -e lang_add.txt ]; then
  68. echo "file lang_add.txt not found"
  69. exit 1
  70. fi
  71. cat lang_add.txt | sed 's/^/"/;s/$/"/;s/\\/\\\\/g' | while read new_s; do
  72. if grep "$new_s" lang_en.txt >/dev/null; then
  73. echo "text already exist:"
  74. echo "$new_s"
  75. echo
  76. else
  77. meta=$(find_metadata "$new_s")
  78. echo "adding text:"
  79. echo "$new_s ($meta)"
  80. echo
  81. insert_en "$new_s" "$meta"
  82. for lang in $LANGUAGES; do
  83. insert_xx "$new_s" "$lang" "$meta"
  84. done
  85. fi
  86. done
  87. read -t 5
  88. exit 0