Fix bug in pandoc transliteration
- Author
- Maarten Vangeneugden
- Date
- March 8, 2024, 10:26 p.m.
- Hash
- 3b5232d85ab878f04f711bbbfa304d1ef7a4d725
- Parent
- 19cb3f6671d020015b1b432e2c862bb47e0b3dca
- Modified files
- models.py
- templates/blog/locale/de/LC_MESSAGES/django.po
- templates/blog/locale/nl/LC_MESSAGES/django.po
models.py ¶
3 additions and 1 deletion.
View changes Hide changes
1 |
1 |
from django.utils import translation |
2 |
2 |
from django.template.defaultfilters import slugify |
3 |
3 |
from django.db import models |
4 |
4 |
from django.conf import settings # Necessary to get the link to the media root folder |
5 |
5 |
import pytz |
+ |
6 |
import pytz |
6 |
7 |
import datetime |
7 |
8 |
import os |
8 |
9 |
import subprocess |
9 |
10 |
|
10 |
11 |
from django.shortcuts import render as render_shortcut |
11 |
12 |
|
12 |
13 |
""" New version: |
13 |
14 |
- For each post, there's no longer a mandatory Dutch and English |
14 |
15 |
version. Instead, only the title needs to be in multiple languages. |
15 |
16 |
- There's a new table for the links to the articles themselves. These include a |
16 |
17 |
language code and a foreign key to the post they belong to. |
17 |
18 |
- If an article is available in the active language, but not tagged for the same |
18 |
19 |
dialect, then it should just show up without any warnings. |
19 |
20 |
- If an article is not available in the active language, only the title should |
20 |
21 |
show up, but where the short intro text would normally be, there should be an |
21 |
22 |
explanation that it's only available in other languages, and provide links to |
22 |
23 |
those versions. |
23 |
24 |
""" |
24 |
25 |
|
25 |
26 |
# Look, you think this function is worthless, it's not. It's required to make |
26 |
27 |
# migrations with manage.py, so here it stays, being empty and hollow like the |
27 |
28 |
# piece of shit it is. |
28 |
29 |
def post_title_directory(): |
29 |
30 |
pass |
30 |
31 |
|
31 |
32 |
|
32 |
33 |
class Post(models.Model): |
33 |
34 |
""" Represents a blog post.""" |
34 |
35 |
published = models.DateTimeField(auto_now_add=True) |
35 |
36 |
visible = models.BooleanField(default=True, |
36 |
37 |
help_text="Whether this post is shown in the index. If False, it's \ |
37 |
38 |
only accessible by direct link.") |
38 |
39 |
# TODO: The titles should all be changed to 'unique=True' to avoid slug |
39 |
40 |
# collisions. But at this moment, there are still some posts that don't have |
40 |
41 |
# a title in all these languages (and "" collides with ""), so until that's |
41 |
42 |
# fixed, they're set to False. |
42 |
43 |
title_en = models.CharField(max_length=64, unique=False, blank=False) |
43 |
44 |
title_nl = models.CharField(max_length=64, unique=False, blank=False) |
44 |
45 |
title_fr = models.CharField(max_length=64, unique=False, blank=True) |
45 |
46 |
title_de = models.CharField(max_length=64, unique=False, blank=True) |
46 |
47 |
title_es = models.CharField(max_length=64, unique=False, blank=True) |
47 |
48 |
title_eo = models.CharField(max_length=64, unique=False, blank=True) |
48 |
49 |
title_af = models.CharField(max_length=64, unique=False, blank=True) |
49 |
50 |
title_nl_be=models.CharField(max_length=64, unique=False, blank=True) |
50 |
51 |
title_fr_be=models.CharField(max_length=64, unique=False, blank=True) |
51 |
52 |
|
52 |
53 |
|
53 |
54 |
def __str__(self): |
54 |
55 |
return self.title() |
55 |
56 |
|
56 |
57 |
|
57 |
58 |
def articles(self): |
58 |
59 |
#print(len(Article.objects.filter(post=self))) |
59 |
60 |
return Article.objects.filter(post=self) |
60 |
61 |
|
61 |
62 |
def article(self): |
62 |
63 |
language_code = translation.get_language() |
63 |
64 |
#print(language_code) |
64 |
65 |
# Retrieves all articles that have this post as their foreign key |
65 |
66 |
articles = Article.objects.filter(post=self) |
66 |
67 |
for a in articles: |
67 |
68 |
if a.language_code == language_code: |
68 |
69 |
return a |
69 |
70 |
# If no exact match was found, try again, but now accept other dialects |
70 |
71 |
# as well: |
71 |
72 |
for a in articles: |
72 |
73 |
if a.language_code.startswith(language_code): |
73 |
74 |
return a |
74 |
75 |
|
75 |
76 |
# If still no article was found, return None |
76 |
77 |
return None |
77 |
78 |
|
78 |
79 |
def title(self): |
79 |
80 |
language_code = translation.get_language() |
80 |
81 |
options = {'af': self.title_af, |
81 |
82 |
'de': self.title_de, |
82 |
83 |
'es': self.title_es, |
83 |
84 |
'en': self.title_en, |
84 |
85 |
'eo': self.title_eo, |
85 |
86 |
'fr': self.title_fr, |
86 |
87 |
'nl-be': self.title_nl_be, |
87 |
88 |
'fr-be': self.title_fr_be, |
88 |
89 |
'nl': self.title_nl} |
89 |
90 |
for code, translated_title in options.items(): |
90 |
91 |
if language_code.startswith(code): |
91 |
92 |
return translated_title |
92 |
93 |
# If no return has happened, default to English |
93 |
94 |
return self.title_en |
94 |
95 |
|
95 |
96 |
def org_to_html(file_path, slug, return_djhtml_path=False): |
96 |
97 |
""" Converts the given org formatted file to HTML. |
97 |
98 |
This function directly returns the resulting HTML code. This function uses |
98 |
99 |
the amazing Haskell library Pandoc to convert the file (and takes care |
99 |
100 |
of header id's and all that stuff). |
100 |
101 |
""" |
101 |
102 |
# FIXME: Remove hardcoded link to media. Replace with media tag! |
102 |
103 |
# XXX: The reason I'm first converting all occurences of .jpg][ and .png][ |
103 |
104 |
# to .jpgPANDOCBUG][ and .pngPANDOCBUG][, is because of a Pandoc bug that |
104 |
105 |
# removes the text links for images. It is afterwards converted back, no |
105 |
106 |
# worries. |
106 |
107 |
file = open(file_path, "r", encoding="utf-8") |
107 |
108 |
text = file.read() |
108 |
109 |
file.close() |
109 |
110 |
text = text.replace(".jpg][", ".jpgPANDOCBUG][") |
110 |
111 |
text = text.replace(".png][", ".pngPANDOCBUG][") |
111 |
112 |
file = open("/tmp/blog-file-"+slug+".org", "w", encoding="utf-8") |
112 |
113 |
file.write(text) |
113 |
114 |
file.close() |
114 |
115 |
# --wrap=none is necessary for the Article.headings method to function |
115 |
116 |
# properly, otherwise the heuristic fails on a regular basis |
116 |
117 |
html_text = subprocess.check_output(["pandoc", "--from=org", "--to=html", "--wrap=none", "/tmp/blog-file-"+slug+".org"]) |
117 |
118 |
html_text = html_text.decode("utf-8").replace(".jpgPANDOCBUG", ".jpg") |
118 |
119 |
html_text = html_text.replace(".pngPANDOCBUG", ".png") |
119 |
120 |
# Detecting where the footnote section starts, and removing that tag |
120 |
121 |
html_text = html_text.replace('<section class="footnotes footnotes-end-of-document" role="doc-endnotes">', "") |
121 |
- | #rendered_file_path = "file_path.rpartition('.')[0] + ".djhtml" |
+ |
122 |
html_text = html_text.replace('</aside>',"") |
+ |
123 |
#rendered_file_path = "file_path.rpartition('.')[0] + ".djhtml" |
122 |
124 |
rendered_file_path = "/tmp/blog-file-"+slug+".djhtml" |
123 |
125 |
rendered_file = open(rendered_file_path, "w", encoding="utf-8") |
124 |
126 |
rendered_file.write(html_text) |
125 |
127 |
rendered_file.close() |
126 |
128 |
if return_djhtml_path: |
127 |
129 |
return rendered_file_path |
128 |
130 |
else: |
129 |
131 |
return html_text |
130 |
132 |
|
131 |
133 |
class Article(models.Model): |
132 |
134 |
AFRIKAANS = 'af' |
133 |
135 |
BELGIAN_FRENCH = 'fr-be' |
134 |
136 |
DUTCH = 'nl' |
135 |
137 |
ESPERANTO = 'eo' |
136 |
138 |
ENGLISH = 'en' |
137 |
139 |
FLEMISH = 'nl-be' |
138 |
140 |
FRENCH = 'fr' |
139 |
141 |
GERMAN = 'de' |
140 |
142 |
SPANISH = 'es' |
141 |
143 |
|
142 |
144 |
LANGUAGE_CODES = [ |
143 |
145 |
(AFRIKAANS, 'Afrikaans'), |
144 |
146 |
(BELGIAN_FRENCH, 'Français (Belgique)'), |
145 |
147 |
(DUTCH, 'Nederlands'), |
146 |
148 |
(ESPERANTO, 'Esperanto'), |
147 |
149 |
(ENGLISH, 'English'), |
148 |
150 |
(FLEMISH, 'Vlaams'), |
149 |
151 |
(FRENCH, 'Français'), |
150 |
152 |
(GERMAN, 'Deutsch'), |
151 |
153 |
(SPANISH, 'Español')] |
152 |
154 |
|
153 |
155 |
visible = models.BooleanField(default=True) |
154 |
156 |
post = models.ForeignKey(Post, on_delete=models.CASCADE) |
155 |
157 |
language_code = models.CharField(max_length=16, |
156 |
158 |
choices = LANGUAGE_CODES, |
157 |
159 |
blank=False) |
158 |
160 |
# file_path shouldn't be unique, because the same article file could be used |
159 |
161 |
# for multiple dialects of the same language. |
160 |
162 |
file_path = models.FilePathField(path=settings.MEDIA_ROOT + "blog/articles/", |
161 |
163 |
blank=False) |
162 |
164 |
# Same reason, slug shouldn't be unique |
163 |
165 |
slug = models.SlugField(unique=False, blank=False, allow_unicode=True) |
164 |
166 |
title = models.CharField(max_length=64, unique=False, blank=True) |
165 |
167 |
|
166 |
168 |
def text(self): |
167 |
169 |
return org_to_html(self.file_path, self.slug) |
168 |
170 |
def djhtml_file(self): |
169 |
171 |
return org_to_html(self.file_path, self.slug, return_djhtml_path=True) |
170 |
172 |
def headings(self): |
171 |
173 |
""" Returns the headings and their slugs present in this article. Useful |
172 |
174 |
for building the navigation drawer. """ |
173 |
175 |
text = self.text() |
174 |
176 |
headers = list() |
175 |
177 |
lines = text.splitlines() |
176 |
178 |
|
177 |
179 |
for line in lines: |
178 |
180 |
# Heuristic approach to collecting headers |
179 |
181 |
if "<h" in line and "id=" in line and "</h" in line: |
180 |
182 |
first_part, second_part = line.split(">", maxsplit=1) |
181 |
183 |
slug = first_part.split('"')[-2] |
182 |
184 |
header = second_part.split("<", maxsplit=1)[0] |
183 |
185 |
headers.append((header, slug)) |
184 |
186 |
return headers |
185 |
187 |
|
186 |
188 |
|
187 |
189 |
|
188 |
190 |
|
189 |
191 |
class Comment(models.Model): |
190 |
192 |
""" Represents a comment on a blog post. |
191 |
193 |
Comments are not filtered by language; a |
192 |
194 |
comment made by someone reading the article in Dutch, that's written in |
193 |
195 |
Dutch, will show up (unedited) for somebody whom's reading the Spanish |
194 |
196 |
version. |
195 |
197 |
""" |
196 |
198 |
# Allows me to manually hide certain messages if need be |
197 |
199 |
visible = models.BooleanField(default=True) |
198 |
200 |
date = models.DateTimeField(auto_now_add=True) |
199 |
201 |
name = models.CharField(max_length=64, blank=True) |
200 |
202 |
text = models.TextField(max_length=10000, blank=False) # Should be more than enough |
201 |
203 |
# reaction_to is null if it's not a reaction to an existing comment |
202 |
204 |
reaction_to = models.ForeignKey('Comment', on_delete=models.CASCADE, |
203 |
205 |
null=True, blank=True) |
204 |
206 |
# blank=True is also needed per the Django documentation: |
205 |
207 |
# For both string-based and non-string-based fields, you will also need to |
206 |
208 |
# set blank=True if you wish to permit empty values in forms, as the null |
207 |
209 |
# parameter only affects database storage. |
208 |
210 |
from_myself = models.BooleanField( |
209 |
211 |
help_text="""I trust myself, so if I write a comment, I should be able |
210 |
212 |
to use the entire HTML5 suite. Ticking this box activates the DTL "safe" |
211 |
213 |
tag, instead of the "urlize" tag used for normal comments.""", |
212 |
214 |
default=False) |
213 |
215 |
post = models.ForeignKey( |
214 |
216 |
Post, |
215 |
217 |
on_delete=models.CASCADE, |
216 |
218 |
null=False, |
217 |
219 |
) |
218 |
220 |
class meta: |
219 |
221 |
ordering = ['date'] # When printed, prints the oldest comment first. |
220 |
222 |
|
221 |
223 |
def reactions(self): |
222 |
224 |
# Should return the comments that are a reaction to this comment |
223 |
225 |
return Comment.objects.filter(reaction_to=self).order_by('-date') |
224 |
226 |
def __str__(self): |
225 |
227 |
return str(self.id) +" | "+ self.name |
226 |
228 |
def is_new(self): |
227 |
229 |
# True if this comment was created less than one minute ago. |
228 |
230 |
now = datetime.datetime.utcnow().replace(tzinfo=pytz.UTC) |
229 |
231 |
delta = now-self.date |
230 |
232 |
return delta.seconds < 60 |
231 |
233 |
|
232 |
234 |
|
233 |
235 |
class FeedItem(models.Model): |
234 |
236 |
""" An item that shows up in the RSS feed.""" |
235 |
237 |
title = models.CharField(max_length=64) |
236 |
238 |
added = models.DateTimeField(auto_now_add=True) |
237 |
239 |
description = models.CharField(max_length=400) |
238 |
240 |
link = models.URLField() |
239 |
241 |
templates/blog/locale/de/LC_MESSAGES/django.po ¶
2 additions and 3 deletions.
View changes Hide changes
1 |
1 |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
2 |
2 |
# This file is distributed under the same license as the PACKAGE package. |
3 |
3 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
4 |
4 |
# |
5 |
5 |
#, fuzzy |
6 |
6 |
msgid "" |
7 |
7 |
msgstr "" |
8 |
8 |
"Project-Id-Version: PACKAGE VERSION\n" |
9 |
9 |
"Report-Msgid-Bugs-To: \n" |
10 |
10 |
"POT-Creation-Date: 2022-11-11 15:22+0000\n" |
11 |
11 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 |
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 |
13 |
"Language-Team: LANGUAGE <LL@li.org>\n" |
14 |
14 |
"Language: \n" |
15 |
15 |
"MIME-Version: 1.0\n" |
16 |
16 |
"Content-Type: text/plain; charset=UTF-8\n" |
17 |
17 |
"Content-Transfer-Encoding: 8bit\n" |
18 |
18 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
19 |
19 |
|
20 |
20 |
#: blog/templates/blog/comment.djhtml:25 |
21 |
21 |
msgid "Respond" |
22 |
22 |
msgstr "Antworten" |
23 |
23 |
|
24 |
24 |
#: blog/templates/blog/comment.djhtml:35 blog/templates/blog/post.djhtml:143 |
25 |
25 |
msgid "Your name" |
26 |
26 |
msgstr "Ihr Name" |
27 |
27 |
|
28 |
28 |
#: blog/templates/blog/comment.djhtml:36 |
29 |
29 |
msgid "Your response" |
30 |
30 |
msgstr "Ihre Antwort" |
31 |
31 |
|
32 |
32 |
#: blog/templates/blog/comment.djhtml:37 blog/templates/blog/post.djhtml:145 |
33 |
33 |
msgid "Submit" |
34 |
34 |
msgstr "Abschicken" |
35 |
35 |
|
36 |
36 |
#: blog/templates/blog/index.djhtml:20 |
37 |
37 |
msgid "Maarten's blog" |
38 |
38 |
msgstr "Blog von Maarten" |
39 |
39 |
|
40 |
40 |
#: blog/templates/blog/index.djhtml:22 |
41 |
41 |
msgid "" |
42 |
42 |
"The always coherently put together, yet\n" |
43 |
43 |
"fuzzy blog of whatever sprouts in my mind." |
44 |
44 |
msgstr "" |
45 |
45 |
"Das immer kohärent zusammengestellte, aber verschwommene Blog von allem, was" |
46 |
46 |
" in meinem Kopf sprießt." |
47 |
47 |
|
48 |
48 |
#: blog/templates/blog/index.djhtml:29 |
49 |
49 |
msgid "Notepad of a student" |
50 |
50 |
msgstr "Notizblock eines Schülers" |
51 |
51 |
|
52 |
52 |
#: blog/templates/blog/index.djhtml:37 |
53 |
53 |
msgid "Navigation" |
54 |
54 |
msgstr "Navigation" |
55 |
55 |
|
56 |
56 |
#: blog/templates/blog/index.djhtml:38 |
57 |
57 |
msgid "Front page" |
58 |
58 |
msgstr "Hauptseite" |
59 |
59 |
|
60 |
60 |
#: blog/templates/blog/index.djhtml:49 blog/templates/blog/index.djhtml:114 |
61 |
61 |
msgid "Flemish" |
62 |
62 |
msgstr "Flämisch" |
63 |
63 |
|
64 |
64 |
#: blog/templates/blog/index.djhtml:51 blog/templates/blog/index.djhtml:116 |
65 |
65 |
msgid "Belgian French" |
66 |
66 |
msgstr "Belgisches Französisch" |
67 |
67 |
|
68 |
68 |
#: blog/templates/blog/index.djhtml:65 |
69 |
69 |
msgid "Blog" |
70 |
70 |
msgstr "Blog" |
71 |
71 |
|
72 |
72 |
#: blog/templates/blog/index.djhtml:67 |
73 |
73 |
msgid "" |
74 |
74 |
"Welcome to my blog. Here, I write\n" |
75 |
75 |
" about things that interest me. Politics, coding,\n" |
76 |
76 |
" studying, life, or anything else I fancy rambling\n" |
77 |
77 |
" about. If you're in luck, I may've written it in a\n" |
78 |
78 |
" language that you understand better than English.\n" |
79 |
79 |
" " |
80 |
80 |
msgstr "" |
81 |
81 |
"Willkommen auf meinem Blog. Hier schreibe ich über Dinge, die mich " |
82 |
82 |
"interessieren. Politik, Codierung, Studium, Leben oder alles andere, worüber" |
83 |
83 |
" ich mich ausbreiten möchte. Wenn Sie Glück haben, habe ich es vielleicht in" |
84 |
84 |
" einer Sprache geschrieben, die Sie besser verstehen als Englisch." |
85 |
85 |
|
86 |
86 |
#: blog/templates/blog/index.djhtml:85 |
87 |
87 |
msgid "Open archive" |
88 |
88 |
msgstr "Archiv öffnen" |
89 |
89 |
|
90 |
90 |
#: blog/templates/blog/index.djhtml:99 |
91 |
91 |
msgid "Read on" |
92 |
92 |
msgstr "Mehr lesen" |
93 |
93 |
|
94 |
94 |
#: blog/templates/blog/index.djhtml:104 |
95 |
95 |
#, python-format |
96 |
96 |
msgid "" |
97 |
97 |
"This blog\n" |
98 |
98 |
" post is not available in %(cur_lang)s." |
99 |
99 |
msgstr "Dieser Blogbeitrag ist auf %(cur_lang)s nicht verfügbar." |
100 |
100 |
|
101 |
101 |
#: blog/templates/blog/index.djhtml:106 |
102 |
102 |
msgid "" |
103 |
103 |
"\n" |
104 |
104 |
" However, it is available in \n" |
105 |
105 |
" " |
106 |
106 |
msgid_plural "" |
107 |
107 |
"\n" |
108 |
108 |
" If you want, you can choose to read it in one of these\n" |
109 |
109 |
" languages: <br>\n" |
110 |
110 |
" " |
111 |
111 |
msgstr[0] "Es ist jedoch auf verfügbar auf " |
112 |
- | msgstr[1] "" |
113 |
- | "Wenn Sie möchten, können Sie es in einer dieser Sprachen lesen: <br>" |
114 |
- | |
+ |
112 |
msgstr[1] "\nWenn Sie möchten, können Sie es in einer dieser Sprachen lesen: <br>" |
+ |
113 |
|
115 |
114 |
#: blog/templates/blog/monthly_archive.djhtml:31 |
116 |
115 |
msgid "Weekly | Archief" |
117 |
116 |
msgstr "Reden ist Silber, schreiben ist Gold | Archiv" |
118 |
117 |
|
119 |
118 |
#: blog/templates/blog/monthly_archive.djhtml:34 |
120 |
119 |
#, fuzzy |
121 |
120 |
msgid "Voor een duik terug in de geschiedenis van mijn publieke dagboek." |
122 |
121 |
msgstr "" |
123 |
122 |
"Für einen Duck zurück in der Geschichte meines öffentlichen Tagesbuchs." |
124 |
123 |
|
125 |
124 |
#: blog/templates/blog/post.djhtml:110 |
126 |
125 |
msgid "Table of contents" |
127 |
126 |
msgstr "Inhaltsverzeichnis" |
128 |
127 |
|
129 |
128 |
#: blog/templates/blog/post.djhtml:111 |
130 |
129 |
msgid "Blog index" |
131 |
130 |
msgstr "Blog | Index" |
132 |
131 |
|
133 |
132 |
#: blog/templates/blog/post.djhtml:112 |
134 |
133 |
msgid "Main page" |
135 |
134 |
msgstr "Hauptseite" |
136 |
135 |
|
137 |
136 |
#: blog/templates/blog/post.djhtml:137 |
138 |
137 |
msgid "Comments" |
139 |
138 |
msgstr "Kommentare" |
140 |
139 |
|
141 |
140 |
#: blog/templates/blog/post.djhtml:144 |
142 |
141 |
msgid "Your comment" |
143 |
142 |
msgstr "Ihr Kommentar" |
144 |
143 |
|
145 |
144 |
#~ msgid "This article in other languages" |
146 |
145 |
#~ msgstr "Dieser Artikel in anderen Sprachen" |
147 |
146 |
templates/blog/locale/nl/LC_MESSAGES/django.po ¶
2 additions and 2 deletions.
View changes Hide changes
1 |
1 |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
2 |
2 |
# This file is distributed under the same license as the PACKAGE package. |
3 |
3 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
4 |
4 |
# |
5 |
5 |
msgid "" |
6 |
6 |
msgstr "" |
7 |
7 |
"Project-Id-Version: \n" |
8 |
8 |
"Report-Msgid-Bugs-To: \n" |
9 |
9 |
"POT-Creation-Date: 2022-11-11 15:22+0000\n" |
10 |
10 |
"PO-Revision-Date: 2021-10-30 16:11+0200\n" |
11 |
11 |
"Last-Translator: \n" |
12 |
12 |
"Language-Team: \n" |
13 |
13 |
"Language: nl\n" |
14 |
14 |
"MIME-Version: 1.0\n" |
15 |
15 |
"Content-Type: text/plain; charset=UTF-8\n" |
16 |
16 |
"Content-Transfer-Encoding: 8bit\n" |
17 |
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
18 |
18 |
"X-Generator: Poedit 3.0\n" |
19 |
19 |
|
20 |
20 |
#: blog/templates/blog/comment.djhtml:25 |
21 |
21 |
msgid "Respond" |
22 |
22 |
msgstr "Antwoorden" |
23 |
23 |
|
24 |
24 |
#: blog/templates/blog/comment.djhtml:35 blog/templates/blog/post.djhtml:143 |
25 |
25 |
msgid "Your name" |
26 |
26 |
msgstr "Uw naam" |
27 |
27 |
|
28 |
28 |
#: blog/templates/blog/comment.djhtml:36 |
29 |
29 |
msgid "Your response" |
30 |
30 |
msgstr "Uw antwoord" |
31 |
31 |
|
32 |
32 |
#: blog/templates/blog/comment.djhtml:37 blog/templates/blog/post.djhtml:145 |
33 |
33 |
msgid "Submit" |
34 |
34 |
msgstr "Reageren" |
35 |
35 |
|
36 |
36 |
#: blog/templates/blog/index.djhtml:20 |
37 |
37 |
msgid "Maarten's blog" |
38 |
38 |
msgstr "Maartens blog" |
39 |
39 |
|
40 |
40 |
#: blog/templates/blog/index.djhtml:22 |
41 |
41 |
msgid "" |
42 |
42 |
"The always coherently put together, yet\n" |
43 |
43 |
"fuzzy blog of whatever sprouts in my mind." |
44 |
44 |
msgstr "" |
45 |
45 |
"Een zeer weloverwogen geschreven, en toch warrige blog over vanalles wat in " |
46 |
46 |
"mij opkomt." |
47 |
47 |
|
48 |
48 |
#: blog/templates/blog/index.djhtml:29 |
49 |
49 |
msgid "Notepad of a student" |
50 |
50 |
msgstr "Studentikoos kladblok" |
51 |
51 |
|
52 |
52 |
#: blog/templates/blog/index.djhtml:37 |
53 |
53 |
msgid "Navigation" |
54 |
54 |
msgstr "Navigatie" |
55 |
55 |
|
56 |
56 |
#: blog/templates/blog/index.djhtml:38 |
57 |
57 |
msgid "Front page" |
58 |
58 |
msgstr "Hoofdpagina" |
59 |
59 |
|
60 |
60 |
#: blog/templates/blog/index.djhtml:49 blog/templates/blog/index.djhtml:114 |
61 |
61 |
msgid "Flemish" |
62 |
62 |
msgstr "Vlaams" |
63 |
63 |
|
64 |
64 |
#: blog/templates/blog/index.djhtml:51 blog/templates/blog/index.djhtml:116 |
65 |
65 |
msgid "Belgian French" |
66 |
66 |
msgstr "Belgisch-Frans" |
67 |
67 |
|
68 |
68 |
#: blog/templates/blog/index.djhtml:65 |
69 |
69 |
msgid "Blog" |
70 |
70 |
msgstr "Blog" |
71 |
71 |
|
72 |
72 |
#: blog/templates/blog/index.djhtml:67 |
73 |
73 |
msgid "" |
74 |
74 |
"Welcome to my blog. Here, I write\n" |
75 |
75 |
" about things that interest me. Politics, coding,\n" |
76 |
76 |
" studying, life, or anything else I fancy rambling\n" |
77 |
77 |
" about. If you're in luck, I may've written it in a\n" |
78 |
78 |
" language that you understand better than English.\n" |
79 |
79 |
" " |
80 |
80 |
msgstr "" |
81 |
81 |
"Welkom op mijn blog. Hier schrijf ik over onderwerpen die mij interesseren. " |
82 |
82 |
"Politiek, programmeren, studeren en het leven, plus alles waar ik goesting " |
83 |
83 |
"in heb om over te schrijven." |
84 |
84 |
|
85 |
85 |
#: blog/templates/blog/index.djhtml:85 |
86 |
86 |
msgid "Open archive" |
87 |
87 |
msgstr "Archief openen" |
88 |
88 |
|
89 |
89 |
#: blog/templates/blog/index.djhtml:99 |
90 |
90 |
msgid "Read on" |
91 |
91 |
msgstr "Verder lezen" |
92 |
92 |
|
93 |
93 |
#: blog/templates/blog/index.djhtml:104 |
94 |
94 |
#, python-format |
95 |
95 |
msgid "" |
96 |
96 |
"This blog\n" |
97 |
97 |
" post is not available in %(cur_lang)s." |
98 |
98 |
msgstr "Dit blogartikel is niet beschikbaar in %(cur_lang)s." |
99 |
99 |
|
100 |
100 |
#: blog/templates/blog/index.djhtml:106 |
101 |
101 |
msgid "" |
102 |
102 |
"\n" |
103 |
103 |
" However, it is available in \n" |
104 |
104 |
" " |
105 |
105 |
msgid_plural "" |
106 |
106 |
"\n" |
107 |
107 |
" If you want, you can choose to read it in one of these\n" |
108 |
108 |
" languages: <br>\n" |
109 |
109 |
" " |
110 |
110 |
msgstr[0] "Het is echter wel beschikbaar in het " |
111 |
- | msgstr[1] "Als u wilt kunt u het wel lezen in één van deze talen: <br>" |
112 |
- | |
+ |
111 |
msgstr[1] "\nAls u wilt kunt u het wel lezen in één van deze talen: <br>" |
+ |
112 |
|
113 |
113 |
#: blog/templates/blog/monthly_archive.djhtml:31 |
114 |
114 |
msgid "Weekly | Archief" |
115 |
115 |
msgstr "Spreken is zilver, schrijven is goud | Archief" |
116 |
116 |
|
117 |
117 |
#: blog/templates/blog/monthly_archive.djhtml:34 |
118 |
118 |
#, fuzzy |
119 |
119 |
msgid "Voor een duik terug in de geschiedenis van mijn publieke dagboek." |
120 |
120 |
msgstr "Voor een duik terug in de geschiedenis van mijn publieke dagboek" |
121 |
121 |
|
122 |
122 |
#: blog/templates/blog/post.djhtml:110 |
123 |
123 |
msgid "Table of contents" |
124 |
124 |
msgstr "Inhoudstafel" |
125 |
125 |
|
126 |
126 |
#: blog/templates/blog/post.djhtml:111 |
127 |
127 |
msgid "Blog index" |
128 |
128 |
msgstr "Blog | Index" |
129 |
129 |
|
130 |
130 |
#: blog/templates/blog/post.djhtml:112 |
131 |
131 |
msgid "Main page" |
132 |
132 |
msgstr "Hoofdpagina" |
133 |
133 |
|
134 |
134 |
#: blog/templates/blog/post.djhtml:137 |
135 |
135 |
msgid "Comments" |
136 |
136 |
msgstr "Reacties" |
137 |
137 |
|
138 |
138 |
#: blog/templates/blog/post.djhtml:144 |
139 |
139 |
msgid "Your comment" |
140 |
140 |
msgstr "Uw reactie" |
141 |
141 |
|
142 |
142 |
#~ msgid "This article in other languages" |
143 |
143 |
#~ msgstr "Dit artikel in andere talen" |
144 |
144 |
|
145 |
145 |
#~ msgid "Never miss an update again." |
146 |
146 |
#~ msgstr "Mis nooit meer een update." |
147 |
147 |
|
148 |
148 |
#~ msgid "" |
149 |
149 |
#~ "Getting info on updates to blog posts, major website changes, and other important\n" |
150 |
150 |
#~ " news items is now easy and convenient with RSS.\n" |
151 |
151 |
#~ " " |
152 |
152 |
#~ msgstr "" |
153 |
153 |
#~ "Updates van blogartikelen, grote veranderingen op de website en andere " |
154 |
154 |
#~ "belangrijke nieuwtjes zijn nu makkelijk te verkrijgen met RSS." |
155 |
155 |