translations of setup.sh
This commit is contained in:
		
							parent
							
								
									2ea3a8059c
								
							
						
					
					
						commit
						c886d5f28e
					
				
					 1 changed files with 26 additions and 26 deletions
				
			
		
							
								
								
									
										52
									
								
								setup.sh
									
										
									
									
									
								
							
							
						
						
									
										52
									
								
								setup.sh
									
										
									
									
									
								
							| 
						 | 
					@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue