blog

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