Add the help/ and levels/ CMake machinery to enable the po-based translations

dev-ui
Didier 'OdyX' Raboud 2013-10-25 15:19:54 +02:00
parent 37f5fd7689
commit 283af08a34
4 changed files with 62 additions and 157 deletions

View File

@ -10,7 +10,6 @@ endif()
install(DIRECTORY ai DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY ai DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY fonts DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY fonts DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY help DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY icons DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY icons DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY models DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY models DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
#install(DIRECTORY models-new DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) #install(DIRECTORY models-new DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
@ -18,4 +17,5 @@ install(DIRECTORY music DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY sounds DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY sounds DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
install(DIRECTORY textures DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) install(DIRECTORY textures DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
add_subdirectory(help)
add_subdirectory(levels) add_subdirectory(levels)

33
help/CMakeLists.txt Normal file
View File

@ -0,0 +1,33 @@
cmake_minimum_required(VERSION 2.8)
set(LEVELS_I18N_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../levels-i18n/)
# Handle all help categories' translations
foreach(LEVEL_CODENAME cbot;object)
set(SCENEFILE)
set(SCENEDEST)
set(PODIR "${LEVEL_CODENAME}/po/")
set(HELPDIR "${LEVEL_CODENAME}/")
set(HELPDEST "${LEVEL_CODENAME}")
message(STATUS "Managing translations for '${LEVEL_CODENAME}' help category")
include(${LEVELS_I18N_PATH}/CMakeLists.txt)
endforeach()
set(LEVEL_CODENAME generic)
set(SCENEFILE)
set(SCENEDEST)
set(PODIR "${LEVEL_CODENAME}/po/")
set(HELPDIR "${LEVEL_CODENAME}/")
set(HELPDEST "")
message(STATUS "Managing translations for '${LEVEL_CODENAME}' help category")
include(${LEVELS_I18N_PATH}/CMakeLists.txt)
set(LEVEL_CODENAME bots)
set(SCENEFILE)
set(SCENEDEST)
set(PODIR "${LEVEL_CODENAME}/po/")
set(HELPDIR "${LEVEL_CODENAME}/")
set(HELPDEST "object/")
message(STATUS "Managing translations for '${LEVEL_CODENAME}' help category")
include(${LEVELS_I18N_PATH}/CMakeLists.txt)

View File

@ -1,21 +1,31 @@
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
# Translate translatable material set(LEVELS_I18N_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../levels-i18n/)
find_program(PO4A po4a)
if(PO4A) # Handle level headers' translations
set(_levels_i18n_target "levels_i18n") file(GLOB levelheaders_po ${CMAKE_CURRENT_SOURCE_DIR}/*-po/)
add_custom_command(OUTPUT ${_levels_i18n_target} foreach(levelheader_po ${levelheaders_po})
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} string(REPLACE "-po" "" levelheader ${levelheader_po})
COMMAND ./gen_levels_xml.sh ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} get_filename_component(LEVEL_CODENAME ${levelheader} NAME)
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} set(SCENEFILE "${LEVEL_CODENAME}*.txt")
COMMENT "Inject level translations" set(SCENEDEST)
) set(PODIR "${LEVEL_CODENAME}-po/")
add_custom_target(translate_levels ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}) set(HELPDIR)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}/ DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/levels) set(HELPDEST "")
else() message(STATUS "Manage translations for level headers '${LEVEL_CODENAME}*'")
message(WARNING "po4a not found, levels will not get translated") include(${LEVELS_I18N_PATH}/CMakeLists.txt)
file(GLOB levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/*.txt") endforeach(levelheader_po)
list(REMOVE_ITEM levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt")
install(FILES ${levelfiles} DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/levels/) # Handle all levels' translations
endif() file(GLOB levelcategories_paths ${CMAKE_CURRENT_SOURCE_DIR}/*/scene.txt)
foreach(levelcategory_path ${levelcategories_paths})
string(REPLACE "//scene.txt" "" levelcategory ${levelcategory_path})
get_filename_component(LEVEL_CODENAME ${levelcategory} NAME_WE)
set(SCENEFILE "${LEVEL_CODENAME}/scene.txt")
set(SCENEDEST "${LEVEL_CODENAME}.txt")
set(PODIR "${LEVEL_CODENAME}/po/")
set(HELPDIR "${LEVEL_CODENAME}/help/")
set(HELPDEST "")
MESSAGE(STATUS "Managing translations for level '${LEVEL_CODENAME}'")
include(${LEVELS_I18N_PATH}/CMakeLists.txt)
endforeach(levelcategory_path)

View File

@ -1,138 +0,0 @@
#!/bin/sh
set -e
outdir=$1
if [ -z "$outdir" ] || [ "$outdir" = "." ] || [ ! -d $outdir ]; then
echo "No existing output directory provided; syntax is : $0 output_directory"
return 1;
fi
linguas="en fr"
categories="defi free win lost perso proto"
for sc_i in $(seq 1 9); do
categories="$categories scene$sc_i"
done
for tr_i in $(seq 1 7); do
categories="$categories train$tr_i"
done
common_i18n_ext=xhtml
gen_i18n_file () {
levelfileorig=$1
common_i18n_file=$2
if [ -z "$levelfileorig" ] || [ ! -f $levelfileorig ]; then
echo "No file name provided; syntax is : $0 filename.txt"
return 1;
fi
levelfile=$(echo $levelfileorig | sed -e "s/\.txt$//g")
destfile=$levelfile.xml;
allsfile=$common_i18n_file.$common_i18n_ext;
echo "<$levelfile>" > $destfile
echo "<h1><!-- Level: $levelfile --></h1>" >> $allsfile
for key in Title Resume ScriptName; do
for subkey in text resume; do
subval=$(grep "^$key\.E.*$subkey" $levelfileorig | sed -e "s/^.*$subkey=\"\([^\"]*\)\".*$/\1/")
# Always write entries, even when empty, otherwise breaks po4a-gettextize
echo "<${key}_$subkey>$levelfile:$subval</${key}_$subkey>" >> $destfile
echo "<p type=\"$key $subkey\">$levelfile:$subval</p>" >> $allsfile
done
done
echo "</$levelfile>" >> $destfile
echo "[type:xml] $levelfile.xml \$lang:$levelfile.\$lang.xml" >> $common_i18n_file-po4a.cfg
echo -n "."
}
for category in $categories; do
echo "* Category: $category "
rm -f $category*.xml
rm -f $category-po4a.cfg
echo " 0 - Create initial files"
echo "[po_directory] $category-po/" > $category-po4a.cfg
mkdir -p $category-po
echo -n " 1 - Generate transitional source translation files from level files"
echo "<html><body>" > $category.$common_i18n_ext
for lang in $linguas; do
if [ $lang = "en" ]; then continue; fi;
echo "<html><body>" > $category.$lang.$common_i18n_ext
done
for level in $(ls $category*.txt); do
gen_i18n_file $level $category
done
echo "</body></html>" >> $category.$common_i18n_ext
echo "done"
echo -n " 3 - Generate pristine potfile: "
po4a-gettextize -M UTF-8 -f xhtml -m $category.$common_i18n_ext > $category-po/$category.pot 2>/dev/null
echo "done"
echo -n " 4 - Generate translation files: "
for lang in $linguas; do
if [ $lang = "en" ]; then continue; fi;
echo -n "$lang "
echo "</body></html>" >> $category.$lang.$common_i18n_ext
pofile=$category-po/$lang.po
if [ ! -f $pofile ]; then
sed -e 's/charset=CHARSET/charset=UTF-8/g' $category-po/$category.pot > $pofile
fi
po4a-updatepo -M UTF-8 -f xhtml -m $category.$common_i18n_ext -p $pofile 2>/dev/null
done
echo " done"
echo -n " 5 - Cleanup po4a infrastructure, run po4a … "
po4a -f $category-po4a.cfg 2>/dev/null 1>&2
echo "done"
echo -n " 6 - Inject translation in level files: "
for levelfile in $(ls $category*.txt); do
# Always start afresh
rm -f $outdir/$levelfile
rootfilename=$(echo $levelfile | sed 's/\.txt$//g')
for lang in $linguas; do
dotlang=".$lang"
langcode="";
case $lang in
en) dotlang=""; langcode=".E";;
fr) langcode=".F";;
pl) langcode=".P";;
esac
xmlfile=$rootfilename$dotlang.xml
echo -n "."
if [ -f $xmlfile ]; then
for key in Title Resume ScriptName; do
lineend=""
for subkey in text resume; do
keyval=$(grep "^<${key}_${subkey}>" $xmlfile | sed -e "s|^<${key}\_${subkey}>${rootfilename}:\(.*\)<\/${key}\_${subkey}>$|\1|g")
if [ -n "$keyval" ]; then
lineend="$lineend $subkey=\"$keyval\""
fi
done
if [ -n "$lineend" ]; then
echo "$key$langcode$lineend" >> $outdir/$levelfile
fi
done
fi
done
sed -e '/^Title/d;/^Resume/d;/^ScriptName/d' $levelfile >> $outdir/$levelfile
done
echo "done."
done