Scripting tools to interact with Thea 2 The Shattering files in order to translate them easily.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 

75 lignes
2.5 KiB

#!/bin/bash
# to add document to zanata, extract .pot with:
# grep Key DATABASE_UI_LOCALIZATION.xml | awk -F'"' '{print "#. "$2"\n" "msgid " "\""$4"\"" "\n" "msgstr " "\"\""}' > DATABASE_UI_LOCALIZATION.pot
# then pass the .pot in poedit to merge duplication and add the Zanata header
if [[ "$#" -ne 3 ]]; then
echo "Please pass exactly 3 parameters: the .xml, the corresponding .po and the language"
exit 1
fi
ORIGINAL_XML="$1"
LANGUAGE="$3"
FINAL_DIR="$(pwd)/Translation/${LANGUAGE}/game_files/Databases/"
TRANS_XML=$(basename "${ORIGINAL_XML}")
TRANS_XML="${FINAL_DIR}/${TRANS_XML}"
ORIGINAL_PO="$2"
WORKDIR="/tmp/thea2/${LANGUAGE}"
TEMP_PO="/${WORKDIR}/passage.temp"
TEMP_MSGSTR="/${WORKDIR}/msgstr.temp"
TEMP_MSGID="/${WORKDIR}/msgid.temp"
#Let's work on the translated xml:
mkdir -p "${FINAL_DIR}"
mkdir -p "${WORKDIR}"
cp "${ORIGINAL_XML}" "${TRANS_XML}"
# First thing first, let's anonymize the pot and delete all email references
sed -i 's/[A-Za-z0-9._%+-]\+@[A-Za-z0-9.-]\+\.[A-Za-z]\{2,6\}//' "${ORIGINAL_PO}"
function insert_to_xml {
sed -i "s~\(Key=\"${key}\" Val=\)\".*\"\(.*\)~\1\"${translation}\"\2~g" ${TRANS_XML}
}
for key in $(grep Key ${ORIGINAL_XML} | awk -F'"' '{print $2}'); do
msgstr=""
msgid=""
translation=""
# We search for the exact key in the po file until we get a blank line, to get the full msgstr and the msgid
awk -v key="${key}" '{pat="#. "key"$"} !NF{s=0}s;$0 ~ pat{ print $0; s=1 }' ${ORIGINAL_PO} > ${TEMP_PO}
# Extract msgstr and merge all lines into one
awk '!NF{s=0}s;/msgstr/{ print $0; s=1 }' ${TEMP_PO} | sed -e 's/^"//' -e 's/"$//' -e 's/^msgstr "//' > ${TEMP_MSGSTR}
msgstr=$(awk 'NR{printf "%s",$0;next;}1' ${TEMP_MSGSTR})
# Extract msgid and merge all lines into one
awk '/msgid/{ s=1 }s;/msgstr/{ s=0 }' ${TEMP_PO} |grep -v "msgstr" | sed -e 's/^"//' -e 's/"$//' -e 's/^msgid "//' > ${TEMP_MSGID}
msgid=$(awk 'NR{printf "%s",$0;next;}1' ${TEMP_MSGID})
# Escape special char causing problem in with sed and xml
msgstr=${msgstr//'\n'/'\\n'}
msgstr=${msgstr//' & '/' & '}
msgstr=${msgstr//'\"'/"""}
msgstr=${msgstr//'&'/'\&'}
msgid=${msgid//'\n'/'\\n'}
msgid=${msgid//' & '/' & '}
msgid=${msgid//'\"'/"""}
msgid=${msgid//'&'/'\&'}
if [[ "${msgstr}" == "" ]]; then
# if the msgstr is empty, then it's not translated yet, we use original string
translation=${msgid}
else
translation=${msgstr}
fi
# Now we have the translation, we need to insert it to the xml file
insert_to_xml
done