You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.6 KiB
131 lines
4.6 KiB
# TODO(mordred) Put the translations logic into a sphinx plugin? |
|
- name: Check if translations exist for release notes |
|
stat: |
|
path: "{{ zuul_work_dir }}/releasenotes/source/locale" |
|
get_checksum: false |
|
get_mime: false |
|
get_md5: false |
|
register: translations |
|
|
|
- name: Prepare release note translations |
|
shell: |
|
chdir: '{{ zuul_work_dir }}' |
|
executable: /bin/bash |
|
cmd: | |
|
set -e |
|
set -x |
|
|
|
DOCNAME=releasenotes |
|
DIRECTORY=releasenotes |
|
|
|
source {{ zuul_work_virtualenv }}/bin/activate |
|
|
|
# Mapping of language codes to language names |
|
declare -A LANG_NAME=( |
|
["cs"]="Czech" |
|
["de"]="German" |
|
["en_AU"]="English (Australian)" |
|
["en_GB"]="English (United Kingdom)" |
|
["es"]="Spanish" |
|
["fr"]="French" |
|
["id"]="Indonesian" |
|
["it"]="Italian" |
|
["ja"]="Japanese" |
|
["ko_KR"]="Korean (South Korea)" |
|
["ne"]="Nepali" |
|
["pt_BR"]="Portuguese (Brazil)" |
|
["ru"]="Russian" |
|
["tr_TR"]="Turkish (Turkey)" |
|
["zh_CN"]="Chinese (China)" |
|
) |
|
|
|
# Check that locale_dirs is really set, otherwise translations |
|
# will not work. |
|
if ! grep -q -E '^locale_dirs *=' $DIRECTORY/source/conf.py; then |
|
echo "Translations exist and locale_dirs missing in source/conf.py" |
|
exit 1 |
|
fi |
|
|
|
REFERENCES=`mktemp` |
|
trap "rm -f -- '$REFERENCES'" EXIT |
|
|
|
# Extract translations |
|
sphinx-build -j auto -b gettext \ |
|
-d ${DIRECTORY}/build/doctrees.gettext \ |
|
${DIRECTORY}/source/ \ |
|
${DIRECTORY}/source/locale/ |
|
|
|
# Add links for translations to index file |
|
cat <<EOF >> ${REFERENCES} |
|
|
|
Translated Release Notes |
|
======================== |
|
|
|
EOF |
|
|
|
# Check all language translation resources |
|
for locale in `find ${DIRECTORY}/source/locale/ -maxdepth 1 -type d` ; do |
|
# Skip if it is not a valid language translation resource. |
|
if [ ! -e ${locale}/LC_MESSAGES/${DOCNAME}.po ]; then |
|
continue |
|
fi |
|
language=$(basename $locale) |
|
|
|
echo "Building $language translation" |
|
|
|
# Prepare all translation resources |
|
for pot in ${DIRECTORY}/source/locale/*.pot ; do |
|
# Get filename |
|
resname=$(basename ${pot} .pot) |
|
|
|
# Merge all translation resources. Note this is done the same |
|
# way as done in common_translation_update.sh where we merge |
|
# all strings together in a single file. |
|
msgmerge --silent -o \ |
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.po \ |
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po \ |
|
${pot} |
|
# Compile all translation resources |
|
msgfmt -o \ |
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.mo \ |
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.po |
|
done |
|
|
|
# Build translated document |
|
sphinx-build -j auto -b html -D language=${language} \ |
|
-d "${DIRECTORY}/build/doctrees.${language}" \ |
|
${DIRECTORY}/source/ ${DIRECTORY}/build/html/${language} |
|
|
|
# Reference translated document from index file |
|
if [ ${LANG_NAME["${language}"]+_} ] ; then |
|
name=${LANG_NAME["${language}"]} |
|
name+=" (${language})" |
|
echo "* \`$name <${language}/index.html>\`__" >> ${REFERENCES} |
|
else |
|
echo "* \`${language} <${language}/index.html>\`__" >> ${REFERENCES} |
|
fi |
|
|
|
# Remove newly created files |
|
git clean -f -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/*.po |
|
git clean -f -x -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/*.mo |
|
# revert changes to po file |
|
git reset -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po |
|
git checkout -- ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po |
|
done |
|
|
|
# Now append our references to the index file. We cannot do this |
|
# earlier since the sphinx commands will read this file. |
|
cat ${REFERENCES} >> ${DIRECTORY}/source/index.rst |
|
|
|
# Remove newly created pot files |
|
rm -f ${DIRECTORY}/source/locale/*.pot |
|
when: translations.stat.exists |
|
|
|
- name: Run releasenotes sphinx build |
|
shell: |
|
executable: /bin/bash |
|
chdir: '{{ zuul_work_dir }}' |
|
cmd: | |
|
{{ zuul_work_virtualenv }}/bin/sphinx-build -a -E -W -j auto \ |
|
-d releasenotes/build/doctrees \ |
|
-b html releasenotes/source releasenotes/build/html
|
|
|