update readme due release on codeberg #2
60
setup.sh
60
setup.sh
|
@ -81,8 +81,7 @@ DATA_DIR="$PWD/data"
|
||||||
|
|
||||||
# 1. Create folders
|
# 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"
|
||||||
mkdir -p "$TRANSLATIONS_DIR"/en/LC_MESSAGES
|
|
||||||
mkdir -p "$DATA_DIR"
|
mkdir -p "$DATA_DIR"
|
||||||
|
|
||||||
chmod -R a+rwX "$TRANSLATIONS_DIR" "$DATA_DIR"
|
chmod -R a+rwX "$TRANSLATIONS_DIR" "$DATA_DIR"
|
||||||
|
@ -98,7 +97,6 @@ flask-migrate
|
||||||
werkzeug
|
werkzeug
|
||||||
python-dotenv
|
python-dotenv
|
||||||
flask-sqlalchemy
|
flask-sqlalchemy
|
||||||
flask-babel
|
|
||||||
jinja2<3.1.0
|
jinja2<3.1.0
|
||||||
itsdangerous
|
itsdangerous
|
||||||
sqlalchemy
|
sqlalchemy
|
||||||
|
@ -122,10 +120,9 @@ SECRET_KEY="$SECRET_KEY"
|
||||||
REDEEM_SECRET="$REDEEM_SECRET"
|
REDEEM_SECRET="$REDEEM_SECRET"
|
||||||
WTF_CSRF_SECRET_KEY="$REDEEM_CSRF"
|
WTF_CSRF_SECRET_KEY="$REDEEM_CSRF"
|
||||||
|
|
||||||
# locales
|
# Language Settings
|
||||||
BABEL_DEFAULT_LOCALE="en"
|
DEFAULT_LANGUAGE="en"
|
||||||
BABEL_SUPPORTED_LOCALES="de,en"
|
SUPPORTED_LANGUAGES="de,en"
|
||||||
BABEL_TRANSLATION_DIRECTORIES="translations"
|
|
||||||
|
|
||||||
# Timezone
|
# Timezone
|
||||||
TZ=Europe/Berlin
|
TZ=Europe/Berlin
|
||||||
|
@ -201,6 +198,18 @@ logging.basicConfig()
|
||||||
logging.getLogger('babel').setLevel(logging.DEBUG)
|
logging.getLogger('babel').setLevel(logging.DEBUG)
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
# Load Languages
|
||||||
|
TRANSLATIONS = {}
|
||||||
|
for lang in app.config['SUPPORTED_LANGUAGES'].split(','):
|
||||||
|
try:
|
||||||
|
with open(f'translations/{lang}.json') as f:
|
||||||
|
TRANSLATIONS[lang] = json.load(f)
|
||||||
|
except:
|
||||||
|
TRANSLATIONS[lang] = {}
|
||||||
|
|
||||||
|
def translate(key, lang=app.config['DEFAULT_LANGUAGE'], **kwargs):
|
||||||
|
return TRANSLATIONS.get(lang, {}).get(key, key).format(**kwargs)
|
||||||
|
|
||||||
csrf = CSRFProtect(app)
|
csrf = CSRFProtect(app)
|
||||||
|
|
||||||
convention = {
|
convention = {
|
||||||
|
@ -267,6 +276,12 @@ def reload_translations():
|
||||||
babel.reload()
|
babel.reload()
|
||||||
|
|
||||||
@app.context_processor
|
@app.context_processor
|
||||||
|
def inject_translations():
|
||||||
|
def _(key, **kwargs):
|
||||||
|
lang = session.get('lang', app.config['DEFAULT_LANGUAGE'])
|
||||||
|
return translate(key, lang, **kwargs)
|
||||||
|
return {'_': _}
|
||||||
|
|
||||||
def inject_template_vars():
|
def inject_template_vars():
|
||||||
return dict(
|
return dict(
|
||||||
get_locale=get_locale,
|
get_locale=get_locale,
|
||||||
|
@ -338,9 +353,9 @@ def index():
|
||||||
|
|
||||||
@app.route('/set-lang/<lang>')
|
@app.route('/set-lang/<lang>')
|
||||||
def set_lang(lang):
|
def set_lang(lang):
|
||||||
if lang in app.config['BABEL_SUPPORTED_LOCALES']:
|
if lang in app.config['SUPPORTED_LANGUAGES'].split(','):
|
||||||
session['lang'] = lang
|
session['lang'] = lang
|
||||||
return redirect(request.referrer or url_for('index'))
|
return redirect(request.referrer)
|
||||||
|
|
||||||
@app.route('/set-theme/<theme>')
|
@app.route('/set-theme/<theme>')
|
||||||
def set_theme(theme):
|
def set_theme(theme):
|
||||||
|
@ -875,7 +890,7 @@ services:
|
||||||
- TZ=${TZ}
|
- TZ=${TZ}
|
||||||
volumes:
|
volumes:
|
||||||
- ../data:/app/data
|
- ../data:/app/data
|
||||||
- ../translations:/app/translations:rw
|
- ../translations:/app/translations
|
||||||
- ../.env:/app/.env
|
- ../.env:/app/.env
|
||||||
user: "${UID}:${GID}"
|
user: "${UID}:${GID}"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
@ -889,6 +904,25 @@ find ../data ../translations -type d -exec chmod 775 {} \;
|
||||||
find ../data ../translations -type f -exec chmod 664 {} \;
|
find ../data ../translations -type f -exec chmod 664 {} \;
|
||||||
|
|
||||||
# 8. Translation and upgrade scripts
|
# 8. Translation and upgrade scripts
|
||||||
|
cat <<JSON_END > "$TRANSLATIONS_DIR/de.json"
|
||||||
|
{
|
||||||
|
"Game List": "Spieleliste",
|
||||||
|
"Add New Game": "Neues Spiel hinzufügen",
|
||||||
|
"Search": "Suche",
|
||||||
|
"Welcome %(username)s!": "Willkommen %(username)s!"
|
||||||
|
}
|
||||||
|
JSON_END
|
||||||
|
|
||||||
|
cat <<JSON_END > "$TRANSLATIONS_DIR/en.json"
|
||||||
|
{
|
||||||
|
"Game List": "Game List",
|
||||||
|
"Add New Game": "Add New Game",
|
||||||
|
"Search": "Search",
|
||||||
|
"Welcome %(username)s!": "Welcome %(username)s!"
|
||||||
|
}
|
||||||
|
JSON_END
|
||||||
|
|
||||||
|
|
||||||
cat <<'SCRIPT_END' > ../translate.sh
|
cat <<'SCRIPT_END' > ../translate.sh
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
@ -1816,8 +1850,10 @@ echo -e "nano .env"
|
||||||
echo -e "\n\033[1;32m✅ After you are done start the system with:\033[0m"
|
echo -e "\n\033[1;32m✅ After you are done start the system with:\033[0m"
|
||||||
echo -e "cd steam-gift-manager"
|
echo -e "cd steam-gift-manager"
|
||||||
echo -e "docker-compose build --no-cache && docker-compose up -d"
|
echo -e "docker-compose build --no-cache && docker-compose up -d"
|
||||||
echo -e "\nGenerate translations: ./translate.sh"
|
echo -e "\n${GREEN}✅ JSON-based translations!${NC}"
|
||||||
echo -e "You can edit them in translations/en/LC_MESSAGES/messages.po"
|
echo -e "you can edit them here:"
|
||||||
|
echo -e " - translations/de.json"
|
||||||
|
echo -e " - translations/en.json"
|
||||||
echo -e "Enter your Apprise URLs in .env at APPRISE_URLS (e.g. for Pushover, Gotify, Matrix etc.)"
|
echo -e "Enter your Apprise URLs in .env at APPRISE_URLS (e.g. for Pushover, Gotify, Matrix etc.)"
|
||||||
echo -e "\nAfter any change in you configuration, .env or even translations:"
|
echo -e "\nAfter any change in you configuration, .env or even translations:"
|
||||||
echo -e "cd steam-gift-manager"
|
echo -e "cd steam-gift-manager"
|
||||||
|
|
Loading…
Reference in New Issue