mirror of
				https://github.com/tiyn/beaker-blog.git
				synced 2025-11-04 04:41:15 +01:00 
			
		
		
		
	added language support for german
This commit is contained in:
		
							
								
								
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							@@ -8,6 +8,16 @@ WORKDIR /blog
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
RUN pip3 install -r requirements.txt
 | 
					RUN pip3 install -r requirements.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN apt-get update && \
 | 
				
			||||||
 | 
					    apt-get install -y locales && \
 | 
				
			||||||
 | 
					    sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \
 | 
				
			||||||
 | 
					    sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
 | 
				
			||||||
 | 
					    dpkg-reconfigure --frontend=noninteractive locales
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENV LANG en_US.UTF-8
 | 
				
			||||||
 | 
					ENV LANGUAGE en_US:en
 | 
				
			||||||
 | 
					ENV LC_ALL en_US.UTF-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VOLUME /blog/templates/entry
 | 
					VOLUME /blog/templates/entry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VOLUME /blog/static/graphics
 | 
					VOLUME /blog/static/graphics
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,9 @@ via plain text files.
 | 
				
			|||||||
- [x] Switchable CSS
 | 
					- [x] Switchable CSS
 | 
				
			||||||
  - [x] CSS dark-theme
 | 
					  - [x] CSS dark-theme
 | 
				
			||||||
  - [x] CSS light-theme
 | 
					  - [x] CSS light-theme
 | 
				
			||||||
 | 
					- [x] Language Support
 | 
				
			||||||
 | 
					  - [x] English
 | 
				
			||||||
 | 
					  - [x] German
 | 
				
			||||||
- [x] Config file
 | 
					- [x] Config file
 | 
				
			||||||
- [x] Docker installation
 | 
					- [x] Docker installation
 | 
				
			||||||
- [x] Logo
 | 
					- [x] Logo
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,33 +8,34 @@ app = Flask(__name__)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TITLE = config.TITLE
 | 
					TITLE = config.TITLE
 | 
				
			||||||
STYLE = config.STYLE
 | 
					STYLE = config.STYLE
 | 
				
			||||||
 | 
					LANGUAGE = config.LANGUAGE
 | 
				
			||||||
DESCRIPTION = config.DESCRIPTION
 | 
					DESCRIPTION = config.DESCRIPTION
 | 
				
			||||||
WEBSITE = config.WEBSITE
 | 
					WEBSITE = config.WEBSITE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.errorhandler(404)
 | 
					@app.errorhandler(404)
 | 
				
			||||||
def page_not_found(e):
 | 
					def page_not_found(e):
 | 
				
			||||||
    return render_template("error.html", title=TITLE, errorcode="404", style=STYLE), 404
 | 
					    return render_template("error.html", title=TITLE, errorcode="404", style=STYLE, language=LANGUAGE), 404
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route("/")
 | 
					@app.route("/")
 | 
				
			||||||
@app.route("/index.html")
 | 
					@app.route("/index.html")
 | 
				
			||||||
