Merge pull request #3342 from 3d-gussner/MK3_improve_translations

Improve language scripts
This commit is contained in:
DRracer 2022-02-03 08:21:38 +01:00 committed by GitHub
commit 546eafae8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1206 additions and 686 deletions

17
.gitignore vendored
View File

@ -55,3 +55,20 @@ Firmware/Doc
/Firmware/variants/printers.h /Firmware/variants/printers.h
Configuration.tmp Configuration.tmp
config.tmp config.tmp
/lang/lang_en.max
/lang/po/new/*_new.po
/lang/po/new/*_filered.po
/lang/po/new/nonascii.txt
/lang/po/new/lang_en*.txt
/lang/po/new/*-output.txt
/lang/po/new/*.mo
.DS_Store
**/.DS_Store
Firmware/.DS_Store
Firmware/variant/.DS_Store
lang/.DS_Store
lang/po/.DS_Store
lang/po/new/.DS_Store
Tests/.DS_Store
tools/.DS_Store
tools/lib/.DS_Store

View File

@ -1,4 +1,4 @@
dist: trusty dist: focal
before_install: before_install:
- sudo apt-get install -y ninja-build - sudo apt-get install -y ninja-build
# Arduino IDE adds a lot of noise caused by network traffic, trying to firewall it off # Arduino IDE adds a lot of noise caused by network traffic, trying to firewall it off

View File

@ -65,14 +65,14 @@
#if (COMMUNITY_LANG_GROUP == 1) #if (COMMUNITY_LANG_GROUP == 1)
#define COMMUNITY_LANG_GROUP1_NL // Community Dutch language #define COMMUNITY_LANG_GROUP1_NL // Community Dutch language
#define COMMUNITY_LANG_GROUP1_SV // Community Swedish language
#define COMMUNITY_LANG_GROUP1_DA // Community Danish language
#define COMMUNITY_LANG_GROUP1_SL // Community Slovanian language
#define COMMUNITY_LANG_GROUP1_HU // Community Hungarian language
#define COMMUNITY_LANG_GROUP1_LB // Community Luxembourgish language
#define COMMUNITY_LANG_GROUP1_HR // Community Croatian language
#define COMMUNITY_LANG_GROUP1_LT // Community Lithuanian language
#define COMMUNITY_LANG_GROUP1_RO // Community Romanian language #define COMMUNITY_LANG_GROUP1_RO // Community Romanian language
#define COMMUNITY_LANG_GROUP1_HU // Community Hungarian language
#define COMMUNITY_LANG_GROUP1_HR // Community Croatian language
//#define COMMUNITY_LANG_GROUP1_SV // Community Swedish language
//#define COMMUNITY_LANG_GROUP1_DA // Community Danish language
//#define COMMUNITY_LANG_GROUP1_SL // Community Slovanian language
//#define COMMUNITY_LANG_GROUP1_LB // Community Luxembourgish language
//#define COMMUNITY_LANG_GROUP1_LT // Community Lithuanian language
//#define COMMUNITY_LANG_GROUP1_QR // Community new language //..use this as a template and replace 'QR' //#define COMMUNITY_LANG_GROUP1_QR // Community new language //..use this as a template and replace 'QR'
#endif #endif

View File

@ -10,7 +10,7 @@
# 3. Install latest updates with 'sudo apt-get upgrade' # 3. Install latest updates with 'sudo apt-get upgrade'
# #
# #
# Version: 1.0.0-Build_13 # Version: 1.0.0-Build_14
# Change log: # Change log:
# 11 Feb 2021, 3d-gussner, Inital # 11 Feb 2021, 3d-gussner, Inital
# 11 Feb 2021, 3d-gussner, Optional flags to check for updates # 11 Feb 2021, 3d-gussner, Optional flags to check for updates
@ -22,6 +22,8 @@
# 18 Jun 2021, 3d-gussner, Added -g 3 and 4 for more details extrusion lines # 18 Jun 2021, 3d-gussner, Added -g 3 and 4 for more details extrusion lines
# 18 Jun 2021, 3d-gussner, Check for updates is default. Fix update if internet connection is lost. # 18 Jun 2021, 3d-gussner, Check for updates is default. Fix update if internet connection is lost.
# 21 Jun 2021, 3d-gussner, Change board_flash argument to 'y' and firmware_version to 'f' # 21 Jun 2021, 3d-gussner, Change board_flash argument to 'y' and firmware_version to 'f'
# 25 Jan 2021, 3d-gussner, Allow upper and lower case in selection
# Add update option to release OR devel
#### Start: Failures #### Start: Failures
failures() failures()
@ -74,7 +76,7 @@ while getopts c:f:g:m:n:p:u:x:y:?h flag
# '?' 'h' argument usage and help # '?' 'h' argument usage and help
if [ "$help_flag" == "1" ] ; then if [ "$help_flag" == "1" ] ; then
echo "***************************************" echo "***************************************"
echo "* MK404-build.sh Version: 1.0.0-Build_13 *" echo "* MK404-build.sh Version: 1.0.0-Build_14 *"
echo "***************************************" echo "***************************************"
echo "Arguments:" echo "Arguments:"
echo "$(tput setaf 2)-c$(tput sgr0) Check for update" echo "$(tput setaf 2)-c$(tput sgr0) Check for update"
@ -98,7 +100,7 @@ echo " -g : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' l
echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2" echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2"
echo " -n : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes" echo " -n : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
echo " -p : '$(tput setaf 2)MK25$(tput sgr0)', '$(tput setaf 2)MK25S$(tput sgr0)', '$(tput setaf 2)MK3$(tput sgr0)' or '$(tput setaf 2)MK3S$(tput sgr0)'" echo " -p : '$(tput setaf 2)MK25$(tput sgr0)', '$(tput setaf 2)MK25S$(tput sgr0)', '$(tput setaf 2)MK3$(tput sgr0)' or '$(tput setaf 2)MK3S$(tput sgr0)'"
echo " -u : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '" echo " -u : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' release ', '$(tput setaf 2)2$(tput sgr0)' devel '"
echo " -x : '$(tput setaf 2)8$(tput sgr0)',$(tput setaf 2)16$(tput sgr0)',$(tput setaf 2)32$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb." echo " -x : '$(tput setaf 2)8$(tput sgr0)',$(tput setaf 2)16$(tput sgr0)',$(tput setaf 2)32$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb."
echo " -y : '$(tput setaf 2)256$(tput sgr0)','$(tput setaf 2)384$(tput sgr0)','$(tput setaf 2)512$(tput sgr0)','$(tput setaf 2)1024$(tput sgr0)''$(tput setaf 2)32M$(tput sgr0)'" echo " -y : '$(tput setaf 2)256$(tput sgr0)','$(tput setaf 2)384$(tput sgr0)','$(tput setaf 2)512$(tput sgr0)','$(tput setaf 2)1024$(tput sgr0)''$(tput setaf 2)32M$(tput sgr0)'"
echo echo
@ -170,9 +172,8 @@ fi
#Start: Check if new build is selected #Start: Check if new build is selected
if [ "$new_build_flag" == "1" ]; then if [ "$new_build_flag" == "1" ]; then
check_flag=1 check_flag=1
update_flag=1
fi fi
if [ "$update_flag" == "1" ]; then if [[ "$update_flag" == "1" || "$update_flag" == "2" ]]; then
check_flag=1 check_flag=1
fi fi
#End: Check if new build is selected #End: Check if new build is selected
@ -196,11 +197,13 @@ if [ ! -z $firmware_version_flag ]; then
if [ ! -z $MK404_PRINTER_TEMP ]; then if [ ! -z $MK404_PRINTER_TEMP ]; then
MK404_PRINTER=MK25S MK404_PRINTER=MK25S
fi fi
elif [[ ! -z $new_build_flag || ! -z $update_flag || ! -z $check_flag ]]; then
echo "continue"
else else
failures 8 failures 8
fi fi
if [ -z "$MK404_PRINTER" ]; then if [[ -z $MK404_PRINTER && -z $new_build_flag && -z $update_flag && -z $check_flag ]]; then
failures 9 failures 9
fi fi
@ -232,7 +235,7 @@ if [ ! -z $mk404_printer_flag ]; then
fi fi
fi fi
if [ -z $MK404_PRINTER ]; then if [[ -z $MK404_PRINTER && -z $new_build_flag && -z $update_flag && -z $check_flag ]]; then
failures 10 failures 10
fi fi
@ -399,38 +402,58 @@ if [ "$check_flag" == "1" ]; then
# Get latest release # Get latest release
MK404_release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest) MK404_release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest)
MK404_release_tag=$(basename $MK404_release_url) MK404_release_tag=$(basename $MK404_release_url)
# Get remote Commit_Hash # Get release Commit_Hash
#MK404_remote_GIT_COMMIT_HASH=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1) MK404_release_GIT_COMMIT_HASH=$(git ls-remote | grep "refs/tags/$MK404_release_tag" | cut -f 1)
MK404_remote_GIT_COMMIT_HASH=$(git ls-remote | grep "refs/tags/$MK404_release_tag" | cut -f 1) # Get release Commit_Number
# Get remote Commit_Number MK404_release_GIT_COMMIT_NUMBER=$(git rev-list $MK404_release_tag --count)
MK404_remote_GIT_COMMIT_NUMBER=$(git rev-list $MK404_release_tag --count) # Get latest development Commit_Hash
MK404_devel_GIT_COMMIT_HASH=$(git for-each-ref refs/remotes/origin/master | cut -d" " -f 1)
# Get latest development Commit_Number
MK404_devel_GIT_COMMIT_NUMBER=$(git rev-list refs/remotes/origin/master --count)
# Output # Output
echo "" echo ""
echo "Current version : $MK404_current_version" echo "Current version : $MK404_current_version"
echo "" echo ""
echo "Current local hash : $MK404_local_GIT_COMMIT_HASH" echo "Current local hash : $MK404_local_GIT_COMMIT_HASH"
echo "Current local commit nr : $MK404_local_GIT_COMMIT_NUMBER" echo "Current local commit nr : $MK404_local_GIT_COMMIT_NUMBER"
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" ]; then if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_release_GIT_COMMIT_HASH" ]; then
echo "$(tput setaf 1)" echo "$(tput setaf 1)"
else else
echo "$(tput setaf 2)" echo "$(tput setaf 2)"
fi fi
echo "Latest release tag : $MK404_release_tag" echo "Latest release tag : $MK404_release_tag"
echo "Latest release hash : $MK404_remote_GIT_COMMIT_HASH" echo "Latest release hash : $MK404_release_GIT_COMMIT_HASH"
echo "Latest remote commit nr : $MK404_remote_GIT_COMMIT_NUMBER" echo "Latest release commit nr: $MK404_release_GIT_COMMIT_NUMBER"
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_devel_GIT_COMMIT_HASH" ]; then
echo "$(tput setaf 1)"
else
echo "$(tput setaf 2)"
fi
echo "Latest devel hash : $MK404_devel_GIT_COMMIT_HASH"
echo "Latest devel commit nr : $MK404_devel_GIT_COMMIT_NUMBER"
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
# Check for updates # Check for updates
if [ ! -z $MK404_remote_GIT_COMMIT_HASH ]; then if [ ! -z $MK404_release_GIT_COMMIT_HASH ]; then
if [[ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" && -z "$update_flag" ]]; then if [[ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_release_GIT_COMMIT_HASH" && -z "$update_flag" ]]; then
echo "$(tput setaf 2)Update is availible.$(tput sgr 0)" echo "$(tput setaf 2)Update to release is availible.$(tput sgr 0)"
read -t 10 -n 1 -p "$(tput setaf 3)Update now Y/n$(tput sgr 0)" update_answer read -t 10 -n 1 -p "$(tput setaf 3)Update to release now Y/n$(tput sgr 0)" update_answer
if [ "$update_answer" == "Y" ]; then if [[ "$update_answer" == "Y" || "$update_answer" == "y" ]]; then
update_flag=1 update_flag=1
fi fi
echo "" echo ""
fi fi
fi fi
if [ ! -z $MK404_devel_GIT_COMMIT_HASH ]; then
if [[ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_devel_GIT_COMMIT_HASH" && -z "$update_flag" ]]; then
echo "$(tput setaf 2)Update to devel is availible.$(tput sgr 0)"
read -t 10 -n 1 -p "$(tput setaf 3)Update to devel now Y/n$(tput sgr 0)" update_answer
if [[ "$update_answer" == "Y" || "$update_answer" == "y" ]]; then
update_flag=2
fi
echo ""
fi
fi
fi fi
} }
#### End: Check for updates #### End: Check for updates
@ -439,14 +462,27 @@ fi
fetch_updates() fetch_updates()
{ {
if [ "$update_flag" == "1" ]; then if [ "$update_flag" == "1" ]; then
if [ ! -z $MK404_remote_GIT_COMMIT_HASH ]; then if [ ! -z $MK404_release_GIT_COMMIT_HASH ]; then
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" ]; then if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_release_GIT_COMMIT_HASH" ]; then
echo "" echo ""
git fetch --all git fetch --all
read -t 10 -p "$(tput setaf 2)Updating MK404 !$(tput sgr 0)" read -t 5 -p "$(tput setaf 2)Updating MK404 to release!$(tput sgr 0)"
echo "" echo ""
git reset --hard $MK404_release_tag git reset --hard $MK404_release_tag
read -t 10 -p "$(tput setaf 2)Compiling MK404 !$(tput sgr 0)" read -t 5 -p "$(tput setaf 2)Compiling MK404 release!$(tput sgr 0)"
echo ""
new_build_flag=1
fi
fi
elif [ "$update_flag" == "2" ]; then
if [ ! -z $MK404_devel_GIT_COMMIT_HASH ]; then
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_devel_GIT_COMMIT_HASH" ]; then
echo ""
git fetch --all
read -t 5 -p "$(tput setaf 2)Updating MK404 to devel!$(tput sgr 0)"
echo ""
git reset --hard origin/master
read -t 5 -p "$(tput setaf 2)Compiling MK404 devel!$(tput sgr 0)"
echo "" echo ""
new_build_flag=1 new_build_flag=1
fi fi

View File

@ -56,7 +56,7 @@
# Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE # Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE
# it will use the default Arduino IDE folders and so can corrupt the build environment. # it will use the default Arduino IDE folders and so can corrupt the build environment.
# #
# Version: 2.0.0-Build_66 # Version: 2.0.0-Build_67
# Change log: # Change log:
# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt' # 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt'
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown # 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@ -166,6 +166,9 @@
# 24 Jun 2021, 3d-gussner, Fix MK404 user interaction not to show if compiling 'All' variants # 24 Jun 2021, 3d-gussner, Fix MK404 user interaction not to show if compiling 'All' variants
# 24 Jun 2021, 3d-gussner, MK404 is only supported on Linux at this moment. # 24 Jun 2021, 3d-gussner, MK404 is only supported on Linux at this moment.
# 03 Jan 2022, 3d-gussner, Remove calling lang-community.sh as not needed anymore # 03 Jan 2022, 3d-gussner, Remove calling lang-community.sh as not needed anymore
# 21 Jan 2022, 3d-gussner, Sort variants
# Add Arduino 1.8.19 as an option
# 25 Jan 2022, 3d-gussner, Allow upper and lower case for MK404
SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
@ -221,7 +224,7 @@ while getopts b:c:d:g:h:i:j:l:m:n:o:p:v:x:y:?h flag
# '?' 'h' argument usage and help # '?' 'h' argument usage and help
if [ "$help_flag" == "1" ] ; then if [ "$help_flag" == "1" ] ; then
echo "***************************************" echo "***************************************"
echo "* PF-build.sh Version: 2.0.0-Build_66 *" echo "* PF-build.sh Version: 2.0.0-Build_67 *"
echo "***************************************" echo "***************************************"
echo "Arguments:" echo "Arguments:"
echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number" echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number"
@ -247,7 +250,7 @@ echo " -b : '$(tput setaf 2)Auto$(tput sgr0)' needs git or a number"
echo " -c : '$(tput setaf 2)0$(tput sgr0)' clean up, '$(tput setaf 2)1$(tput sgr0)' keep" echo " -c : '$(tput setaf 2)0$(tput sgr0)' clean up, '$(tput setaf 2)1$(tput sgr0)' keep"
echo " -d : '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'" echo " -d : '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'"
echo " -g : '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' lite '$(tput setaf 2)2$(tput sgr0)' fancy '$(tput setaf 2)3$(tput sgr0)' lite with Quad_HR '$(tput setaf 2)4$(tput sgr0)' fancy with Quad_HR" echo " -g : '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' lite '$(tput setaf 2)2$(tput sgr0)' fancy '$(tput setaf 2)3$(tput sgr0)' lite with Quad_HR '$(tput setaf 2)4$(tput sgr0)' fancy with Quad_HR"
echo " -i : '$(tput setaf 2)1.8.5$(tput sgr0)', '$(tput setaf 2)1.8.13$(tput sgr0)'" echo " -i : '$(tput setaf 2)1.8.5$(tput sgr0)', '$(tput setaf 2)1.8.13$(tput sgr0)', '$(tput setaf 2)1.8.19$(tput sgr0)'"
echo " -j : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes" echo " -j : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
echo " -l : '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_ONLY$(tput sgr0)' for English only" echo " -l : '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_ONLY$(tput sgr0)' for English only"
echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2" echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2"
@ -343,7 +346,7 @@ fi
#Start: Check if Arduino IDE version is correct #Start: Check if Arduino IDE version is correct
if [ ! -z "$IDE_flag" ]; then if [ ! -z "$IDE_flag" ]; then
if [[ "$IDE_flag" == "1.8.5" || "$IDE_flag" == "1.8.13" ]]; then if [[ "$IDE_flag" == "1.8.5" || "$IDE_flag" == "1.8.13" || "$IDE_flag" == "1.8.19" ]]; then
ARDUINO_ENV="${IDE_flag}" ARDUINO_ENV="${IDE_flag}"
else else
ARDUINO_ENV="1.8.5" ARDUINO_ENV="1.8.5"
@ -818,7 +821,8 @@ if [ -z "$variant_flag" ] ; then
while IFS= read -r -d $'\0' f; do while IFS= read -r -d $'\0' f; do
options[i++]="$f" options[i++]="$f"
done < <(find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 ) done < <(find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 )
select opt in "${options[@]}" "All" "Quit"; do IFS=$'\n' sorted=($(sort -n <<<"${options[*]}")); unset IFS
select opt in "${sorted[@]}" "All" "Quit"; do
case $opt in case $opt in
*.h) *.h)
VARIANT=$(basename "$opt" ".h") VARIANT=$(basename "$opt" ".h")
@ -1453,7 +1457,7 @@ if [[ "$output_flag" == "1" || -z "$output_flag" ]]; then
if [[ -z "$mk404_flag" && "$variant_flag" != "All" ]]; then if [[ -z "$mk404_flag" && "$variant_flag" != "All" ]]; then
echo echo
read -t 10 -n 1 -p "Do you want to start MK404? Y/$(tput setaf 2)n$(tput sgr 0)" mk404_start read -t 10 -n 1 -p "Do you want to start MK404? Y/$(tput setaf 2)n$(tput sgr 0)" mk404_start
if [ "$mk404_start" == "Y" ]; then if [[ "$mk404_start" == "Y" || "$mk404_start" == "y" ]]; then
echo echo
read -t 10 -n 1 -p "Do you want to start MK404 with or without MMU2S? $(tput setaf 2)1$(tput sgr 0)/2" mk404_choose1 read -t 10 -n 1 -p "Do you want to start MK404 with or without MMU2S? $(tput setaf 2)1$(tput sgr 0)/2" mk404_choose1
if [ "$mk404_choose1" == "1" ]; then if [ "$mk404_choose1" == "1" ]; then
@ -1603,4 +1607,4 @@ done
finish_pf-build finish_pf-build
if [ $TARGET_OS == "linux" ]; then if [ $TARGET_OS == "linux" ]; then
MK404_SIM MK404_SIM
fi fi

View File

