Urgent Fix for Translations
This commit is contained in:
		
							parent
							
								
									fb6a2799ce
								
							
						
					
					
						commit
						b1aee9e5b8
					
				
					 6 changed files with 133 additions and 122 deletions
				
			
		
							
								
								
									
										95
									
								
								setup.sh
									
										
									
									
									
								
							
							
						
						
									
										95
									
								
								setup.sh
									
										
									
									
									
								
							| 
						 | 
					@ -1,13 +1,13 @@
 | 
				
			||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
set -e
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Color definitions
 | 
					# Colors
 | 
				
			||||||
RED='\033[1;31m'
 | 
					RED='\033[1;31m'
 | 
				
			||||||
GREEN='\033[1;32m'
 | 
					GREEN='\033[1;32m'
 | 
				
			||||||
YELLOW='\033[1;33m'
 | 
					YELLOW='\033[1;33m'
 | 
				
			||||||
NC='\033[0m'
 | 
					NC='\033[0m'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 1. Docker check (including Arch Linux)
 | 
					# 1. Docker check (incl. Arch Linux)
 | 
				
			||||||
if ! command -v docker &>/dev/null; then
 | 
					if ! command -v docker &>/dev/null; then
 | 
				
			||||||
  echo -e "${RED}❗ Docker is not installed.${NC}"
 | 
					  echo -e "${RED}❗ Docker is not installed.${NC}"
 | 
				
			||||||
  read -p "Would you like to install Docker automatically now? [y/N]: " install_docker
 | 
					  read -p "Would you like to install Docker automatically now? [y/N]: " install_docker
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ if ! command -v docker &>/dev/null; then
 | 
				
			||||||
      rm get-docker.sh
 | 
					      rm get-docker.sh
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Check Docker group membership
 | 
					    # Docker group membership prüfen
 | 
				
			||||||
    if ! groups | grep -q '\bdocker\b'; then
 | 
					    if ! groups | grep -q '\bdocker\b'; then
 | 
				
			||||||
      echo -e "${YELLOW}⚠️  Your user is not in the docker group. Adding now...${NC}"
 | 
					      echo -e "${YELLOW}⚠️  Your user is not in the docker group. Adding now...${NC}"
 | 
				
			||||||
      sudo usermod -aG docker $USER
 | 
					      sudo usermod -aG docker $USER
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ if ! command -v docker &>/dev/null; then
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 2. Docker Compose check (V1 and V2 plugin, with Arch support)
 | 
					# 2. Check Docker compose (V1 und V2 Plugin, incl. Arch Support)
 | 
				
			||||||
DOCKER_COMPOSE_CMD=""
 | 
					DOCKER_COMPOSE_CMD=""
 | 
				
			||||||
if command -v docker-compose &>/dev/null; then
 | 
					if command -v docker-compose &>/dev/null; then
 | 
				
			||||||
  DOCKER_COMPOSE_CMD="docker-compose"
 | 
					  DOCKER_COMPOSE_CMD="docker-compose"
 | 
				
			||||||
| 
						 | 
					@ -74,13 +74,12 @@ else
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Configuration
 | 
					# Configuration
 | 
				
			||||||
PROJECT_DIR="steam-gift-manager"
 | 
					PROJECT_DIR="steam-gift-manager"
 | 
				
			||||||
TRANSLATIONS_DIR="../translations"
 | 
					TRANSLATIONS_DIR="$PWD/translations"
 | 
				
			||||||
DATA_DIR="../data"
 | 
					DATA_DIR="$PWD/data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 1. Create project folder & translations folder
 | 
					# 1. Create folders
 | 
				
			||||||
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 +110,7 @@ pillow
 | 
				
			||||||
gunicorn
 | 
					gunicorn
 | 
				
			||||||
EOL
 | 
					EOL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 3. Create .env file in parent directory
 | 
					# 3. .env Datei in Parent-VFolder
 | 
				
			||||||
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,13 +153,11 @@ MATRIX_ACCESS_TOKEN=""
 | 
				
			||||||
MATRIX_ROOM_ID=""
 | 
					MATRIX_ROOM_ID=""
 | 
				
			||||||
EOL
 | 
					EOL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Back to project directory
 | 
					 | 
				
			||||||
cd $PROJECT_DIR
 | 
					cd $PROJECT_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 4. app.py (the main app)
 | 
					# 4. app.py (the main app)
 | 
				
			||||||
