Add the help/ and levels/ CMake machinery to enable the po-based translations
parent
37f5fd7689
commit
283af08a34
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue