mirror of
				https://github.com/tiyn/beaker-blog.git
				synced 2025-10-31 02:41:17 +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 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/static/graphics | ||||
|   | ||||
| @@ -26,6 +26,9 @@ via plain text files. | ||||
| - [x] Switchable CSS | ||||
|   - [x] CSS dark-theme | ||||
|   - [x] CSS light-theme | ||||
| - [x] Language Support | ||||
|   - [x] English | ||||
|   - [x] German | ||||
| - [x] Config file | ||||
| - [x] Docker installation | ||||
| - [x] Logo | ||||
|   | ||||
| @@ -8,33 +8,34 @@ app = Flask(__name__) | ||||
|  | ||||
| TITLE = config.TITLE | ||||
| STYLE = config.STYLE | ||||
| LANGUAGE = config.LANGUAGE | ||||
| DESCRIPTION = config.DESCRIPTION | ||||
| WEBSITE = config.WEBSITE | ||||
|  | ||||
| @app.errorhandler(404) | ||||
| 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("/index.html") | ||||
| def index(): | ||||
|     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.html") | ||||
| def archive(): | ||||
|     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>") | ||||
| def entry(path): | ||||
|     content = con_gen.gen_stand_string(path) | ||||
|     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) | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -9,3 +9,6 @@ WEBSITE = "localhost:5000" | ||||
|  | ||||
| # Theme for the blog: dark, light | ||||
| STYLE = "dark" | ||||
|  | ||||
| # Language for the titles: en-us or de-de | ||||
| LANGUAGE = "en-us" | ||||
|   | ||||
| @@ -1,12 +1,20 @@ | ||||
| from datetime import datetime | ||||
| import markdown | ||||
| import locale | ||||
| import os | ||||
| from os import path | ||||
| import pathlib | ||||
| from datetime import datetime | ||||
| from os import path | ||||
|  | ||||
| import config | ||||
| import markdown | ||||
|  | ||||
| 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(): | ||||
|   """ | ||||
| @@ -23,10 +31,8 @@ def gen_arch_string(): | ||||
|     content_string = "" | ||||
|     last_month = "" | ||||
|     for file in reversed(contents): | ||||
|             curr_date = datetime.fromtimestamp( | ||||
|                 os.path.getctime(file)).strftime("%Y-%m-%d") | ||||
|             curr_month = datetime.fromtimestamp( | ||||
|                 os.path.getctime(file)).strftime("%b %Y") | ||||
|       curr_date = datetime.fromtimestamp(os.path.getctime(file)).strftime("%Y-%m-%d") | ||||
|       curr_month = datetime.fromtimestamp(os.path.getctime(file)).strftime("%B %Y") | ||||
|       if curr_month != last_month: | ||||
|         if last_month != "": | ||||
|           content_string += "</ul>\n" | ||||
| @@ -39,13 +45,11 @@ def gen_arch_string(): | ||||
|       if filename[0] != ".": | ||||
|         filename = filename.split(".", 1)[0] | ||||
|       content_string += "<li>" | ||||
|             content_string += curr_date + " - " | ||||
|             content_string += title + " [" | ||||
|       content_string += "<a href=\"" + "/index.html#" + \ | ||||
|                 filename + "\">" + "link" + "</a> - " | ||||
|           filename + "\">" + curr_date + "</a> - " | ||||
|       content_string += "<a href=\"" + "/entry/" + \ | ||||
|                 pathlib.PurePath(file).name + "\">" + "standalone" + "</a>" | ||||
|             content_string += "] <br>" | ||||
|           pathlib.PurePath(file).name + "\"><b>" + title + "</b></a>" | ||||
|       content_string += "<br>" | ||||
|       content_string += "</li>\n" | ||||
|     content_string += "</ul>\n" | ||||
|     return content_string | ||||
| @@ -73,19 +77,19 @@ def gen_index_string(): | ||||
|       if filename[0] != ".": | ||||
|         filename = filename.split(".", 1)[0] | ||||
|       content_string += "<div class=\"entry\">\n" | ||||
|             content_string += "<h2 id=\"" + filename + "\">" + title + "</h2>\n" | ||||
|             content_string += "[<a href=\"" + "/entry/" + \ | ||||
|       content_string += "<h2 id=\"" + filename + "\">" | ||||
|       content_string += "<a href=\"" + "/entry/" + \ | ||||
|           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"): | ||||
|         for line in text: | ||||
|           content_string += line | ||||
|         content_string += "<br>" | ||||
|       if file.endswith(".md"): | ||||
|         content_string += gen_md_content(file, 2) | ||||
|             content_string += "<small>" + \ | ||||
|                 datetime.fromtimestamp(os.path.getctime( | ||||
|                     file)).strftime("%Y-%m-%d") + "</small>" | ||||
|       content_string += "</div>" | ||||
|   return content_string | ||||
|  | ||||
| @@ -107,13 +111,13 @@ def gen_stand_string(path_ex): | ||||
|   if path.exists(filename): | ||||
|     title = open(filename).readline().rstrip("\n") | ||||
|     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_no_end.split("/")[-1] | ||||
|     content_string += "<h1>" + title + "</h1>\n" | ||||
|         content_string += "[" | ||||
|     content_string += "<a href=\"" + "/index.html#" + \ | ||||
|             filename_no_end + "\">" + "link" + "</a>" | ||||
|         content_string += "]<br>\n" | ||||
|         filename_no_end + "\">" + curr_date + "</a>" | ||||
|     content_string += "<br>\n" | ||||
|     if filename.endswith(".html"): | ||||
|       for line in text: | ||||
|         content_string += line | ||||
| @@ -146,9 +150,7 @@ def gen_md_content(path_ex, depth): | ||||
|     markdown_text = "" | ||||
|     for line in markdown_lines: | ||||
|       markdown_text += line.replace("# ", header) | ||||
|         content_string = markdown.markdown( | ||||
|             markdown_text, extensions=["fenced_code", "tables"] | ||||
|         ) | ||||
|     content_string = markdown.markdown(markdown_text, extensions=["fenced_code", "tables"]) | ||||
|   return content_string | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| {% block content %} | ||||
| <div class="container"> | ||||
|     <div class="blogarchive"> | ||||
| 	<h1>Archive</h1><br> | ||||
| 	<h1>{% if language=="de-de" %}Archiv{% else %}Archive{% endif %}</h1><br> | ||||
|         {% autoescape off %} | ||||
|         {{ content_string }} | ||||
|         {% endautoescape %} | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| {% block content %} | ||||
| <div class="container"> | ||||
|     <div class="important"> | ||||
|         Error<br> | ||||
|         {% if language=="de-de" %}Fehler{% else %}Error{% endif %}<br> | ||||
| 	<span>{{ errorcode }}</span> | ||||
|     </div> | ||||
| </div> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| {% block content %} | ||||
| <div class="container"> | ||||
|     <div class="blog"> | ||||
|         <h1>Index</h1><br> | ||||
|         <h1>Feed</h1><br> | ||||
|         {% autoescape off %} | ||||
|         {{ content_string }} | ||||
|         {% endautoescape %} | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| <channel> | ||||
|     <title>{{ title }}</title> | ||||
|     <description>{{ description }}</description> | ||||
| <language>en-us</language> | ||||
|     <language>{{ language }}</language> | ||||
| <link>{{ website }}/feed.xml</link> | ||||
| <atom:link href="/feed.xml" rel="self" type="application/rss+xml" /> | ||||
|  | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
|         <label for="main-menu-check" class="show-menu">☰</label> | ||||
|         <div class="main-menu"> | ||||
|             <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> | ||||
|         </div> | ||||
|     </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user