cat <<'PYTHON_END' > app.py
 | 
					cat <<'PYTHON_END' > app.py
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import logging
 | 
					 | 
				
			||||||
import warnings
 | 
					import warnings
 | 
				
			||||||
from sqlalchemy.exc import LegacyAPIWarning
 | 
					from sqlalchemy.exc import LegacyAPIWarning
 | 
				
			||||||
warnings.simplefilter("ignore", category=LegacyAPIWarning)
 | 
					warnings.simplefilter("ignore", category=LegacyAPIWarning)
 | 
				
			||||||
| 
						 | 
					@ -202,8 +199,11 @@ from reportlab.lib.utils import ImageReader
 | 
				
			||||||
from reportlab.lib.units import cm, inch, mm
 | 
					from reportlab.lib.units import cm, inch, mm
 | 
				
			||||||
from io import BytesIO
 | 
					from io import BytesIO
 | 
				
			||||||
import reportlab.lib
 | 
					import reportlab.lib
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					logging.basicConfig()
 | 
				
			||||||
 | 
					logging.getLogger('babel').setLevel(logging.DEBUG)
 | 
				
			||||||
app = Flask(__name__)
 | 
					app = Flask(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrf = CSRFProtect(app)
 | 
					csrf = CSRFProtect(app)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
convention = {
 | 
					convention = {
 | 
				
			||||||
| 
						 | 
					@ -223,14 +223,19 @@ load_dotenv(override=True)
 | 
				
			||||||
# App-Configuration
 | 
					# 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',
 | 
				
			||||||
    SQLALCHEMY_TRACK_MODIFICATIONS=False,
 | 
					    SQLALCHEMY_TRACK_MODIFICATIONS=False,
 | 
				
			||||||
    BABEL_DEFAULT_LOCALE=os.getenv('BABEL_DEFAULT_LOCALE'),
 | 
					    BABEL_DEFAULT_LOCALE=os.getenv('BABEL_DEFAULT_LOCALE', 'en'),
 | 
				
			||||||
    BABEL_SUPPORTED_LOCALES=os.getenv('BABEL_SUPPORTED_LOCALES').split(','),
 | 
					    BABEL_SUPPORTED_LOCALES=os.getenv('BABEL_SUPPORTED_LOCALES', 'de,en').split(','),
 | 
				
			||||||
    BABEL_TRANSLATION_DIRECTORIES=os.getenv('BABEL_TRANSLATION_DIRECTORIES'),
 | 
					    BABEL_TRANSLATION_DIRECTORIES=os.path.join(app.root_path, 'translations'),
 | 
				
			||||||
    SESSION_COOKIE_SECURE=os.getenv('SESSION_COOKIE_SECURE') == 'True',
 | 
					    SESSION_COOKIE_SECURE=os.getenv('SESSION_COOKIE_SECURE', 'False') == 'True',
 | 
				
			||||||
    WTF_CSRF_ENABLED=os.getenv('CSRF_ENABLED') == 'True',
 | 
					    SESSION_COOKIE_SAMESITE='Lax',
 | 
				
			||||||
    REGISTRATION_ENABLED=os.getenv('REGISTRATION_ENABLED', 'True').lower() == 'true'
 | 
					    PERMANENT_SESSION_LIFETIME=timedelta(days=30),
 | 
				
			||||||
 | 
					    SESSION_REFRESH_EACH_REQUEST=False,
 | 
				
			||||||
 | 
					    WTF_CSRF_ENABLED=os.getenv('CSRF_ENABLED', 'True') == 'True',
 | 
				
			||||||
 | 
					    REGISTRATION_ENABLED=os.getenv('REGISTRATION_ENABLED', 'True').lower() == 'true',
 | 
				
			||||||
 | 
					    SEND_FILE_MAX_AGE_DEFAULT=int(os.getenv('SEND_FILE_MAX_AGE_DEFAULT', 0)),
 | 
				
			||||||
 | 
					    TEMPLATES_AUTO_RELOAD=os.getenv('TEMPLATES_AUTO_RELOAD', 'True') == 'True'
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interval_hours = int(os.getenv('CHECK_EXPIRING_KEYS_INTERVAL_HOURS', 12))
 | 
					interval_hours = int(os.getenv('CHECK_EXPIRING_KEYS_INTERVAL_HOURS', 12))
 | 
				
			||||||
| 
						 | 
					@ -252,6 +257,11 @@ def get_locale():
 | 
				
			||||||
        return session['lang']
 | 
					        return session['lang']
 | 
				
			||||||
    return request.accept_languages.best_match(app.config['BABEL_SUPPORTED_LOCALES'])
 | 
					    return request.accept_languages.best_match(app.config['BABEL_SUPPORTED_LOCALES'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.before_request
 | 
				
			||||||
 | 
					def reload_translations():
 | 
				
			||||||
 | 
					    if app.config['DEBUG']:
 | 
				
			||||||
 | 
					        babel.reload()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.context_processor
 | 
					@app.context_processor
 | 
				
			||||||
def inject_template_vars():
 | 
					def inject_template_vars():
 | 
				
			||||||
    return dict(
 | 
					    return dict(
 | 
				
			||||||
| 
						 | 
					@ -718,6 +728,13 @@ def redeem_page(token):
 | 
				
			||||||
                         redeem_token=redeem_token,
 | 
					                         redeem_token=redeem_token,
 | 
				
			||||||
                         platform_link='https://store.steampowered.com/account/registerkey?key=' if game.steam_appid else 'https://www.gog.com/redeem')
 | 
					                         platform_link='https://store.steampowered.com/account/registerkey?key=' if game.steam_appid else 'https://www.gog.com/redeem')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route('/debug-session')
 | 
				
			||||||
 | 
					def debug_session():
 | 
				
			||||||
 | 
					    return jsonify({
 | 
				
			||||||
 | 
					        'session_lang': session.get('lang'),
 | 
				
			||||||
 | 
					        'config_locales': app.config['BABEL_SUPPORTED_LOCALES']
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Benachrichtigungsfunktionen
 | 
					# Benachrichtigungsfunktionen
 | 
				
			||||||
def send_pushover_notification(user, game):
 | 
					def send_pushover_notification(user, game):
 | 
				
			||||||
    """Sendet Pushover-Benachrichtigung für ablaufenden Key"""
 | 
					    """Sendet Pushover-Benachrichtigung für ablaufenden Key"""
 | 
				
			||||||
| 
						 | 
					@ -897,46 +914,44 @@ services:
 | 
				
			||||||
      - TZ=${TZ}
 | 
					      - TZ=${TZ}
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ../data:/app/data
 | 
					      - ../data:/app/data
 | 
				
			||||||
      - ../translations:/app/translations
 | 
					      - ../translations:/app/translations:rw
 | 
				
			||||||
      - ../.env:/app/.env
 | 
					      - ../.env:/app/.env
 | 
				
			||||||
    user: "1000:1000"
 | 
					    user: "${UID}:${GID}"
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COMPOSE_END
 | 
					COMPOSE_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 7. Directories and permissions
 | 
					# 7. Directories and permissions
 | 
				
			||||||
mkdir -p ../data ../translations
 | 
					mkdir -p ../data ../translations
 | 
				
			||||||
chmod -R a+rwX ../data ../translations
 | 
					chmod -R a+rwX ../data ../translations
 | 
				
			||||||
 | 
					find ../data ../translations -type d -exec chmod 775 {} \;
 | 
				
			||||||
 | 
					find ../data ../translations -type f -exec chmod 664 {} \;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 8. Translation and upgrade scripts
 | 
					# 8. Translation and upgrade scripts
 | 
				
			||||||
cat <<'SCRIPT_END' > ../translate.sh
 | 
					cat <<'SCRIPT_END' > ../translate.sh
 | 
				
			||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
set -e
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 0.1 Change to the project directory (where docker-compose.yml is located)
 | 
				
			||||||
cd "$(dirname "$0")/steam-gift-manager"
 | 
					cd "$(dirname "$0")/steam-gift-manager"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare -A locales=(
 | 
					declare -a locales=("de" "en")
 | 
				
			||||||
  ["de"]="de"
 | 
					 | 
				
			||||||
  ["en"]="en"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# create POT-file
 | 
					# 1. POT-Datei aktualisieren
 | 
				
			||||||
docker-compose exec steam-manager pybabel extract -F babel.cfg -o translations/messages.pot .
 | 
					docker-compose run --rm steam-manager pybabel extract -F babel.cfg -o translations/messages.pot .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Check for each language and initialize if necessary
 | 
					# 2. PO files for each language
 | 
				
			||||||
for lang in "${!locales[@]}"; do
 | 
					for lang in "${locales[@]}"; do
 | 
				
			||||||
  if [ ! -f "translations/${locales[$lang]}/LC_MESSAGES/messages.po" ]; then
 | 
					  docker-compose run --rm steam-manager pybabel update \
 | 
				
			||||||
    docker-compose exec steam-manager pybabel init \
 | 
					    -i translations/messages.pot \
 | 
				
			||||||
      -i translations/messages.pot \
 | 
					    -d translations \
 | 
				
			||||||
      -d translations \
 | 
					    -l $lang --previous
 | 
				
			||||||
      -l "${locales[$lang]}"
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Update and compile translations
 | 
					# 3. Compile MO files (without fuzzy entries)
 | 
				
			||||||
docker-compose exec steam-manager pybabel update -i translations/messages.pot -d translations
 | 
					docker-compose run --rm steam-manager pybabel compile -d translations
 | 
				
			||||||
docker-compose exec steam-manager pybabel compile -d translations
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "✅ Translations updated!"
 | 
					echo "✅ Translations successfully updated!"
 | 
				
			||||||
SCRIPT_END
 | 
					SCRIPT_END
 | 
				
			||||||
chmod +x ../translate.sh
 | 
					chmod +x ../translate.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1005,6 +1020,8 @@ cat <<HTML_END > templates/base.html
 | 
				
			||||||
                    <label class="form-check-label" for="darkModeSwitch">{{ _('Dark Mode') }}</label>
 | 
					                    <label class="form-check-label" for="darkModeSwitch">{{ _('Dark Mode') }}</label>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="dropdown ms-3">
 | 
					                <div class="dropdown ms-3">
 | 
				
			||||||
 | 
					                    <!-- DEBUG: Current locale {{ get_locale() }} -->
 | 
				
			||||||
 | 
					                    <div hidden id="locale-debug" data-locale="{{ get_locale() }}"></div>
 | 
				
			||||||
                    <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
 | 
					                    <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
 | 
				
			||||||
                        {% if get_locale() == 'de' %} Deutsch {% elif get_locale() == 'en' %} English {% else %} Sprache {% endif %}
 | 
					                        {% if get_locale() == 'de' %} Deutsch {% elif get_locale() == 'en' %} English {% else %} Sprache {% endif %}
 | 
				
			||||||
                    </button>
 | 
					                    </button>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -7,8 +7,8 @@ msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
					"Project-Id-Version: PROJECT VERSION\n"
 | 
				
			||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
					"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
				
			||||||
"POT-Creation-Date: 2025-04-29 13:06+0000\n"
 | 
					"POT-Creation-Date: 2025-04-29 15:53+0000\n"
 | 
				
			||||||
"PO-Revision-Date: 2025-04-29 13:06+0000\n"
 | 
					"PO-Revision-Date: 2025-04-29 15:42+0000\n"
 | 
				
			||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
					"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
				
			||||||
"Language: de\n"
 | 
					"Language: de\n"
 | 
				
			||||||
"Language-Team: de <LL@li.org>\n"
 | 
					"Language-Team: de <LL@li.org>\n"
 | 
				
			||||||
| 
						 | 
					@ -18,63 +18,63 @@ msgstr ""
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"Generated-By: Babel 2.17.0\n"
 | 
					"Generated-By: Babel 2.17.0\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:187
 | 
					#: app.py:194
 | 
				
			||||||
msgid "Invalid credentials"
 | 
					msgid "Invalid credentials"
 | 
				
			||||||
msgstr "Ungültige Anmeldedaten"
 | 
					msgstr "Ungültige Anmeldedaten"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:193
 | 
					#: app.py:200
 | 
				
			||||||
msgid "No new registrations. They are deactivated!"
 | 
					msgid "No new registrations. They are deactivated!"
 | 
				
			||||||
msgstr "Upps. Keine neuen Registrierungen, sorry!"
 | 
					msgstr "Keine neuen Registrierungen. Sie sind deaktiviert!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:201
 | 
					#: app.py:208
 | 
				
			||||||
msgid "Username already exists"
 | 
					msgid "Username already exists"
 | 
				
			||||||
msgstr "Benutzername existiert bereits"
 | 
					msgstr "Benutzername existiert bereits"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:227
 | 
					#: app.py:234
 | 
				
			||||||
msgid "Current passwort is wrong"
 | 
					msgid "Current passwort is wrong"
 | 
				
			||||||
msgstr "Das aktuelle Passwort ist falsch"
 | 
					msgstr "Aktuelles Passwort ist falsch"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:231
 | 
					#: app.py:238
 | 
				
			||||||
msgid "New Passwords are not matching"
 | 
					msgid "New Passwords are not matching"
 | 
				
			||||||
msgstr "Die neuen Passwörter stimmen nicht überein"
 | 
					msgstr "Neue Passwörter stimmen nicht überein"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:236
 | 
					#: app.py:243
 | 
				
			||||||
msgid "Password changed successfully"
 | 
					msgid "Password changed successfully"
 | 
				
			||||||
msgstr "Passwort erfolgreich geändert"
 | 
					msgstr "Passwort erfolgreich geändert"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:266
 | 
					#: app.py:273
 | 
				
			||||||
msgid "Game added successfully!"
 | 
					msgid "Game added successfully!"
 | 
				
			||||||
msgstr "Spiel erfolgreich hinzugefügt!"
 | 
					msgstr "Spiel erfolgreich hinzugefügt!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:271
 | 
					#: app.py:278
 | 
				
			||||||
msgid "Steam Key already exists!"
 | 
					msgid "Steam Key already exists!"
 | 
				
			||||||
msgstr "Game-Key existiert bereits!"
 | 
					msgstr "Steam-Key existiert bereits!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:274 app.py:318
 | 
					#: app.py:281 app.py:325
 | 
				
			||||||
msgid "Error: "
 | 
					msgid "Error: "
 | 
				
			||||||
msgstr "Fehler: "
 | 
					msgstr "Fehler: "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:313
 | 
					#: app.py:320
 | 
				
			||||||
msgid "Changes saved!"
 | 
					msgid "Changes saved!"
 | 
				
			||||||
msgstr "Änderungen gespeichert!"
 | 
					msgstr "Änderungen gespeichert!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:401
 | 
					#: app.py:408
 | 
				
			||||||
msgid "Game List (without Keys)"
 | 
					msgid "Game List (without Keys)"
 | 
				
			||||||
msgstr "Spieleliste (ohne Keys)"
 | 
					msgstr "Spieleliste (ohne Keys)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:494
 | 
					#: app.py:501
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
					msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
				
			||||||
msgstr "%(new)d neue Spiele importiert, %(dup)d Duplikate übersprungen"
 | 
					msgstr "%(new)d neue Spiele importiert, %(dup)d Duplikate übersprungen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:498
 | 
					#: app.py:505
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "Import error: %(error)s"
 | 
					msgid "Import error: %(error)s"
 | 
				
			||||||
msgstr "Importfehler: %(error)s"
 | 
					msgstr "Importfehler: %(error)s"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:502
 | 
					#: app.py:509
 | 
				
			||||||
msgid "Please upload a valid CSV file."
 | 
					msgid "Please upload a valid CSV file."
 | 
				
			||||||
msgstr "Bitte lade eine gültige CSV-Datei hoch."
 | 
					msgstr "Bitte eine gültige CSV-Datei hochladen."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:4 templates/index.html:9
 | 
					#: templates/add_game.html:4 templates/index.html:9
 | 
				
			||||||
msgid "Add New Game"
 | 
					msgid "Add New Game"
 | 
				
			||||||
| 
						 | 
					@ -86,32 +86,27 @@ msgstr "Name"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:13 templates/edit_game.html:13
 | 
					#: templates/add_game.html:13 templates/edit_game.html:13
 | 
				
			||||||
msgid "Game Key"
 | 
					msgid "Game Key"
 | 
				
			||||||
msgstr "Spiel-Key"
 | 
					msgstr "Spiele-Key"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:17 templates/edit_game.html:21
 | 
					#: templates/add_game.html:17 templates/edit_game.html:21 templates/index.html:21
 | 
				
			||||||
#: templates/index.html:21
 | 
					 | 
				
			||||||
msgid "Status"
 | 
					msgid "Status"
 | 
				
			||||||
msgstr "Status"
 | 
					msgstr "Status"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:19 templates/edit_game.html:23
 | 
					#: templates/add_game.html:19 templates/edit_game.html:23 templates/index.html:41
 | 
				
			||||||
#: templates/index.html:41
 | 
					 | 
				
			||||||
msgid "Not redeemed"
 | 
					msgid "Not redeemed"
 | 
				
			||||||
msgstr "Nicht eingelöst"
 | 
					msgstr "Nicht eingelöst"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:20 templates/edit_game.html:24
 | 
					#: templates/add_game.html:20 templates/edit_game.html:24 templates/index.html:43
 | 
				
			||||||
#: templates/index.html:43
 | 
					 | 
				
			||||||
msgid "Gifted"
 | 
					msgid "Gifted"
 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#: templates/add_game.html:21 templates/edit_game.html:25
 | 
					 | 
				
			||||||
#: templates/index.html:45
 | 
					 | 
				
			||||||
msgid "Redeemed"
 | 
					 | 
				
			||||||
msgstr "Verschenkt"
 | 
					msgstr "Verschenkt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:25 templates/edit_game.html:29
 | 
					#: templates/add_game.html:21 templates/edit_game.html:25 templates/index.html:45
 | 
				
			||||||
#: templates/index.html:23
 | 
					msgid "Redeemed"
 | 
				
			||||||
 | 
					msgstr "Eingelöst"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: templates/add_game.html:25 templates/edit_game.html:29 templates/index.html:23
 | 
				
			||||||
msgid "Redeem by"
 | 
					msgid "Redeem by"
 | 
				
			||||||
msgstr "Einzulösen vor"
 | 
					msgstr "Einzulösen bis"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:29 templates/edit_game.html:33
 | 
					#: templates/add_game.html:29 templates/edit_game.html:33
 | 
				
			||||||
msgid "Recipient"
 | 
					msgid "Recipient"
 | 
				
			||||||
| 
						 | 
					@ -129,14 +124,13 @@ msgstr "Notizen"
 | 
				
			||||||
msgid "Save"
 | 
					msgid "Save"
 | 
				
			||||||
msgstr "Speichern"
 | 
					msgstr "Speichern"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/add_game.html:42 templates/edit_game.html:61
 | 
					#: templates/add_game.html:42 templates/edit_game.html:61 templates/import.html:12
 | 
				
			||||||
#: templates/import.html:12
 | 
					 | 
				
			||||||
msgid "Cancel"
 | 
					msgid "Cancel"
 | 
				
			||||||
msgstr "Abbrechen"
 | 
					msgstr "Abbrechen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:7
 | 
					#: templates/base.html:7
 | 
				
			||||||
msgid "Game Key Manager"
 | 
					msgid "Game Key Manager"
 | 
				
			||||||
msgstr "Game Key Manager"
 | 
					msgstr "Game-Key-Verwaltung"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:23
 | 
					#: templates/base.html:23
 | 
				
			||||||
msgid "Search"
 | 
					msgid "Search"
 | 
				
			||||||
| 
						 | 
					@ -144,13 +138,13 @@ msgstr "Suche"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:31
 | 
					#: templates/base.html:31
 | 
				
			||||||
msgid "Dark Mode"
 | 
					msgid "Dark Mode"
 | 
				
			||||||
msgstr "Dark Mode"
 | 
					msgstr "Dunkler Modus"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:44 templates/login.html:16 templates/register.html:15
 | 
					#: templates/base.html:46 templates/login.html:16 templates/register.html:15
 | 
				
			||||||
msgid "Password"
 | 
					msgid "Password"
 | 
				
			||||||
msgstr "Passwort"
 | 
					msgstr "Passwort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:47
 | 
					#: templates/base.html:49
 | 
				
			||||||
msgid "Logout"
 | 
					msgid "Logout"
 | 
				
			||||||
msgstr "Abmelden"
 | 
					msgstr "Abmelden"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,7 +170,7 @@ msgstr "Spiel bearbeiten"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/edit_game.html:17
 | 
					#: templates/edit_game.html:17
 | 
				
			||||||
msgid "Steam AppID (optional)"
 | 
					msgid "Steam AppID (optional)"
 | 
				
			||||||
msgstr "Steam AppID (optional)"
 | 
					msgstr "Steam-AppID (optional)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/edit_game.html:47
 | 
					#: templates/edit_game.html:47
 | 
				
			||||||
msgid "Active Redeem Link"
 | 
					msgid "Active Redeem Link"
 | 
				
			||||||
| 
						 | 
					@ -184,7 +178,7 @@ msgstr "Aktiver Einlöse-Link"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/edit_game.html:54
 | 
					#: templates/edit_game.html:54
 | 
				
			||||||
msgid "Expires at"
 | 
					msgid "Expires at"
 | 
				
			||||||
msgstr "Läuft ab"
 | 
					msgstr "Ablaufdatum"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/import.html:4
 | 
					#: templates/import.html:4
 | 
				
			||||||
msgid "Import Games"
 | 
					msgid "Import Games"
 | 
				
			||||||
| 
						 | 
					@ -232,7 +226,7 @@ msgstr "Aktionen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/index.html:63
 | 
					#: templates/index.html:63
 | 
				
			||||||
msgid "Generate redeem link"
 | 
					msgid "Generate redeem link"
 | 
				
			||||||
msgstr "Geschenk-Link generieren"
 | 
					msgstr "Einlöse-Link generieren"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/index.html:70
 | 
					#: templates/index.html:70
 | 
				
			||||||
msgid "Really delete?"
 | 
					msgid "Really delete?"
 | 
				
			||||||
| 
						 | 
					@ -240,7 +234,7 @@ msgstr "Wirklich löschen?"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/index.html:96
 | 
					#: templates/index.html:96
 | 
				
			||||||
msgid "Redeem link copied to clipboard!"
 | 
					msgid "Redeem link copied to clipboard!"
 | 
				
			||||||
msgstr "Geschenk-Link in die Zwischenablage kopiert!"
 | 
					msgstr "Einlöse-Link in die Zwischenablage kopiert!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/index.html:100
 | 
					#: templates/index.html:100
 | 
				
			||||||
msgid "Error generating link"
 | 
					msgid "Error generating link"
 | 
				
			||||||
| 
						 | 
					@ -260,7 +254,7 @@ msgstr "Benutzername"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/login.html:22
 | 
					#: templates/login.html:22
 | 
				
			||||||
msgid "No account yet? Register"
 | 
					msgid "No account yet? Register"
 | 
				
			||||||
msgstr "Noch kein Konto? Registrieren"
 | 
					msgstr "Noch kein Konto? Jetzt registrieren"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/redeem.html:16
 | 
					#: templates/redeem.html:16
 | 
				
			||||||
msgid "Your Key:"
 | 
					msgid "Your Key:"
 | 
				
			||||||
| 
						 | 
					@ -268,7 +262,7 @@ msgstr "Dein Key:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/redeem.html:22
 | 
					#: templates/redeem.html:22
 | 
				
			||||||
msgid "Redeem now on"
 | 
					msgid "Redeem now on"
 | 
				
			||||||
msgstr "Jetzt einlösen auf"
 | 
					msgstr "Jetzt einlösen bei"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/redeem.html:26
 | 
					#: templates/redeem.html:26
 | 
				
			||||||
msgid "This page will expire in"
 | 
					msgid "This page will expire in"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -7,8 +7,8 @@ msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
					"Project-Id-Version: PROJECT VERSION\n"
 | 
				
			||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
					"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
				
			||||||
"POT-Creation-Date: 2025-04-29 13:06+0000\n"
 | 
					"POT-Creation-Date: 2025-04-29 15:53+0000\n"
 | 
				
			||||||
"PO-Revision-Date: 2025-04-29 13:06+0000\n"
 | 
					"PO-Revision-Date: 2025-04-29 15:42+0000\n"
 | 
				
			||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
					"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
				
			||||||
"Language: en\n"
 | 
					"Language: en\n"
 | 
				
			||||||
"Language-Team: en <LL@li.org>\n"
 | 
					"Language-Team: en <LL@li.org>\n"
 | 
				
			||||||
| 
						 | 
					@ -18,61 +18,61 @@ msgstr ""
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"Generated-By: Babel 2.17.0\n"
 | 
					"Generated-By: Babel 2.17.0\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:187
 | 
					#: app.py:194
 | 
				
			||||||
msgid "Invalid credentials"
 | 
					msgid "Invalid credentials"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:193
 | 
					#: app.py:200
 | 
				
			||||||
msgid "No new registrations. They are deactivated!"
 | 
					msgid "No new registrations. They are deactivated!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:201
 | 
					#: app.py:208
 | 
				
			||||||
msgid "Username already exists"
 | 
					msgid "Username already exists"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:227
 | 
					#: app.py:234
 | 
				
			||||||
msgid "Current passwort is wrong"
 | 
					msgid "Current passwort is wrong"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:231
 | 
					#: app.py:238
 | 
				
			||||||
msgid "New Passwords are not matching"
 | 
					msgid "New Passwords are not matching"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:236
 | 
					#: app.py:243
 | 
				
			||||||
msgid "Password changed successfully"
 | 
					msgid "Password changed successfully"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:266
 | 
					#: app.py:273
 | 
				
			||||||
msgid "Game added successfully!"
 | 
					msgid "Game added successfully!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:271
 | 
					#: app.py:278
 | 
				
			||||||
msgid "Steam Key already exists!"
 | 
					msgid "Steam Key already exists!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:274 app.py:318
 | 
					#: app.py:281 app.py:325
 | 
				
			||||||
msgid "Error: "
 | 
					msgid "Error: "
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:313
 | 
					#: app.py:320
 | 
				
			||||||
msgid "Changes saved!"
 | 
					msgid "Changes saved!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:401
 | 
					#: app.py:408
 | 
				
			||||||
msgid "Game List (without Keys)"
 | 
					msgid "Game List (without Keys)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:494
 | 
					#: app.py:501
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
					msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:498
 | 
					#: app.py:505
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "Import error: %(error)s"
 | 
					msgid "Import error: %(error)s"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:502
 | 
					#: app.py:509
 | 
				
			||||||
msgid "Please upload a valid CSV file."
 | 
					msgid "Please upload a valid CSV file."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,11 +146,11 @@ msgstr ""
 | 
				
			||||||
msgid "Dark Mode"
 | 
					msgid "Dark Mode"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:44 templates/login.html:16 templates/register.html:15
 | 
					#: templates/base.html:46 templates/login.html:16 templates/register.html:15
 | 
				
			||||||
msgid "Password"
 | 
					msgid "Password"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:47
 | 
					#: templates/base.html:49
 | 
				
			||||||
msgid "Logout"
 | 
					msgid "Logout"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
					"Project-Id-Version: PROJECT VERSION\n"
 | 
				
			||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
					"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
				
			||||||
"POT-Creation-Date: 2025-04-29 13:06+0000\n"
 | 
					"POT-Creation-Date: 2025-04-29 15:53+0000\n"
 | 
				
			||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
					"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
				
			||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
					"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
				
			||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
					"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
				
			||||||
| 
						 | 
					@ -17,61 +17,61 @@ msgstr ""
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"Generated-By: Babel 2.17.0\n"
 | 
					"Generated-By: Babel 2.17.0\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:187
 | 
					#: app.py:194
 | 
				
			||||||
msgid "Invalid credentials"
 | 
					msgid "Invalid credentials"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:193
 | 
					#: app.py:200
 | 
				
			||||||
msgid "No new registrations. They are deactivated!"
 | 
					msgid "No new registrations. They are deactivated!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:201
 | 
					#: app.py:208
 | 
				
			||||||
msgid "Username already exists"
 | 
					msgid "Username already exists"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:227
 | 
					#: app.py:234
 | 
				
			||||||
msgid "Current passwort is wrong"
 | 
					msgid "Current passwort is wrong"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:231
 | 
					#: app.py:238
 | 
				
			||||||
msgid "New Passwords are not matching"
 | 
					msgid "New Passwords are not matching"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:236
 | 
					#: app.py:243
 | 
				
			||||||
msgid "Password changed successfully"
 | 
					msgid "Password changed successfully"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:266
 | 
					#: app.py:273
 | 
				
			||||||
msgid "Game added successfully!"
 | 
					msgid "Game added successfully!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:271
 | 
					#: app.py:278
 | 
				
			||||||
msgid "Steam Key already exists!"
 | 
					msgid "Steam Key already exists!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:274 app.py:318
 | 
					#: app.py:281 app.py:325
 | 
				
			||||||
msgid "Error: "
 | 
					msgid "Error: "
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:313
 | 
					#: app.py:320
 | 
				
			||||||
msgid "Changes saved!"
 | 
					msgid "Changes saved!"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:401
 | 
					#: app.py:408
 | 
				
			||||||
msgid "Game List (without Keys)"
 | 
					msgid "Game List (without Keys)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:494
 | 
					#: app.py:501
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
					msgid "%(new)d new games imported, %(dup)d skipped duplicates"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:498
 | 
					#: app.py:505
 | 
				
			||||||
#, python-format
 | 
					#, python-format
 | 
				
			||||||
msgid "Import error: %(error)s"
 | 
					msgid "Import error: %(error)s"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: app.py:502
 | 
					#: app.py:509
 | 
				
			||||||
msgid "Please upload a valid CSV file."
 | 
					msgid "Please upload a valid CSV file."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,11 +145,11 @@ msgstr ""
 | 
				
			||||||
msgid "Dark Mode"
 | 
					msgid "Dark Mode"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:44 templates/login.html:16 templates/register.html:15
 | 
					#: templates/base.html:46 templates/login.html:16 templates/register.html:15
 | 
				
			||||||
msgid "Password"
 | 
					msgid "Password"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: templates/base.html:47
 | 
					#: templates/base.html:49
 | 
				
			||||||
msgid "Logout"
 | 
					msgid "Logout"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue