singlang/scripts/compile_mo.sh

88 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
TRANSLATIONS_DIR="translations"
SYSTEM_LOCALE_DIR="build/usr/share/locale"
# Проверка на наличие аргумента
if [ $# -eq 0 ]; then
echo "Error: Please specify program name as argument"
exit 1
fi
PROGRAM_PATH="$1"
PROGRAM_NAME=`basename $PROGRAM_PATH`
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
compile_po_to_mo() {
local lang="$1"
local po_file="$TRANSLATIONS_DIR/${lang}.po"
local mo_dir="$SYSTEM_LOCALE_DIR/${lang}/LC_MESSAGES"
local mo_file="$mo_dir/$PROGRAM_NAME.mo"
if [ -f "$po_file" ]; then
echo -e "${GREEN}Compiling $mo_file...${NC}"
mkdir -p "$mo_dir"
msgfmt -o "$mo_file" "$po_file"
else
echo -e "${YELLOW}Warning: $po_file not found, skipping...${NC}"
fi
}
get_available_languages() {
ls -1 "$TRANSLATIONS_DIR"/*.po 2>/dev/null | sed "s|$TRANSLATIONS_DIR/||" | sed 's|\.po||' || echo ""
}
generate_run_script() {
echo -e "${GREEN}Generating run.sh...${NC}"
cat > run.sh << EOF
#!/bin/bash
if [ \$# -eq 0 ]; then
echo "Error: Please specify a language"
exit 1
fi
LANGUAGE=\$1
LANG_DIR="translations"
if [ ! -f "\$LANG_DIR/\$LANGUAGE.po" ]; then
echo "Error: Language '\$LANGUAGE' not supported. Available languages:"
ls -1 \$LANG_DIR/*.po | sed 's|.*/||;s|\.po||'
exit 1
fi
LANG="\${LANGUAGE}_\${LANGUAGE@U}.UTF-8"
LD_PRELOAD=.preload/liboverride_bindtextdomain.so LANG="\$LANG" $PROGRAM_PATH
EOF
chmod +x run.sh
echo -e "${GREEN}run.sh generated successfully${NC}"
}
main() {
if [ ! -d "$TRANSLATIONS_DIR" ]; then
echo -e "${RED}Error: $TRANSLATIONS_DIR directory not found${NC}"
exit 1
fi
echo -e "${GREEN}Starting MO files compilation...${NC}"
local languages=$(get_available_languages)
if [ -z "$languages" ]; then
echo -e "${YELLOW}Warning: No .po files found in $TRANSLATIONS_DIR${NC}"
else
for lang in $languages; do
compile_po_to_mo "$lang"
done
echo -e "${GREEN}MO files compiled successfully!${NC}"
fi
generate_run_script
}
main