@ -1,20 +1,43 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 9
#
# config.sh - multi-language support configuration script # config.sh - multi-language support configuration script
# Definition of absolute paths etc. # Definition of absolute paths etc.
# This file is 'included' in all scripts. # This file is 'included' in all scripts.
# #
#############################################################################
# Change log:
# 31 May 2018, XPila, Initial
# 17 Dec. 2021, 3d-gussner, Change default Arduino path to by PF-build.sh
# created one
# Prepare to use one config file for all languages
# 11 Jan. 2022, 3d-gussner, Added version and Change log colored output
# Use `git rev-list --count HEAD config.sh`
# to get Build Nr
# Check if variables are set by other scripts
# and use these. More flexible for different build
# scripts
# Check correctly if files or dirs exist
#############################################################################
#
# Arduino main folder: # Arduino main folder:
if [ -z "$ARDUINO" ]; then if [ -z "$ARDUINO" ]; then
export ARDUINO=../../PF-build-env-1.0.6/1.8.5-1.0.4-linux-64 #C:/arduino-1.8.5 export ARDUINO=../../PF-build-env-1.0.6/1.8.5-1.0.4-linux-64 #C:/arduino-1.8.5
fi fi
# #
# Arduino builder: # Arduino builder:
export BUILDER=$ARDUINO/arduino-builder if [ -z "$BUILDER" ]; then
export BUILDER=$ARDUINO/arduino-builder
fi
# #
# AVR gcc tools: # AVR gcc tools:
export OBJCOPY=$ARDUINO/hardware/tools/avr/bin/avr-objcopy if [ -z "$OBJCOPY" ]; then
export OBJDUMP=$ARDUINO/hardware/tools/avr/bin/avr-objdump export OBJCOPY=$ARDUINO/hardware/tools/avr/bin/avr-objcopy
fi
if [ -z "$OBJDUMP" ]; then
export OBJDUMP=$ARDUINO/hardware/tools/avr/bin/avr-objdump
fi
# #
# Output folder: # Output folder:
if [ -z "$OUTDIR" ]; then if [ -z "$OUTDIR" ]; then
@ -22,13 +45,19 @@ if [ -z "$OUTDIR" ]; then
fi fi
# #
# Objects folder: # Objects folder:
export OBJDIR="$OUTDIR/sketch" if [ -z "$OBJDIR" ]; then
export OBJDIR="$OUTDIR/sketch"
fi
# #
# Generated elf file: # Generated elf file:
export INOELF="$OUTDIR/Firmware.ino.elf" if [ -z "$INOELF" ]; then
export INOELF="$OUTDIR/Firmware.ino.elf"
fi
# #
# Generated hex file: # Generated hex file:
export INOHEX="$OUTDIR/Firmware.ino.hex" if [ -z "$INOHEX" ]; then
export INOHEX="$OUTDIR/Firmware.ino.hex"
fi
# #
# Set default languages # Set default languages
if [ -z "$LANGUAGES" ]; then if [ -z "$LANGUAGES" ]; then
@ -54,44 +83,44 @@ if [ -z "$COMMUNITY_LANGUAGES" ]; then
export COMMUNITY_LANGUAGES="$COMMUNITY_LANGUAGES" export COMMUNITY_LANGUAGES="$COMMUNITY_LANGUAGES"
fi fi
echo "config.sh started" >&2 echo "$(tput setaf 2)config.sh started$(tput sgr0)" >&2
_err=0 _err=0
echo -n " Arduino main folder: " >&2 echo -n " Arduino main folder: " >&2
if [ -e $ARDUINO ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=1; fi if [ -d $ARDUINO ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=1; fi
echo -n " Arduino builder: " >&2 echo -n " Arduino builder: " >&2
if [ -e $BUILDER ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=2; fi if [ -e $BUILDER ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=2; fi
echo " AVR gcc tools:" >&2 echo " AVR gcc tools:" >&2
echo -n " objcopy " >&2 echo -n " objcopy " >&2
if [ -e $OBJCOPY ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=3; fi if [ -e $OBJCOPY ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=3; fi
echo -n " objdump " >&2 echo -n " objdump " >&2
if [ -e $OBJDUMP ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=4; fi if [ -e $OBJDUMP ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=4; fi
echo -n " Output folder: " >&2 echo -n " Output folder: " >&2
if [ -e $OUTDIR ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=5; fi if [ -d $OUTDIR ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=5; fi
echo -n " Objects folder: " >&2 echo -n " Objects folder: " >&2
if [ -e $OBJDIR ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=6; fi if [ -d $OBJDIR ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=6; fi
echo -n " Generated elf file: " >&2 echo -n " Generated elf file: " >&2
if [ -e $INOELF ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=7; fi if [ -e $INOELF ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=7; fi
echo -n " Generated hex file: " >&2 echo -n " Generated hex file: " >&2
if [ -e $INOHEX ]; then echo 'OK' >&2; else echo 'NG!' >&2; _err=8; fi if [ -e $INOHEX ]; then echo "$(tput setaf 2)OK$(tput sgr0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr0)" >&2; _err=8; fi
echo -n " Languages: " >&2 echo -n " Languages: " >&2
echo "$LANGUAGES" >&2 echo "$(tput setaf 2)$LANGUAGES$(tput sgr0)" >&2
echo -n " Community languages: " >&2 echo -n " Community languages: " >&2
echo "$COMMUNITY_LANGUAGES" >&2 echo "$(tput setaf 2)$COMMUNITY_LANGUAGES$(tput sgr0)" >&2
if [ $_err -eq 0 ]; then if [ $_err -eq 0 ]; then
echo "config.sh finished with success" >&2 echo "$(tput setaf 2)config.sh finished with success$(tput sgr0)" >&2
export CONFIG_OK=1 export CONFIG_OK=1
else else
echo "config.sh finished with errors!" >&2 echo "$(tput setaf 1)config.sh finished with errors!$(tput sgr0)" >&2
export CONFIG_OK=0 export CONFIG_OK=0
fi fi

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.2 Build 12
#
# postbuild.sh - multi-language support script # postbuild.sh - multi-language support script
# Generate binary with secondary language. # Generate binary with secondary language.
# #
@ -17,17 +19,32 @@
# $PROGMEM.txt # $PROGMEM.txt
# textaddr.txt # textaddr.txt
# #
#############################################################################
# Change log:
# 31 May 2018, XPila, Initial
# 17 Dec. 2021, 3d-gussner, Use one config file for all languages
# 11 Jan. 2022, 3d-gussner, Add check for not translated messages using a
# parameter
# Added version and Change log
# colored output
# Add Community language support
# Use `git rev-list --count HEAD fw-build.sh`
# to get Build Nr
#############################################################################
# #
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr0)" >&2; exit 1; fi
# #
# Selected language: # Selected language:
LNG=$1 LNG=$1
#if [ -z "$LNG" ]; then LNG='cz'; fi
# #Set default to ignore missing text
# Params: CHECK_MISSING_TEXT=0
IGNORE_MISSING_TEXT=1 #Check if script should check for missing messages in the source code aren't translated by using parameter "--check-missing-text"
if [ "$1" = "--check-missing-text" ]; then
CHECK_MISSING_TEXT=1
fi
# List of supported languages # List of supported languages
if [ -z "$LANGUAGES" ]; then if [ -z "$LANGUAGES" ]; then
@ -38,15 +55,16 @@ fi
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES" LANGUAGES+=" $COMMUNITY_LANGUAGES"
fi fi
echo "fw-build languages:$LANGUAGES" >&2 echo "$(tput setaf 2)fw-build.sh started$(tput sgr 0)" >&2
echo "fw-build languages:$(tput setaf 2)$LANGUAGES$(tput sgr 0)" >&2
finish() finish()
{ {
echo echo
if [ "$1" = "0" ]; then if [ "$1" = "0" ]; then
echo "postbuild.sh finished with success" >&2 echo "$(tput setaf 2)fw-build.sh finished with success$(tput sgr 0)" >&2
else else
echo "postbuild.sh finished with errors!" >&2 echo "$(tput setaf 1)fw-build.sh finished with errors!$(tput sgr 0)" >&2
fi fi
case "$-" in case "$-" in
*i*) echo "press enter key"; read ;; *i*) echo "press enter key"; read ;;
@ -54,48 +72,48 @@ finish()
exit $1 exit $1
} }
echo "postbuild.sh started" >&2
#check input files #check input files
echo " checking files:" >&2 echo " checking files:" >&2
if [ ! -e $OUTDIR ]; then echo " folder '$OUTDIR' not found!" >&2; finish 1; fi if [ ! -e $OUTDIR ]; then echo "$(tput setaf 1) folder '$OUTDIR' not found!$(tput sgr 0)" >&2; finish 1; fi
echo " folder OK" >&2 echo "$(tput setaf 2) folder OK$(tput sgr 0)" >&2
if [ ! -e $INOELF ]; then echo " elf file '$INOELF' not found!" >&2; finish 1; fi if [ ! -e $INOELF ]; then echo "$(tput setaf 1) elf file '$INOELF' not found!$(tput sgr 0)" >&2; finish 1; fi
echo " elf OK" >&2 echo "$(tput setaf 2) elf OK$(tput sgr 0)" >&2
if ! ls $OBJDIR/*.o >/dev/null 2>&1; then echo " no object files in '$OBJDIR/'!" >&2; finish 1; fi if ! ls $OBJDIR/*.o >/dev/null 2>&1; then echo "$(tput setaf 1) no object files in '$OBJDIR/'!$(tput sgr 0)" >&2; finish 1; fi
echo " objects OK" >&2 echo "$(tput setaf 2) objects OK$(tput sgr 0)" >&2
#run progmem.sh - examine content of progmem1 #run progmem.sh - examine content of progmem1
echo -n " running progmem.sh..." >&2 echo -n " running progmem.sh..." >&2
./progmem.sh 1 2>progmem.out ./progmem.sh 1 2>progmem.out
if [ $? -ne 0 ]; then echo "NG! - check progmem.out file" >&2; finish 1; fi if [ $? -ne 0 ]; then echo "$(tput setaf 1)NG! - check progmem.out file$(tput sgr 0)" >&2; finish 1; fi
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#run textaddr.sh - map progmem addreses to text identifiers #run textaddr.sh - map progmem addreses to text identifiers
echo -n " running textaddr.sh..." >&2 echo -n " running textaddr.sh..." >&2
./textaddr.sh 2>textaddr.out ./textaddr.sh 2>textaddr.out
if [ $? -ne 0 ]; then echo "NG! - check progmem.out file" >&2; finish 1; fi if [ $? -ne 0 ]; then echo "$(tput setaf 1)NG! - check progmem.out file$(tput sgr 0)" >&2; finish 1; fi
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#check for messages declared in progmem1, but not found in lang_en.txt #check for messages declared in progmem1, but not found in lang_en.txt
echo -n " checking textaddr.txt..." >&2 echo -n " checking textaddr.txt..." >&2
cat textaddr.txt | grep "^TEXT NF" | sed "s/[^\"]*\"//;s/\"$//" >not_used.txt cat textaddr.txt | grep "^TEXT NF" | sed "s/[^\"]*\"//;s/\"$//" >not_used.txt
cat textaddr.txt | grep "^ADDR NF" | sed "s/[^\"]*\"//;s/\"$//" >not_tran.txt cat textaddr.txt | grep "^ADDR NF" | sed "s/[^\"]*\"//;s/\"$//" >not_tran.txt
if cat textaddr.txt | grep "^ADDR NF" >/dev/null; then if cat textaddr.txt | grep "^ADDR NF" >/dev/null; then
echo "NG! - some texts not found in lang_en.txt!" echo "$(tput setaf 1)NG! - some texts not found in lang_en.txt!$(tput sgr 0)"
if [ $IGNORE_MISSING_TEXT -eq 0 ]; then if [ $CHECK_MISSING_TEXT -eq 1 ]; then
echo "$(tput setaf 1)Missing text found, please update the language files!$(tput setaf 6)" >&2
cat not_tran.txt >&2
finish 1 finish 1
else else
echo " missing text ignored!" >&2 echo "$(tput setaf 3) missing text ignored!$(tput sgr 0)" >&2
fi fi
else else
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
fi fi
#extract binary file #extract binary file
echo -n " extracting binary..." >&2 echo -n " extracting binary..." >&2
$OBJCOPY -I ihex -O binary $INOHEX ./firmware.bin $OBJCOPY -I ihex -O binary $INOHEX ./firmware.bin
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#update binary file #update binary file
echo " updating binary:" >&2 echo " updating binary:" >&2
@ -107,14 +125,14 @@ cat textaddr.txt | grep "^ADDR OK" | cut -f3- -d' ' | sed "s/^0000/0x/" |\
while read addr data; do while read addr data; do
/bin/echo -n -e $data | dd of=./firmware.bin bs=1 count=2 seek=$addr conv=notrunc oflag=nonblock 2>/dev/null /bin/echo -n -e $data | dd of=./firmware.bin bs=1 count=2 seek=$addr conv=notrunc oflag=nonblock 2>/dev/null
done done
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#update primary language signature in binary file #update primary language signature in binary file
echo -n " primary language signature..." >&2 echo -n " primary language signature..." >&2
if [ -e lang_en.bin ]; then if [ -e lang_en.bin ]; then
#find symbol _PRI_LANG_SIGNATURE in section '.text' #find symbol _PRI_LANG_SIGNATURE in section '.text'
pri_lang=$(cat text.sym | grep -E "\b_PRI_LANG_SIGNATURE\b") pri_lang=$(cat text.sym | grep -E "\b_PRI_LANG_SIGNATURE\b")
if [ -z "$pri_lang" ]; then echo "NG!\n symbol _PRI_LANG_SIGNATURE not found!" >&2; finish 1; fi if [ -z "$pri_lang" ]; then echo "$(tput setaf 1)NG!\n symbol _PRI_LANG_SIGNATURE not found!$(tput sgr 0)" >&2; finish 1; fi
#get pri_lang address #get pri_lang address
pri_lang_addr='0x'$(echo $pri_lang | cut -f1 -d' ') pri_lang_addr='0x'$(echo $pri_lang | cut -f1 -d' ')
#read header from primary language binary file #read header from primary language binary file
@ -123,31 +141,32 @@ if [ -e lang_en.bin ]; then
chscnt=$(echo $header | cut -c18-29 | sed "s/ /\\\\x/g") chscnt=$(echo $header | cut -c18-29 | sed "s/ /\\\\x/g")
/bin/echo -e -n "$chscnt" |\ /bin/echo -e -n "$chscnt" |\
dd of=firmware.bin bs=1 count=4 seek=$(($pri_lang_addr)) conv=notrunc 2>/dev/null dd of=firmware.bin bs=1 count=4 seek=$(($pri_lang_addr)) conv=notrunc 2>/dev/null
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
else else
echo "NG! - file lang_en.bin not found!" >&2; echo "$(tput setaf 1)NG! - file lang_en.bin not found!$(tput sgr 0)" >&2;
finish 1 finish 1
fi fi
#convert bin to hex #convert bin to hex
echo -n " converting to hex..." >&2 echo -n " converting primary to hex..." >&2
$OBJCOPY -I binary -O ihex ./firmware.bin ./firmware.hex $OBJCOPY -I binary -O ihex ./firmware.bin ./firmware.hex
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#update _SEC_LANG in binary file if language is selected #update _SEC_LANG in binary file if language is selected
echo -n " secondary language data..." >&2 echo -n " secondary language data..." >&2
if [ ! -z "$LNG" ]; then if [ ! -z "$LNG" ]; then
./update_lang.sh $LNG 2>./update_lang.out ./update_lang.sh $LNG 2>./update_lang.out
if [ $? -ne 0 ]; then echo "NG! - check update_lang.out file" >&2; finish 1; fi if [ $? -ne 0 ]; then echo "$(tput setaf 1)NG! - check update_lang.out file$(tput sgr 0)" >&2; finish 1; fi
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
finish 0 finish 0
else else
echo "Updating languages:" >&2 echo >&2
echo " Updating languages:" >&2
for lang in $LANGUAGES; do for lang in $LANGUAGES; do
if [ -e lang_$lang.bin ]; then if [ -e lang_$lang.bin ]; then
echo -n " $lang : " >&2 echo -n " $lang : " >&2
./update_lang.sh $lang 2>./update_lang_$lang.out 1>/dev/null ./update_lang.sh $lang 2>./update_lang_$lang.out 1>/dev/null
if [ $? -eq 0 ]; then echo 'OK' >&2; else echo 'NG!' >&2; finish 1; fi if [ $? -eq 0 ]; then echo "$(tput setaf 2)OK$(tput sgr 0)" >&2; else echo "$(tput setaf 1)NG!$(tput sgr 0)" >&2; finish 1; fi
fi fi
done done
fi fi
@ -166,17 +185,23 @@ lang_size_pad=$(( ($lang_size+4096-1) / 4096 * 4096 ))
# TODO: hard-coded! get value by preprocessing LANG_SIZE from xflash_layout.h! # TODO: hard-coded! get value by preprocessing LANG_SIZE from xflash_layout.h!
lang_reserved=249856 lang_reserved=249856
echo " total size usage: $lang_size_pad ($lang_size)" echo -n " total size usage: " >&2
echo " reserved size: $lang_reserved"
if [ $lang_size_pad -gt $lang_reserved ]; then if [ $lang_size_pad -gt $lang_reserved ]; then
echo "NG! - language data too large" >&2 echo -n "$(tput setaf 1)" >&2
else
echo -n "$(tput setaf 2)" >&2
fi
echo "$lang_size_pad ($lang_size)$(tput sgr 0)" >&2
echo " reserved size: $(tput setaf 2)$lang_reserved$(tput sgr 0)" >&2
if [ $lang_size_pad -gt $lang_reserved ]; then
echo "$(tput setaf 1)NG! - language data too large$(tput sgr 0)" >&2
finish 1 finish 1
fi fi
#convert lang.bin to lang.hex #convert lang.bin to lang.hex
echo -n " converting to hex..." >&2 echo -n " converting multi language to hex..." >&2
$OBJCOPY -I binary -O ihex ./lang.bin ./lang.hex $OBJCOPY -I binary -O ihex ./lang.bin ./lang.hex
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr 0)" >&2
#append languages to hex file #append languages to hex file
cat ./lang.hex >> firmware.hex cat ./lang.hex >> firmware.hex

View File

@ -1,34 +1,53 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 11
#
# fw-clean.sh - multi-language support script # fw-clean.sh - multi-language support script
# Remove all firmware output files from lang folder. # Remove all firmware output files from lang folder.
# #
#############################################################################
# Change log:
# 21 June 2018, XPila, Initial
# 11 Sep. 2018, XPila, Lang update, french translation
# resized reserved space
# 18 Oct. 2018, XPila, New lang, arduino 1.8.5 - fw-clean.sh and lang-clean.sh fix
# 10 Dec. 2018, jhoblitt, make all shell scripts executable
# 26 Jul. 2019, leptun, Fix shifted languages. Use \n and \x0a
# 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 01 Mar. 2021, 3d-gussner, Move `Dutch` language parts
# 22 Mar. 2021, 3d-gussner, Move Dutch removing part to correct loaction
# 17 Dec. 2021, 3d-gussner, Use one config file for all languages
# 11 Jan. 2022, 3d-gussner, Added version and Change log
# colored output
# Use `git rev-list --count HEAD fw-clean.sh`
# to get Build Nr
# 25 Jan. 2022, 3d-gussner, Update documentation
#############################################################################
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr0)" >&2; exit 1; fi
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES" LANGUAGES+=" $COMMUNITY_LANGUAGES"
fi fi
echo "fw-clean languages:$LANGUAGES" >&2 echo "$(tput setaf 2)fw-clean.sh started$(tput sgr0)" >&2
echo "fw-clean languages:$(tput setaf 2)$LANGUAGES$(tput sgr0)" >&2
result=0 result=0
rm_if_exists() rm_if_exists()
{ {
if [ -e $1 ]; then if [ -e $1 ]; then
echo -n " removing '$1'..." >&2 echo -n "$(tput sgr0) removing $(tput sgr0) '$1'..." >&2
if rm $1; then if rm $1; then
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr0)" >&2
else else
echo "NG!" >&2 echo "$(tput setaf 1)NG!$(tput sgr0)" >&2
result=1 result=1
fi fi
fi fi
} }
echo "fw-clean.sh started" >&2
rm_if_exists text.sym rm_if_exists text.sym
rm_if_exists progmem1.sym rm_if_exists progmem1.sym
@ -52,11 +71,10 @@ for lang in $LANGUAGES; do
rm_if_exists update_lang_$lang.out rm_if_exists update_lang_$lang.out
done done
echo -n "fw-clean.sh finished" >&2
if [ $result -eq 0 ]; then if [ $result -eq 0 ]; then
echo " with success" >&2 echo "$(tput setaf 2)fw-clean.sh finished with success$(tput sgr0)" >&2
else else
echo " with errors!" >&2 echo "$(tput setaf 1)fw-clean.sh finished with errors!$(tput sgr0)" >&2
fi fi
case "$-" in case "$-" in

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.2 Build 25
#
# lang-build.sh - multi-language support script # lang-build.sh - multi-language support script
# generate lang_xx.bin (language binary file) # generate lang_xx.bin (language binary file)
# #
@ -9,21 +11,65 @@
# Output files: # Output files:
# lang_xx.bin # lang_xx.bin
# #
# Depending on files:
# ../Firmware/config.h to read the max allowed size for translations
#
# Temporary files: # Temporary files:
# lang_en.cnt //calculated number of messages in english
# lang_en.max //maximum size determined by reading "../Firmware/config.h"
# lang_xx.tmp # lang_xx.tmp
# lang_xx.dat # lang_xx.dat
# #
#############################################################################
# Change log:
# 18 June 2018, XPila, Initial
# 19 June 2018, XPila, New ML support
# 18 Oct. 2018, XPila, New lang French
# 26 Nov. 2018, mkbel, Automate secondary language support build.
# 7 May 2019, ondratu Check translation dictionary files to display definition
# 19 June 2019, mkbel Disable language check warnings of type "[W]: No display definition on line".
# Those warnings were masking all other much more useful build process output.
# 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 18 Sep. 2020, 3d-gussner, Update new messages and their translations, fix translations
# Update CZ, FR, IT, ES translations
# CZ thanks to @DRracer
# FR thanks to Carlin Dcustom
# ES
# IT thanks to @wavexx
# Co-authored-by: @DRracer, @wavexx
# 1 Mar. 2021, 3d-gussner, Add Dutch translation
# 17 Dec. 2021, 3d-gussner, Use one config file for all languages
# 21 Dec. 2021, 3d-gussner, Prepare more community languages
# Swedish
# Danish
# Slovanian
# Hungarian
# Luxembourgian
# Croatian
# 3 Jan. 2022, 3d-gussner, Prepare Lithuanian
# Cleanup outdated code
# 11 Jan. 2022, 3d-gussner, Add message and size count comparison
# Added version and Change log
# colored output
# Add Community language support
# Use `git rev-list --count HEAD lang-build.sh`
# to get Build Nr
# 25 Jan. 2022, 3d-gussner, Fix check
# Update documentation
#############################################################################
#
# Config: # Config:
#startup message
echo "lang-build.sh started" >&2
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr 0)" >&2; exit 1; fi
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES" LANGUAGES+=" $COMMUNITY_LANGUAGES"
fi fi
echo "lang-build languages:$LANGUAGES" >&2
#startup message
echo "$(tput setaf 2)lang-build.sh started$(tput sgr 0)" >&2
echo "lang-build languages:$(tput setaf 2)$LANGUAGES$(tput sgr 0)" >&2
#awk code to format ui16 variables for dd #awk code to format ui16 variables for dd
awk_ui16='{ h=int($1/256); printf("\\x%02x\\x%02x\n", int($1-256*h), h); }' awk_ui16='{ h=int($1/256); printf("\\x%02x\\x%02x\n", int($1-256*h), h); }'
@ -33,9 +79,9 @@ awk_ui16='{ h=int($1/256); printf("\\x%02x\\x%02x\n", int($1-256*h), h); }'
finish() finish()
{ {
if [ $1 -eq 0 ]; then if [ $1 -eq 0 ]; then
echo "lang-build.sh finished with success" >&2 echo "$(tput setaf 2)lang-build.sh finished with success$(tput sgr 0)" >&2
else else
echo "lang-build.sh finished with errors!" >&2 echo "$(tput setaf 1)lang-build.sh finished with errors!$(tput sgr 0)" >&2
fi fi
exit $1 exit $1
} }
@ -106,7 +152,7 @@ write_header()
generate_binary() generate_binary()
# $1 - language code ('en', 'cz'...) # $1 - language code ('en', 'cz'...)
{ {
echo "lang="$1 >&2 echo "lang=$(tput setaf 2)$1$(tput sgr 0)" >&2
#remove output and temporary files #remove output and temporary files
rm -f lang_$1.bin rm -f lang_$1.bin
rm -f lang_$1.tmp rm -f lang_$1.tmp
@ -115,9 +161,19 @@ generate_binary()
#check lang dictionary #check lang dictionary
./lang-check.py $1 #--no-warning ./lang-check.py $1 #--no-warning
#create lang_xx.tmp - different processing for 'en' language #create lang_xx.tmp - different processing for 'en' language
if [ "$1" = "en" ]; then if [[ "$1" = "en" || ! -f "lang_en.max" ]]; then
#remove comments and empty lines #remove comments and empty lines
cat lang_en.txt | sed '/^$/d;/^#/d' cat lang_en.txt | sed '/^$/d;/^#/d'
#calculate number of strings
count=$(grep -c '^"' lang_en.txt)
echo "count="$count >&2
#Calculate the number of strings and save to temporary file
echo $count >lang_en.cnt
#read the allowed maxsize from "../Firmware/config.h" and save to temporary file
maxsize=$(($(grep "#define LANG_SIZE_RESERVED" ../Firmware/config.h|sed -e's/ */ /g' |cut -d ' ' -f3)))
echo "maxsize="$maxsize >&2
echo $maxsize >lang_en.max
else else
#remove comments and empty lines, print lines with translated text only #remove comments and empty lines, print lines with translated text only
cat lang_en_$1.txt | sed '/^$/d;/^#/d' | sed -n 'n;p' cat lang_en_$1.txt | sed '/^$/d;/^#/d' | sed -n 'n;p'
@ -128,12 +184,29 @@ generate_binary()
#calculate number of strings #calculate number of strings
count=$(grep -c '^"' lang_$1.tmp) count=$(grep -c '^"' lang_$1.tmp)
echo "count="$count >&2 echo "count="$count >&2
# read string count of English and compare it with the translation
encount=$(cat lang_en.cnt)
if [ "$count" -eq "$encount" ]; then
echo "$(tput setaf 2)OK:"$1"="$count"$(tput sgr 0) is equal to $(tput setaf 2)en="$encount"$(tput sgr 0)" >&2
else
echo "$(tput setaf 1)Error:"$1"="$count"$(tput sgr 0) is NOT equal to $(tput setaf 1)en="$encount"$(tput sgr 0)" >&2
finish 1
fi
#calculate text data offset #calculate text data offset
offs=$((16 + 2 * $count)) offs=$((16 + 2 * $count))
echo "offs="$offs >&2 echo "offs="$offs >&2
#calculate text data size #calculate text data size
size=$(($offs + $(wc -c lang_$1.dat | cut -f1 -d' '))) size=$(($offs + $(wc -c lang_$1.dat | cut -f1 -d' ')))
echo "size="$size >&2 echo "size="$size >&2
# read maxsize and compare with the translation
maxsize=$(cat lang_en.max)
if [ "$size" -lt "$maxsize" ]; then
free_space=$(($maxsize - $size))
echo "$(tput setaf 2)OK:"$1"="$size"$(tput sgr 0) is less than $(tput setaf 2)"$maxsize"$(tput sgr 0). Free space:$(tput setaf 2)"$free_space"$(tput sgr 0)" >&2
else
echo "$(tput setaf 1)Error:"$1"="$size"$(tput sgr 0) is higer than $(tput setaf 3)"$maxsize"$(tput sgr 0)" >&2
finish 1
fi
#write header with empty signature and checksum #write header with empty signature and checksum
write_header $1 $size $count 0x0000 0x00000000 write_header $1 $size $count 0x0000 0x00000000
#write offset table #write offset table

View File

@ -1,24 +1,49 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# #
# Version 1.0.1 # Version 1.0.2 - Build 38
#
############################################################################# #############################################################################
# Change log: # Change log:
# 7 May 2019, Ondrej Tuma, Initial # 7 May 2019, ondratu , Initial
# 9 June 2020, 3d-gussner, Added version and Change log # 13 June 2019, 3d-gussner, Fix length false positives
# 9 June 2020, 3d-gussner, Wrap text to 20 char and rows # 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 9 June 2020, 3d-gussner, colored output # 18 Sep. 2020, 3d-gussner, Fix execution of lang-check.py
# 2 Apr. 2021, 3d-gussner, Fix and improve text warp # 2 Apr. 2021, 3d-gussner, Fix and improve text warp
# 22 Apr. 2021, DRracer , add English source to output # 22 Apr. 2021, DRracer , add English source to output
# 23 Apr. 2021, wavexx , improve # 23 Apr. 2021, wavexx , improve
# 24 Apr. 2021, wavexx , improve # 24 Apr. 2021, wavexx , improve
# 26 Apr. 2021, 3d-gussner, add character ruler # 26 Apr. 2021, wavexx , add character ruler
# 21 Dec. 2021, 3d-gussner, Prepare more community languages
# Swedish
# Danish
# Slovanian
# Hungarian
# Luxembourgian
# Croatian
# 3 Jan. 2022, 3d-gussner, Prepare Lithuanian
# 7 Jan. 2022, 3d-gussner, Check for Syntax errors and exit with error
# , add Build number 'git rev-list --count HEAD lang-check.py'
# 30 Jan. 2022, 3d-gussner, Add arguments. Requested by @AttilaSVK
# --information == output all source and translated messages
# --import-check == used by `lang-import.sh`to verify
# newly import `lang_en_??.txt` files
############################################################################# #############################################################################
# #
# Expected syntax of the files, which other scripts depend on
# 'lang_en.txt'
# 1st line: '#MSG_'<some text>' c='<max chars in a column>' r='<max rows> ; '#MSG' is mandentory while 'c=' and 'r=' aren't but should be there
# 2nd line: '"'<origin message used in the source code>'"' ; '"' double quotes at the beginning and end of message are mandentory
# 3rd line: LF ; Line feed is mandantory between messages
#
# 'lang_en_??.txt'
# 1st line: '#MSG_'<some text>' c='<max chars in a column>' r='<max rows> ; '#MSG' is mandentory while 'c=' and 'r=' aren't but should be there
# 2nd line: '"'<origin message used in the source code>'"' ; '"' double quotes at the beginning and end of message are mandentory
# 3rd line: '"'<translated message>'"' ; '"' double quotes at the beginning and end of message are mandentory
# 4th line: LF ; Line feed is mandantory between messages
#
"""Check lang files.""" """Check lang files."""
from argparse import ArgumentParser from argparse import ArgumentParser
from traceback import print_exc from traceback import print_exc
from sys import stdout, stderr from sys import stdout, stderr, exit
import textwrap import textwrap
import re import re
@ -99,22 +124,31 @@ def ign_char_first(c):
def ign_char_last(c): def ign_char_last(c):
return c.isalnum() or c in {'.', "'"} return c.isalnum() or c in {'.', "'"}
def parse_txt(lang, no_warning, warn_empty, information, import_check):
def parse_txt(lang, no_warning, warn_empty):
"""Parse txt file and check strings to display definition.""" """Parse txt file and check strings to display definition."""
if lang == "en": if lang == "en":
file_path = "lang_en.txt" file_path = "lang_en.txt"
else: else:
file_path = "lang_en_%s.txt" % lang if import_check:
file_path = "po/new/lang_en_%s.txt" % lang
else:
file_path = "lang_en_%s.txt" % lang
print(green("Start %s lang-check" % lang)) print(green("Start %s lang-check" % lang))
lines = 1 lines = 0
with open(file_path) as src: with open(file_path) as src:
while True: while True:
comment = src.readline().split(' ') message = src.readline()
#print (comment) #Debug lines += 1
#print(message) #Debug
#check syntax 1st line starts with `#MSG`
if (message[0:4] != '#MSG'):
print(red("[E]: Critical syntax error: 1st line doesn't start with #MSG on line %d" % lines))
print(red(message))
exit(1)
#Check if columns and rows are defined
comment = message.split(' ')
#Check if columns and rows are defined #Check if columns and rows are defined
cols = None cols = None
rows = None rows = None
@ -133,29 +167,69 @@ def parse_txt(lang, no_warning, warn_empty):
if cols is None and rows is None: if cols is None and rows is None:
if not no_warning: if not no_warning:
print(yellow("[W]: No display definition on line %d" % lines)) print(yellow("[W]: No display definition on line %d" % lines))
cols = len(translation) # propably fullscreen cols = len(source) # propably fullscreen
if rows is None: if rows is None:
rows = 1 rows = 1
elif rows > 1 and cols != 20: elif rows > 1 and cols != 20:
print(yellow("[W]: Multiple rows with odd number of columns on line %d" % lines)) print(yellow("[W]: Multiple rows with odd number of columns on line %d" % lines))
#Wrap text to 20 chars and rows #Wrap text to 20 chars and rows
source = src.readline()[:-1].strip('"') source = src.readline()[:-1] #read whole line
#print (source) #Debug lines += 1
translation = src.readline()[:-1].strip('"') #check if 2nd line of origin message beginns and ends with " double quote
if translation == '\\x00': if (source[0]!="\""):
# crude hack to handle intentionally-empty translations print(red('[E]: Critical syntax error: Missing " double quotes at beginning of message in source on line %d' % lines))
translation = '' print(red(source))
exit(1)
if (source[-1]=="\""):
source = source.strip('"') #remove " double quotes from message
else:
print(red('[E]: Critical syntax error: Missing " double quotes at end of message in source on line %d' % lines))
print(red(source))
exit(1)
#print(source) #Debug
if lang != "en":
translation = src.readline()[:-1]#read whole line
lines += 1
#check if 3rd line of translation message beginns and ends with " double quote
if (translation[0]!="\""):
print(red('[E]: Critical syntax error: Missing " double quotes at beginning of message in translation on line %d' % lines))
print(red(translation))
exit(1)
if (translation[-1]=="\""):
#print ("End ok")
translation = translation.strip('"') #remove " double quote from message
else:
print(red('[E]: Critical syntax error: Missing " double quotes at end of message in translation on line %d' % lines))
print(red(translation))
exit(1)
#print(translation) #Debug
if translation == '\\x00':
# crude hack to handle intentionally-empty translations
translation = ''
#check if source is ascii only
if source.isascii() == False:
print(red('[E]: Critical syntax: Non ascii chars found on line %d' % lines))
print(red(source))
exit(1)
#check if translation is ascii only
if lang != "en":
if translation.isascii() == False:
print(red('[E]: Critical syntax: Non ascii chars found on line %d' % lines))
print(red(translation))
exit(1)
# handle backslash sequences # handle backslash sequences
source = unescape(source) source = unescape(source)
translation = unescape(translation) if lang != "en":
translation = unescape(translation)
#print (translation) #Debug #print (translation) #Debug
wrapped_source = wrap_text(source, cols) wrapped_source = wrap_text(source, cols)
rows_count_source = len(wrapped_source) rows_count_source = len(wrapped_source)
wrapped_translation = wrap_text(translation, cols) if lang != "en":
rows_count_translation = len(wrapped_translation) wrapped_translation = wrap_text(translation, cols)
rows_count_translation = len(wrapped_translation)
# Check for potential errors in the definition # Check for potential errors in the definition
if not no_warning: if not no_warning:
@ -172,70 +246,92 @@ def parse_txt(lang, no_warning, warn_empty):
print() print()
# Missing translation # Missing translation
if len(translation) == 0 and (warn_empty or rows > 1): if lang != "en":
if rows == 1: if len(translation) == 0 and (warn_empty or rows > 1):
print(yellow("[W]: Empty translation for \"%s\" on line %d" % (source, lines))) if rows == 1:
else: print(yellow("[W]: Empty translation for \"%s\" on line %d" % (source, lines)))
print(yellow("[W]: Empty translation on line %d" % lines)) else:
print_ruler(6, cols); print(yellow("[W]: Empty translation on line %d" % lines))
print_wrapped(wrapped_source, rows, cols) print_ruler(6, cols);
print() print_wrapped(wrapped_source, rows, cols)
print()
# Check for translation lenght # Check for translation lenght
if (rows_count_translation > rows) or (rows == 1 and len(translation) > cols): if (rows_count_translation > rows) or (rows == 1 and len(translation) > cols):
print(red('[E]: Text is longer than definition on line %d: cols=%d rows=%d (rows diff=%d)' print(red('[E]: Text is longer than definition on line %d: cols=%d rows=%d (rows diff=%d)'
% (lines, cols, rows, rows_count_translation-rows))) % (lines, cols, rows, rows_count_translation-rows)))
print_source_translation(source, translation, print_source_translation(source, translation,
wrapped_source, wrapped_translation, wrapped_source, wrapped_translation,
rows, cols) rows, cols)
# Different count of % sequences # Different count of % sequences
if source.count('%') != translation.count('%') and len(translation) > 0: if source.count('%') != translation.count('%') and len(translation) > 0:
print(red('[E]: Unequal count of %% escapes on line %d:' % (lines))) print(red('[E]: Unequal count of %% escapes on line %d:' % (lines)))
print_source_translation(source, translation, print_source_translation(source, translation,
wrapped_source, wrapped_translation, wrapped_source, wrapped_translation,
rows, cols) rows, cols)
# Different first/last character # Different first/last character
if not no_warning and len(source) > 0 and len(translation) > 0: if not no_warning and len(source) > 0 and len(translation) > 0:
source_end = source.rstrip()[-1] source_end = source.rstrip()[-1]
translation_end = translation.rstrip()[-1] translation_end = translation.rstrip()[-1]
start_diff = not (ign_char_first(source[0]) and ign_char_first(translation[0])) and source[0] != translation[0] start_diff = not (ign_char_first(source[0]) and ign_char_first(translation[0])) and source[0] != translation[0]
end_diff = not (ign_char_last(source_end) and ign_char_last(translation_end)) and source_end != translation_end end_diff = not (ign_char_last(source_end) and ign_char_last(translation_end)) and source_end != translation_end
if start_diff or end_diff: if start_diff or end_diff:
if start_diff: if start_diff:
print(yellow('[W]: Differing first punctuation character (%s => %s) on line %d:' % (source[0], translation[0], lines))) print(yellow('[W]: Differing first punctuation character (%s => %s) on line %d:' % (source[0], translation[0], lines)))
if end_diff: if end_diff:
print(yellow('[W]: Differing last punctuation character (%s => %s) on line %d:' % (source[-1], translation[-1], lines))) print(yellow('[W]: Differing last punctuation character (%s => %s) on line %d:' % (source[-1], translation[-1], lines)))
print_source_translation(source, translation, print_source_translation(source, translation,
wrapped_source, wrapped_translation, wrapped_source, wrapped_translation,
rows, cols) rows, cols)
#elif information:
# print(green('[I]: %s' % (message)))
# print_source_translation(source, translation,
# wrapped_source, wrapped_translation,
# rows, cols)
# Short translation
if not no_warning and len(source) > 0 and len(translation) > 0:
if len(translation.rstrip()) < len(source.rstrip()) / 2:
print(yellow('[W]: Short translation on line %d:' % (lines)))
print_source_translation(source, translation,
wrapped_source, wrapped_translation,
rows, cols)
# Incorrect trailing whitespace in translation # Short translation
if not no_warning and len(translation) > 0 and \ if not no_warning and len(source) > 0 and len(translation) > 0:
(source.rstrip() == source or (rows == 1 and len(source) == cols)) and \ if len(translation.rstrip()) < len(source.rstrip()) / 2:
translation.rstrip() != translation and \ print(yellow('[W]: Short translation on line %d:' % (lines)))
(rows > 1 or len(translation) != len(source)): print_source_translation(source, translation,
print(yellow('[W]: Incorrect trailing whitespace for translation on line %d:' % (lines))) wrapped_source, wrapped_translation,
source = highlight_trailing_white(source) rows, cols)
translation = highlight_trailing_white(translation) #elif information:
wrapped_translation = highlight_trailing_white(wrapped_translation) # print(green('[I]: %s' % (message)))
print_source_translation(source, translation, # print_source_translation(source, translation,
wrapped_source, wrapped_translation, # wrapped_source, wrapped_translation,
rows, cols) # rows, cols)
if len(src.readline()) != 1: # empty line # Incorrect trailing whitespace in translation
if not no_warning and len(translation) > 0 and \
(source.rstrip() == source or (rows == 1 and len(source) == cols)) and \
translation.rstrip() != translation and \
(rows > 1 or len(translation) != len(source)):
print(yellow('[W]: Incorrect trailing whitespace for translation on line %d:' % (lines)))
source = highlight_trailing_white(source)
translation = highlight_trailing_white(translation)
wrapped_translation = highlight_trailing_white(wrapped_translation)
print_source_translation(source, translation,
wrapped_source, wrapped_translation,
rows, cols)
elif information:
print(green('[I]: %s' % (message)))
print_source_translation(source, translation,
wrapped_source, wrapped_translation,
rows, cols)
delimiter = src.readline()
lines += 1
if ("" == delimiter):
break
elif len(delimiter) != 1: # empty line
print(red('[E]: Critical Syntax error: Missing empty line between messages between lines: %d and %d' % (lines-1,lines)))
break break
lines += 4
print(green("End %s lang-check" % lang)) print(green("End %s lang-check" % lang))
@ -253,10 +349,16 @@ def main():
parser.add_argument( parser.add_argument(
"--warn-empty", action="store_true", "--warn-empty", action="store_true",
help="Warn about empty translations") help="Warn about empty translations")
parser.add_argument(
"--information", action="store_true",
help="Output all translations")
parser.add_argument(
"--import-check", action="store_true",
help="Check import file and save informational to file")
args = parser.parse_args() args = parser.parse_args()
try: try:
parse_txt(args.lang, args.no_warning, args.warn_empty) parse_txt(args.lang, args.no_warning, args.warn_empty, args.information, args.import_check)
return 0 return 0
except Exception as exc: except Exception as exc:
print_exc() print_exc()

View File

@ -1,13 +1,34 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 10
#
# clean.sh - multi-language support script # clean.sh - multi-language support script
# Remove all language output files from lang folder. # Remove all language output files from lang folder.
# #
#############################################################################
# Change log:
# 1 Nov. 2018, XPila, Initial
# 18 Oct. 2018, XPila, New lang, arduino 1.8.5 - fw-clean.sh and lang-clean.sh fix
# 25 Oct. 2018, XPila, New lang - fixed french langcode and comparsion in lang-clean script
# 10 Dec. 2018, jhoblitt, make all shell scripts executable
# 26 Jul. 2019, leptun, Fix shifted languages. Use \n and \x0a
# 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 01 Mar. 2021, 3d-gussner, Move `Dutch` language parts
# 22 Mar. 2021, 3d-gussner, Move Dutch removing part to correct loaction
# 21 Dec. 2021, 3d-gussner, Use one config file for all languages
# 03 Jan. 2022, 3d-gussner, Cleanup outdated code
# 11 Jan. 2022, 3d-gussner, Also remove temporally files which have been
# generated for message and size count comparison
# Added version and Change log
# colored output
# Add Community language support
# Use `git rev-list --count HEAD lang-clean.sh`
# to get Build Nr
# 25 Jan. 2022, 3d-gussner, clean up lang-import.sh temproray files
#############################################################################
# Config: # Config:
echo "CONFIG: $CONFIG_OK"
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr0)" >&2; exit 1; fi
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES" LANGUAGES+=" $COMMUNITY_LANGUAGES"
@ -18,11 +39,11 @@ result=0
rm_if_exists() rm_if_exists()
{ {
if [ -e $1 ]; then if [ -e $1 ]; then
echo -n " removing '$1'..." >&2 echo -n "$(tput sgr0) removing $(tput setaf 3)'$1'$(tput sgr0)..." >&2
if rm $1; then if rm $1; then
echo "OK" >&2 echo "$(tput setaf 2)OK$(tput sgr0)" >&2
else else
echo "NG!" >&2 echo "$(tput setaf 1)NG!$(tput sgr0)" >&2
result=1 result=1
fi fi
fi fi
@ -32,35 +53,43 @@ clean_lang()
{ {
if [ "$1" = "en" ]; then if [ "$1" = "en" ]; then
rm_if_exists lang_$1.tmp rm_if_exists lang_$1.tmp
rm_if_exists lang_$1.cnt
rm_if_exists lang_$1.max
else else
rm_if_exists lang_$1.tmp rm_if_exists lang_$1.tmp
rm_if_exists lang_en_$1.tmp rm_if_exists lang_en_$1.tmp
rm_if_exists lang_en_$1.dif rm_if_exists lang_en_$1.dif
rm_if_exists lang_$1.ofs rm_if_exists lang_$1.ofs
rm_if_exists lang_$1.txt rm_if_exists lang_$1.txt
rm_if_exists po/new/$1_new.po
rm_if_exists po/new/$1.mo
rm_if_exists po/new/$1_filtered.po
rm_if_exists po/new/lang_en_$1.txt
rm_if_exists po/new/$1-output.txt
fi fi
rm_if_exists lang_$1_check.dif rm_if_exists lang_$1_check.dif
rm_if_exists lang_$1.bin rm_if_exists lang_$1.bin
rm_if_exists lang_$1.dat rm_if_exists lang_$1.dat
rm_if_exists lang_$1_1.tmp rm_if_exists lang_$1_1.tmp
rm_if_exists lang_$1_2.tmp rm_if_exists lang_$1_2.tmp
rm_if_exists po/new/nonascii.txt
} }
echo "$(tput setaf 2)lang-clean.sh started$(tput sgr0)" >&2
#Clean English #Clean English
clean_lang en clean_lang en
#Clean languages #Clean languages
echo "lang-clean.sh started" >&2 echo "lang-clean languages:$(tput setaf 2)$LANGUAGES$(tput sgr0)" >&2
echo "lang-clean languages:$LANGUAGES" >&2
for lang in $LANGUAGES; do for lang in $LANGUAGES; do
clean_lang $lang clean_lang $lang
done done
echo -n "lang-clean.sh finished" >&2
if [ $result -eq 0 ]; then if [ $result -eq 0 ]; then
echo " with success" >&2 echo "$(tput setaf 2) lang-clean.sh with success$(tput sgr0)" >&2
else else
echo " with errors!" >&2 echo "$(tput setaf 1) lang-clean.sh with errors!$(tput sgr0)" >&2
fi fi
case "$-" in case "$-" in

View File

@ -1,16 +1,41 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 18
#
# lang-export.sh - multi-language support script # lang-export.sh - multi-language support script
# for generating lang_xx.po # for generating lang_xx.po
# #
#############################################################################
# Change log:
# 9 Nov. 2018, XPila, Initial
# 10 Dec. 2018, jhoblitt, make all shell scripts executable
# 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 6 Sep. 2019, DRracer, change to bash
# 1 Mar. 2019, 3d-gussner, Move `Dutch` language parts
# Add templates for future community languages
# 17 Dec. 2021, 3d-gussner, Use one config file for all languages
# Fix missing last translation
# 21 Dec. 2021, 3d-gussner, Add Swedish, Danish, Slovanian, Hungarian,
# Luxembourgish, Croatian
# 3 Jan. 2022, 3d-gussner, Add Lithuanian
# Cleanup outaded code
# 11 Jan. 2022, 3d-gussner, Added version and Change log
# colored output
# Add Community language support
# Use `git rev-list --count HEAD lang-export.sh`
# to get Build Nr
# 25 Jan. 2022, 3d-gussner, Replace German HD44780 A00 ROM 'äöüß' to UTF-8 'äöüß'
#############################################################################
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr 0)" >&2; exit 1; fi
echo "$(tput setaf 2)lang-export.sh started$(tput sgr 0)" >&2
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then if [ ! -z "$COMMUNITY_LANGUAGES" ]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES" LANGUAGES+=" $COMMUNITY_LANGUAGES"
fi fi
echo "lang-export languages:$LANGUAGES" >&2 echo "$(tput setaf 2)lang-export languages:$LANGUAGES$(tput sgr 0)" >&2
# relative path to source folder # relative path to source folder
SRCDIR="../Firmware" SRCDIR="../Firmware"
@ -78,7 +103,7 @@ else
esac) esac)
# unknown language - error # unknown language - error
if [ -z "LNGNAME" ]; then if [ -z "LNGNAME" ]; then
echo "Invalid argument '$LNG'." echo "Invalid argument $(tput setaf 1)'$LNG'$(tput sgr 0).">&2
exit 1 exit 1
fi fi
INFILE=lang_en_$LNG.txt INFILE=lang_en_$LNG.txt
@ -88,18 +113,16 @@ fi
# remove output file if exists # remove output file if exists
if [ -e $OUTFILE ]; then rm -f -v $OUTFILE; fi if [ -e $OUTFILE ]; then rm -f -v $OUTFILE; fi
echo "lang-export.sh started"
#total strings #total strings
CNTTXT=$(grep '^#' -c $INFILE) CNTTXT=$(grep '^#' -c $INFILE)
#not translated strings #not translated strings
CNTNT=$(grep '^\"\\x00\"' -c $INFILE) CNTNT=$(grep '^\"\\x00\"' -c $INFILE)
echo " $CNTTXT texts, $CNTNT not translated" echo " $(tput setaf 2)$CNTTXT$(tput sgr 0) texts, $(tput setaf 3)$CNTNT$(tput sgr 0) not translated" >&2
# list .cpp, .c and .h files from source folder # list .cpp, .c and .h files from source folder
SRCFILES=$(ls "$SRCDIR"/*.cpp "$SRCDIR"/*.c "$SRCDIR"/*.h) SRCFILES=$(ls "$SRCDIR"/*.cpp "$SRCDIR"/*.c "$SRCDIR"/*.h)
echo " selected language=$LNGNAME" echo " selected language=$(tput setaf 2)$LNGNAME$(tput sgr 0)" >&2
# write po/pot header # write po/pot header
( (
@ -138,7 +161,7 @@ num=1
#end debug #end debug
if [ "${s:0:1}" = "\"" ]; then if [ "${s:0:1}" = "\"" ]; then
if [[ "${s0:0:1}" = "\"" || "$LNG" = "en" ]]; then if [[ "${s0:0:1}" = "\"" || "$LNG" = "en" ]]; then
echo " processing $num of $CNTTXT" >&2 echo -ne " processing $num of $CNTTXT\033[0K\r" >&2
# write po/pot item # write po/pot item
( (
if [ "$LNG" = "en" ]; then s1=$s0; s0=$s; fi if [ "$LNG" = "en" ]; then s1=$s0; s0=$s; fi
@ -167,5 +190,18 @@ done >>$OUTFILE) 2>&1
sync sync
sed -i 's/$/\r/' $OUTFILE sed -i 's/$/\r/' $OUTFILE
echo "lang-export.sh finished" #replace HD44780 A00 'äöüß' to UTF-8 'äöüß'
if [ "$LNG" = "de" ]; then
#replace 'A00 ROM ä' with 'ä'
sed -i 's/\\xe1/\xc3\xa4/g' $OUTFILE
#replace 'A00 ROM ü' with 'ü'
sed -i 's/\\xf5/\xc3\xbc/g' $OUTFILE
#replace 'A00 ROM ö' with 'ö'
sed -i 's/\\xef/\xc3\xb6/g' $OUTFILE
#replace 'A00 ROM ß' with 'ß'
sed -i 's/\\xe2/\xc3\x9f/g' $OUTFILE
fi
echo >&2
echo "$(tput setaf 2)lang-export.sh finished$(tput sgr 0)">&2
exit 0 exit 0

View File

@ -1,20 +1,56 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 24
#
# lang-import.sh - multi-language support script # lang-import.sh - multi-language support script
# for importing translated xx.po # for importing translated xx.po
#
#############################################################################
# Change log:
# 9 Nov. 2018, XPila, Initial
# 21 Nov. 2018, XPila, fix - replace '\n' with space in all languages
# 10 Dec. 2018, jhoblitt, make all shell scripts executable
# 21 Aug. 2019, 3d-gussner, Added "All" argument and it is default in nothing is chosen
# Added few German/French diacritical characters
# 6 Sep. 2019, DRracer, change to bash
# 14 Sep. 2019, 3d-gussner, Prepare adding new language
# 1 Mar. 2019, 3d-gussner, Move `Dutch` language parts
# Add templates for future community languages
# 17 Dec. 2021, 3d-gussner, Use one config file for all languages
# Fix missing last translation
# Add counter
# replace two double quotes with `\x00`
# 21 Dec. 2021, 3d-gussner, Add Swedish, Danish, Slovanian, Hungarian,
# Luxembourgish, Croatian
# 3 Jan. 2022, 3d-gussner, Add Lithuanian
# Cleanup outaded code
# 11 Jan. 2022, 3d-gussner, Added version and Change log
# colored output
# Add Community language support
# Use `git rev-list --count HEAD lang-import.sh`
# to get Build Nr
# 14 Jan. 2022, 3d-gussner, Replace German UTF-8 'äöÿÿ' to HD44780 A00 ROM 'äöÿÿ'
# 28 Jan. 2022, 3d-gussner, Run lang-check and output `xx-output.txt` file to review
# translations
# new argruments `--information` `--import-check`
#############################################################################
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr 0)" >&2; exit 1; fi
if [ ! -z "$COMMUNITY_LANGUAGES" ]; then echo "$(tput setaf 2)lang-import.sh started$(tput sgr 0)" >&2
LANGUAGES+=" $COMMUNITY_LANGUAGES"
fi
echo "lang-import languages:$LANGUAGES" >&2
LNG=$1 LNG=$1
# if no arguments, 'all' is selected (all po and also pot will be generated) # if no arguments, 'all' is selected (all po and also pot will be generated)
if [ -z "$LNG" ]; then LNG=all; fi if [ -z "$LNG" ]; then LNG=all; fi
if [[ ! -z "$COMMUNITY_LANGUAGES" && "$LNG" = "all" ]]; then
LANGUAGES+=" $COMMUNITY_LANGUAGES"
else
LANGUAGES="$LNG"
fi
echo "$(tput setaf 2)lang-import languages:$LANGUAGES$(tput sgr 0)" >&2
# if 'all' is selected, script will generate all po files and also pot file # if 'all' is selected, script will generate all po files and also pot file
if [ "$LNG" = "all" ]; then if [ "$LNG" = "all" ]; then
for lang in $LANGUAGES; do for lang in $LANGUAGES; do
@ -33,7 +69,7 @@ cd po/new
# check if input file exists # check if input file exists
if ! [ -e $LNGISO.po ]; then if ! [ -e $LNGISO.po ]; then
echo "Input file $LNGISO.po not found!" >&2 echo "$(tput setaf 1)Input file $LNGISO.po not found!$(tput sgr 0)" >&2
exit -1 exit -1
fi fi
@ -45,51 +81,98 @@ sed -i 's/ \\n/ /g;s/\\n/ /g' $LNG'_filtered.po'
#replace in czech translation #replace in czech translation
if [ "$LNG" = "cz" ]; then if [ "$LNG" = "cz" ]; then
#replace 'ž' with 'z' #replace 'Á' with 'A'
sed -i 's/\xc5\xbe/z/g' $LNG'_filtered.po' sed -i 's/\xc3\x81/A/g' $LNG'_filtered.po'
#replace 'ì' with 'e' #replace 'á' with 'a'
sed -i 's/\xc4\x9b/e/g' $LNG'_filtered.po'
#replace 'í' with 'i'
sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
#replace 'ø' with 'r'
sed -i 's/\xc5\x99/r/g' $LNG'_filtered.po'
#replace 'è' with 'c'
sed -i 's/\xc4\x8d/c/g' $LNG'_filtered.po'
#replace 'á' with 'a'
sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'Č' with 'C'
sed -i 's/\xc4\x8c/C/g' $LNG'_filtered.po'
#replace 'č' with 'c'
sed -i 's/\xc4\x8d/c/g' $LNG'_filtered.po'
#replace 'Ď' with 'D'
sed -i 's/\xc4\x8e/D/g' $LNG'_filtered.po'
#replace 'ď' with 'd'
sed -i 's/\xc4\x8f/d/g' $LNG'_filtered.po'
#replace 'É' with 'E'
sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po'
#replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'Ě' with 'E'
sed -i 's/\xc4\x9a/E/g' $LNG'_filtered.po'
#replace 'ě' with 'e'
sed -i 's/\xc4\x9b/e/g' $LNG'_filtered.po'
#replace 'Í' with 'I'
sed -i 's/\xc3\x8d/I/g' $LNG'_filtered.po'
#replace 'í' with 'i'
sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
#replace 'Ň' with 'N'
sed -i 's/\xc5\x87/N/g' $LNG'_filtered.po'
#replace 'ň' with 'n'
sed -i 's/\xc5\x88/n/g' $LNG'_filtered.po'
#replace 'Ó' with 'O'
sed -i 's/\xc3\x93/O/g' $LNG'_filtered.po'
#replace 'ó' with 'o'
sed -i 's/\xc3\xb3/o/g' $LNG'_filtered.po'
#replace 'Ř' with 'R'
sed -i 's/\xc5\x98/R/g' $LNG'_filtered.po'
#replace 'ř' with 'r'
sed -i 's/\xc5\x99/r/g' $LNG'_filtered.po'
#replace 'Š' with 'S'
sed -i 's/\xc5\xa0/S/g' $LNG'_filtered.po'
#replace 'š' with 's'
sed -i 's/\xc5\xa1/s/g' $LNG'_filtered.po'
#replace 'Ť' with 'T'
sed -i 's/\xc5\xa4/T/g' $LNG'_filtered.po'
#replace 'ť' with 't'
sed -i 's/\xc5\xa5/t/g' $LNG'_filtered.po'
#replace 'Ú' with 'U'
sed -i 's/\xc3\x9a/U/g' $LNG'_filtered.po'
#replace 'ú' with 'u'
sed -i 's/\xc3\xba/u/g' $LNG'_filtered.po'
#replace 'Ů' with 'U'
sed -i 's/\xc5\xae/U/g' $LNG'_filtered.po'
#replace 'ů' with 'u'
sed -i 's/\xc5\xaf/u/g' $LNG'_filtered.po'
#replace 'Ý' with 'Y'
sed -i 's/\xc3\x9d/Y/g' $LNG'_filtered.po'
#replace 'ý' with 'y'
sed -i 's/\xc3\xbd/y/g' $LNG'_filtered.po'
#replace 'Ž' with 'Z'
sed -i 's/\xc5\xbd/Z/g' $LNG'_filtered.po'
#replace 'ž' with 'z'
sed -i 's/\xc5\xbe/z/g' $LNG'_filtered.po'
fi fi
#replace in german translation https://en.wikipedia.org/wiki/German_orthography #replace in german translation https://en.wikipedia.org/wiki/German_orthography
if [ "$LNG" = "de" ]; then if [ "$LNG" = "de" ]; then
#replace 'ä' with 'ae' #replace UTF-8 'äöüß' to HD44780 A00 'äöüß'
sed -i 's/\xc3\xa4/ae/g' $LNG'_filtered.po' #replace 'ä' with 'A00 ROM ä'
#replace 'Ä' with 'Ae' sed -i 's/\xc3\xa4/\\xe1/g' $LNG'_filtered.po'
sed -i 's/\xc3\x84/Ae/g' $LNG'_filtered.po' #replace 'Ä' with 'A00 ROM ä'
#replace 'ü' with 'ue' sed -i 's/\xc3\x84/\\xe1/g' $LNG'_filtered.po'
sed -i 's/\xc3\xbc/ue/g' $LNG'_filtered.po' #replace 'ü' with 'A00 ROM ü'
#replace 'Ü' with 'Ue' sed -i 's/\xc3\xbc/\\xf5/g' $LNG'_filtered.po'
sed -i 's/\xc3\x9c/Ue/g' $LNG'_filtered.po' #replace 'Ü' with 'A00 ROM ü'
#replace 'ö' with 'oe' sed -i 's/\xc3\x9c/\\xf5/g' $LNG'_filtered.po'
sed -i 's/\xc3\xb6/oe/g' $LNG'_filtered.po' #replace 'ö' with 'A00 ROM ö'
#replace 'Ö' with 'Oe' sed -i 's/\xc3\xb6/\\xef/g' $LNG'_filtered.po'
sed -i 's/\xc3\x96/Oe/g' $LNG'_filtered.po' #replace 'Ö' with 'A00 ROM ö'
#replace 'ß' with 'ss' sed -i 's/\xc3\x96/\\xef/g' $LNG'_filtered.po'
sed -i 's/\xc3\x9f/ss/g' $LNG'_filtered.po' #replace 'ß' with 'A00 ROM ß'
sed -i 's/\xc3\x9f/\\xe2/g' $LNG'_filtered.po'
fi fi
#replace in spain translation #replace in spain translation
if [ "$LNG" = "es" ]; then if [ "$LNG" = "es" ]; then
#replace 'á' with 'a' #replace 'á' with 'a'
sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
#replace '¿' with '?' #replace '¿' with '?'
sed -i 's/\xc2\xbf/?/g' $LNG'_filtered.po' sed -i 's/\xc2\xbf/?/g' $LNG'_filtered.po'
#replace 'ó' with 'o' #replace 'ó' with 'o'
sed -i 's/\xc3\xb3/o/g' $LNG'_filtered.po' sed -i 's/\xc3\xb3/o/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'í' with 'i' #replace 'í' with 'i'
sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po' sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
#replace '!' with '!' #replace '!' with '!'
sed -i 's/\xc2\xa1/!/g' $LNG'_filtered.po' sed -i 's/\xc2\xa1/!/g' $LNG'_filtered.po'
@ -99,146 +182,176 @@ fi
#replace in french translation https://en.wikipedia.org/wiki/French_orthography #replace in french translation https://en.wikipedia.org/wiki/French_orthography
if [ "$LNG" = "fr" ]; then if [ "$LNG" = "fr" ]; then
#replace 'á' with 'a' (right) #replace 'á' with 'a' (right)
sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
#replace 'Á' with 'A' (right) #replace 'Á' with 'A' (right)
sed -i 's/\xc3\x81/A/g' $LNG'_filtered.po' sed -i 's/\xc3\x81/A/g' $LNG'_filtered.po'
#replace 'à' with 'a' (left) #replace 'à' with 'a' (left)
sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
#replace 'À' with 'A' (left) #replace 'À' with 'A' (left)
sed -i 's/\xc3\x80/A/g' $LNG'_filtered.po' sed -i 's/\xc3\x80/A/g' $LNG'_filtered.po'
#replace 'é' with 'e' (right) #replace 'é' with 'e' (right)
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'É' with 'E' (right) #replace 'É' with 'E' (right)
sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po' sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po'
#replace 'è' with 'e' (left) #replace 'è' with 'e' (left)
sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po'
#replace 'È' with 'E' (left) #replace 'È' with 'E' (left)
sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po' sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po'
fi fi
#replace in italian translation #replace in italian translation
if [ "$LNG" = "it" ]; then if [ "$LNG" = "it" ]; then
#replace 'é' with 'e' (left) #replace 'é' with 'e' (left)
sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po'
#replace 'á' with 'a' (left) #replace 'á' with 'a' (left)
sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
#replace 'ó' with 'o' (left) #replace 'ó' with 'o' (left)
sed -i 's/\xc3\xb2/o/g' $LNG'_filtered.po' sed -i 's/\xc3\xb2/o/g' $LNG'_filtered.po'
#replace 'ú' with 'u' (left) #replace 'ú' with 'u' (left)
sed -i 's/\xc3\xb9/u/g' $LNG'_filtered.po' sed -i 's/\xc3\xb9/u/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'É' with 'E' (left) #replace 'É' with 'E' (left)
sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po' sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po'
fi fi
#replace in dutch translation according to https://nl.wikipedia.org/wiki/Accenttekens_in_de_Nederlandse_spelling #replace in dutch translation according to https://nl.wikipedia.org/wiki/Accenttekens_in_de_Nederlandse_spelling
if [ "$LNG" = "nl" ]; then if [ "$LNG" = "nl" ]; then
#replace 'ë' with 'e' #replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ï' with 'i' #replace 'ï' with 'i'
sed -i 's/\xc3\xaf/i/g' $LNG'_filtered.po' sed -i 's/\xc3\xaf/i/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'è' with 'e' (left) #replace 'è' with 'e' (left)
sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po'
#replace 'ö' with 'o' (left) #replace 'ö' with 'o' (left)
sed -i 's/\xc3\xb6/o/g' $LNG'_filtered.po' sed -i 's/\xc3\xb6/o/g' $LNG'_filtered.po'
#replace 'ê' with 'e' (left) #replace 'ê' with 'e' (left)
sed -i 's/\xc3\xaa/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xaa/e/g' $LNG'_filtered.po'
#replace 'ü' with 'u' (left) #replace 'ü' with 'u' (left)
sed -i 's/\xc3\xbc/u/g' $LNG'_filtered.po' sed -i 's/\xc3\xbc/u/g' $LNG'_filtered.po'
#replace 'ç' with 'c' (left) #replace 'ç' with 'c' (left)
sed -i 's/\xc3\xa7/c/g' $LNG'_filtered.po' sed -i 's/\xc3\xa7/c/g' $LNG'_filtered.po'
#replace 'á' with 'a' (left) #replace 'á' with 'a' (left)
sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
#replace 'à' with 'a' (left) #replace 'à' with 'a' (left)
sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
#replace 'ä' with 'a' (left) #replace 'ä' with 'a' (left)
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'û' with 'u' (left) #replace 'û' with 'u' (left)
sed -i 's/\xc3\xbc/u/g' $LNG'_filtered.po' sed -i 's/\xc3\xbc/u/g' $LNG'_filtered.po'
#replace 'î' with 'i' (left) #replace 'î' with 'i' (left)
sed -i 's/\xc3\xae/i/g' $LNG'_filtered.po' sed -i 's/\xc3\xae/i/g' $LNG'_filtered.po'
#replace 'í' with 'i' (left) #replace 'í' with 'i' (left)
sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po' sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
#replace 'ô' with 'o' (left) #replace 'ô' with 'o' (left)
sed -i 's/\xc3\xb4/o/g' $LNG'_filtered.po' sed -i 's/\xc3\xb4/o/g' $LNG'_filtered.po'
#replace 'ú' with 'u' (left) #replace 'ú' with 'u' (left)
sed -i 's/\xc3\xba/u/g' $LNG'_filtered.po' sed -i 's/\xc3\xba/u/g' $LNG'_filtered.po'
#replace 'ñ' with 'n' (left) #replace 'ñ' with 'n' (left)
sed -i 's/\xc3\xb1/n/g' $LNG'_filtered.po' sed -i 's/\xc3\xb1/n/g' $LNG'_filtered.po'
#replace 'â' with 'a' (left) #replace 'â' with 'a' (left)
sed -i 's/\xc3\xa2/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa2/a/g' $LNG'_filtered.po'
#replace 'Å' with 'A' (left) #replace 'Å' with 'A' (left)
sed -i 's/\xc3\x85/A/g' $LNG'_filtered.po' sed -i 's/\xc3\x85/A/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "sv" ]; then if [ "$LNG" = "sv" ]; then
#repace 'Å' with 'Aa' #repace 'Å' with 'Aa'
sed -i 's/\xc3\x85/Aa/g' $LNG'_filtered.po' sed -i 's/\xc3\x85/Aa/g' $LNG'_filtered.po'
#repace 'å' with 'aa' #repace 'å' with 'aa'
sed -i 's/\xc3\xA5/aa/g' $LNG'_filtered.po' sed -i 's/\xc3\xA5/aa/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "da" ]; then if [ "$LNG" = "da" ]; then
#repace 'Å' with 'Aa' #repace 'Å' with 'Aa'
sed -i 's/\xc3\x85/Aa/g' $LNG'_filtered.po' sed -i 's/\xc3\x85/Aa/g' $LNG'_filtered.po'
#repace 'å' with 'aa' #repace 'å' with 'aa'
sed -i 's/\xc3\xA5/aa/g' $LNG'_filtered.po' sed -i 's/\xc3\xA5/aa/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "sl" ]; then if [ "$LNG" = "sl" ]; then
#replace 'ë' with 'e' #replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ä' with 'a' (left) #replace 'ä' with 'a' (left)
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "hu" ]; then if [ "$LNG" = "hu" ]; then # See https://www.fileformat.info/info/charset/UTF-8/list.htm
#replace 'ë' with 'e' #replace 'Á' with 'A'(acute)
sed -i 's/\xc3\x81/A/g' $LNG'_filtered.po'
#replace 'á' with 'a'
sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
#replace 'É' with 'E' (acute)
sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po'
#replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
#replace 'Í' with 'I' (acute)
sed -i 's/\xc3\x8d/I/g' $LNG'_filtered.po'
#replace 'i̇́' with 'i'
sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
#replace 'Ó' with 'O' (acute)
sed -i 's/\xc3\x93/O/g' $LNG'_filtered.po'
#replace 'ó' with 'o'
sed -i 's/\xc3\xb3/o/g' $LNG'_filtered.po'
#replace 'Ö' with 'O' (diaresis)
sed -i 's/\xc3\x96/O/g' $LNG'_filtered.po'
#replace 'ö' with 'o'
sed -i 's/\xc3\xb6/o/g' $LNG'_filtered.po'
#replace 'Ő' with 'O' (double acute)
sed -i 's/\xc5\x90/O/g' $LNG'_filtered.po'
#replace 'ő' with 'o'
sed -i 's/\xc5\x91/o/g' $LNG'_filtered.po'
#replace 'Ú' with 'U' (acute)
sed -i 's/\xc3\x9a/U/g' $LNG'_filtered.po'
#replace 'ú' with 'u'
sed -i 's/\xc3\xba/u/g' $LNG'_filtered.po'
#replace 'Ü' with 'U' (diaersis)
sed -i 's/\xc3\x9c/U/g' $LNG'_filtered.po'
#replace 'ü' with 'u'
sed -i 's/\xc3\xbc/u/g' $LNG'_filtered.po'
#replace 'Ű' with 'U' (double acute)
sed -i 's/\xc5\xb0/U/g' $LNG'_filtered.po'
#replace 'ű' with 'u'
sed -i 's/\xc5\xb1/u/g' $LNG'_filtered.po'
fi
if [ "$LNG" = "lb" ]; then
#replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ä' with 'a' #replace 'ä' with 'a'
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "lb" ]; then if [ "$LNG" = "hr" ]; then
#replace 'ë' with 'e' #replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ä' with 'a' #replace 'ä' with 'a'
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
fi fi
if [ "$LGN" = "hr" ]; then if [ "$LNG" = "lt" ]; then
#replace 'ë' with 'e' #replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ä' with 'a' #replace 'ä' with 'a'
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po' sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'é' with 'e' #replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
fi
if [ "$LGN" = "lt" ]; then
#replace 'ë' with 'e'
sed -i 's/\xc3\xab/e/g' $LNG'_filtered.po'
#replace 'ä' with 'a'
sed -i 's/\xc3\xa4/a/g' $LNG'_filtered.po'
#replace 'é' with 'e'
sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
fi fi
#replace in polish translation #replace in polish translation
#if [ "$LNG" = "pl" ]; then #if [ "$LNG" = "pl" ]; then
#fi #fi
#check for nonasci characters #check for nonasci characters except HD44780 ROM A00 'äöüß'
if grep --color='auto' -P -n '[^\x00-\x7F]' $LNG'_filtered.po' >nonasci.txt; then if grep --color='auto' -P -n '[^\x00-\x7F]' $LNG'_filtered.po' >nonascii.txt; then
exit exit
fi fi
@ -249,7 +362,7 @@ cat $LNG'_filtered.po' | sed ':a;N;$!ba;s/\x22\n\x22//g' > $LNG'_new.po'
CNTTXT=$(grep '^# MSG' -c $LNGISO.po) CNTTXT=$(grep '^# MSG' -c $LNGISO.po)
num=1 num=1
echo " selected language=$LNGISO" >&2 echo " selected language=$(tput setaf 2)$LNGISO$(tput sgr 0)" >&2
#generate new dictionary #generate new dictionary
cat ../../lang_en.txt | sed 's/\\/\\\\/g' | while read -r s; do cat ../../lang_en.txt | sed 's/\\/\\\\/g' | while read -r s; do
/bin/echo -e "$s" /bin/echo -e "$s"
@ -260,11 +373,11 @@ cat ../../lang_en.txt | sed 's/\\/\\\\/g' | while read -r s; do
s=$(/bin/echo -e "$s") s=$(/bin/echo -e "$s")
s2=$(grep -F -A1 -B0 "msgid $s" "$LNG"_new.po | tail -n1 | sed 's/^msgstr //') s2=$(grep -F -A1 -B0 "msgid $s" "$LNG"_new.po | tail -n1 | sed 's/^msgstr //')
if [ -z "$s2" ]; then if [ -z "$s2" ]; then
echo " processing $num of $CNTTXT" >&2 echo -ne " processing $num of $CNTTXT\033[0K\r" >&2
echo '"\x00"' echo '"\x00"'
num=$((num+1)) num=$((num+1))
else else
echo " processing $num of $CNTTXT" >&2 echo -ne " processing $num of $CNTTXT\033[0K\r" >&2
echo "$s2" echo "$s2"
num=$((num+1)) num=$((num+1))
fi fi
@ -272,8 +385,15 @@ cat ../../lang_en.txt | sed 's/\\/\\\\/g' | while read -r s; do
fi fi
done > lang_en_$LNG.txt done > lang_en_$LNG.txt
echo "Finished with $LNGISO" >&2 echo >&2
echo "$(tput setaf 2)Finished with $LNGISO$(tput sgr 0)" >&2
#replace two double quotes to "\x00" #replace two double quotes to "\x00"
sed -i 's/""/"\\x00"/g' lang_en_$LNG.txt sed -i 's/""/"\\x00"/g' lang_en_$LNG.txt
#remove CR #remove CR
sed -i "s/\r//g" lang_en_$LNG.txt sed -i "s/\r//g" lang_en_$LNG.txt
#check new lang
./../../lang-check.py $LNG --warn-empty
./../../lang-check.py $LNG --information >$LNG-output.txt
echo >&2
echo "$(tput setaf 2)lang-import.sh finished$(tput sgr 0)">&2

View File

@ -1,10 +1,10 @@
#MSG_IR_03_OR_OLDER c=18 #MSG_IR_03_OR_OLDER c=18
" 0.3 or older" " 0.3 or older"
" 0.3 oder aelter" " 0.3 oder \xe1lter"
#MSG_FS_V_03_OR_OLDER c=18 #MSG_FS_V_03_OR_OLDER c=18
"FS v0.3 or older" "FS v0.3 or older"
"FS 0.3 oder aelter" "FS v0.3 oder \xe1lter"
#MSG_IR_04_OR_NEWER c=18 #MSG_IR_04_OR_NEWER c=18
" 0.4 or newer" " 0.4 or newer"
@ -12,7 +12,7 @@
#MSG_FS_V_04_OR_NEWER c=18 #MSG_FS_V_04_OR_NEWER c=18
"FS v0.4 or newer" "FS v0.4 or newer"
"FS 0.4 oder neuer" "FS v0.4 oder neuer"
#MSG_IR_UNKNOWN c=18 #MSG_IR_UNKNOWN c=18
"unknown state" "unknown state"
@ -40,7 +40,7 @@
#MSG_WIZARD_DONE c=20 r=8 #MSG_WIZARD_DONE c=20 r=8
"All is done. Happy printing!" "All is done. Happy printing!"
"Alles abgeschlossen. Viel Spass beim Drucken!" "Alles abgeschlossen. Viel Spa\xe2 beim Drucken!"
#MSG_AMBIENT c=14 #MSG_AMBIENT c=14
"Ambient" "Ambient"
@ -52,7 +52,7 @@
#MSG_PRESS c=20 r=2 #MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"und Knopf druecken" "und Knopf dr\xf5cken"
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2 #MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
"Are left and right Z~carriages all up?" "Are left and right Z~carriages all up?"
@ -68,15 +68,15 @@
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"Autoloading filament available only when filament sensor is turned on..." "Autoloading filament available only when filament sensor is turned on..."
"Automatisches Laden Filament nur bei eingeschaltetem Fil. sensor verfuegbar..." "Automatisches Laden Filament nur bei eingeschaltetem Fil. sensor verf\xf5gbar..."
#MSG_AUTOLOADING_ENABLED c=20 r=4 #MSG_AUTOLOADING_ENABLED c=20 r=4
"Autoloading filament is active, just press the knob and insert filament..." "Autoloading filament is active, just press the knob and insert filament..."
"Automatisches Laden Filament ist aktiv, Knopf druecken und Filament einlegen..." "Automatisches Laden Filament ist aktiv, Knopf dr\xf5cken und Filament einlegen..."
#MSG_SELFTEST_AXIS_LENGTH c=20 #MSG_SELFTEST_AXIS_LENGTH c=20
"Axis length" "Axis length"
"Achsenlaenge" "Achsenl\xe1nge"
#MSG_SELFTEST_AXIS c=16 #MSG_SELFTEST_AXIS c=16
"Axis" "Axis"
@ -92,7 +92,7 @@
#MSG_BED_HEATING c=20 #MSG_BED_HEATING c=20
"Bed Heating" "Bed Heating"
"Bett aufwaermen" "Bett aufw\xe1rmen"
#MSG_BED_CORRECTION_MENU c=18 #MSG_BED_CORRECTION_MENU c=18
"Bed level correct" "Bed level correct"
@ -104,7 +104,7 @@
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=6 #MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=6
"Bed leveling failed. Sensor didn't trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didn't trigger. Debris on nozzle? Waiting for reset."
"Z-Kal. fehlgeschlg. Sensor nicht ausgeloest. Schmutzige Duese? Warte auf Reset." "Z-Kal. fehlgeschlg. Sensor nicht ausgel\xefst. Schmutzige D\xf5se? Warte auf Reset."
#MSG_BRIGHT c=6 #MSG_BRIGHT c=6
"Bright" "Bright"
@ -148,7 +148,7 @@
#MSG_MOVE_CARRIAGE_TO_THE_TOP c=20 r=8 #MSG_MOVE_CARRIAGE_TO_THE_TOP c=20 r=8
"Calibrating XYZ. Rotate the knob to move the Z carriage up to the end stoppers. Click when done." "Calibrating XYZ. Rotate the knob to move the Z carriage up to the end stoppers. Click when done."
"XYZ Kalibrieren: Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Anschliessend den Knopf druecken." "XYZ Kalibrieren: Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Anschliessend den Knopf dr\xf5cken."
#MSG_CALIBRATE_Z_AUTO c=20 r=2 #MSG_CALIBRATE_Z_AUTO c=20 r=2
"Calibrating Z" "Calibrating Z"
@ -156,7 +156,7 @@
#MSG_MOVE_CARRIAGE_TO_THE_TOP_Z c=20 r=8 #MSG_MOVE_CARRIAGE_TO_THE_TOP_Z c=20 r=8
"Calibrating Z. Rotate the knob to move the Z carriage up to the end stoppers. Click when done." "Calibrating Z. Rotate the knob to move the Z carriage up to the end stoppers. Click when done."
"Z Kalibrieren: Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Anschliessend den Knopf druecken." "Z Kalibrieren: Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Anschliessend den Knopf dr\xf5cken."
#MSG_HOMEYZ_DONE c=20 #MSG_HOMEYZ_DONE c=20
"Calibration done" "Calibration done"
@ -172,7 +172,7 @@
#MSG_CHECKING_FILE c=17 #MSG_CHECKING_FILE c=17
"Checking file" "Checking file"
"Ueberpruefe Datei" "\xf5berpr\xf5fe Datei"
#MSG_NOT_COLOR c=19 #MSG_NOT_COLOR c=19
"Color not correct" "Color not correct"
@ -180,11 +180,11 @@
#MSG_COOLDOWN c=18 #MSG_COOLDOWN c=18
"Cooldown" "Cooldown"
"Abkuehlen" "Abk\xf5hlen"
#MSG_COPY_SEL_LANG c=20 r=3 #MSG_COPY_SEL_LANG c=20 r=3
"Copy selected language?" "Copy selected language?"
"Gewaehlte Sprache kopieren?" "Gew\xe1hlte Sprache kopieren?"
#MSG_CRASHDETECT c=13 #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
@ -192,7 +192,7 @@
#MSG_CHOOSE_FIL_1ST_LAYERCAL c=20 r=7 #MSG_CHOOSE_FIL_1ST_LAYERCAL c=20 r=7
"Choose a filament for the First Layer Calibration and select it in the on-screen menu." "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus." "W\xe1hlen Sie ein Filament f\xf5r Erste- Schichtkalibrierung aus und w\xe1hlen Sie es im On-Screen-Menu aus."
#MSG_CRASH_DETECTED c=20 #MSG_CRASH_DETECTED c=20
"Crash detected." "Crash detected."
@ -200,7 +200,7 @@
#MSG_CRASH_RESUME c=20 r=3 #MSG_CRASH_RESUME c=20 r=3
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Crash erkannt. Druck fortfuehren?" "Crash erkannt. Druck fortf\xf5hren?"
#MSG_CRASH c=7 #MSG_CRASH c=7
"Crash" "Crash"
@ -224,7 +224,7 @@
#MSG_BABYSTEP_Z_NOT_SET c=20 r=12 #MSG_BABYSTEP_Z_NOT_SET c=20 r=12
"Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration." "Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."
"Der Abstand zwischen der Spitze der Duese und dem Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, Kapitel Erste Schritte, Abschnitt Erste Schicht Kalibrierung." "Der Abstand zwischen der Spitze der D\xf5se und dem Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, Kapitel Erste Schritte, Abschnitt Erste Schicht Kalibrierung."
#MSG_FS_CONTINUE c=5 #MSG_FS_CONTINUE c=5
"Cont." "Cont."
@ -232,7 +232,7 @@
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Moechten Sie den letzten Schritt wiederholen, um den Abstand zwischen Duese und Druckbett neu einzustellen?" "M\xefchten Sie den letzten Schritt wiederholen, um den Abstand zwischen D\xf5se und Druckbett neu einzustellen?"
#MSG_EXTRUDER_CORRECTION c=13 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
@ -260,7 +260,7 @@
#MSG_STACK_ERROR c=20 r=4 #MSG_STACK_ERROR c=20 r=4
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Fehler - statischer Speicher wurde ueberschrieben" "Fehler - statischer Speicher wurde \xf5berschrieben"
#MSG_CUT_FILAMENT c=16 #MSG_CUT_FILAMENT c=16
"Cut filament" "Cut filament"
@ -276,7 +276,7 @@
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"FEHLER: Filament- sensor reagiert nicht, bitte Verbindung pruefen." "FEHLER: Filament- sensor reagiert nicht, bitte Verbindung pr\xf5fen."
#MSG_DIM c=6 #MSG_DIM c=6
"Dim" "Dim"
@ -288,7 +288,7 @@
#MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18 #MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
"Extruder fan:" "Extruder fan:"
"Extruder Luefter:" "Extruderl\xf5fter:"
#MSG_INFO_EXTRUDER c=18 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
@ -312,15 +312,15 @@
#MSG_FAN_SPEED c=14 #MSG_FAN_SPEED c=14
"Fan speed" "Fan speed"
"Luefter-Tempo" "L\xf5fter-Tempo"
#MSG_SELFTEST_FAN c=20 #MSG_SELFTEST_FAN c=20
"Fan test" "Fan test"
"Lueftertest" "L\xf5ftertest"
#MSG_FANS_CHECK c=13 #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Luefter Chk." "L\xf5fter Check"
#MSG_FSENSOR c=12 #MSG_FSENSOR c=12
"Fil. sensor" "Fil. sensor"
@ -328,7 +328,7 @@
#MSG_FIL_RUNOUTS c=15 #MSG_FIL_RUNOUTS c=15
"Fil. runouts" "Fil. runouts"
"Fil. Maengel" "Fil. M\xe1ngel"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -356,7 +356,7 @@
#MSG_FILE_INCOMPLETE c=20 r=3 #MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Datei unvollstaendig Trotzdem fortfahren?" "Datei unvollst\xe1ndig Trotzdem fortfahren?"
#MSG_FINISHING_MOVEMENTS c=20 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
@ -368,11 +368,11 @@
#MSG_WIZARD_SELFTEST c=20 r=8 #MSG_WIZARD_SELFTEST c=20 r=8
"First, I will run the selftest to check most common assembly problems." "First, I will run the selftest to check most common assembly problems."
"Zunaechst fuehre ich den Selbsttest durch, um die haeufigsten Probleme beim Zusammenbau zu ueberpruefen." "Zun\xe1chst f\xf5hre ich den Selbsttest durch, um die h\xe1ufigsten Probleme beim Zusammenbau zu \xf5berpr\xf5fen."
#MSG_MMU_FIX_ISSUE c=20 r=4 #MSG_MMU_FIX_ISSUE c=20 r=4
"Fix the issue and then press button on MMU unit." "Fix the issue and then press button on MMU unit."
"Beseitigen Sie das Problem und druecken Sie dann den Knopf am MMU." "Beseitigen Sie das Problem und dr\xf5cken Sie dann den Knopf am MMU."
#MSG_FLOW c=15 #MSG_FLOW c=15
"Flow" "Flow"
@ -380,7 +380,7 @@
#MSG_SELFTEST_COOLING_FAN c=20 #MSG_SELFTEST_COOLING_FAN c=20
"Front print fan?" "Front print fan?"
"Teile Luefter?" "Druckl\xf5fter?"
#MSG_BED_CORRECTION_FRONT c=14 #MSG_BED_CORRECTION_FRONT c=14
"Front side[um]" "Front side[um]"
@ -388,7 +388,7 @@
#MSG_SELFTEST_FANS c=20 #MSG_SELFTEST_FANS c=20
"Front/left fans" "Front/left fans"
"Teile/Extr. Luefter" "Druck/Extr. L\xf5fter"
#MSG_SELFTEST_HEATERTHERMISTOR c=20 #MSG_SELFTEST_HEATERTHERMISTOR c=20
"Heater/Thermistor" "Heater/Thermistor"
@ -400,15 +400,15 @@
#MSG_HEATING_COMPLETE c=20 #MSG_HEATING_COMPLETE c=20
"Heating done." "Heating done."
"Aufwaermen OK." "Aufw\xe1rmen OK."
#MSG_HEATING c=20 #MSG_HEATING c=20
"Heating" "Heating"
"Aufwaermen" "Aufw\xe1rmen"
#MSG_WIZARD_WELCOME c=20 r=7 #MSG_WIZARD_WELCOME c=20 r=7
"Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?" "Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?"
"Hallo, ich bin Ihr Original Prusa i3 Drucker. Moechten Sie, dass ich Sie durch den Einrich- tungsablauf fuehre?" "Hallo, ich bin Ihr Original Prusa i3 Drucker. M\xefchten Sie, dass ich Sie durch den Einricht- ungsablauf f\xf5hre?"
#MSG_FILAMENTCHANGE c=18 #MSG_FILAMENTCHANGE c=18
"Change filament" "Change filament"
@ -424,39 +424,39 @@
#MSG_SELFTEST_CHECK_BED c=20 #MSG_SELFTEST_CHECK_BED c=20
"Checking bed" "Checking bed"
"Pruefe Bett" "Pr\xf5fe Bett"
#MSG_SELFTEST_CHECK_ENDSTOPS c=20 #MSG_SELFTEST_CHECK_ENDSTOPS c=20
"Checking endstops" "Checking endstops"
"Pruefe Endschalter" "Pr\xf5fe Endschalter"
#MSG_SELFTEST_CHECK_HOTEND c=20 #MSG_SELFTEST_CHECK_HOTEND c=20
"Checking hotend" "Checking hotend"
"Pruefe Duese" "Pr\xf5fe D\xf5se"
#MSG_SELFTEST_CHECK_FSENSOR c=20 #MSG_SELFTEST_CHECK_FSENSOR c=20
"Checking sensors" "Checking sensors"
"Pruefe Sensoren" "Pr\xf5fe Sensoren"
#MSG_CHECKING_X c=20 #MSG_CHECKING_X c=20
"Checking X axis" "Checking X axis"
"Pruefe X Achse" "Pr\xf5fe X Achse"
#MSG_CHECKING_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis" "Checking Y axis"
"Pruefe Y Achse" "Pr\xf5fe Y Achse"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis" "Checking Z axis"
"Pruefe Z Achse" "Pr\xf5fe Z Achse"
#MSG_CHOOSE_EXTRUDER c=20 #MSG_CHOOSE_EXTRUDER c=20
"Choose extruder:" "Choose extruder:"
"Extruder waehlen:" "Extruder w\xe1hlen:"
#MSG_CHOOSE_FILAMENT c=20 #MSG_CHOOSE_FILAMENT c=20
"Choose filament:" "Choose filament:"
"Waehle Filament:" "W\xe1hle Filament:"
#MSG_FILAMENT c=17 #MSG_FILAMENT c=17
"Filament" "Filament"
@ -464,11 +464,11 @@
#MSG_WIZARD_XYZ_CAL c=20 r=8 #MSG_WIZARD_XYZ_CAL c=20 r=8
"I will run xyz calibration now. It will take approx. 12 mins." "I will run xyz calibration now. It will take approx. 12 mins."
"Ich werde jetzt die XYZ-Kalibrierung durchfuehren. Es wird ca. 12 Minuten dauern." "Ich werde jetzt die XYZ-Kalibrierung durchf\xf5hren. Es wird ca. 12 Minuten dauern."
#MSG_WIZARD_Z_CAL c=20 r=8 #MSG_WIZARD_Z_CAL c=20 r=8
"I will run z calibration now." "I will run z calibration now."
"Ich werde jetzt die Z Kalibrierung durchfuehren." "Ich werde jetzt die Z Kalibrierung durchf\xf5hren."
#MSG_WATCH c=18 #MSG_WATCH c=18
"Info screen" "Info screen"
@ -492,11 +492,11 @@
#MSG_WIZARD_WELCOME_SHIPPING c=20 r=16 #MSG_WIZARD_WELCOME_SHIPPING c=20 r=16
"Hi, I am your Original Prusa i3 printer. I will guide you through a short setup process, in which the Z-axis will be calibrated. Then, you will be ready to print." "Hi, I am your Original Prusa i3 printer. I will guide you through a short setup process, in which the Z-axis will be calibrated. Then, you will be ready to print."
"Hallo, ich bin Ihr Original Prusa i3 Drucker. Ich werde Sie durch einen kurzen Einrichtungsprozess fuehren, bei dem die Z-Achse kalibriert wird. Danach sind Sie bereit fuer den Druck." "Hallo, ich bin Ihr Original Prusa i3 Drucker. Ich werde Sie durch einen kurzen Einrichtungsprozess f\xf5hren, bei dem die Z-Achse kalibriert wird. Danach sind Sie bereit f\xf5r den Druck."
#MSG_ADDITIONAL_SHEETS c=20 r=9 #MSG_ADDITIONAL_SHEETS c=20 r=9
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Wenn Sie zusaetzliche Stahlbleche haben, kalibrieren Sie deren Voreinstellungen unter Einstellungen - HW Setup - Stahlbleche." "Wenn Sie zus\xe1tzliche Stahlbleche haben, kalibrieren Sie deren Voreinstellungen unter Einstellungen - HW Setup - Stahlbleche."
#MSG_LAST_PRINT c=18 #MSG_LAST_PRINT c=18
"Last print" "Last print"
@ -504,7 +504,7 @@
#MSG_SELFTEST_EXTRUDER_FAN c=20 #MSG_SELFTEST_EXTRUDER_FAN c=20
"Left hotend fan?" "Left hotend fan?"
"Extruder Luefter?" "Extruderl\xf5fter?"
#MSG_LEFT c=10 #MSG_LEFT c=10
"Left" "Left"
@ -524,7 +524,7 @@
#MSG_INSERT_FIL c=20 r=6 #MSG_INSERT_FIL c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob." "Insert the filament (do not load it) into the extruder and then press the knob."
"Stecken Sie das Filament (nicht laden) in den Extruder und druecken Sie dann den Knopf." "Stecken Sie das Filament (nicht laden) in den Extruder und dr\xf5cken Sie dann den Knopf."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
@ -536,7 +536,7 @@
#MSG_LOADING_FILAMENT c=20 #MSG_LOADING_FILAMENT c=20
"Loading filament" "Loading filament"
"Filament laedt" "Filament l\xe1dt"
#MSG_ITERATION c=12 #MSG_ITERATION c=12
"Iteration" "Iteration"
@ -556,7 +556,7 @@
#MSG_MAIN c=18 #MSG_MAIN c=18
"Main" "Main"
"Hauptmenue" "Hauptmen\xf5"
#MSG_BL_HIGH c=12 #MSG_BL_HIGH c=12
"Level Bright" "Level Bright"
@ -568,7 +568,7 @@
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=20 r=3 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=20 r=3
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Messen der Referenzhoehe des Kalibrierpunktes" "Messen der Referenzh\xefhe des Kalibrierpunktes"
#MSG_MESH_BED_LEVELING c=18 #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
@ -584,7 +584,7 @@
#MSG_MEASURED_SKEW c=14 #MSG_MEASURED_SKEW c=14
"Measured skew" "Measured skew"
"Schraeglauf" "Schr\xe1glauf"
#MSG_MMU_FAILS c=15 #MSG_MMU_FAILS c=15
"MMU fails" "MMU fails"
@ -684,7 +684,7 @@
#MSG_NEW_FIRMWARE_AVAILABLE c=20 r=2 #MSG_NEW_FIRMWARE_AVAILABLE c=20 r=2
"New firmware version available:" "New firmware version available:"
"Neue Firmware- Version verfuegbar:" "Neue Firmware- Version verf\xf5gbar:"
#MSG_SELFTEST_FAN_NO c=19 #MSG_SELFTEST_FAN_NO c=19
"Not spinning" "Not spinning"
@ -692,15 +692,15 @@
#MSG_WIZARD_V2_CAL c=20 r=8 #MSG_WIZARD_V2_CAL c=20 r=8
"Now I will calibrate distance between tip of the nozzle and heatbed surface." "Now I will calibrate distance between tip of the nozzle and heatbed surface."
"Jetzt werde ich den Abstand zwischen Duesenspitze und Druckbett kalibrieren." "Jetzt werde ich den Abstand zwischen D\xf5senspitze und Druckbett kalibrieren."
#MSG_WIZARD_WILL_PREHEAT c=20 r=4 #MSG_WIZARD_WILL_PREHEAT c=20 r=4
"Now I will preheat nozzle for PLA." "Now I will preheat nozzle for PLA."
"Jetzt werde ich die Duese fuer PLA vorheizen." "Jetzt werde ich die D\xf5se f\xf5r PLA vorheizen."
#MSG_NOZZLE c=12 #MSG_NOZZLE c=12
"Nozzle" "Nozzle"
"Duese" "D\xf5se"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=6 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=6
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
@ -712,7 +712,7 @@
#MSG_NOZZLE_FAN c=10 #MSG_NOZZLE_FAN c=10
"Nozzle FAN" "Nozzle FAN"
"Duesevent." "Druckl\xf5ft."
#MSG_PAUSE_PRINT c=18 #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
@ -732,23 +732,23 @@
#MSG_PINDA_PREHEAT c=20 #MSG_PINDA_PREHEAT c=20
"PINDA Heating" "PINDA Heating"
"PINDA erwaermen" "PINDA erw\xe1rmen"
#MSG_PAPER c=20 r=10 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Legen Sie ein Blatt Papier unter die Duese waehrend der Kalibrierung der ersten 4 Punkte. Wenn die Duese das Papier erfasst, den Drucker sofort ausschalten." "Legen Sie ein Blatt Papier unter die D\xf5se w\xe1hrend der Kalibrierung der ersten 4 Punkte. Wenn die D\xf5se das Papier erfasst, den Drucker sofort ausschalten."
#MSG_WIZARD_CLEAN_HEATBED c=20 r=8 #MSG_WIZARD_CLEAN_HEATBED c=20 r=8
"Please clean heatbed and then press the knob." "Please clean heatbed and then press the knob."
"Bitte reinigen Sie das Heizbett und druecken Sie dann den Knopf." "Bitte reinigen Sie das Heizbett und dr\xf5cken Sie dann den Knopf."
#MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8 #MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8
"Please clean the nozzle for calibration. Click when done." "Please clean the nozzle for calibration. Click when done."
"Bitte entfernen Sie ueberstehendes Filament von der Duese. Klicken wenn sauber." "Bitte entfernen Sie \xf5berstehendes Filament von der D\xf5se. Klicken wenn sauber."
#MSG_SELFTEST_PLEASECHECK c=20 #MSG_SELFTEST_PLEASECHECK c=20
"Please check:" "Please check:"
"Bitte pruefe:" "Bitte pr\xf5fen:"
#MSG_WIZARD_CALIBRATION_FAILED c=20 r=8 #MSG_WIZARD_CALIBRATION_FAILED c=20 r=8
"Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer." "Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."
@ -756,7 +756,7 @@
#MSG_CHECK_IDLER c=20 r=5 #MSG_CHECK_IDLER c=20 r=5
"Please open idler and remove filament manually." "Please open idler and remove filament manually."
"Bitte Spannrolle oeffnen und Fila- ment von Hand entfernen" "Bitte Spannrolle \xefffnen und Filament von Hand entfernen"
#MSG_PLACE_STEEL_SHEET c=20 r=5 #MSG_PLACE_STEEL_SHEET c=20 r=5
"Please place steel sheet on heatbed." "Please place steel sheet on heatbed."
@ -764,7 +764,7 @@
#MSG_PRESS_TO_UNLOAD c=20 r=4 #MSG_PRESS_TO_UNLOAD c=20 r=4
"Please press the knob to unload filament" "Please press the knob to unload filament"
"Bitte druecken Sie den Knopf um das Filament zu entladen." "Bitte dr\xf5cken Sie den Knopf um das Filament zu entladen."
#MSG_PULL_OUT_FILAMENT c=20 r=4 #MSG_PULL_OUT_FILAMENT c=20 r=4
"Please pull out filament immediately" "Please pull out filament immediately"
@ -772,7 +772,7 @@
#MSG_EJECT_REMOVE c=20 r=4 #MSG_EJECT_REMOVE c=20 r=4
"Please remove filament and then press the knob." "Please remove filament and then press the knob."
"Bitte Filament entfernen und dann den Knopf druecken" "Bitte Filament entfernen und dann den Knopf dr\xf5cken"
#MSG_REMOVE_STEEL_SHEET c=20 r=4 #MSG_REMOVE_STEEL_SHEET c=20 r=4
"Please remove steel sheet from heatbed." "Please remove steel sheet from heatbed."
@ -780,7 +780,7 @@
#MSG_RUN_XYZ c=20 r=4 #MSG_RUN_XYZ c=20 r=4
"Please run XYZ calibration first." "Please run XYZ calibration first."
"Bitte zuerst XYZ Kalibrierung ausfuehren." "Bitte zuerst XYZ Kalibrierung ausf\xf5hren."
#MSG_UPDATE_MMU2_FW c=20 r=4 #MSG_UPDATE_MMU2_FW c=20 r=4
"Please update firmware in your MMU2. Waiting for reset." "Please update firmware in your MMU2. Waiting for reset."
@ -796,7 +796,7 @@
#MSG_PREHEAT_NOZZLE c=20 #MSG_PREHEAT_NOZZLE c=20
"Preheat the nozzle!" "Preheat the nozzle!"
"Duese vorheizen!" "D\xf5se vorheizen!"
#MSG_PREHEAT c=18 #MSG_PREHEAT c=18
"Preheat" "Preheat"
@ -804,7 +804,7 @@
#MSG_WIZARD_HEATING c=20 r=3 #MSG_WIZARD_HEATING c=20 r=3
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Vorheizen der Duese. Bitte warten." "Vorheizen der D\xf5se. Bitte warten."
#MSG_NEW_FIRMWARE_PLEASE_UPGRADE c=20 #MSG_NEW_FIRMWARE_PLEASE_UPGRADE c=20
"Please upgrade." "Please upgrade."
@ -812,7 +812,7 @@
#MSG_PRESS_TO_PREHEAT c=20 r=4 #MSG_PRESS_TO_PREHEAT c=20 r=4
"Press the knob to preheat nozzle and continue." "Press the knob to preheat nozzle and continue."
"Bitte druecken Sie den Knopf um die Duese vorzuheizen und fortzufahren." "Bitte dr\xf5cken Sie den Knopf um die D\xf5se vorzuheizen und fortzufahren."
#MSG_FS_PAUSE c=5 #MSG_FS_PAUSE c=5
"Pause" "Pause"
@ -836,7 +836,7 @@
#MSG_SELFTEST_PRINT_FAN_SPEED c=18 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:" "Print fan:"
"Druckvent.:" "Druckl\xf5fter:"
#MSG_CARD_MENU c=18 #MSG_CARD_MENU c=18
"Print from SD" "Print from SD"
@ -844,7 +844,7 @@
#MSG_PRESS_KNOB c=20 #MSG_PRESS_KNOB c=20
"Press the knob" "Press the knob"
"Knopf druecken zum" "Knopf dr\xf5cken zum"
#MSG_PRINT_PAUSED c=20 #MSG_PRINT_PAUSED c=20
"Print paused" "Print paused"
@ -852,7 +852,7 @@
#MSG_RESUME_NOZZLE_TEMP c=20 r=4 #MSG_RESUME_NOZZLE_TEMP c=20 r=4
"Press the knob to resume nozzle temperature." "Press the knob to resume nozzle temperature."
"Druecken Sie den Knopf um die Duesentemperatur wiederherzustellen" "Dr\xf5cken Sie den Knopf um die D\xf5sentemperatur wiederherzustellen"
#MSG_FOLLOW_CALIBRATION_FLOW c=20 r=8 #MSG_FOLLOW_CALIBRATION_FLOW c=20 r=8
"Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow." "Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."
@ -860,15 +860,15 @@
#MSG_PRINT_FAN c=10 #MSG_PRINT_FAN c=10
"Print FAN" "Print FAN"
"Druckvent." "Druckl\xf5ft."
#MSG_WIZARD_LOAD_FILAMENT c=20 r=6 #MSG_WIZARD_LOAD_FILAMENT c=20 r=6
"Please insert filament into the extruder, then press the knob to load it." "Please insert filament into the extruder, then press the knob to load it."
"Bitte legen Sie das Filament in den Extruder ein und druecken Sie dann den Knopf, um es zu laden." "Bitte legen Sie das Filament in den Extruder ein und dr\xf5cken Sie dann den Knopf, um es zu laden."
#MSG_MMU_INSERT_FILAMENT_FIRST_TUBE c=20 r=6 #MSG_MMU_INSERT_FILAMENT_FIRST_TUBE c=20 r=6
"Please insert filament into the first tube of the MMU, then press the knob to load it." "Please insert filament into the first tube of the MMU, then press the knob to load it."
"Bitte stecken Sie das Filament in den ersten Schlauch der MMU und druecken Sie dann den Knopf, um es zu laden." "Bitte stecken Sie das Filament in den ersten Schlauch der MMU und dr\xf5cken Sie dann den Knopf, um es zu laden."
#MSG_PLEASE_LOAD_PLA c=20 r=4 #MSG_PLEASE_LOAD_PLA c=20 r=4
"Please load filament first." "Please load filament first."
@ -884,7 +884,7 @@
#MSG_CHECK_IR_CONNECTION c=20 r=4 #MSG_CHECK_IR_CONNECTION c=20 r=4
"Please check the IR sensor connection, unload filament if present." "Please check the IR sensor connection, unload filament if present."
"Bitte IR Sensor Verbindungen ueber- pruefen und Filament entladen ist." "Bitte IR Sensor Verbindungen \xf5ber- pr\xf5fen und Filament entladen ist."
#MSG_RECOVERING_PRINT c=20 #MSG_RECOVERING_PRINT c=20
"Recovering print" "Recovering print"
@ -892,7 +892,7 @@
#MSG_REMOVE_OLD_FILAMENT c=20 r=5 #MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Entfernen Sie das alte Filament und druecken Sie den Knopf, um das neue zu laden." "Entfernen Sie das alte Filament und dr\xf5cken Sie den Knopf, um das neue zu laden."
#MSG_CALIBRATE_BED_RESET c=18 #MSG_CALIBRATE_BED_RESET c=18
"Reset XYZ calibr." "Reset XYZ calibr."
@ -900,7 +900,7 @@
#MSG_RESET c=14 #MSG_RESET c=14
"Reset" "Reset"
"Ruecksetzen" "R\xf5cksetzen"
#MSG_RESUME_PRINT c=18 #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
@ -920,7 +920,7 @@
#MSG_WIZARD_RERUN c=20 r=7 #MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?" "Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Der Assistent wird die aktuellen Kalibrierungsdaten loeschen und von vorne beginnen. Weiterfahren?" "Der Assistent wird die aktuellen Kalibrierungsdaten l\xefschen und von vorne beginnen. Weiterfahren?"
#MSG_SD_CARD c=8 #MSG_SD_CARD c=8
"SD card" "SD card"
@ -936,7 +936,7 @@
#MSG_LANGUAGE_SELECT c=18 #MSG_LANGUAGE_SELECT c=18
"Select language" "Select language"
"Waehle Sprache" "W\xe1hle Sprache"
#MSG_SELFTEST_OK c=20 #MSG_SELFTEST_OK c=20
"Self test OK" "Self test OK"
@ -960,11 +960,11 @@
#MSG_FORCE_SELFTEST c=20 r=8 #MSG_FORCE_SELFTEST c=20 r=8
"Selftest will be run to calibrate accurate sensorless rehoming." "Selftest will be run to calibrate accurate sensorless rehoming."
"Selbsttest im Gang, um die genaue Rueck- kehr zum Nullpunkt ohne Sensor zu kalibrieren" "Selbsttest wird gestartet, um Startposition zu kalibrieren."
#MSG_SEL_PREHEAT_TEMP c=20 r=6 #MSG_SEL_PREHEAT_TEMP c=20 r=6
"Select nozzle preheat temperature which matches your material." "Select nozzle preheat temperature which matches your material."
"Bitte Vorheiztemperatur auswaehlen, die Ihrem Material entspricht." "Bitte Vorheiztemperatur ausw\xe1hlen, die Ihrem Material entspricht."
#MSG_SET_TEMPERATURE c=20 #MSG_SET_TEMPERATURE c=20
"Set temperature:" "Set temperature:"
@ -996,7 +996,7 @@
#MSG_SEVERE_SKEW c=14 #MSG_SEVERE_SKEW c=14
"Severe skew" "Severe skew"
"Sehr Schraeg" "Sehr schr\xe1g"
#MSG_SORT_ALPHA c=8 #MSG_SORT_ALPHA c=8
"Alphabet" "Alphabet"
@ -1012,7 +1012,7 @@
#MSG_SLIGHT_SKEW c=14 #MSG_SLIGHT_SKEW c=14
"Slight skew" "Slight skew"
"Leicht Schraeg" "Leicht schr\xe1g"
#MSG_SOUND c=7 #MSG_SOUND c=7
"Sound" "Sound"
@ -1020,7 +1020,7 @@
#MSG_RUNOUTS c=7 #MSG_RUNOUTS c=7
"Runouts" "Runouts"
"Maengel" "M\xe1ngel"
#MSG_Z-LEVELING_ENFORCED c=20 r=4 #MSG_Z-LEVELING_ENFORCED c=20 r=4
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
@ -1040,7 +1040,7 @@
#MSG_TEMP_CAL_WARNING c=20 r=4 #MSG_TEMP_CAL_WARNING c=20 r=4
"Stable ambient temperature 21-26C is needed a rigid stand is required." "Stable ambient temperature 21-26C is needed a rigid stand is required."
"Stabile Umgebungs- temperatur 21-26C und feste Stand- flaeche erforderlich" "Stabile Umgebungs- temperatur 21-26C und feste Stand- fl\xe1che erforderlich"
#MSG_STATISTICS c=18 #MSG_STATISTICS c=18
"Statistics" "Statistics"
@ -1064,7 +1064,7 @@
#MSG_SELECT_FILAMENT c=20 #MSG_SELECT_FILAMENT c=20
"Select filament:" "Select filament:"
"Filament auswaehlen:" "Filament ausw\xe1hlen:"
#MSG_TEMP_CALIBRATION c=14 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
@ -1072,7 +1072,7 @@
#MSG_SELECT_TEMP_MATCHES_MATERIAL c=20 r=4 #MSG_SELECT_TEMP_MATCHES_MATERIAL c=20 r=4
"Select temperature which matches your material." "Select temperature which matches your material."
"Waehlen Sie die Temperatur, die zu Ihrem Material passt." "W\xe1hlen Sie die Temperatur, die zu Ihrem Material passt."
#MSG_CALIBRATION_PINDA_MENU c=17 #MSG_CALIBRATION_PINDA_MENU c=17
"Temp. calibration" "Temp. calibration"
@ -1088,7 +1088,7 @@
#MSG_FS_VERIFIED c=20 r=3 #MSG_FS_VERIFIED c=20 r=3
"Sensor verified, remove the filament now." "Sensor verified, remove the filament now."
"Sensor ueberprueft, entladen Sie jetzt das Filament." "Sensor \xf5berpr\xf5ft, entladen Sie jetzt das Filament."
#MSG_TEMPERATURE c=18 #MSG_TEMPERATURE c=18
"Temperature" "Temperature"
@ -1100,7 +1100,7 @@
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Es ist noch not- wendig die Z- Kalibrierung aus- zufuehren. Bitte befolgen Sie das Handbuch, Kapitel Erste Schritte, Abschnitt Kalibrierablauf." "Es ist noch not- wendig die Z- Kalibrierung aus- zuf\xf5hren. Bitte befolgen Sie das Handbuch, Kapitel Erste Schritte, Abschnitt Kalibrierablauf."
#MSG_TOTAL_FILAMENT c=19 #MSG_TOTAL_FILAMENT c=19
"Total filament" "Total filament"
@ -1156,23 +1156,23 @@
#MSG_WAITING_TEMP c=20 r=4 #MSG_WAITING_TEMP c=20 r=4
"Waiting for nozzle and bed cooling" "Waiting for nozzle and bed cooling"
"Warten bis Heizung und Bett abgekuehlt sind" "Warten bis Heizung und Bett abgek\xf5hlt sind"
#MSG_WAITING_TEMP_PINDA c=20 r=3 #MSG_WAITING_TEMP_PINDA c=20 r=3
"Waiting for PINDA probe cooling" "Waiting for PINDA probe cooling"
"Warten, bis PINDA- Sonde abgekuehlt ist" "Warten, bis PINDA- Sonde abgek\xf5hlt ist"
#MSG_CHANGED_BOTH c=20 r=4 #MSG_CHANGED_BOTH c=20 r=4
"Warning: both printer type and motherboard type changed." "Warning: both printer type and motherboard type changed."
"Warnung: Druckertyp und Platinentyp wurden beide geaendert." "Warnung: Druckertyp und Platinentyp wurden beide ge\xe1ndert."
#MSG_CHANGED_MOTHERBOARD c=20 r=4 #MSG_CHANGED_MOTHERBOARD c=20 r=4
"Warning: motherboard type changed." "Warning: motherboard type changed."
"Warnung: Platinentyp wurde geaendert." "Warnung: Platinentyp wurde ge\xe1ndert."
#MSG_CHANGED_PRINTER c=20 r=4 #MSG_CHANGED_PRINTER c=20 r=4
"Warning: printer type changed." "Warning: printer type changed."
"Warnung: Druckertyp wurde geaendert." "Warnung: Druckertyp wurde ge\xe1ndert."
#MSG_UNLOAD_SUCCESSFUL c=20 r=2 #MSG_UNLOAD_SUCCESSFUL c=20 r=2
"Was filament unload successful?" "Was filament unload successful?"
@ -1200,19 +1200,19 @@
#MSG_WIZARD_QUIT c=20 r=8 #MSG_WIZARD_QUIT c=20 r=8
"You can always resume the Wizard from Calibration -> Wizard." "You can always resume the Wizard from Calibration -> Wizard."
"Sie koennen den Assistenten immer im Menu neu starten: Kalibrierung -> Assistent" "Sie k\xefnnen den Assistenten immer im Menu neu starten: Kalibrierung -> Assistent"
#MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME c=20 r=8
"XYZ calibration all right. Skew will be corrected automatically." "XYZ calibration all right. Skew will be corrected automatically."
"XYZ Kalibrierung in Ordnung. Schraeglauf wird automatisch korrigiert." "XYZ Kalibrierung in Ordnung. Schr\xe1glauf wird automatisch korrigiert."
#MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"XYZ Kalibrierung in Ordnung. X/Y Achsen sind etwas schraeg. Gut gemacht!" "XYZ Kalibrierung in Ordnung. X/Y Achsen sind etwas schr\xe1g. Gut gemacht!"
#MSG_TIMEOUT c=12 #MSG_TIMEOUT c=12
"Timeout" "Timeout"
"Verzoegerung" "\x00"
#MSG_X_CORRECTION c=13 #MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
@ -1220,15 +1220,15 @@
#MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
"XYZ calibration ok. X/Y axes are perpendicular. Congratulations!" "XYZ calibration ok. X/Y axes are perpendicular. Congratulations!"
"XYZ-Kalibrierung ok. X/Y-Achsen sind senkrecht zueinander Glueckwunsch!" "XYZ-Kalibrierung ok. X/Y-Achsen sind senkrecht zueinander Gl\xf5ckwunsch!"
#MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR c=20 r=8
"XYZ calibration compromised. Front calibration points not reachable." "XYZ calibration compromised. Front calibration points not reachable."
"XYZ-Kalibrierung beeintraechtigt. Vordere Kalibrierpunkte nicht erreichbar." "XYZ-Kalibrierung beeintr\xe1chtigt. Vordere Kalibrierpunkte nicht erreichbar."
#MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR c=20 r=8
"XYZ calibration compromised. Right front calibration point not reachable." "XYZ calibration compromised. Right front calibration point not reachable."
"XYZ-Kalibrierung beeintraechtigt. Rechter vorderer Kalibrierpunkt nicht erreichbar." "XYZ-Kalibrierung beeintr\xe1chtigt. Rechter vorderer Kalibrierpunkt nicht erreichbar."
#MSG_LOAD_ALL c=17 #MSG_LOAD_ALL c=17
"Load all" "Load all"
@ -1252,11 +1252,11 @@
#MSG_WIZARD_V2_CAL_2 c=20 r=12 #MSG_WIZARD_V2_CAL_2 c=20 r=12
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)." "Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale H\xefhe erreicht haben. \xf5berpr\xf5fen Sie die Bilder im Handbuch (Kapitel Kalibrierung)."
#MSG_FIL_FAILED c=20 r=5 #MSG_FIL_FAILED c=20 r=5
"Verification failed, remove the filament and try again." "Verification failed, remove the filament and try again."
"Ueberpruefung fehl- geschlagen, entladen Sie das Filament und versuchen Sie es erneut." "\xf5berpr\xf5fung fehl- geschlagen, entladen Sie das Filament und versuchen Sie es erneut."
#MSG_Y_CORRECTION c=13 #MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
@ -1272,7 +1272,7 @@
#MSG_BACK c=18 #MSG_BACK c=18
"Back" "Back"
"Zurueck" "Zur\xf5ck"
#MSG_CHECKS c=18 #MSG_CHECKS c=18
"Checks" "Checks"
@ -1320,31 +1320,31 @@
#MSG_NOZZLE_DIAMETER c=10 #MSG_NOZZLE_DIAMETER c=10
"Nozzle d." "Nozzle d."
"Duese D." "D\xf5sen Dia."
#MSG_GCODE_DIFF_CONTINUE c=20 r=4 #MSG_GCODE_DIFF_CONTINUE c=20 r=4
"G-code sliced for a different level. Continue?" "G-code sliced for a different level. Continue?"
"G-Code ist fuer einen anderen Level geslict. Fortfahren?" "G-Code ist f\xf5r einen anderen Level geslict. Fortfahren?"
#MSG_GCODE_DIFF_CANCELLED c=20 r=7 #MSG_GCODE_DIFF_CANCELLED c=20 r=7
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Level geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen." "G-Code ist f\xf5r einen anderen Level geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
#MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5 #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"G-Code ist fuer einen anderen Drucker geslict. Fortfahren?" "G-Code ist f\xf5r einen anderen Drucker geslict. Fortfahren?"
#MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=8 #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=8
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Drucker geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen." "G-Code ist f\xf5r einen anderen Drucker geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
#MSG_GCODE_NEWER_FIRMWARE_CONTINUE c=20 r=5 #MSG_GCODE_NEWER_FIRMWARE_CONTINUE c=20 r=5
"G-code sliced for a newer firmware. Continue?" "G-code sliced for a newer firmware. Continue?"
"G-Code ist fuer eine neuere Firmware geslict. Fortfahren?" "G-Code ist f\xf5r eine neuere Firmware geslict. Fortfahren?"
#MSG_GCODE_NEWER_FIRMWARE_CANCELLED c=20 r=8 #MSG_GCODE_NEWER_FIRMWARE_CANCELLED c=20 r=8
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled." "G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"G-Code ist fuer eine neuere Firmware geslict. Bitte die Firmware updaten. Druck abgebrochen." "G-Code ist f\xf5r eine neuere Firmware geslict. Bitte die Firmware updaten. Druck abgebrochen."
#MSG_PREHEATING_TO_CUT c=20 #MSG_PREHEATING_TO_CUT c=20
"Preheating to cut" "Preheating to cut"
@ -1356,11 +1356,11 @@
#MSG_NOZZLE_DIFFERS_CONTINUE c=20 r=5 #MSG_NOZZLE_DIFFERS_CONTINUE c=20 r=5
"Printer nozzle diameter differs from the G-code. Continue?" "Printer nozzle diameter differs from the G-code. Continue?"
"Der Durchmesser der Druckerduese weicht vom G-Code ab. Fortfahren?" "Der Durchmesser der Druckerd\xf5se weicht vom G-Code ab. Fortfahren?"
#MSG_NOZZLE_DIFFERS_CANCELLED c=20 r=9 #MSG_NOZZLE_DIFFERS_CANCELLED c=20 r=9
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen." "Der Durchmesser der Druckerd\xf5se weicht vom G-Code ab. Bitte \xf5berpr\xf5fen Sie den Wert in den Einstellungen. Druck abgebrochen."
#MSG_SELFTEST_FS_LEVEL c=20 #MSG_SELFTEST_FS_LEVEL c=20
"%s level expected" "%s level expected"

View File

@ -7,8 +7,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Language: de\n" "Language: de\n"
"Project-Id-Version: Prusa-Firmware\n" "Project-Id-Version: Prusa-Firmware\n"
"POT-Creation-Date: Sun 19 Dec 2021 07:17:27 PM CET\n" "POT-Creation-Date: Wed 26 Jan 2022 05:40:56 PM CET\n"
"PO-Revision-Date: Sun 19 Dec 2021 07:17:27 PM CET\n" "PO-Revision-Date: Wed 26 Jan 2022 05:40:56 PM CET\n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Poedit 2.0.7\n" "X-Generator: Poedit 2.0.7\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
@ -21,7 +21,7 @@ msgid " 0.3 or older"
msgstr " 0.3 oder aelter" msgstr " 0.3 oder aelter"
# MSG_FS_V_03_OR_OLDER c=18 # MSG_FS_V_03_OR_OLDER c=18
#: Marlin_main.cpp:9884 #: Marlin_main.cpp:9887
msgid "FS v0.3 or older" msgid "FS v0.3 or older"
msgstr "FS 0.3 oder aelter" msgstr "FS 0.3 oder aelter"
@ -31,7 +31,7 @@ msgid " 0.4 or newer"
msgstr " 0.4 oder neuer" msgstr " 0.4 oder neuer"
# MSG_FS_V_04_OR_NEWER c=18 # MSG_FS_V_04_OR_NEWER c=18
#: Marlin_main.cpp:9883 #: Marlin_main.cpp:9886
msgid "FS v0.4 or newer" msgid "FS v0.4 or newer"
msgstr "FS 0.4 oder neuer" msgstr "FS 0.4 oder neuer"
@ -61,7 +61,7 @@ msgid "Adjusting Z:"
msgstr "Z Anpassen:" msgstr "Z Anpassen:"
# MSG_SELFTEST_CHECK_ALLCORRECT c=20 # MSG_SELFTEST_CHECK_ALLCORRECT c=20
#: ultralcd.cpp:8490 #: ultralcd.cpp:8411
msgid "All correct" msgid "All correct"
msgstr "Alles richtig" msgstr "Alles richtig"
@ -96,7 +96,7 @@ msgid "Auto home"
msgstr "Startposition" msgstr "Startposition"
# MSG_AUTOLOAD_FILAMENT c=18 # MSG_AUTOLOAD_FILAMENT c=18
#: ultralcd.cpp:6732 #: ultralcd.cpp:6653
msgid "AutoLoad filament" msgid "AutoLoad filament"
msgstr "AutoLaden Filament" msgstr "AutoLaden Filament"
@ -111,17 +111,17 @@ msgid "Autoloading filament is active, just press the knob and insert filament..
msgstr "Automatisches Laden Filament ist aktiv, Knopf druecken und Filament einlegen..." msgstr "Automatisches Laden Filament ist aktiv, Knopf druecken und Filament einlegen..."
# MSG_SELFTEST_AXIS_LENGTH c=20 # MSG_SELFTEST_AXIS_LENGTH c=20
#: ultralcd.cpp:8173 #: ultralcd.cpp:8094
msgid "Axis length" msgid "Axis length"
msgstr "Achsenlaenge" msgstr "Achsenlaenge"
# MSG_SELFTEST_AXIS c=16 # MSG_SELFTEST_AXIS c=16
#: ultralcd.cpp:8174 #: ultralcd.cpp:8095
msgid "Axis" msgid "Axis"
msgstr "Achse" msgstr "Achse"
# MSG_SELFTEST_BEDHEATER c=20 # MSG_SELFTEST_BEDHEATER c=20
#: ultralcd.cpp:8131 #: ultralcd.cpp:8052
msgid "Bed/Heater" msgid "Bed/Heater"
msgstr "Bett/Heizung" msgstr "Bett/Heizung"
@ -176,7 +176,7 @@ msgid "Blackout occurred. Recover print?"
msgstr "Stromausfall! Druck wiederherstellen?" msgstr "Stromausfall! Druck wiederherstellen?"
# MSG_CALIBRATING_HOME c=20 # MSG_CALIBRATING_HOME c=20
#: ultralcd.cpp:8492 #: ultralcd.cpp:8413
msgid "Calibrating home" msgid "Calibrating home"
msgstr "Kalibriere Start" msgstr "Kalibriere Start"
@ -226,12 +226,12 @@ msgid "Calibration"
msgstr "Kalibrierung" msgstr "Kalibrierung"
# MSG_SD_REMOVED c=20 # MSG_SD_REMOVED c=20
#: ultralcd.cpp:8939 #: ultralcd.cpp:8860
msgid "Card removed" msgid "Card removed"
msgstr "SD Karte entfernt" msgstr "SD Karte entfernt"
# MSG_CHECKING_FILE c=17 # MSG_CHECKING_FILE c=17
#: ultralcd.cpp:8580 #: ultralcd.cpp:8501
msgid "Checking file" msgid "Checking file"
msgstr "Ueberpruefe Datei" msgstr "Ueberpruefe Datei"
@ -326,17 +326,17 @@ msgid "Ejecting filament"
msgstr "werfe Filament aus" msgstr "werfe Filament aus"
# MSG_SELFTEST_ENDSTOP_NOTHIT c=20 # MSG_SELFTEST_ENDSTOP_NOTHIT c=20
#: ultralcd.cpp:8149 #: ultralcd.cpp:8070
msgid "Endstop not hit" msgid "Endstop not hit"
msgstr "Ende nicht getroffen" msgstr "Ende nicht getroffen"
# MSG_SELFTEST_ENDSTOP c=16 # MSG_SELFTEST_ENDSTOP c=16
#: ultralcd.cpp:8144 #: ultralcd.cpp:8065
msgid "Endstop" msgid "Endstop"
msgstr "Endanschlag" msgstr "Endanschlag"
# MSG_SELFTEST_ENDSTOPS c=20 # MSG_SELFTEST_ENDSTOPS c=20
#: ultralcd.cpp:8135 #: ultralcd.cpp:8056
msgid "Endstops" msgid "Endstops"
msgstr "Endschalter" msgstr "Endschalter"
@ -376,7 +376,7 @@ msgid "ERROR:"
msgstr "FEHLER:" msgstr "FEHLER:"
# MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18 # MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
#: ultralcd.cpp:8498 #: ultralcd.cpp:8419
msgid "Extruder fan:" msgid "Extruder fan:"
msgstr "Extruder Luefter:" msgstr "Extruder Luefter:"
@ -391,7 +391,7 @@ msgid "Extruder"
msgstr "" msgstr ""
# MSG_MMU_FAIL_STATS c=18 # MSG_MMU_FAIL_STATS c=18
#: ultralcd.cpp:6754 #: ultralcd.cpp:6675
msgid "Fail stats MMU" msgid "Fail stats MMU"
msgstr "MMU-Fehler" msgstr "MMU-Fehler"
@ -401,7 +401,7 @@ msgid "F. autoload"
msgstr "F. autoladen" msgstr "F. autoladen"
# MSG_FAIL_STATS c=18 # MSG_FAIL_STATS c=18
#: ultralcd.cpp:6751 #: ultralcd.cpp:6672
msgid "Fail stats" msgid "Fail stats"
msgstr "Fehlerstatistik" msgstr "Fehlerstatistik"
@ -461,7 +461,7 @@ msgid "FS Action"
msgstr "FS Aktion" msgstr "FS Aktion"
# MSG_FILE_INCOMPLETE c=20 r=3 # MSG_FILE_INCOMPLETE c=20 r=3
#: ultralcd.cpp:8634 #: ultralcd.cpp:8555
msgid "File incomplete. Continue anyway?" msgid "File incomplete. Continue anyway?"
msgstr "Datei unvollstaendig Trotzdem fortfahren?" msgstr "Datei unvollstaendig Trotzdem fortfahren?"
@ -486,7 +486,7 @@ msgid "Fix the issue and then press button on MMU unit."
msgstr "Beseitigen Sie das Problem und druecken Sie dann den Knopf am MMU." msgstr "Beseitigen Sie das Problem und druecken Sie dann den Knopf am MMU."
# MSG_FLOW c=15 # MSG_FLOW c=15
#: ultralcd.cpp:6888 #: ultralcd.cpp:6809
msgid "Flow" msgid "Flow"
msgstr "Durchfluss" msgstr "Durchfluss"
@ -501,17 +501,17 @@ msgid "Front side[um]"
msgstr "Vorne [um]" msgstr "Vorne [um]"
# MSG_SELFTEST_FANS c=20 # MSG_SELFTEST_FANS c=20
#: ultralcd.cpp:8179 #: ultralcd.cpp:8100
msgid "Front/left fans" msgid "Front/left fans"
msgstr "Teile/Extr. Luefter" msgstr "Teile/Extr. Luefter"
# MSG_SELFTEST_HEATERTHERMISTOR c=20 # MSG_SELFTEST_HEATERTHERMISTOR c=20
#: ultralcd.cpp:8127 #: ultralcd.cpp:8048
msgid "Heater/Thermistor" msgid "Heater/Thermistor"
msgstr "Heizung/Thermistor" msgstr "Heizung/Thermistor"
# MSG_BED_HEATING_SAFETY_DISABLED c=20 r=4 # MSG_BED_HEATING_SAFETY_DISABLED c=20 r=4
#: Marlin_main.cpp:9874 #: Marlin_main.cpp:9877
msgid "Heating disabled by safety timer." msgid "Heating disabled by safety timer."
msgstr "Heizung durch Sicherheitstimer deaktiviert." msgstr "Heizung durch Sicherheitstimer deaktiviert."
@ -551,12 +551,12 @@ msgid "Checking bed"
msgstr "Pruefe Bett" msgstr "Pruefe Bett"
# MSG_SELFTEST_CHECK_ENDSTOPS c=20 # MSG_SELFTEST_CHECK_ENDSTOPS c=20
#: ultralcd.cpp:8481 #: ultralcd.cpp:8402
msgid "Checking endstops" msgid "Checking endstops"
msgstr "Pruefe Endschalter" msgstr "Pruefe Endschalter"
# MSG_SELFTEST_CHECK_HOTEND c=20 # MSG_SELFTEST_CHECK_HOTEND c=20
#: ultralcd.cpp:8487 #: ultralcd.cpp:8408
msgid "Checking hotend" msgid "Checking hotend"
msgstr "Pruefe Duese" msgstr "Pruefe Duese"
@ -576,7 +576,7 @@ msgid "Checking Y axis"
msgstr "Pruefe Y Achse" msgstr "Pruefe Y Achse"
# MSG_SELFTEST_CHECK_Z c=20 # MSG_SELFTEST_CHECK_Z c=20
#: ultralcd.cpp:8484 #: ultralcd.cpp:8405
msgid "Checking Z axis" msgid "Checking Z axis"
msgstr "Pruefe Z Achse" msgstr "Pruefe Z Achse"
@ -671,7 +671,7 @@ msgid "Live adjust Z"
msgstr "Z einstellen" msgstr "Z einstellen"
# MSG_INSERT_FIL c=20 r=6 # MSG_INSERT_FIL c=20 r=6
#: ultralcd.cpp:7380 #: ultralcd.cpp:7301
msgid "Insert the filament (do not load it) into the extruder and then press the knob." msgid "Insert the filament (do not load it) into the extruder and then press the knob."
msgstr "Stecken Sie das Filament (nicht laden) in den Extruder und druecken Sie dann den Knopf." msgstr "Stecken Sie das Filament (nicht laden) in den Extruder und druecken Sie dann den Knopf."
@ -696,12 +696,12 @@ msgid "Iteration"
msgstr "Wiederholung" msgstr "Wiederholung"
# MSG_LOOSE_PULLEY c=20 # MSG_LOOSE_PULLEY c=20
#: ultralcd.cpp:8167 #: ultralcd.cpp:8088
msgid "Loose pulley" msgid "Loose pulley"
msgstr "Lose Riemenscheibe" msgstr "Lose Riemenscheibe"
# MSG_LOAD_TO_NOZZLE c=18 # MSG_LOAD_TO_NOZZLE c=18
#: ultralcd.cpp:6717 #: ultralcd.cpp:6638
msgid "Load to nozzle" msgid "Load to nozzle"
msgstr "In Nozzle laden" msgstr "In Nozzle laden"
@ -851,7 +851,7 @@ msgid "No move."
msgstr "Keine Bewegung." msgstr "Keine Bewegung."
# MSG_NO_CARD c=18 # MSG_NO_CARD c=18
#: ultralcd.cpp:6697 #: ultralcd.cpp:6618
msgid "No SD card" msgid "No SD card"
msgstr "Keine SD Karte" msgstr "Keine SD Karte"
@ -866,7 +866,7 @@ msgid "No"
msgstr "Nein" msgstr "Nein"
# MSG_SELFTEST_NOTCONNECTED c=20 # MSG_SELFTEST_NOTCONNECTED c=20
#: ultralcd.cpp:8128 #: ultralcd.cpp:8049
msgid "Not connected" msgid "Not connected"
msgstr "Nicht angeschlossen" msgstr "Nicht angeschlossen"
@ -951,7 +951,7 @@ msgid "Please clean the nozzle for calibration. Click when done."
msgstr "Bitte entfernen Sie ueberstehendes Filament von der Duese. Klicken wenn sauber." msgstr "Bitte entfernen Sie ueberstehendes Filament von der Duese. Klicken wenn sauber."
# MSG_SELFTEST_PLEASECHECK c=20 # MSG_SELFTEST_PLEASECHECK c=20
#: ultralcd.cpp:8122 #: ultralcd.cpp:8043
msgid "Please check:" msgid "Please check:"
msgstr "Bitte pruefe:" msgstr "Bitte pruefe:"
@ -1016,7 +1016,7 @@ msgid "Preheat the nozzle!"
msgstr "Duese vorheizen!" msgstr "Duese vorheizen!"
# MSG_PREHEAT c=18 # MSG_PREHEAT c=18
#: ultralcd.cpp:6655 #: ultralcd.cpp:6576
msgid "Preheat" msgid "Preheat"
msgstr "Vorheizen" msgstr "Vorheizen"
@ -1031,7 +1031,7 @@ msgid "Please upgrade."
msgstr "Bitte aktualisieren." msgstr "Bitte aktualisieren."
# MSG_PRESS_TO_PREHEAT c=20 r=4 # MSG_PRESS_TO_PREHEAT c=20 r=4
#: Marlin_main.cpp:12049 #: Marlin_main.cpp:12052
msgid "Press the knob to preheat nozzle and continue." msgid "Press the knob to preheat nozzle and continue."
msgstr "Bitte druecken Sie den Knopf um die Duese vorzuheizen und fortzufahren." msgstr "Bitte druecken Sie den Knopf um die Duese vorzuheizen und fortzufahren."
@ -1061,7 +1061,7 @@ msgid "Preheating to unload"
msgstr "Heizen zum Entladen" msgstr "Heizen zum Entladen"
# MSG_SELFTEST_PRINT_FAN_SPEED c=18 # MSG_SELFTEST_PRINT_FAN_SPEED c=18
#: ultralcd.cpp:8501 #: ultralcd.cpp:8422
msgid "Print fan:" msgid "Print fan:"
msgstr "Druckvent.:" msgstr "Druckvent.:"
@ -1116,17 +1116,17 @@ msgid "Rear side [um]"
msgstr "Hinten [um]" msgstr "Hinten [um]"
# MSG_UNLOAD_FILAMENT_REPEAT c=20 r=4 # MSG_UNLOAD_FILAMENT_REPEAT c=20 r=4
#: ultralcd.cpp:7404 #: ultralcd.cpp:7325
msgid "Please unload the filament first, then repeat this action." msgid "Please unload the filament first, then repeat this action."
msgstr "Bitte entladen Sie erst das Filament und versuchen Sie es nochmal." msgstr "Bitte entladen Sie erst das Filament und versuchen Sie es nochmal."
# MSG_CHECK_IR_CONNECTION c=20 r=4 # MSG_CHECK_IR_CONNECTION c=20 r=4
#: ultralcd.cpp:7407 #: ultralcd.cpp:7328
msgid "Please check the IR sensor connection, unload filament if present." msgid "Please check the IR sensor connection, unload filament if present."
msgstr "Bitte IR Sensor Verbindungen ueber- pruefen und Filament entladen ist." msgstr "Bitte IR Sensor Verbindungen ueber- pruefen und Filament entladen ist."
# MSG_RECOVERING_PRINT c=20 # MSG_RECOVERING_PRINT c=20
#: Marlin_main.cpp:11393 #: Marlin_main.cpp:11396
msgid "Recovering print" msgid "Recovering print"
msgstr "Druck wiederherst" msgstr "Druck wiederherst"
@ -1191,12 +1191,12 @@ msgid "Select language"
msgstr "Waehle Sprache" msgstr "Waehle Sprache"
# MSG_SELFTEST_OK c=20 # MSG_SELFTEST_OK c=20
#: ultralcd.cpp:7679 #: ultralcd.cpp:7600
msgid "Self test OK" msgid "Self test OK"
msgstr "Selbsttest OK" msgstr "Selbsttest OK"
# MSG_SELFTEST_START c=20 # MSG_SELFTEST_START c=20
#: ultralcd.cpp:7447 #: ultralcd.cpp:7368
msgid "Self test start" msgid "Self test start"
msgstr "Selbsttest start" msgstr "Selbsttest start"
@ -1206,7 +1206,7 @@ msgid "Selftest"
msgstr "Selbsttest" msgstr "Selbsttest"
# MSG_SELFTEST_ERROR c=20 # MSG_SELFTEST_ERROR c=20
#: ultralcd.cpp:8121 #: ultralcd.cpp:8042
msgid "Selftest error!" msgid "Selftest error!"
msgstr "Selbsttest Fehler!" msgstr "Selbsttest Fehler!"
@ -1306,7 +1306,7 @@ msgid "Once"
msgstr "Einmal" msgstr "Einmal"
# MSG_SPEED c=15 # MSG_SPEED c=15
#: ultralcd.cpp:6882 #: ultralcd.cpp:6803
msgid "Speed" msgid "Speed"
msgstr "Geschwindigkeit" msgstr "Geschwindigkeit"
@ -1336,12 +1336,12 @@ msgid "STOPPED."
msgstr "GESTOPPT." msgstr "GESTOPPT."
# MSG_SUPPORT c=18 # MSG_SUPPORT c=18
#: ultralcd.cpp:6756 #: ultralcd.cpp:6677
msgid "Support" msgid "Support"
msgstr "" msgstr ""
# MSG_SELFTEST_SWAPPED c=16 # MSG_SELFTEST_SWAPPED c=16
#: ultralcd.cpp:8180 #: ultralcd.cpp:8101
msgid "Swapped" msgid "Swapped"
msgstr "Ausgetauscht" msgstr "Ausgetauscht"
@ -1376,7 +1376,7 @@ msgid "Temperature calibration is finished and active. Temp. calibration can be
msgstr "Temp.kalibrierung ist fertig + aktiv. Temp.kalibrierung kann ausgeschaltet werden im Menu Einstellungen -> Temp.kal." msgstr "Temp.kalibrierung ist fertig + aktiv. Temp.kalibrierung kann ausgeschaltet werden im Menu Einstellungen -> Temp.kal."
# MSG_FS_VERIFIED c=20 r=3 # MSG_FS_VERIFIED c=20 r=3
#: ultralcd.cpp:7411 #: ultralcd.cpp:7332
msgid "Sensor verified, remove the filament now." msgid "Sensor verified, remove the filament now."
msgstr "Sensor ueberprueft, entladen Sie jetzt das Filament." msgstr "Sensor ueberprueft, entladen Sie jetzt das Filament."
@ -1406,7 +1406,7 @@ msgid "Total print time"
msgstr "Gesamte Druckzeit" msgstr "Gesamte Druckzeit"
# MSG_TUNE c=18 # MSG_TUNE c=18
#: ultralcd.cpp:6653 #: ultralcd.cpp:6574
msgid "Tune" msgid "Tune"
msgstr "Feineinstellung" msgstr "Feineinstellung"
@ -1586,7 +1586,7 @@ msgid "The printer will start printing a zig-zag line. Rotate the knob until you
msgstr "Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)." msgstr "Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)."
# MSG_FIL_FAILED c=20 r=5 # MSG_FIL_FAILED c=20 r=5
#: ultralcd.cpp:7415 #: ultralcd.cpp:7336
msgid "Verification failed, remove the filament and try again." msgid "Verification failed, remove the filament and try again."
msgstr "Ueberpruefung fehl- geschlagen, entladen Sie das Filament und versuchen Sie es erneut." msgstr "Ueberpruefung fehl- geschlagen, entladen Sie das Filament und versuchen Sie es erneut."
@ -1616,7 +1616,7 @@ msgid "Checks"
msgstr "Kontrolle" msgstr "Kontrolle"
# MSG_FALSE_TRIGGERING c=20 # MSG_FALSE_TRIGGERING c=20
#: ultralcd.cpp:8190 #: ultralcd.cpp:8111
msgid "False triggering" msgid "False triggering"
msgstr "Falschtriggerung" msgstr "Falschtriggerung"
@ -1721,17 +1721,17 @@ msgid "Printer nozzle diameter differs from the G-code. Please check the value i
msgstr "Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen." msgstr "Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen."
# MSG_SELFTEST_FS_LEVEL c=20 # MSG_SELFTEST_FS_LEVEL c=20
#: ultralcd.cpp:8195 #: ultralcd.cpp:8116
msgid "%s level expected" msgid "%s level expected"
msgstr "%s Level erwartet" msgstr "%s Level erwartet"
# MSG_RENAME c=18 # MSG_RENAME c=18
#: ultralcd.cpp:6579 #: ultralcd.cpp:6500
msgid "Rename" msgid "Rename"
msgstr "Umbenennen" msgstr "Umbenennen"
# MSG_SELECT c=18 # MSG_SELECT c=18
#: ultralcd.cpp:6572 #: ultralcd.cpp:6493
msgid "Select" msgid "Select"
msgstr "Auswahl" msgstr "Auswahl"

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
# #
# Version 1.0.1 Build 12
#
# progmem.sh - multi-language support script # progmem.sh - multi-language support script
# Examine content of progmem sections (default is progmem1). # Examine content of progmem sections (default is progmem1).
# #
@ -16,14 +18,22 @@
# $PROGMEM.var - variables - strings # $PROGMEM.var - variables - strings
# $PROGMEM.txt - text data only (not used) # $PROGMEM.txt - text data only (not used)
# #
#############################################################################
# Change log:
# 31 May 2018, XPila, Initial
# 9 June 2020, 3d-gussner, Added version and Change log
# 9 June 2020, 3d-gussner, colored output
# 2 Apr. 2021, 3d-gussner, Use `git rev-list --count HEAD progmem.sh`
# to get Build Nr
#############################################################################
# #
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$OUTDIR" ]; then echo 'variable OUTDIR not set!' >&2; exit 1; fi if [ -z "$OUTDIR" ]; then echo "$(tput setaf 1)variable OUTDIR not set!$(tput sgr0)" >&2; exit 1; fi
if [ -z "$OBJDIR" ]; then echo 'variable OBJDIR not set!' >&2; exit 1; fi if [ -z "$OBJDIR" ]; then echo "$(tput setaf 1)variable OBJDIR not set!$(tput sgr0)" >&2; exit 1; fi
if [ -z "$INOELF" ]; then echo 'variable INOELF not set!' >&2; exit 1; fi if [ -z "$INOELF" ]; then echo "$(tput setaf 1)variable INOELF not set!$(tput sgr0)" >&2; exit 1; fi
if [ -z "$OBJDUMP" ]; then echo 'variable OBJDUMP not set!' >&2; exit 1; fi if [ -z "$OBJDUMP" ]; then echo "$(tput setaf 1)variable OBJDUMP not set!$(tput sgr0)" >&2; exit 1; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr0)" >&2; exit 1; fi
# #
# Program memory used # Program memory used
PROGMEM=progmem$1 PROGMEM=progmem$1
@ -39,11 +49,11 @@ if [ -z "$1" ]; then PROGMEM=progmem1; fi
# 6. perform character check and conversion (output to $PROGMEM.var and $PROGMEM.txt) # 6. perform character check and conversion (output to $PROGMEM.var and $PROGMEM.txt)
# #
echo "progmem.sh started" >&2 echo "$(tput setaf 2)progmem.sh started$(tput sgr0)" >&2
# (0) # (0)
echo " progmem.sh (0) - checking input files" >&2 echo " progmem.sh (0) - checking input files" >&2
if [ ! -e $OUTDIR ]; then echo "progmem.sh - file '$INOELF' not found!" >&2; exit 1; fi if [ ! -e $OUTDIR ]; then echo "progmem.sh - file $(tput setaf 2)"$INOELF"$(tput sgr 0) not found!" >&2; exit 1; fi
# (1) # (1)
echo " progmem.sh (1) - removing output files" >&2 echo " progmem.sh (1) - removing output files" >&2
@ -111,6 +121,6 @@ cat $PROGMEM.chr | \
#this step can be omitted because .txt file is not used #this step can be omitted because .txt file is not used
cat $PROGMEM.var | sed 's/\r/\n/g' | sed -E 's/^[0-9a-f]{8} [^ ]* //' >$PROGMEM.txt cat $PROGMEM.var | sed 's/\r/\n/g' | sed -E 's/^[0-9a-f]{8} [^ ]* //' >$PROGMEM.txt
echo "progmem.sh finished" >&2 echo "$(tput setaf 2)progmem.sh finished$(tput sgr0)" >&2
exit 0 exit 0

View File

@ -1,5 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# Version 1.0.1 Build 7
#
# textaddr.sh - multi-language support script # textaddr.sh - multi-language support script
# Compile progmem1.var and lang_en.txt files to textaddr.txt file (mapping of progmem addreses to text idenifiers) # Compile progmem1.var and lang_en.txt files to textaddr.txt file (mapping of progmem addreses to text idenifiers)
# #
@ -19,11 +21,19 @@
# after sort this will generate pairs of lines (line from progmem1 first) # after sort this will generate pairs of lines (line from progmem1 first)
# result of sort is compiled with simple script and stored into file textaddr.txt # result of sort is compiled with simple script and stored into file textaddr.txt
# #
#############################################################################
# Change log:
# 30 May 2018, XPila, Initial
# 9 June 2020, 3d-gussner, Added version and Change log
# 9 June 2020, 3d-gussner, colored output
# 2 Apr. 2021, 3d-gussner, Use `git rev-list --count HEAD textaddr.sh`
# to get Build Nr
#############################################################################
echo "textaddr.sh started" >&2 echo "$(tput setaf 2)textaddr.sh started$(tput sgr0)" >&2
if [ ! -e progmem1.var ]; then echo 'textaddr.sh - file progmem1.var not found!' >&2; exit 1; fi if [ ! -e progmem1.var ]; then echo "$(tput setaf 1)textaddr.sh - file progmem1.var not found!$(tput sgr0)" >&2; exit 1; fi
if [ ! -e lang_en.txt ]; then echo 'textaddr.sh - file lang_en.txt not found!' >&2; exit 1; fi if [ ! -e lang_en.txt ]; then echo "$(tput setaf 1)textaddr.sh - file lang_en.txt not found!$(tput sgr0)" >&2; exit 1; fi
addr='' addr=''
text='' text=''
(cat progmem1.var | sed -E "s/^([^ ]*) ([^ ]*) (.*)/\1 \"\3\"/";\ (cat progmem1.var | sed -E "s/^([^ ]*) ([^ ]*) (.*)/\1 \"\3\"/";\
@ -63,6 +73,6 @@ text=''
fi fi
done > textaddr.txt done > textaddr.txt
echo "textaddr.sh finished" >&2 echo "$(tput setaf 2)textaddr.sh finished$(tput sgr0)" >&2
exit 0 exit 0

View File

@ -1,12 +1,23 @@
#!/bin/sh #!/bin/sh
# #
# Version 1.0.1 Build 10
#
# update_lang.sh - multi-language support script # update_lang.sh - multi-language support script
# Update secondary language in binary file. # Update secondary language in binary file.
# #
#############################################################################
# Change log:
# 17 June 2018, XPila, Initial
# 9 June 2020, 3d-gussner, Added version and Change log
# 9 June 2020, 3d-gussner, colored output
# 2 Apr. 2021, 3d-gussner, Use `git rev-list --count HEAD update_lang.sh`
# to get Build Nr
#############################################################################
#
# Config: # Config:
if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi if [ -z "$CONFIG_OK" ]; then eval "$(cat config.sh)"; fi
if [ -z "$OBJCOPY" ]; then echo 'variable OBJCOPY not set!' >&2; exit 1; fi if [ -z "$OBJCOPY" ]; then echo "$(tput setaf 1)variable OBJCOPY not set!$(tput sgr0)" >&2; exit 1; fi
if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo 'Config NG!' >&2; exit 1; fi if [ -z "$CONFIG_OK" ] | [ $CONFIG_OK -eq 0 ]; then echo "$(tput setaf 1)Config NG!$(tput sgr0)" >&2; exit 1; fi
# #
# Selected language: # Selected language:
LNG=$1 LNG=$1
@ -17,9 +28,9 @@ finish()
{ {
echo echo
if [ "$1" = "0" ]; then if [ "$1" = "0" ]; then
echo "update_lang.sh finished with success" >&2 echo "$(tput setaf 2)update_lang.sh finished with success$(tput sgr0)" >&2
else else
echo "update_lang.sh finished with errors!" >&2 echo "$(tput setaf 1)update_lang.sh finished with errors!$(tput sgr0)" >&2
fi fi
case "$-" in case "$-" in
*i*) echo "press enter key" >&2; read ;; *i*) echo "press enter key" >&2; read ;;
@ -27,22 +38,22 @@ finish()
exit $1 exit $1
} }
echo "update_lang.sh started" >&2 echo "$(tput setaf 2)update_lang.sh started$(tput sgr0)" >&2
echo " selected language=$LNG" >&2 echo " selected language=$(tput setaf 2)$LNG$(tput sgr0)" >&2
echo -n " checking files..." >&2 echo -n " checking files..." >&2
if [ ! -e text.sym ]; then echo "NG! file text.sym not found!" >&2; finish 1; fi if [ ! -e text.sym ]; then echo "$(tput setaf 1)NG! file text.sym not found!$(tput sgr0)" >&2; finish 1; fi
if [ ! -e lang_$LNG.bin ]; then echo "NG! file lang_$LNG.bin not found!" >&2; finish 1; fi if [ ! -e lang_$LNG.bin ]; then echo "$(tput setaf 1)NG! file lang_$LNG.bin not found!$(tput sgr0)" >&2; finish 1; fi
if [ ! -e firmware.bin ]; then echo "NG! file firmware.bin not found!" >&2; finish 1; fi if [ ! -e firmware.bin ]; then echo "$(tput setaf 1)NG! file firmware.bin not found!$(tput sgr0)" >&2; finish 1; fi
echo "OK" >&2 echo "OK" >&2
echo -n " checking symbols..." >&2 echo -n " checking symbols..." >&2
#find symbol _SEC_LANG in section '.text' #find symbol _SEC_LANG in section '.text'
sec_lang=$(cat text.sym | grep -E "\b_SEC_LANG\b") sec_lang=$(cat text.sym | grep -E "\b_SEC_LANG\b")
if [ -z "$sec_lang" ]; then echo "NG!\n symbol _SEC_LANG not found!" >&2; finish 1; fi if [ -z "$sec_lang" ]; then echo "$(tput setaf 1)NG!\n symbol _SEC_LANG not found!$(tput sgr0)" >&2; finish 1; fi
#find symbol _PRI_LANG_SIGNATURE in section '.text' #find symbol _PRI_LANG_SIGNATURE in section '.text'
pri_lang=$(cat text.sym | grep -E "\b_PRI_LANG_SIGNATURE\b") pri_lang=$(cat text.sym | grep -E "\b_PRI_LANG_SIGNATURE\b")
if [ -z "$pri_lang" ]; then echo "NG!\n symbol _PRI_LANG_SIGNATURE not found!" >&2; finish 1; fi if [ -z "$pri_lang" ]; then echo "$(tput setaf 1)NG!\n symbol _PRI_LANG_SIGNATURE not found!$(tput sgr0)" >&2; finish 1; fi
echo "OK" >&2 echo "OK" >&2
echo " calculating vars:" >&2 echo " calculating vars:" >&2
@ -65,7 +76,7 @@ printf " lang_table_size =0x%04x (=%d bytes)\n" $lang_table_size $lang_table_si
lang_file_size=$(wc -c lang_$LNG.bin | cut -f1 -d' ') lang_file_size=$(wc -c lang_$LNG.bin | cut -f1 -d' ')
printf " lang_file_size =0x%04x (=%d bytes)\n" $lang_file_size $lang_file_size >&2 printf " lang_file_size =0x%04x (=%d bytes)\n" $lang_file_size $lang_file_size >&2
if [ $lang_file_size -gt $lang_table_size ]; then echo "Lanaguage binary file size too big!" >&2; finish 1; fi if [ $lang_file_size -gt $lang_table_size ]; then echo "$(tput setaf 1)Lanaguage binary file size too big!$(tput sgr0)" >&2; finish 1; fi
echo "updating 'firmware.bin'..." >&2 echo "updating 'firmware.bin'..." >&2