From 283af08a34df9e8b56ccacb7bff8c99cd217646c Mon Sep 17 00:00:00 2001 From: Didier 'OdyX' Raboud Date: Fri, 25 Oct 2013 15:19:54 +0200 Subject: [PATCH] Add the help/ and levels/ CMake machinery to enable the po-based translations --- CMakeLists.txt | 2 +- help/CMakeLists.txt | 33 ++++++++++ levels/CMakeLists.txt | 46 ++++++++----- levels/gen_levels_xml.sh | 138 --------------------------------------- 4 files changed, 62 insertions(+), 157 deletions(-) create mode 100644 help/CMakeLists.txt delete mode 100755 levels/gen_levels_xml.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index fcf5d1a7..767abba9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,6 @@ endif() install(DIRECTORY ai 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 models 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 textures DESTINATION ${COLOBOT_INSTALL_DATA_DIR}) +add_subdirectory(help) add_subdirectory(levels) diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt new file mode 100644 index 00000000..36ca3a8b --- /dev/null +++ b/help/CMakeLists.txt @@ -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) + diff --git a/levels/CMakeLists.txt b/levels/CMakeLists.txt index c3d95f94..46fcda22 100644 --- a/levels/CMakeLists.txt +++ b/levels/CMakeLists.txt @@ -1,21 +1,31 @@ cmake_minimum_required(VERSION 2.8) -# Translate translatable material -find_program(PO4A po4a) +set(LEVELS_I18N_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../levels-i18n/) -if(PO4A) - set(_levels_i18n_target "levels_i18n") - add_custom_command(OUTPUT ${_levels_i18n_target} - COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} - COMMAND ./gen_levels_xml.sh ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Inject level translations" - ) - add_custom_target(translate_levels ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}/ DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/levels) -else() - message(WARNING "po4a not found, levels will not get translated") - file(GLOB levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/*.txt") - list(REMOVE_ITEM levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt") - install(FILES ${levelfiles} DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/levels/) -endif() +# Handle level headers' translations +file(GLOB levelheaders_po ${CMAKE_CURRENT_SOURCE_DIR}/*-po/) +foreach(levelheader_po ${levelheaders_po}) + string(REPLACE "-po" "" levelheader ${levelheader_po}) + get_filename_component(LEVEL_CODENAME ${levelheader} NAME) + set(SCENEFILE "${LEVEL_CODENAME}*.txt") + set(SCENEDEST) + set(PODIR "${LEVEL_CODENAME}-po/") + set(HELPDIR) + set(HELPDEST "") + message(STATUS "Manage translations for level headers '${LEVEL_CODENAME}*'") + include(${LEVELS_I18N_PATH}/CMakeLists.txt) +endforeach(levelheader_po) + +# Handle all levels' translations +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) diff --git a/levels/gen_levels_xml.sh b/levels/gen_levels_xml.sh deleted file mode 100755 index 66564c90..00000000 --- a/levels/gen_levels_xml.sh +++ /dev/null @@ -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 "

" >> $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" >> $destfile - echo "

$levelfile:$subval

" >> $allsfile - done -done -echo "" >> $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 "" > $category.$common_i18n_ext - for lang in $linguas; do - if [ $lang = "en" ]; then continue; fi; - echo "" > $category.$lang.$common_i18n_ext - done - - for level in $(ls $category*.txt); do - gen_i18n_file $level $category - done - echo "" >> $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 "" >> $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