def index():
 | 
					def index():
 | 
				
			||||||
    content = con_gen.gen_index_string()
 | 
					    content = con_gen.gen_index_string()
 | 
				
			||||||
    return render_template("index.html", title=TITLE, content_string=content, style=STYLE)
 | 
					    return render_template("index.html", title=TITLE, content_string=content, style=STYLE, language=LANGUAGE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route("/archive")
 | 
					@app.route("/archive")
 | 
				
			||||||
@app.route("/archive.html")
 | 
					@app.route("/archive.html")
 | 
				
			||||||
def archive():
 | 
					def archive():
 | 
				
			||||||
    content = con_gen.gen_arch_string()
 | 
					    content = con_gen.gen_arch_string()
 | 
				
			||||||
    return render_template("archive.html", title=TITLE, content_string=content, style=STYLE)
 | 
					    return render_template("archive.html", title=TITLE, content_string=content, style=STYLE, language=LANGUAGE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route("/entry/<path>")
 | 
					@app.route("/entry/<path>")
 | 
				
			||||||
def entry(path):
 | 
					def entry(path):
 | 
				
			||||||
    content = con_gen.gen_stand_string(path)
 | 
					    content = con_gen.gen_stand_string(path)
 | 
				
			||||||
    if content != "":
 | 
					    if content != "":
 | 
				
			||||||
        return render_template("standalone.html", title=TITLE, content_string=content, style=STYLE)
 | 
					        return render_template("standalone.html", title=TITLE, content_string=content, style=STYLE, language=LANGUAGE)
 | 
				
			||||||
    abort(404)
 | 
					    abort(404)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,3 +9,6 @@ WEBSITE = "localhost:5000"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Theme for the blog: dark, light
 | 
					# Theme for the blog: dark, light
 | 
				
			||||||
STYLE = "dark"
 | 
					STYLE = "dark"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Language for the titles: en-us or de-de
 | 
				
			||||||
 | 
					LANGUAGE = "en-us"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,20 @@
 | 
				
			|||||||
from datetime import datetime
 | 
					import locale
 | 
				
			||||||
import markdown
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from os import path
 | 
					 | 
				
			||||||
import pathlib
 | 
					import pathlib
 | 
				
			||||||
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					from os import path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import config
 | 
					import config
 | 
				
			||||||
 | 
					import markdown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY_DIR = "templates/entry"
 | 
					ENTRY_DIR = "templates/entry"
 | 
				
			||||||
 | 
					LANGUAGE = config.LANGUAGE
 | 
				
			||||||
 | 
					LOCAL = "de_DE.UTF-8" if LANGUAGE == "de-de" else "en_US.UTF-8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					locale.setlocale(locale.LC_TIME, LOCAL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					standalone_str = "Artikel" if LANGUAGE == "de-de" else "standalone"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def gen_arch_string():
 | 
					def gen_arch_string():
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
@@ -23,10 +31,8 @@ def gen_arch_string():
 | 
				
			|||||||
    content_string = ""
 | 
					    content_string = ""
 | 
				
			||||||
    last_month = ""
 | 
					    last_month = ""
 | 
				
			||||||
    for file in reversed(contents):
 | 
					    for file in reversed(contents):
 | 
				
			||||||
            curr_date = datetime.fromtimestamp(
 | 
					      curr_date = datetime.fromtimestamp(os.path.getctime(file)).strftime("%Y-%m-%d")
 | 
				
			||||||
                os.path.getctime(file)).strftime("%Y-%m-%d")
 | 
					      curr_month = datetime.fromtimestamp(os.path.getctime(file)).strftime("%B %Y")
 | 
				
			||||||
            curr_month = datetime.fromtimestamp(
 | 
					 | 
				
			||||||
                os.path.getctime(file)).strftime("%b %Y")
 | 
					 | 
				
			||||||
      if curr_month != last_month:
 | 
					      if curr_month != last_month:
 | 
				
			||||||
        if last_month != "":
 | 
					        if last_month != "":
 | 
				
			||||||
          content_string += "</ul>\n"
 | 
					          content_string += "</ul>\n"
 | 
				
			||||||
@@ -39,13 +45,11 @@ def gen_arch_string():
 | 
				
			|||||||
      if filename[0] != ".":
 | 
					      if filename[0] != ".":
 | 
				
			||||||
        filename = filename.split(".", 1)[0]
 | 
					        filename = filename.split(".", 1)[0]
 | 
				
			||||||
      content_string += "<li>"
 | 
					      content_string += "<li>"
 | 
				
			||||||
            content_string += curr_date + " - "
 | 
					 | 
				
			||||||
            content_string += title + " ["
 | 
					 | 
				
			||||||
      content_string += "<a href=\"" + "/index.html#" + \
 | 
					      content_string += "<a href=\"" + "/index.html#" + \
 | 
				
			||||||
                filename + "\">" + "link" + "</a> - "
 | 
					          filename + "\">" + curr_date + "</a> - "
 | 
				
			||||||
      content_string += "<a href=\"" + "/entry/" + \
 | 
					      content_string += "<a href=\"" + "/entry/" + \
 | 
				
			||||||
                pathlib.PurePath(file).name + "\">" + "standalone" + "</a>"
 | 
					          pathlib.PurePath(file).name + "\"><b>" + title + "</b></a>"
 | 
				
			||||||
            content_string += "] <br>"
 | 
					      content_string += "<br>"
 | 
				
			||||||
      content_string += "</li>\n"
 | 
					      content_string += "</li>\n"
 | 
				
			||||||
    content_string += "</ul>\n"
 | 
					    content_string += "</ul>\n"
 | 
				
			||||||
    return content_string
 | 
					    return content_string
 | 
				
			||||||
@@ -73,19 +77,19 @@ def gen_index_string():
 | 
				
			|||||||
      if filename[0] != ".":
 | 
					      if filename[0] != ".":
 | 
				
			||||||
        filename = filename.split(".", 1)[0]
 | 
					        filename = filename.split(".", 1)[0]
 | 
				
			||||||
      content_string += "<div class=\"entry\">\n"
 | 
					      content_string += "<div class=\"entry\">\n"
 | 
				
			||||||
            content_string += "<h2 id=\"" + filename + "\">" + title + "</h2>\n"
 | 
					      content_string += "<h2 id=\"" + filename + "\">"
 | 
				
			||||||
            content_string += "[<a href=\"" + "/entry/" + \
 | 
					      content_string += "<a href=\"" + "/entry/" + \
 | 
				
			||||||
          pathlib.PurePath(file).name + "\">" + \
 | 
					          pathlib.PurePath(file).name + "\">" + \
 | 
				
			||||||
                "standalone" + "</a>]<br>\n"
 | 
					          title + "</a>" +"</h2>\n"
 | 
				
			||||||
 | 
					      content_string += "<small>" + \
 | 
				
			||||||
 | 
					          datetime.fromtimestamp(os.path.getctime(
 | 
				
			||||||
 | 
					              file)).strftime("%Y-%m-%d") + "</small><br><br>"
 | 
				
			||||||
      if file.endswith(".html"):
 | 
					      if file.endswith(".html"):
 | 
				
			||||||
        for line in text:
 | 
					        for line in text:
 | 
				
			||||||
          content_string += line
 | 
					          content_string += line
 | 
				
			||||||
        content_string += "<br>"
 | 
					        content_string += "<br>"
 | 
				
			||||||
      if file.endswith(".md"):
 | 
					      if file.endswith(".md"):
 | 
				
			||||||
        content_string += gen_md_content(file, 2)
 | 
					        content_string += gen_md_content(file, 2)
 | 
				
			||||||
            content_string += "<small>" + \
 | 
					 | 
				
			||||||
                datetime.fromtimestamp(os.path.getctime(
 | 
					 | 
				
			||||||
                    file)).strftime("%Y-%m-%d") + "</small>"
 | 
					 | 
				
			||||||
      content_string += "</div>"
 | 
					      content_string += "</div>"
 | 
				
			||||||
  return content_string
 | 
					  return content_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -107,13 +111,13 @@ def gen_stand_string(path_ex):
 | 
				
			|||||||
  if path.exists(filename):
 | 
					  if path.exists(filename):
 | 
				
			||||||
    title = open(filename).readline().rstrip("\n")
 | 
					    title = open(filename).readline().rstrip("\n")
 | 
				
			||||||
    text = open(filename).readlines()[1:]
 | 
					    text = open(filename).readlines()[1:]
 | 
				
			||||||
 | 
					    curr_date = datetime.fromtimestamp(os.path.getctime(filename)).strftime("%Y-%m-%d")
 | 
				
			||||||
    filename_no_end = filename.split(".", 1)[0]
 | 
					    filename_no_end = filename.split(".", 1)[0]
 | 
				
			||||||
    filename_no_end = filename_no_end.split("/")[-1]
 | 
					    filename_no_end = filename_no_end.split("/")[-1]
 | 
				
			||||||
    content_string += "<h1>" + title + "</h1>\n"
 | 
					    content_string += "<h1>" + title + "</h1>\n"
 | 
				
			||||||
        content_string += "["
 | 
					 | 
				
			||||||
    content_string += "<a href=\"" + "/index.html#" + \
 | 
					    content_string += "<a href=\"" + "/index.html#" + \
 | 
				
			||||||
            filename_no_end + "\">" + "link" + "</a>"
 | 
					        filename_no_end + "\">" + curr_date + "</a>"
 | 
				
			||||||
        content_string += "]<br>\n"
 | 
					    content_string += "<br>\n"
 | 
				
			||||||
    if filename.endswith(".html"):
 | 
					    if filename.endswith(".html"):
 | 
				
			||||||
      for line in text:
 | 
					      for line in text:
 | 
				
			||||||
        content_string += line
 | 
					        content_string += line
 | 
				
			||||||
@@ -146,9 +150,7 @@ def gen_md_content(path_ex, depth):
 | 
				
			|||||||
    markdown_text = ""
 | 
					    markdown_text = ""
 | 
				
			||||||
    for line in markdown_lines:
 | 
					    for line in markdown_lines:
 | 
				
			||||||
      markdown_text += line.replace("# ", header)
 | 
					      markdown_text += line.replace("# ", header)
 | 
				
			||||||
        content_string = markdown.markdown(
 | 
					    content_string = markdown.markdown(markdown_text, extensions=["fenced_code", "tables"])
 | 
				
			||||||
            markdown_text, extensions=["fenced_code", "tables"]
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
  return content_string
 | 
					  return content_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<div class="container">
 | 
					<div class="container">
 | 
				
			||||||
    <div class="blogarchive">
 | 
					    <div class="blogarchive">
 | 
				
			||||||
	<h1>Archive</h1><br>
 | 
						<h1>{% if language=="de-de" %}Archiv{% else %}Archive{% endif %}</h1><br>
 | 
				
			||||||
        {% autoescape off %}
 | 
					        {% autoescape off %}
 | 
				
			||||||
        {{ content_string }}
 | 
					        {{ content_string }}
 | 
				
			||||||
        {% endautoescape %}
 | 
					        {% endautoescape %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<div class="container">
 | 
					<div class="container">
 | 
				
			||||||
    <div class="important">
 | 
					    <div class="important">
 | 
				
			||||||
        Error<br>
 | 
					        {% if language=="de-de" %}Fehler{% else %}Error{% endif %}<br>
 | 
				
			||||||
	<span>{{ errorcode }}</span>
 | 
						<span>{{ errorcode }}</span>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<div class="container">
 | 
					<div class="container">
 | 
				
			||||||
    <div class="blog">
 | 
					    <div class="blog">
 | 
				
			||||||
        <h1>Index</h1><br>
 | 
					        <h1>Feed</h1><br>
 | 
				
			||||||
        {% autoescape off %}
 | 
					        {% autoescape off %}
 | 
				
			||||||
        {{ content_string }}
 | 
					        {{ content_string }}
 | 
				
			||||||
        {% endautoescape %}
 | 
					        {% endautoescape %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
<channel>
 | 
					<channel>
 | 
				
			||||||
    <title>{{ title }}</title>
 | 
					    <title>{{ title }}</title>
 | 
				
			||||||
    <description>{{ description }}</description>
 | 
					    <description>{{ description }}</description>
 | 
				
			||||||
<language>en-us</language>
 | 
					    <language>{{ language }}</language>
 | 
				
			||||||
<link>{{ website }}/feed.xml</link>
 | 
					<link>{{ website }}/feed.xml</link>
 | 
				
			||||||
<atom:link href="/feed.xml" rel="self" type="application/rss+xml" />
 | 
					<atom:link href="/feed.xml" rel="self" type="application/rss+xml" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
        <label for="main-menu-check" class="show-menu">☰</label>
 | 
					        <label for="main-menu-check" class="show-menu">☰</label>
 | 
				
			||||||
        <div class="main-menu">
 | 
					        <div class="main-menu">
 | 
				
			||||||
            <a href="{{ url_for('index') }}">Blog</a>
 | 
					            <a href="{{ url_for('index') }}">Blog</a>
 | 
				
			||||||
            <a href="{{ url_for('archive') }}">Archive</a>
 | 
					            <a href="{{ url_for('archive') }}">{% if language=="de-de" %}Archiv{% else %}Archive{% endif %}</a>
 | 
				
			||||||
            <label for="main-menu-check" class="hide-menu">X</label>
 | 
					            <label for="main-menu-check" class="hide-menu">X</label>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user