|
| 1 | +#!/bin/sh |
| 2 | +# msgchi-probe, GPL (c) Wei-Lun Chao <bluebat@member.fsf.org>, 2024. |
| 3 | + |
| 4 | +export TEXTDOMAIN=msgchi-probe |
| 5 | +if [ "$1" = "" -o "$1" = "-h" -o "$1" = "--help" ] ; then |
| 6 | + echo $"usage": $0 $"DOMAIN-NAME" [$"LOCALE-DIR"] |
| 7 | + exit |
| 8 | +fi |
| 9 | +_NAME="$1" |
| 10 | +if [ "$2" = "" ] ; then |
| 11 | + _LOCALEDIR=/usr/share/locale |
| 12 | +else |
| 13 | + _LOCALEDIR="$2" |
| 14 | +fi |
| 15 | +_LANG=cmn |
| 16 | +_PWDIR=$PWD |
| 17 | +_TMPDIR=`mktemp -d` |
| 18 | +echo $_TMPDIR |
| 19 | +mkdir -p $_TMPDIR/${_NAME} |
| 20 | + |
| 21 | +cd $_LOCALEDIR |
| 22 | +for _LOCALE in * ; do |
| 23 | + cd $_PWDIR |
| 24 | + _MO=$_LOCALEDIR/$_LOCALE/LC_MESSAGES/${_NAME}.mo |
| 25 | + if [ ${_NAME%_qt} = ${_NAME} ] ; then |
| 26 | + _QM=$_LOCALEDIR/'*'.qm |
| 27 | + else |
| 28 | + _QM=$_LOCALEDIR/$_LOCALE/LC_MESSAGES/${_NAME}.qm |
| 29 | + fi |
| 30 | + if [ -e "${_MO}" ] ; then |
| 31 | + case $_LOCALE in |
| 32 | + cmn ) msgunfmt ${_MO} | msgconv -t UTF-8 -o $_TMPDIR/${_NAME}/0.po ;; |
| 33 | + zh_TW ) msgunfmt ${_MO} | msgconv -t UTF-8 | msgchi -l zht2cmn -o $_TMPDIR/${_NAME}/1.po ;; |
| 34 | + zh_CN ) msgunfmt ${_MO} | msgconv -t UTF-8 | msgchi -l zhc2cmn -o $_TMPDIR/${_NAME}/2.po ;; |
| 35 | + * ) msgunfmt ${_MO} | msgconv -t UTF-8 -o $_TMPDIR/${_NAME}/$_LOCALE.po ;; |
| 36 | + esac |
| 37 | + elif ls ${_QM} &> /dev/null ; then |
| 38 | + if [ ${_NAME%_qt} = ${_NAME} ] ; then |
| 39 | + if [ ${_LOCALE##*.} = qm ] && [ ${_LOCALE#${_NAME}.} != ${_LOCALE} -o ${_LOCALE#${_NAME}_} != ${_LOCALE} -o ${#_LOCALE} -le 8 ] ; then |
| 40 | + lconvert $_LOCALEDIR/$_LOCALE -o $_TMPDIR/tmp.ts |
| 41 | + case $_LOCALE in |
| 42 | + *cmn.qm ) ts2po --progress none $_TMPDIR/tmp.ts -o $_TMPDIR/${_NAME}/0.po ;; |
| 43 | + *zh_TW.qm ) ts2po --progress none $_TMPDIR/tmp.ts | msgchi -l zht2cmn -o $_TMPDIR/${_NAME}/1.po ;; |
| 44 | + *zh_CN.qm ) ts2po --progress none $_TMPDIR/tmp.ts | msgchi -l zhc2cmn -o $_TMPDIR/${_NAME}/2.po ;; |
| 45 | + *.qm ) ts2po --progress none $_TMPDIR/tmp.ts -o $_TMPDIR/${_NAME}/${_LOCALE#*_}.po ;; |
| 46 | + esac |
| 47 | + fi |
| 48 | + else |
| 49 | + lconvert ${_QM} -o $_TMPDIR/tmp.ts |
| 50 | + case $_LOCALE in |
| 51 | + cmn ) ts2po --progress none $_TMPDIR/tmp.ts -o $_TMPDIR/${_NAME}/0.po ;; |
| 52 | + zh_TW ) ts2po --progress none $_TMPDIR/tmp.ts | msgchi -l zht2cmn -o $_TMPDIR/${_NAME}/1.po ;; |
| 53 | + zh_CN ) ts2po --progress none $_TMPDIR/tmp.ts | msgchi -l zhc2cmn -o $_TMPDIR/${_NAME}/2.po ;; |
| 54 | + * ) ts2po --progress none $_TMPDIR/tmp.ts -o $_TMPDIR/${_NAME}/$_LOCALE.po ;; |
| 55 | + esac |
| 56 | + fi |
| 57 | + fi |
| 58 | + cd $_LOCALEDIR |
| 59 | +done |
| 60 | + |
| 61 | +cd $_TMPDIR |
| 62 | +rmdir --ignore-fail-on-non-empty ${_NAME} |
| 63 | +if [ -d ${_NAME} ] ; then |
| 64 | + if ls ${_NAME}/[a-zA-Z]*.po &> /dev/null ; then |
| 65 | + msgcat --use-first ${_NAME}/[a-zA-Z]*.po | msgchi -F -l eng2cmn -o ${_NAME}/_.po |
| 66 | + fi |
| 67 | + msgcat --use-first ${_NAME}/[012_].po | msguniq -o ${_NAME}.po |
| 68 | + if [ -f tmp.ts ] ; then |
| 69 | + rm -f tmp.ts |
| 70 | + po2ts --progress none ${_NAME}.po ${_NAME}_cmn.ts |
| 71 | + if [ $(id -u) = 0 ] ; then |
| 72 | + lrelease-qt5 -silent ${_NAME}.ts |
| 73 | + cp -i ${_NAME}.ts ${_NAME}.qm $_PWDIR/ |
| 74 | + else |
| 75 | + lconvert --drop-translations ${_NAME}_cmn.ts -o ${_NAME}.ts |
| 76 | + cp -i ${_NAME}_cmn.ts ${_NAME}.ts $_PWDIR/ |
| 77 | + fi |
| 78 | + else |
| 79 | + if [ $(id -u) = 0 ] ; then |
| 80 | + msgattrib --clear-fuzzy ${_NAME}.po | msgfmt - -o ${_NAME}.mo |
| 81 | + cp -i ${_NAME}.po ${_NAME}.mo $_PWDIR/ |
| 82 | + else |
| 83 | + msghack --empty -o ${_NAME}.pot ${_NAME}.po |
| 84 | + cp -i ${_NAME}.po ${_NAME}.pot $_PWDIR/ |
| 85 | +# fi |
| 86 | + fi |
| 87 | +else |
| 88 | + echo $"DOMAIN-NAME" ${_NAME} $"not found!" |
| 89 | +fi |
| 90 | +cd $_PWDIR |
0 commit comments