translations of setup.sh

This commit is contained in:
nocci 2025-04-29 14:46:55 +02:00
parent 2ea3a8059c
commit c886d5f28e
1 changed files with 26 additions and 26 deletions

View File

@ -75,12 +75,12 @@ else
fi fi
# Konfiguration # Configuration
PROJECT_DIR="steam-gift-manager" PROJECT_DIR="steam-gift-manager"
TRANSLATIONS_DIR="../translations" TRANSLATIONS_DIR="../translations"
DATA_DIR="../data" DATA_DIR="../data"
# 1. Projektordner & Übersetzungsordner erstellen # 1. Create project folder & translations folder
mkdir -p "$PROJECT_DIR"/{templates,static} mkdir -p "$PROJECT_DIR"/{templates,static}
mkdir -p "$TRANSLATIONS_DIR"/de/LC_MESSAGES mkdir -p "$TRANSLATIONS_DIR"/de/LC_MESSAGES
mkdir -p "$TRANSLATIONS_DIR"/en/LC_MESSAGES mkdir -p "$TRANSLATIONS_DIR"/en/LC_MESSAGES
@ -111,7 +111,7 @@ pillow
gunicorn gunicorn
EOL EOL
# 3. .env-Datei im übergeordneten Verzeichnis erstellen # 3. Create .env file in parent directory
cd .. cd ..
SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_hex(24))') SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_hex(24))')
REDEEM_SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(16))') REDEEM_SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(16))')
@ -154,10 +154,10 @@ MATRIX_ACCESS_TOKEN=""
MATRIX_ROOM_ID="" MATRIX_ROOM_ID=""
EOL EOL
# Zurück ins Projektverzeichnis # Back to project directory
cd $PROJECT_DIR cd $PROJECT_DIR
# 4. app.py (vollständige korrigierte Version) # 4. app.py (the main app)
cat <<'PYTHON_END' > app.py cat <<'PYTHON_END' > app.py
import os import os
import logging import logging
@ -220,7 +220,7 @@ load_dotenv(override=True)
# Lade Umgebungsvariablen aus .env mit override # Lade Umgebungsvariablen aus .env mit override
load_dotenv(override=True) load_dotenv(override=True)
# Konfiguration # App-Configuration
app.config.update( app.config.update(
SECRET_KEY=os.getenv('SECRET_KEY'), SECRET_KEY=os.getenv('SECRET_KEY'),
SQLALCHEMY_DATABASE_URI=('sqlite:////app/data/games.db'), SQLALCHEMY_DATABASE_URI=('sqlite:////app/data/games.db'),
@ -235,7 +235,7 @@ app.config.update(
interval_hours = int(os.getenv('CHECK_EXPIRING_KEYS_INTERVAL_HOURS', 12)) interval_hours = int(os.getenv('CHECK_EXPIRING_KEYS_INTERVAL_HOURS', 12))
# Initialisierung # Initialisation
db = SQLAlchemy(app, metadata=metadata) db = SQLAlchemy(app, metadata=metadata)
migrate = Migrate(app, db) migrate = Migrate(app, db)
login_manager = LoginManager(app) login_manager = LoginManager(app)
@ -259,7 +259,7 @@ def inject_template_vars():
theme='dark' if request.cookies.get('dark_mode') == 'true' else 'light' theme='dark' if request.cookies.get('dark_mode') == 'true' else 'light'
) )
# Datenbankmodelle # DB Models
class User(db.Model, UserMixin): class User(db.Model, UserMixin):
__tablename__ = 'users' __tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
@ -590,7 +590,7 @@ def export_pdf():
game.redeem_date.strftime('%d.%m.%y') if game.redeem_date else '' game.redeem_date.strftime('%d.%m.%y') if game.redeem_date else ''
]) ])
# Tabelle formatieren # Table format
table = Table(data, colWidths=col_widths, repeatRows=1) table = Table(data, colWidths=col_widths, repeatRows=1)
table.setStyle(TableStyle([ table.setStyle(TableStyle([
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
@ -814,7 +814,7 @@ def check_expiring_keys():
send_notification(user, game) send_notification(user, game)
# Optional: Cleanup-Funktion für regelmäßiges Löschen abgelaufener Tokens # Optional: cleaning up old tokens
def cleanup_expired_tokens(): def cleanup_expired_tokens():
now = datetime.utcnow() now = datetime.utcnow()
expired = RedeemToken.query.filter(RedeemToken.expires < now).all() expired = RedeemToken.query.filter(RedeemToken.expires < now).all()
@ -823,13 +823,13 @@ def cleanup_expired_tokens():
db.session.commit() db.session.commit()
# Scheduler initialisieren und starten # Scheduler start
scheduler = BackgroundScheduler() scheduler = BackgroundScheduler()
scheduler.add_job(func=check_expiring_keys, trigger="interval", hours=interval_hours) scheduler.add_job(func=check_expiring_keys, trigger="interval", hours=interval_hours)
scheduler.add_job(func=cleanup_expired_tokens, trigger="interval", hours=1) scheduler.add_job(func=cleanup_expired_tokens, trigger="interval", hours=1)
scheduler.start() scheduler.start()
# Shutdown des Schedulers bei Beendigung der App # Shutdown of the Schedulers when stopping the app
atexit.register(lambda: scheduler.shutdown()) atexit.register(lambda: scheduler.shutdown())
if __name__ == '__main__': if __name__ == '__main__':
@ -839,7 +839,7 @@ if __name__ == '__main__':
PYTHON_END PYTHON_END
# Babel Konfiguration erstellen # Create Babel configuration
cat <<EOL > babel.cfg cat <<EOL > babel.cfg
[python: **.py] [python: **.py]
[jinja2: **/templates/**.html] [jinja2: **/templates/**.html]
@ -903,11 +903,11 @@ services:
restart: unless-stopped restart: unless-stopped
COMPOSE_END COMPOSE_END
# 7. Verzeichnisse und Berechtigungen # 7. Directories and permissions
mkdir -p ../data ../translations mkdir -p ../data ../translations
chmod -R a+rwX ../data ../translations chmod -R a+rwX ../data ../translations
# 8. Übersetzungs- und Upgrade-Scripte # 8. Translation and upgrade scripts
cat <<'SCRIPT_END' > ../translate.sh cat <<'SCRIPT_END' > ../translate.sh
#!/bin/bash #!/bin/bash
set -e set -e
@ -919,10 +919,10 @@ declare -A locales=(
["en"]="en" ["en"]="en"
) )
# POT-Datei erstellen # create POT-file
docker-compose exec steam-manager pybabel extract -F babel.cfg -o translations/messages.pot . docker-compose exec steam-manager pybabel extract -F babel.cfg -o translations/messages.pot .
# Für jede Sprache prüfen und ggf. initialisieren # Check for each language and initialize if necessary
for lang in "${!locales[@]}"; do for lang in "${!locales[@]}"; do
if [ ! -f "translations/${locales[$lang]}/LC_MESSAGES/messages.po" ]; then if [ ! -f "translations/${locales[$lang]}/LC_MESSAGES/messages.po" ]; then
docker-compose exec steam-manager pybabel init \ docker-compose exec steam-manager pybabel init \
@ -932,11 +932,11 @@ for lang in "${!locales[@]}"; do
fi fi
done done
# Übersetzungen aktualisieren und kompilieren # Update and compile translations
docker-compose exec steam-manager pybabel update -i translations/messages.pot -d translations docker-compose exec steam-manager pybabel update -i translations/messages.pot -d translations
docker-compose exec steam-manager pybabel compile -d translations docker-compose exec steam-manager pybabel compile -d translations
echo "✅ Übersetzungen aktualisiert!" echo "✅ Translations updated!"
SCRIPT_END SCRIPT_END
chmod +x ../translate.sh chmod +x ../translate.sh
@ -944,25 +944,25 @@ cat <<'SCRIPT_END' > ../upgrade.sh
#!/bin/bash #!/bin/bash
set -e set -e
# Setze das Arbeitsverzeichnis auf das Projektverzeichnis # Set the working directory to the project directory
cd "$(dirname "$0")/steam-gift-manager" cd "$(dirname "$0")/steam-gift-manager"
# Setze FLASK_APP, falls nötig # Setze FLASK_APP, falls nötig
export FLASK_APP=app.py export FLASK_APP=app.py
# Initialisiere migrations, falls noch nicht vorhanden # Initialize migrations, if not yet available
if [ ! -d migrations ]; then if [ ! -d migrations ]; then
echo "Starting Flask-Migrate..." echo "Starting Flask-Migrate..."
docker-compose exec steam-manager flask db init docker-compose exec steam-manager flask db init
fi fi
# Erzeuge Migration (nur wenn sich Modelle geändert haben) # Create migration (only if models have changed)
docker-compose exec steam-manager flask db migrate -m "Automatic Migration" docker-compose exec steam-manager flask db migrate -m "Automatic Migration"
# Wende Migration an # Apply migration
docker-compose exec steam-manager flask db upgrade docker-compose exec steam-manager flask db upgrade
echo "✅ Database-Migration abgeschlossen!" echo "✅ Database migration completed!"
SCRIPT_END SCRIPT_END
chmod +x ../upgrade.sh chmod +x ../upgrade.sh
@ -1482,7 +1482,7 @@ function updateCountdown() {
updateProgressBar(percent); updateProgressBar(percent);
} }
// Initialisierung // run countdown
updateCountdown(); updateCountdown();
const timer = setInterval(updateCountdown, 1000); const timer = setInterval(updateCountdown, 1000);
</script> </script>
@ -1558,7 +1558,7 @@ body {
color: #ff6b6b; color: #ff6b6b;
} }
/* Progressbar-Animationen */ /* Progressbar-Animations */
#expiry-bar { #expiry-bar {
transition: width 1s linear, background-color 0.5s ease; transition: width 1s linear, background-color 0.5s ease;
} }