Add website pages and translations
css/device.css unknown status 1
1 | + | @media (max-width: 900px) { | |
2 | + | footer > * { | |
3 | + | padding: 5px; | |
4 | + | width: auto; | |
5 | + | } | |
6 | + | .footer-flex { | |
7 | + | display: block; | |
8 | + | } | |
9 | + | .article { | |
10 | + | padding: 5px; | |
11 | + | width: auto; | |
12 | + | } | |
13 | + | ||
14 | + | #features { | |
15 | + | display: block; | |
16 | + | width: auto; | |
17 | + | } | |
18 | + | } | |
19 | + | ||
20 | + | @media (max-width: 800px) { | |
21 | + | #hamburger-label { | |
22 | + | display: block; | |
23 | + | color: var(--black); | |
24 | + | position: absolute; | |
25 | + | right: 2em; | |
26 | + | top: 20px; | |
27 | + | } | |
28 | + | ||
29 | + | #hamburger-label img { | |
30 | + | height: 32px; | |
31 | + | } | |
32 | + | ||
33 | + | #hamburger ~ ul { | |
34 | + | display: none; | |
35 | + | } | |
36 | + | ||
37 | + | #hamburger:checked ~ ul { | |
38 | + | display: block; | |
39 | + | } | |
40 | + | ||
41 | + | header { | |
42 | + | align-items: start; | |
43 | + | } | |
44 | + | ||
45 | + | header span { | |
46 | + | font-size: 2.7em; | |
47 | + | } | |
48 | + | ||
49 | + | #hero { | |
50 | + | background: url('/images/screen.png') no-repeat -70px -50px #dde2dd; | |
51 | + | background-size: 300px; | |
52 | + | padding-bottom: 15px; | |
53 | + | padding-left: 15px; | |
54 | + | position: absolute; | |
55 | + | top: 0px; | |
56 | + | } | |
57 | + | ||
58 | + | #hero h1 { | |
59 | + | text-align: right; | |
60 | + | margin-top: 6em; | |
61 | + | text-shadow: 1px 1px #00574B | |
62 | + | } | |
63 | + | ||
64 | + | #after-hero { | |
65 | + | margin-top: 10em; | |
66 | + | } | |
67 | + | } |
css/nani.css unknown status 1
1 | + | html, body { | |
2 | + | padding: 0; | |
3 | + | margin: 0; | |
4 | + | background-color: #f8fdfa; | |
5 | + | } | |
6 | + | ||
7 | + | html { | |
8 | + | height: 100%; | |
9 | + | } | |
10 | + | ||
11 | + | body { | |
12 | + | min-height: 100%; | |
13 | + | display: flex; | |
14 | + | flex-direction: column; | |
15 | + | color: #555; | |
16 | + | } | |
17 | + | ||
18 | + | header { | |
19 | + | background-color: rgba(0,87,75,0.7); | |
20 | + | color: #f8fdfa; | |
21 | + | padding: 15px; | |
22 | + | display: flex; | |
23 | + | align-items: center; | |
24 | + | font-size: 1.1em; | |
25 | + | font-variant: small-caps; | |
26 | + | z-index: 1; | |
27 | + | } | |
28 | + | ||
29 | + | header ul { | |
30 | + | list-style: none; | |
31 | + | } | |
32 | + | ||
33 | + | header ul li { | |
34 | + | display: inline-block; | |
35 | + | } | |
36 | + | ||
37 | + | header a { | |
38 | + | color: inherit; | |
39 | + | display: inline-block; | |
40 | + | padding: 15px; | |
41 | + | text-decoration: none; | |
42 | + | } | |
43 | + | ||
44 | + | header span { | |
45 | + | flex: 1; | |
46 | + | font-weight: bold; | |
47 | + | font-size: 3em; | |
48 | + | } | |
49 | + | ||
50 | + | #hamburger, #hamburger-label { | |
51 | + | display: none; | |
52 | + | } | |
53 | + | ||
54 | + | a:hover { | |
55 | + | color: #D81B60; | |
56 | + | } | |
57 | + | ||
58 | + | a { | |
59 | + | text-decoration: none; | |
60 | + | color: #008755; | |
61 | + | } | |
62 | + | ||
63 | + | footer { | |
64 | + | background-color: #008577; | |
65 | + | color: #e8edea; | |
66 | + | padding: 15px; | |
67 | + | margin-top: 5em; | |
68 | + | } | |
69 | + | ||
70 | + | footer > * { | |
71 | + | width: 900px; | |
72 | + | margin: auto; | |
73 | + | } | |
74 | + | ||
75 | + | footer a { | |
76 | + | color: inherit; | |
77 | + | text-decoration: underline; | |
78 | + | } | |
79 | + | ||
80 | + | footer p { | |
81 | + | text-align: justify; | |
82 | + | } | |
83 | + | ||
84 | + | .footer-flex { | |
85 | + | display: flex; | |
86 | + | flex-direction: row; | |
87 | + | } | |
88 | + | ||
89 | + | .footer-flex p:first-child { | |
90 | + | flex: 1; | |
91 | + | } | |
92 | + | ||
93 | + | #page { | |
94 | + | flex: 1; | |
95 | + | } | |
96 | + | ||
97 | + | #hero { | |
98 | + | background: url('/images/screen.png') no-repeat -50px -100px #dde2dd; | |
99 | + | padding: 15px; | |
100 | + | padding-left: 600px; | |
101 | + | padding-bottom: 60px; | |
102 | + | color: #f8fdfa; | |
103 | + | position: relative; | |
104 | + | top: -140px; | |
105 | + | left: 0px; | |
106 | + | } | |
107 | + | ||
108 | + | #hero h1 { | |
109 | + | text-align: left; | |
110 | + | font-size: 2em; | |
111 | + | font-weight: bold; | |
112 | + | font-family: sans; | |
113 | + | text-shadow: 2px 2px #00574B; | |
114 | + | margin-top: 8em; | |
115 | + | } | |
116 | + | ||
117 | + | #hero ~ *:first-child { | |
118 | + | margin-top: 10em; | |
119 | + | } | |
120 | + | ||
121 | + | #hero nav { | |
122 | + | display: flex; | |
123 | + | align-items: center; | |
124 | + | align-content: center; | |
125 | + | color: #D81B60; | |
126 | + | font-size: 3em; | |
127 | + | } | |
128 | + | ||
129 | + | #hero nav span { | |
130 | + | padding-left: 20px; | |
131 | + | padding-right: 20px; | |
132 | + | } | |
133 | + | ||
134 | + | #hero img { | |
135 | + | width: 180px; | |
136 | + | } | |
137 | + | ||
138 | + | h1 { | |
139 | + | text-align: center; | |
140 | + | font-size: 2.5em; | |
141 | + | color: #D81B60; | |
142 | + | } | |
143 | + | ||
144 | + | h2 { | |
145 | + | font-size: 2em; | |
146 | + | color: #D81B60; | |
147 | + | text-align: center; | |
148 | + | } | |
149 | + | ||
150 | + | p { | |
151 | + | text-align: center; | |
152 | + | } | |
153 | + | ||
154 | + | p, .article { | |
155 | + | font-size: 1.1em; | |
156 | + | } | |
157 | + | ||
158 | + | h3 { | |
159 | + | font-size: 1.5em; | |
160 | + | text-align: left; | |
161 | + | padding: 10px; | |
162 | + | margin: 10px; | |
163 | + | border-bottom: 3px solid #D81B60; | |
164 | + | } | |
165 | + | ||
166 | + | .article h2 { | |
167 | + | font-size: 2em; | |
168 | + | text-align: left; | |
169 | + | border-bottom: 3px solid #D81B60; | |
170 | + | color: inherit; | |
171 | + | padding: 0px; | |
172 | + | margin: 0px; | |
173 | + | } | |
174 | + | ||
175 | + | .article h3 { | |
176 | + | border: none; | |
177 | + | font-size: 1.5em; | |
178 | + | text-align: left; | |
179 | + | color: #D81B60; | |
180 | + | padding: 0px; | |
181 | + | margin: 0px; | |
182 | + | } | |
183 | + | ||
184 | + | #features { | |
185 | + | display: flex; | |
186 | + | flex-direction: row; | |
187 | + | width: 900px; | |
188 | + | margin: auto; | |
189 | + | } | |
190 | + | ||
191 | + | #features div { | |
192 | + | flex: 1; | |
193 | + | } | |
194 | + | ||
195 | + | #features ul { | |
196 | + | list-style: none; | |
197 | + | padding: 0; | |
198 | + | } | |
199 | + | ||
200 | + | #features li { | |
201 | + | padding: 10px; | |
202 | + | font-size: 1.1em; | |
203 | + | } | |
204 | + | ||
205 | + | #content p { | |
206 | + | margin-bottom: 3em; | |
207 | + | } | |
208 | + | ||
209 | + | .article { | |
210 | + | width: 900px; | |
211 | + | margin: auto; | |
212 | + | } | |
213 | + | ||
214 | + | .article p { | |
215 | + | text-align: justify; | |
216 | + | line-height: 1.5em; | |
217 | + | } | |
218 | + | ||
219 | + | .article h2 { | |
220 | + | text-align: left; | |
221 | + | } |
haunt.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (use-modules (haunt asset) | |
20 | + | (haunt reader) | |
21 | + | (haunt site) | |
22 | + | (haunt builder assets) | |
23 | + | (haunt builder atom)) | |
24 | + | ||
25 | + | (use-modules (pages index) | |
26 | + | (pages data) | |
27 | + | (pages documentation) | |
28 | + | (pages e404) | |
29 | + | (pages feeds) | |
30 | + | (pages mentions) | |
31 | + | (pages blog)) | |
32 | + | ||
33 | + | (site #:title "Nani Project" | |
34 | + | #:domain "xana.lepiller.eu" | |
35 | + | #:default-metadata | |
36 | + | '((author . "Julien Lepiller") | |
37 | + | (email . "webmaster@lepiller.eu")) | |
38 | + | #:readers (list sxml-reader) | |
39 | + | #:builders (append | |
40 | + | (list (atom-feed #:filter get-posts) | |
41 | + | (atom-feeds-by-tag #:filter get-posts) | |
42 | + | (static-directory "css") | |
43 | + | (static-directory "dicos") | |
44 | + | (static-directory "images")) | |
45 | + | blog-pages | |
46 | + | page404 | |
47 | + | page-data | |
48 | + | page-documentation | |
49 | + | page-feeds | |
50 | + | page-mentions | |
51 | + | page-index)) |
images/get-it-on-en.png unknown status 1
Binary data |
images/get-it-on-fr.png unknown status 1
Binary data |
images/hamburger.png unknown status 1
Binary data |
images/screen.png unknown status 1
Binary data |
pages/blog.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages blog) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:use-module (haunt builder blog) | |
23 | + | #:use-module (haunt post) | |
24 | + | #:export (blog-pages get-posts)) | |
25 | + | ||
26 | + | (define (get-posts posts) | |
27 | + | "Returns POSTS sorted in reverse chronological order, excluding drafts." | |
28 | + | (filter (lambda (post) | |
29 | + | (not (member "draft" (post-ref post 'tags)))) | |
30 | + | (posts/reverse-chronological posts))) | |
31 | + | ||
32 | + | (define (get-lang-posts lang) | |
33 | + | (lambda (posts) | |
34 | + | "Returns POSTS sorted in reverse chronological order, excluding drafts." | |
35 | + | (filter (lambda (post) | |
36 | + | (and (not (member "draft" (post-ref post 'tags))) | |
37 | + | (member lang (post-ref post 'tags)))) | |
38 | + | (posts/reverse-chronological posts)))) | |
39 | + | ||
40 | + | (define (get-every-posts posts) | |
41 | + | (filter (lambda (post) | |
42 | + | (not (member "draft" (post-ref post 'tags)))) | |
43 | + | (posts/reverse-chronological posts))) | |
44 | + | ||
45 | + | (define get-posts-en (get-lang-posts "en")) | |
46 | + | ||
47 | + | (define nani-articles-en | |
48 | + | `(("Articles" "blog.en.html" ,get-posts-en))) | |
49 | + | ||
50 | + | ||
51 | + | (define %articles | |
52 | + | `(("Articles" "blog.html" ,get-posts))) | |
53 | + | ||
54 | + | (define %complete-articles | |
55 | + | `(("Articles" "blog-complete.html" ,get-posts))) | |
56 | + | (define %complete-articles-en | |
57 | + | `(("Articles" "blog-complete.en.html" ,get-posts))) | |
58 | + | ||
59 | + | (define blog-pages | |
60 | + | (list | |
61 | + | (blog #:theme (nani-theme "en" "blog") #:collections nani-articles-en) | |
62 | + | (blog #:theme (nani-theme "en" "blog-complete") #:collections %complete-articles-en))) |
pages/data.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages data) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page-data)) | |
23 | + | ||
24 | + | (define page-data | |
25 | + | (internationalize "data" "data" | |
26 | + | `(div | |
27 | + | (h1 (_ "Data Sources")) | |
28 | + | (div (@ (class "article")) | |
29 | + | (p (_ "Nani uses various open data sources to provide its functionalities. | |
30 | + | This page lists data sources, content and processes.")) | |
31 | + | (h2 (_ "Electronic Dictionary Research and Development Group")) | |
32 | + | (p (_ "The Electronic Dictionary Research and Development Group was | |
33 | + | established in 2000 within the Faculty of Information Technology, Monash | |
34 | + | University. Its goals are providing electronic dictionaries and | |
35 | + | computational linguistics.")) | |
36 | + | (h3 (_ "JMdict")) | |
37 | + | (p (_ "The <a href=\"~a\">JMdict</a> project has as its goal the | |
38 | + | production of a freely available Japanese/English Dictionary in | |
39 | + | machine-readable form." | |
40 | + | "https://www.edrdg.org/jmdict/edict_doc.html")) | |
41 | + | (p (_ "This source is licensed under <a href=\"~a\">Creative Commons | |
42 | + | Share-Alike</a>. This data is available in monolingual (English) and multilingual, | |
43 | + | including Dutch, French, German and others." | |
44 | + | "https://creativecommons.org/licenses/by-sa/3.0/")) | |
45 | + | (p (_ "The original files are XML files with lots of entries. Since it's | |
46 | + | hard to search inside such big XML files, we modify them into a binary format | |
47 | + | that contains a search tree which makes it so much efficient to look for data.")))) | |
48 | + | nani-theme)) |
pages/documentation.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages documentation) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page-documentation)) | |
23 | + | ||
24 | + | (define page-documentation | |
25 | + | (internationalize "documentation" "documentation" | |
26 | + | `(div | |
27 | + | (h1 (_ "Documentation")) | |
28 | + | (div (@ (class "article")) | |
29 | + | (p (_ "This documentation will guide you in some of the most important | |
30 | + | aspects of the application. Please read it carefuly!")) | |
31 | + | (h2 (_ "Downloading a dictionary")) | |
32 | + | (p (_ "This application is based on multiple dictionaries that | |
33 | + | you can download in the app. They all add some functionality to the application. | |
34 | + | In the following sections we will see how to use them.")) | |
35 | + | (p (_ "To download a dictionary, you need to click on the three dots | |
36 | + | at the top right of the screens and select ???Manage Dictionaries???. This will | |
37 | + | open a new view where you can select a dictionary in a list.")) | |
38 | + | (p (_ "Tap on the dictionary you want to add. You will be presented | |
39 | + | with more details on the dictionary and options to download, refresh or delete | |
40 | + | it. Once you have successfuly downloaded a dictionary, you are ready to use | |
41 | + | the app!")) | |
42 | + | (h2 (_ "Searching vocabulary")) | |
43 | + | (p (_ "To be able to look for vocabulary, you must first download a | |
44 | + | dictionary. There are dictionaries for different languages.")) | |
45 | + | (p (_ "From the main view, tap on the search bar and type your search | |
46 | + | term. It can be a word written in kanji, with its pronounciation or the meaning | |
47 | + | of a word in the language of a dictionary you downloaded.")) | |
48 | + | (p (_ "Tap on the search button and you'll see the results. Easy, right?")) | |
49 | + | (h2 (_ "Settings")) | |
50 | + | (p (_ "There are currently no settings.")) | |
51 | + | (h2 (_ "Building the app")) | |
52 | + | (p (_ "To develop the app, I use android studio. This is the best way to | |
53 | + | build it, because you can easily modify some of it too. If you don't want to | |
54 | + | use android studio, you can still build the app with only gradle.")) | |
55 | + | (h2 (_ "You can help too!")) | |
56 | + | (p (_ "Lastly, note that you can help make this app the best. You can help | |
57 | + | in so many different ways, some of the greatest are listed below:")) | |
58 | + | (ul | |
59 | + | (li (_ "<a href=\"~a\">Translate</a> the app and this website" | |
60 | + | "https://framagit.org/nani-project")) | |
61 | + | (li (_ "Talk about it to fellow Japanese learners")) | |
62 | + | (li (_ "<a href=\"~a\">Report</a> a bug, or two" | |
63 | + | "https://framagit.org/nani-project/nani-app/issues")) | |
64 | + | (li (_ "<a href=\"~a\">Suggest</a> improvements and more data sources" | |
65 | + | "https://framagit.org/nani-project/nani-app/issues")) | |
66 | + | (li (_ "Write some code and send me a patch"))) | |
67 | + | (p (_ "In any case, I hope you will enjoy Nani as much as I enjoyed writting | |
68 | + | it!")))) | |
69 | + | nani-theme)) |
pages/e404.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages e404) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page404)) | |
23 | + | ||
24 | + | (define page404 | |
25 | + | (internationalize "404" "404" | |
26 | + | `(center (h1 (_ "That's a 404 :/")) (img (@ (src "/images/404.svg")))) | |
27 | + | nani-theme)) |
pages/feeds.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages feeds) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page-feeds)) | |
23 | + | ||
24 | + | (define page-feeds | |
25 | + | (internationalize "index" "index" | |
26 | + | `() | |
27 | + | nani-theme)) |
pages/index.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages index) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page-index)) | |
23 | + | ||
24 | + | (define page-index | |
25 | + | (internationalize "index" "index" | |
26 | + | `(div | |
27 | + | (div (@ (id "hero")) | |
28 | + | (h1 (_ "OFFLINE JAPANESE DICTIONARY")) | |
29 | + | (nav | |
30 | + | (a (@ (href "https://f-droid.org/app/eu.lepiller.nani")) | |
31 | + | ;; Get more badge urls at | |
32 | + | ;; https://gitlab.com/fdroid/artwork/tree/master/badge | |
33 | + | ;; TRANSLATORS: rename this file to /images/get-it-on-<lang>.png | |
34 | + | (_ "<img src=\"/images/get-it-on-en.png\" />")))) | |
35 | + | (h2 (@ (id "after-hero")) (_ "Features")) | |
36 | + | (p (_ "Offline Japanese dictionary, with meaning, pronounciation, kanji and more!")) | |
37 | + | (div (@ (id "features")) | |
38 | + | (div | |
39 | + | (h3 (_ "Specialized dictionary")) | |
40 | + | (ul | |
41 | + | (li (_ "Search by kanji, reading and meaning")) | |
42 | + | (li (_ "Multiple propositions")) | |
43 | + | (li (_ "Works offline with the features you want")) | |
44 | + | (li (_ "Multiple languages supported: English, French, German, and more")))) | |
45 | + | (div | |
46 | + | (h3 (_ "Free Software and Open Data")) | |
47 | + | (ul | |
48 | + | (li (_ "Free software application")) | |
49 | + | (li (_ "No tracker, no ad, no suspicious permission")) | |
50 | + | (li (_ "Many open <a href=\"/data.html\">data providers</a>")) | |
51 | + | (li (_ "You can build it, contribute to it and its data sources")))))) | |
52 | + | nani-theme)) |
pages/mentions.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (pages mentions) | |
20 | + | #:use-module (tools i18n) | |
21 | + | #:use-module (tools theme) | |
22 | + | #:export (page-mentions)) | |
23 | + | ||
24 | + | (define page-mentions | |
25 | + | (internationalize "Mentions l??gales" "mentions" | |
26 | + | `(article (@ (class "article")) | |
27 | + | (h1 (_ "Legal notices")) | |
28 | + | (p (_ "This website is edited by Julien Lepiller and hosted by <a href=\"~a\" target=\"_blank\">One provider</a>." | |
29 | + | "https://oneprovider.com")) | |
30 | + | (p (_ "Head office: ") "3275 Av Francis-Hughes, Laval, QC H7L 5A5 Canada") | |
31 | + | (p (_ "Phone: ") "+1.514.286.0253") | |
32 | + | (p (_ "This website and the application do not collect or store personal information | |
33 | + | other than what is technically necessary to deliver web pages and content to the user."))) | |
34 | + | nani-theme)) |
po/fr.po unknown status 1
1 | + | # French translations for PACKAGE package. | |
2 | + | # Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER | |
3 | + | # This file is distributed under the same license as the PACKAGE package. | |
4 | + | # root <julien@lepiller.eu>, 2019. | |
5 | + | # | |
6 | + | msgid "" | |
7 | + | msgstr "" | |
8 | + | "Project-Id-Version: PACKAGE VERSION\n" | |
9 | + | "Report-Msgid-Bugs-To: \n" | |
10 | + | "POT-Creation-Date: 2019-05-15 10:27+0200\n" | |
11 | + | "PO-Revision-Date: 2019-04-16 18:08+0200\n" | |
12 | + | "Last-Translator: root <julien@lepiller.eu>\n" | |
13 | + | "Language-Team: French\n" | |
14 | + | "Language: fr\n" | |
15 | + | "MIME-Version: 1.0\n" | |
16 | + | "Content-Type: text/plain; charset=UTF-8\n" | |
17 | + | "Content-Transfer-Encoding: 8bit\n" | |
18 | + | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | |
19 | + | ||
20 | + | #: pages/documentation.scm:62 | |
21 | + | #, scheme-format | |
22 | + | msgid "<a href=\"~a\">Report</a> a bug, or two" | |
23 | + | msgstr "<a href=\"~a\">Rapportez</a> un bogue, voir deux," | |
24 | + | ||
25 | + | #: pages/documentation.scm:64 | |
26 | + | #, scheme-format | |
27 | + | msgid "<a href=\"~a\">Suggest</a> improvements and more data sources" | |
28 | + | msgstr "" | |
29 | + | "<a href=\"~a\">Sugg??rez</a> des am??liorations et des sources de donn??es " | |
30 | + | "suppl??mentaires," | |
31 | + | ||
32 | + | #: pages/documentation.scm:59 | |
33 | + | #, scheme-format | |
34 | + | msgid "<a href=\"~a\">Translate</a> the app and this website" | |
35 | + | msgstr "<a href=\"~a\">Traduisez</a> l'appli et ce site web" | |
36 | + | ||
37 | + | #. Get more badge urls at | |
38 | + | #. https://gitlab.com/fdroid/artwork/tree/master/badge | |
39 | + | #. TRANSLATORS: rename this file to /images/get-it-on-<lang>.png | |
40 | + | #: pages/index.scm:34 | |
41 | + | msgid "<img src=\"/images/get-it-on-en.png\" />" | |
42 | + | msgstr "<img src=\"/images/get-it-on-fr.png\" />" | |
43 | + | ||
44 | + | #: tools/theme.scm:50 | |
45 | + | msgid "Build it" | |
46 | + | msgstr "Construisez-la" | |
47 | + | ||
48 | + | #: pages/documentation.scm:51 | |
49 | + | msgid "Building the app" | |
50 | + | msgstr "Construire l'application" | |
51 | + | ||
52 | + | #: pages/data.scm:27 | |
53 | + | msgid "Data Sources" | |
54 | + | msgstr "Sources de donn??es" | |
55 | + | ||
56 | + | #: pages/documentation.scm:27 tools/theme.scm:48 | |
57 | + | msgid "Documentation" | |
58 | + | msgstr "Documentation" | |
59 | + | ||
60 | + | #: pages/documentation.scm:31 | |
61 | + | msgid "Downloading a dictionary" | |
62 | + | msgstr "T??l??charger un dictionnaire" | |
63 | + | ||
64 | + | #: pages/data.scm:31 | |
65 | + | msgid "Electronic Dictionary Research and Development Group" | |
66 | + | msgstr "Electronic Dictionary Research and Development Group" | |
67 | + | ||
68 | + | #: pages/index.scm:35 tools/theme.scm:47 | |
69 | + | msgid "Features" | |
70 | + | msgstr "Fonctionalit??s" | |
71 | + | ||
72 | + | #: pages/index.scm:46 | |
73 | + | msgid "Free Software and Open Data" | |
74 | + | msgstr "Logiciel libre et open data" | |
75 | + | ||
76 | + | #: pages/index.scm:48 | |
77 | + | msgid "Free software application" | |
78 | + | msgstr "Cette application est un logiciel libre" | |
79 | + | ||
80 | + | #: pages/documentation.scm:45 | |
81 | + | msgid "" | |
82 | + | "From the main view, tap on the search bar and type your search\n" | |
83 | + | "term. It can be a word written in kanji, with its pronounciation or the " | |
84 | + | "meaning\n" | |
85 | + | "of a word in the language of a dictionary you downloaded." | |
86 | + | msgstr "" | |
87 | + | "Depuis la vue principale, appuyez sur la barre de recherche et saisissez " | |
88 | + | "votre recherche. Elle peut contenir un mot ??crit en kanji, sa prononciation " | |
89 | + | "en hiragana ou son sens dans l'une des langues pour lesquelles vous avez " | |
90 | + | "t??l??charg?? un dictionnaire." | |
91 | + | ||
92 | + | #: pages/mentions.scm:30 | |
93 | + | msgid "Head office: " | |
94 | + | msgstr "Si??ge social : " | |
95 | + | ||
96 | + | #: pages/documentation.scm:67 | |
97 | + | msgid "" | |
98 | + | "In any case, I hope you will enjoy Nani as much as I enjoyed writting\n" | |
99 | + | "it!" | |
100 | + | msgstr "" | |
101 | + | "Dans tous les cas, j'esp??re que vous appr??cierez Nani autant que j'ai " | |
102 | + | "appr??ci?? l'??crire !" | |
103 | + | ||
104 | + | #: pages/data.scm:36 | |
105 | + | msgid "JMdict" | |
106 | + | msgstr "JMdict" | |
107 | + | ||
108 | + | #: pages/documentation.scm:56 | |
109 | + | msgid "" | |
110 | + | "Lastly, note that you can help make this app the best. You can help\n" | |
111 | + | "in so many different ways, some of the greatest are listed below:" | |
112 | + | msgstr "" | |
113 | + | "Enfin, remarquez que vous pouvez aider ?? faire de cette appli une " | |
114 | + | "r??f??rence ! Vous pouvez aider de nombreuses mani??res, dont voici quelques-" | |
115 | + | "unes :" | |
116 | + | ||
117 | + | #: pages/mentions.scm:27 tools/theme.scm:56 | |
118 | + | msgid "Legal notices" | |
119 | + | msgstr "Mentions l??gales" | |
120 | + | ||
121 | + | #: pages/index.scm:50 | |
122 | + | msgid "Many open <a href=\"/data.html\">data providers</a>" | |
123 | + | msgstr "De nombreux <a href=\"/data.html\">fournisseurs open data</a>," | |
124 | + | ||
125 | + | #: pages/index.scm:44 | |
126 | + | msgid "Multiple languages supported: English, French, German, and more" | |
127 | + | msgstr "" | |
128 | + | "Plusieurs langues support??es : l'anglais, le fran??ais, l'allemand et bien " | |
129 | + | "d'autres," | |
130 | + | ||
131 | + | #: pages/index.scm:42 | |
132 | + | msgid "Multiple propositions" | |
133 | + | msgstr "Plusieurs propositions" | |
134 | + | ||
135 | + | #: pages/data.scm:29 | |
136 | + | msgid "" | |
137 | + | "Nani uses various open data sources to provide its functionalities.\n" | |
138 | + | "This page lists data sources, content and processes." | |
139 | + | msgstr "" | |
140 | + | "Nani utilise diverses sources de donn??es en open data pour fournir toutes " | |
141 | + | "ses fonctionalit??s. Cette page liste les sources de donn??es, leur contenu et " | |
142 | + | "la mani??re dont elles sont trait??es." | |
143 | + | ||
144 | + | #: pages/index.scm:49 | |
145 | + | msgid "No tracker, no ad, no suspicious permission" | |
146 | + | msgstr "Pas de tracker, de pub ni de permission suspecte," | |
147 | + | ||
148 | + | #: pages/index.scm:28 | |
149 | + | msgid "OFFLINE JAPANESE DICTIONARY" | |
150 | + | msgstr "DICTIONNAIRE JAPONAIS HORS-LIGNE" | |
151 | + | ||
152 | + | #: pages/index.scm:36 | |
153 | + | msgid "" | |
154 | + | "Offline Japanese dictionary, with meaning, pronounciation, kanji and more!" | |
155 | + | msgstr "" | |
156 | + | "Dictionnaire japonais hors-ligne, avec la signification, la prononciation, " | |
157 | + | "les kanji et bien plus encore !" | |
158 | + | ||
159 | + | #: pages/mentions.scm:31 | |
160 | + | msgid "Phone: " | |
161 | + | msgstr "T??l??phone : " | |
162 | + | ||
163 | + | #: tools/theme.scm:88 | |
164 | + | msgid "Read" | |
165 | + | msgstr "Lire" | |
166 | + | ||
167 | + | #: pages/index.scm:41 | |
168 | + | msgid "Search by kanji, reading and meaning" | |
169 | + | msgstr "Recherchez par kanji, lecture ou signification" | |
170 | + | ||
171 | + | #: pages/documentation.scm:42 | |
172 | + | msgid "Searching vocabulary" | |
173 | + | msgstr "Rechercher du vocabulaire" | |
174 | + | ||
175 | + | #: pages/documentation.scm:49 | |
176 | + | msgid "Settings" | |
177 | + | msgstr "Param??tres" | |
178 | + | ||
179 | + | #: pages/index.scm:39 | |
180 | + | msgid "Specialized dictionary" | |
181 | + | msgstr "Dictionnaire sp??cialis??" | |
182 | + | ||
183 | + | #: pages/documentation.scm:61 | |
184 | + | msgid "Talk about it to fellow Japanese learners" | |
185 | + | msgstr "Parlez-en autour de vous" | |
186 | + | ||
187 | + | #: pages/documentation.scm:38 | |
188 | + | msgid "" | |
189 | + | "Tap on the dictionary you want to add. You will be presented\n" | |
190 | + | "with more details on the dictionary and options to download, refresh or " | |
191 | + | "delete\n" | |
192 | + | "it. Once you have successfuly downloaded a dictionary, you are ready to use\n" | |
193 | + | "the app!" | |
194 | + | msgstr "" | |
195 | + | "Appuyez sur le dictionnaire que vous voulez ajouter. Vous arriverez sur une " | |
196 | + | "page avec plus de d??tails sur le dictionnaire et des options pour " | |
197 | + | "t??l??charger, mettre ?? jour et supprimer le dictionnaire. Une fois que vous " | |
198 | + | "avez r??ussi ?? t??l??charger un dictionnaire, vous ??tes pr??t ?? utiliser " | |
199 | + | "l'appli !" | |
200 | + | ||
201 | + | #: pages/documentation.scm:48 | |
202 | + | msgid "Tap on the search button and you'll see the results. Easy, right?" | |
203 | + | msgstr "" | |
204 | + | "Appuyez sur le bouton de recherche et vous verrez les r??sultats. Plut??t " | |
205 | + | "simple, non ?" | |
206 | + | ||
207 | + | #: pages/e404.scm:26 | |
208 | + | msgid "That's a 404 :/" | |
209 | + | msgstr "C'est une erreur 404 :/" | |
210 | + | ||
211 | + | #: pages/data.scm:37 | |
212 | + | #, scheme-format | |
213 | + | msgid "" | |
214 | + | "The <a href=\"~a\">JMdict</a> project has as its goal the\n" | |
215 | + | "production of a freely available Japanese/English Dictionary in\n" | |
216 | + | "machine-readable form." | |
217 | + | msgstr "" | |
218 | + | "Le projet <a href=\"~a\">JMdict</a> a pour but de produire un dictionnaire " | |
219 | + | "japonais/anglais librement disponible dans un format lisible par une machine." | |
220 | + | ||
221 | + | #: pages/data.scm:32 | |
222 | + | msgid "" | |
223 | + | "The Electronic Dictionary Research and Development Group was\n" | |
224 | + | "established in 2000 within the Faculty of Information Technology, Monash\n" | |
225 | + | "University. Its goals are providing electronic dictionaries and\n" | |
226 | + | "computational linguistics." | |
227 | + | msgstr "" | |
228 | + | "Le <em lang=\"en\">Electronic Dictionary Research and Development Group</em> " | |
229 | + | "a d??marr?? en 2000 dans la facult?? des technologies de l'information de " | |
230 | + | "l'universit?? de Monash. Son but est de fournir des dictionnaires " | |
231 | + | "??lectroniques et la linguistique informatique." | |
232 | + | ||
233 | + | #: pages/data.scm:45 | |
234 | + | msgid "" | |
235 | + | "The original files are XML files with lots of entries. Since it's\n" | |
236 | + | "hard to search inside such big XML files, we modify them into a binary " | |
237 | + | "format\n" | |
238 | + | "that contains a search tree which makes it so much efficient to look for " | |
239 | + | "data." | |
240 | + | msgstr "" | |
241 | + | "Les fichiers de d??part sont des fichiers XML avec beaucoup d'entr??es. Comme " | |
242 | + | "il est difficile de rechercher dans des XML aussi gros, nous les modifions " | |
243 | + | "en un format binaire qui contient des arbres de recherche qui rendent plus " | |
244 | + | "efficaces la recherche de donn??es." | |
245 | + | ||
246 | + | #: tools/theme.scm:57 | |
247 | + | #, scheme-format | |
248 | + | msgid "" | |
249 | + | "The source of this website can be seen at\n" | |
250 | + | "<a href=\"~a\">framagit</a>. This website is free software; you can " | |
251 | + | "redistribute\n" | |
252 | + | "it and/or modify it under the terms of the GNU Affero General Public " | |
253 | + | "License\n" | |
254 | + | "as published by the Free Software Foundation; either version 3 of the " | |
255 | + | "License,\n" | |
256 | + | "or (at your option) any later version." | |
257 | + | msgstr "" | |
258 | + | "Vous pouvez voir la source de ce site sur <a href=\"~a\">framagit</a>. Ce " | |
259 | + | "site est un logiciel libre ; vous pouvez le redistribuer ou le modifier sous " | |
260 | + | "les termes de la license GNU Affero General Public License telle que publi??e " | |
261 | + | "par la Free Software Foundation ; soit en version 3, soit (?? votre gr??) en " | |
262 | + | "une version ult??rieure." | |
263 | + | ||
264 | + | #: pages/documentation.scm:50 | |
265 | + | msgid "There are currently no settings." | |
266 | + | msgstr "Il n'y a pas encore de param??tre." | |
267 | + | ||
268 | + | #: pages/documentation.scm:32 | |
269 | + | msgid "" | |
270 | + | "This application is based on multiple dictionaries that\n" | |
271 | + | "you can download in the app. They all add some functionality to the " | |
272 | + | "application.\n" | |
273 | + | "In the following sections we will see how to use them." | |
274 | + | msgstr "" | |
275 | + | "Cette application est bas??e sur divers dictionnaires que vous pouvez " | |
276 | + | "t??l??charger dans l'appli. Ils ajoutent tous certaines fonctionnalit??s ?? " | |
277 | + | "l'application. Dans les sections suivantes, nous verrons comment les " | |
278 | + | "utiliser." | |
279 | + | ||
280 | + | #: pages/documentation.scm:29 | |
281 | + | msgid "" | |
282 | + | "This documentation will guide you in some of the most important\n" | |
283 | + | "aspects of the application. Please read it carefuly!" | |
284 | + | msgstr "" | |
285 | + | "Cette documentation vous guidera sur certains aspets les plus importants de " | |
286 | + | "l'application. Lisez-la attentivement !" | |
287 | + | ||
288 | + | #: pages/data.scm:41 | |
289 | + | #, scheme-format | |
290 | + | msgid "" | |
291 | + | "This source is licensed under <a href=\"~a\">Creative Commons\n" | |
292 | + | "Share-Alike</a>. This data is available in monolingual (English) and " | |
293 | + | "multilingual,\n" | |
294 | + | "including Dutch, French, German and others." | |
295 | + | msgstr "" | |
296 | + | "Cette source est disponible sous license <a href=\"~a\">Creative Commons " | |
297 | + | "Share-Alike</a>. Ces donn??es sont disponibles sous forme monolingue " | |
298 | + | "(anglais) et multilingue, dont le n??erlandais, le fran??ais, l'allemand et " | |
299 | + | "d'autres langues." | |
300 | + | ||
301 | + | #: pages/mentions.scm:32 | |
302 | + | msgid "" | |
303 | + | "This website and the application do not collect or store personal " | |
304 | + | "information\n" | |
305 | + | "other than what is technically necessary to deliver web pages and content to " | |
306 | + | "the user." | |
307 | + | msgstr "" | |
308 | + | "Ce sit eweb et l'application ne collectent ni ne stoquent de donn??es " | |
309 | + | "personnelles autres que celles techniquement n??cessaires pour d??livrer les " | |
310 | + | "pages web et le contenu ?? l'utilisateur." | |
311 | + | ||
312 | + | #: pages/mentions.scm:28 | |
313 | + | #, scheme-format | |
314 | + | msgid "" | |
315 | + | "This website is edited by Julien Lepiller and hosted by <a href=\"~a\" " | |
316 | + | "target=\"_blank\">One provider</a>." | |
317 | + | msgstr "" | |
318 | + | "Ce site web est ??dit?? par Julien Lepiller et h??berg?? par <a href=\"~a\" " | |
319 | + | "target=\"_blank\">One provider</a>." | |
320 | + | ||
321 | + | #: pages/documentation.scm:43 | |
322 | + | msgid "" | |
323 | + | "To be able to look for vocabulary, you must first download a\n" | |
324 | + | "dictionary. There are dictionaries for different languages." | |
325 | + | msgstr "" | |
326 | + | "Pour rechercher du vocabulaire, vous devez d'abord t??l??charger un " | |
327 | + | "dictionnaire. Il y a des dictionnaires pour diff??rentes langues." | |
328 | + | ||
329 | + | #: pages/documentation.scm:52 | |
330 | + | msgid "" | |
331 | + | "To develop the app, I use android studio. This is the best way to\n" | |
332 | + | "build it, because you can easily modify some of it too. If you don't want " | |
333 | + | "to\n" | |
334 | + | "use android studio, you can still build the app with only gradle." | |
335 | + | msgstr "" | |
336 | + | "Pour d??velopper l'appli, j'utilise android studio. C'est la meilleure fa??on " | |
337 | + | "de la construire, parce que vous pouvez facilement la modifier. Si vous ne " | |
338 | + | "voulez pas utiliser android studio, vous pouvez toujours construire " | |
339 | + | "l'application avec seulement gradle." | |
340 | + | ||
341 | + | #: pages/documentation.scm:35 | |
342 | + | msgid "" | |
343 | + | "To download a dictionary, you need to click on the three dots\n" | |
344 | + | "at the top right of the screens and select ???Manage Dictionaries???. This will\n" | |
345 | + | "open a new view where you can select a dictionary in a list." | |
346 | + | msgstr "" | |
347 | + | "Pour t??l??charger un dictionnaire, vous devez appuyer sur les trois points en " | |
348 | + | "haut ?? droite de l'??cran et choisir ?? g??rer les dictionnaires ??. Cela vous " | |
349 | + | "am??nera ?? une nouvelle vue o?? vous pourrez choisir un dictionnaire dans une " | |
350 | + | "liste." | |
351 | + | ||
352 | + | #: tools/theme.scm:75 | |
353 | + | msgid "View posts for every language" | |
354 | + | msgstr "Voir les billets dans toutes les langues" | |
355 | + | ||
356 | + | #: pages/index.scm:43 | |
357 | + | msgid "Works offline with the features you want" | |
358 | + | msgstr "Fonctionne hors lignes avec les fonctionnalit??s que vous choisissez" | |
359 | + | ||
360 | + | #: pages/documentation.scm:66 | |
361 | + | msgid "Write some code and send me a patch" | |
362 | + | msgstr "??crivez du code et envoyez-moi des correctifs" | |
363 | + | ||
364 | + | #: pages/index.scm:51 | |
365 | + | msgid "You can build it, contribute to it and its data sources" | |
366 | + | msgstr "" | |
367 | + | "Vous pouvez la construire, contribuer ?? son d??veloppement et ?? ses sources " | |
368 | + | "de donn??es" | |
369 | + | ||
370 | + | #: pages/documentation.scm:55 | |
371 | + | msgid "You can help too!" | |
372 | + | msgstr "Vous aussi, vous pouvez aider !" | |
373 | + | ||
374 | + | #: tools/theme.scm:67 | |
375 | + | #, scheme-format | |
376 | + | msgid "by ~a ??? ~a" | |
377 | + | msgstr "par ~a ??? ~a" |
po/nani.pot unknown status 1
1 | + | # SOME DESCRIPTIVE TITLE. | |
2 | + | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
3 | + | # This file is distributed under the same license as the PACKAGE package. | |
4 | + | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
5 | + | # | |
6 | + | #, fuzzy | |
7 | + | msgid "" | |
8 | + | msgstr "" | |
9 | + | "Project-Id-Version: PACKAGE VERSION\n" | |
10 | + | "Report-Msgid-Bugs-To: \n" | |
11 | + | "POT-Creation-Date: 2019-05-15 10:30+0200\n" | |
12 | + | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
13 | + | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
14 | + | "Language-Team: LANGUAGE <LL@li.org>\n" | |
15 | + | "Language: \n" | |
16 | + | "MIME-Version: 1.0\n" | |
17 | + | "Content-Type: text/plain; charset=UTF-8\n" | |
18 | + | "Content-Transfer-Encoding: 8bit\n" | |
19 | + | ||
20 | + | #: pages/documentation.scm:62 | |
21 | + | #, scheme-format | |
22 | + | msgid "<a href=\"~a\">Report</a> a bug, or two" | |
23 | + | msgstr "" | |
24 | + | ||
25 | + | #: pages/documentation.scm:64 | |
26 | + | #, scheme-format | |
27 | + | msgid "<a href=\"~a\">Suggest</a> improvements and more data sources" | |
28 | + | msgstr "" | |
29 | + | ||
30 | + | #: pages/documentation.scm:59 | |
31 | + | #, scheme-format | |
32 | + | msgid "<a href=\"~a\">Translate</a> the app and this website" | |
33 | + | msgstr "" | |
34 | + | ||
35 | + | #. Get more badge urls at | |
36 | + | #. https://gitlab.com/fdroid/artwork/tree/master/badge | |
37 | + | #. TRANSLATORS: rename this file to /images/get-it-on-<lang>.png | |
38 | + | #: pages/index.scm:34 | |
39 | + | msgid "<img src=\"/images/get-it-on-en.png\" />" | |
40 | + | msgstr "" | |
41 | + | ||
42 | + | #: tools/theme.scm:50 | |
43 | + | msgid "Build it" | |
44 | + | msgstr "" | |
45 | + | ||
46 | + | #: pages/documentation.scm:51 | |
47 | + | msgid "Building the app" | |
48 | + | msgstr "" | |
49 | + | ||
50 | + | #: pages/data.scm:27 | |
51 | + | msgid "Data Sources" | |
52 | + | msgstr "" | |
53 | + | ||
54 | + | #: pages/documentation.scm:27 tools/theme.scm:48 | |
55 | + | msgid "Documentation" | |
56 | + | msgstr "" | |
57 | + | ||
58 | + | #: pages/documentation.scm:31 | |
59 | + | msgid "Downloading a dictionary" | |
60 | + | msgstr "" | |
61 | + | ||
62 | + | #: pages/data.scm:31 | |
63 | + | msgid "Electronic Dictionary Research and Development Group" | |
64 | + | msgstr "" | |
65 | + | ||
66 | + | #: pages/index.scm:35 tools/theme.scm:47 | |
67 | + | msgid "Features" | |
68 | + | msgstr "" | |
69 | + | ||
70 | + | #: pages/index.scm:46 | |
71 | + | msgid "Free Software and Open Data" | |
72 | + | msgstr "" | |
73 | + | ||
74 | + | #: pages/index.scm:48 | |
75 | + | msgid "Free software application" | |
76 | + | msgstr "" | |
77 | + | ||
78 | + | #: pages/documentation.scm:45 | |
79 | + | msgid "" | |
80 | + | "From the main view, tap on the search bar and type your search\n" | |
81 | + | "term. It can be a word written in kanji, with its pronounciation or the " | |
82 | + | "meaning\n" | |
83 | + | "of a word in the language of a dictionary you downloaded." | |
84 | + | msgstr "" | |
85 | + | ||
86 | + | #: pages/mentions.scm:30 | |
87 | + | msgid "Head office: " | |
88 | + | msgstr "" | |
89 | + | ||
90 | + | #: pages/documentation.scm:67 | |
91 | + | msgid "" | |
92 | + | "In any case, I hope you will enjoy Nani as much as I enjoyed writting\n" | |
93 | + | "it!" | |
94 | + | msgstr "" | |
95 | + | ||
96 | + | #: pages/data.scm:36 | |
97 | + | msgid "JMdict" | |
98 | + | msgstr "" | |
99 | + | ||
100 | + | #: pages/documentation.scm:56 | |
101 | + | msgid "" | |
102 | + | "Lastly, note that you can help make this app the best. You can help\n" | |
103 | + | "in so many different ways, some of the greatest are listed below:" | |
104 | + | msgstr "" | |
105 | + | ||
106 | + | #: pages/mentions.scm:27 tools/theme.scm:56 | |
107 | + | msgid "Legal notices" | |
108 | + | msgstr "" | |
109 | + | ||
110 | + | #: pages/index.scm:50 | |
111 | + | msgid "Many open <a href=\"/data.html\">data providers</a>" | |
112 | + | msgstr "" | |
113 | + | ||
114 | + | #: pages/index.scm:44 | |
115 | + | msgid "Multiple languages supported: English, French, German, and more" | |
116 | + | msgstr "" | |
117 | + | ||
118 | + | #: pages/index.scm:42 | |
119 | + | msgid "Multiple propositions" | |
120 | + | msgstr "" | |
121 | + | ||
122 | + | #: pages/data.scm:29 | |
123 | + | msgid "" | |
124 | + | "Nani uses various open data sources to provide its functionalities.\n" | |
125 | + | "This page lists data sources, content and processes." | |
126 | + | msgstr "" | |
127 | + | ||
128 | + | #: pages/index.scm:49 | |
129 | + | msgid "No tracker, no ad, no suspicious permission" | |
130 | + | msgstr "" | |
131 | + | ||
132 | + | #: pages/index.scm:28 | |
133 | + | msgid "OFFLINE JAPANESE DICTIONARY" | |
134 | + | msgstr "" | |
135 | + | ||
136 | + | #: pages/index.scm:36 | |
137 | + | msgid "" | |
138 | + | "Offline Japanese dictionary, with meaning, pronounciation, kanji and more!" | |
139 | + | msgstr "" | |
140 | + | ||
141 | + | #: pages/mentions.scm:31 | |
142 | + | msgid "Phone: " | |
143 | + | msgstr "" | |
144 | + | ||
145 | + | #: tools/theme.scm:88 | |
146 | + | msgid "Read" | |
147 | + | msgstr "" | |
148 | + | ||
149 | + | #: pages/index.scm:41 | |
150 | + | msgid "Search by kanji, reading and meaning" | |
151 | + | msgstr "" | |
152 | + | ||
153 | + | #: pages/documentation.scm:42 | |
154 | + | msgid "Searching vocabulary" | |
155 | + | msgstr "" | |
156 | + | ||
157 | + | #: pages/documentation.scm:49 | |
158 | + | msgid "Settings" | |
159 | + | msgstr "" | |
160 | + | ||
161 | + | #: pages/index.scm:39 | |
162 | + | msgid "Specialized dictionary" | |
163 | + | msgstr "" | |
164 | + | ||
165 | + | #: pages/documentation.scm:61 | |
166 | + | msgid "Talk about it to fellow Japanese learners" | |
167 | + | msgstr "" | |
168 | + | ||
169 | + | #: pages/documentation.scm:38 | |
170 | + | msgid "" | |
171 | + | "Tap on the dictionary you want to add. You will be presented\n" | |
172 | + | "with more details on the dictionary and options to download, refresh or " | |
173 | + | "delete\n" | |
174 | + | "it. Once you have successfuly downloaded a dictionary, you are ready to use\n" | |
175 | + | "the app!" | |
176 | + | msgstr "" | |
177 | + | ||
178 | + | #: pages/documentation.scm:48 | |
179 | + | msgid "Tap on the search button and you'll see the results. Easy, right?" | |
180 | + | msgstr "" | |
181 | + | ||
182 | + | #: pages/e404.scm:26 | |
183 | + | msgid "That's a 404 :/" | |
184 | + | msgstr "" | |
185 | + | ||
186 | + | #: pages/data.scm:37 | |
187 | + | #, scheme-format | |
188 | + | msgid "" | |
189 | + | "The <a href=\"~a\">JMdict</a> project has as its goal the\n" | |
190 | + | "production of a freely available Japanese/English Dictionary in\n" | |
191 | + | "machine-readable form." | |
192 | + | msgstr "" | |
193 | + | ||
194 | + | #: pages/data.scm:32 | |
195 | + | msgid "" | |
196 | + | "The Electronic Dictionary Research and Development Group was\n" | |
197 | + | "established in 2000 within the Faculty of Information Technology, Monash\n" | |
198 | + | "University. Its goals are providing electronic dictionaries and\n" | |
199 | + | "computational linguistics." | |
200 | + | msgstr "" | |
201 | + | ||
202 | + | #: pages/data.scm:45 | |
203 | + | msgid "" | |
204 | + | "The original files are XML files with lots of entries. Since it's\n" | |
205 | + | "hard to search inside such big XML files, we modify them into a binary " | |
206 | + | "format\n" | |
207 | + | "that contains a search tree which makes it so much efficient to look for " | |
208 | + | "data." | |
209 | + | msgstr "" | |
210 | + | ||
211 | + | #: tools/theme.scm:57 | |
212 | + | #, scheme-format | |
213 | + | msgid "" | |
214 | + | "The source of this website can be seen at\n" | |
215 | + | "<a href=\"~a\">framagit</a>. This website is free software; you can " | |
216 | + | "redistribute\n" | |
217 | + | "it and/or modify it under the terms of the GNU Affero General Public " | |
218 | + | "License\n" | |
219 | + | "as published by the Free Software Foundation; either version 3 of the " | |
220 | + | "License,\n" | |
221 | + | "or (at your option) any later version." | |
222 | + | msgstr "" | |
223 | + | ||
224 | + | #: pages/documentation.scm:50 | |
225 | + | msgid "There are currently no settings." | |
226 | + | msgstr "" | |
227 | + | ||
228 | + | #: pages/documentation.scm:32 | |
229 | + | msgid "" | |
230 | + | "This application is based on multiple dictionaries that\n" | |
231 | + | "you can download in the app. They all add some functionality to the " | |
232 | + | "application.\n" | |
233 | + | "In the following sections we will see how to use them." | |
234 | + | msgstr "" | |
235 | + | ||
236 | + | #: pages/documentation.scm:29 | |
237 | + | msgid "" | |
238 | + | "This documentation will guide you in some of the most important\n" | |
239 | + | "aspects of the application. Please read it carefuly!" | |
240 | + | msgstr "" | |
241 | + | ||
242 | + | #: pages/data.scm:41 | |
243 | + | #, scheme-format | |
244 | + | msgid "" | |
245 | + | "This source is licensed under <a href=\"~a\">Creative Commons\n" | |
246 | + | "Share-Alike</a>. This data is available in monolingual (English) and " | |
247 | + | "multilingual,\n" | |
248 | + | "including Dutch, French, German and others." | |
249 | + | msgstr "" | |
250 | + | ||
251 | + | #: pages/mentions.scm:32 | |
252 | + | msgid "" | |
253 | + | "This website and the application do not collect or store personal " | |
254 | + | "information\n" | |
255 | + | "other than what is technically necessary to deliver web pages and content to " | |
256 | + | "the user." | |
257 | + | msgstr "" | |
258 | + | ||
259 | + | #: pages/mentions.scm:28 | |
260 | + | #, scheme-format | |
261 | + | msgid "" | |
262 | + | "This website is edited by Julien Lepiller and hosted by <a href=\"~a\" " | |
263 | + | "target=\"_blank\">One provider</a>." | |
264 | + | msgstr "" | |
265 | + | ||
266 | + | #: pages/documentation.scm:43 | |
267 | + | msgid "" | |
268 | + | "To be able to look for vocabulary, you must first download a\n" | |
269 | + | "dictionary. There are dictionaries for different languages." | |
270 | + | msgstr "" | |
271 | + | ||
272 | + | #: pages/documentation.scm:52 | |
273 | + | msgid "" | |
274 | + | "To develop the app, I use android studio. This is the best way to\n" | |
275 | + | "build it, because you can easily modify some of it too. If you don't want " | |
276 | + | "to\n" | |
277 | + | "use android studio, you can still build the app with only gradle." | |
278 | + | msgstr "" | |
279 | + | ||
280 | + | #: pages/documentation.scm:35 | |
281 | + | msgid "" | |
282 | + | "To download a dictionary, you need to click on the three dots\n" | |
283 | + | "at the top right of the screens and select ???Manage Dictionaries???. This will\n" | |
284 | + | "open a new view where you can select a dictionary in a list." | |
285 | + | msgstr "" | |
286 | + | ||
287 | + | #: tools/theme.scm:75 | |
288 | + | msgid "View posts for every language" | |
289 | + | msgstr "" | |
290 | + | ||
291 | + | #: pages/index.scm:43 | |
292 | + | msgid "Works offline with the features you want" | |
293 | + | msgstr "" | |
294 | + | ||
295 | + | #: pages/documentation.scm:66 | |
296 | + | msgid "Write some code and send me a patch" | |
297 | + | msgstr "" | |
298 | + | ||
299 | + | #: pages/index.scm:51 | |
300 | + | msgid "You can build it, contribute to it and its data sources" | |
301 | + | msgstr "" | |
302 | + | ||
303 | + | #: pages/documentation.scm:55 | |
304 | + | msgid "You can help too!" | |
305 | + | msgstr "" | |
306 | + | ||
307 | + | #: tools/theme.scm:67 | |
308 | + | #, scheme-format | |
309 | + | msgid "by ~a ??? ~a" | |
310 | + | msgstr "" |
tools/i18n.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (tools i18n) | |
20 | + | #:use-module (haunt builder blog) | |
21 | + | #:use-module (haunt html) | |
22 | + | #:use-module (haunt page) | |
23 | + | #:use-module (sxml simple) | |
24 | + | #:use-module (ice-9 match) | |
25 | + | #:export (internationalize languages _ site-locale)) | |
26 | + | ||
27 | + | (define language-map | |
28 | + | `(("" . "en_US.UTF-8") | |
29 | + | ("en" . "en_US.UTF-8") | |
30 | + | ("fr" . "fr_FR.UTF-8"))) | |
31 | + | ||
32 | + | (define languages | |
33 | + | (map car language-map)) | |
34 | + | ||
35 | + | (define (site-locale locale) | |
36 | + | (setlocale LC_ALL | |
37 | + | (assoc-ref language-map locale)) | |
38 | + | (bindtextdomain "nani" (string-append (dirname (current-filename)) "/../po")) | |
39 | + | (textdomain "nani")) | |
40 | + | ||
41 | + | (site-locale "fr") | |
42 | + | ||
43 | + | (define (__ tr . args) | |
44 | + | (xml->sxml (apply format #f (format #f "<tr>~a</tr>" (gettext tr)) args))) | |
45 | + | ||
46 | + | (define (_ tr . args) | |
47 | + | (let ((res (apply __ tr args))) | |
48 | + | (match res | |
49 | + | ((*TOP* (tr rest ...)) rest)))) | |
50 | + | ||
51 | + | (define (tr body) | |
52 | + | (match body | |
53 | + | (('_ rest ...) (apply _ rest)) | |
54 | + | ((tag ('@ opt ...) rest ...) (apply list tag (apply list '@ opt) (map tr rest))) | |
55 | + | ((tag rest ...) (apply list tag (map tr rest))) | |
56 | + | (foo foo))) | |
57 | + | ||
58 | + | (define (make-my-page lang title filename body layout) | |
59 | + | (lambda (site posts) | |
60 | + | (define (my-body) | |
61 | + | (site-locale lang) | |
62 | + | (tr body)) | |
63 | + | (make-page (if (equal? lang "") | |
64 | + | (string-append filename ".html") | |
65 | + | (string-append filename "." lang ".html")) | |
66 | + | (with-layout (layout lang filename) site title (my-body)) | |
67 | + | sxml->html))) | |
68 | + | ||
69 | + | (define (internationalize title filename body layout) | |
70 | + | (map (lambda (lang) (make-my-page lang title filename body layout)) languages)) |
tools/theme.scm unknown status 1
1 | + | ;;; Nani Project website | |
2 | + | ;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu> | |
3 | + | ;;; | |
4 | + | ;;; This file is part of the Nani Project website. | |
5 | + | ;;; | |
6 | + | ;;; The Nani Project website is free software; you can redistribute it and/or modify it | |
7 | + | ;;; under the terms of the GNU Affero General Public License as published by | |
8 | + | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | + | ;;; your option) any later version. | |
10 | + | ;;; | |
11 | + | ;;; The Nani Project website is distributed in the hope that it will be useful, but | |
12 | + | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + | ;;; GNU Affero General Public License for more details. | |
15 | + | ;;; | |
16 | + | ;;; You should have received a copy of the GNU Affero General Public License | |
17 | + | ;;; along with the Nani Project website. If not, see <http://www.gnu.org/licenses/>. | |
18 | + | ||
19 | + | (define-module (tools theme) | |
20 | + | #:use-module (haunt builder blog) | |
21 | + | #:use-module (haunt post) | |
22 | + | #:use-module (haunt site) | |
23 | + | #:use-module (tools i18n) | |
24 | + | #:use-module (srfi srfi-1) | |
25 | + | #:export (nani-theme)) | |
26 | + | ||
27 | + | (define (nani-theme lang page) | |
28 | + | (theme #:name "Nani" | |
29 | + | #:layout | |
30 | + | (lambda (site title body) | |
31 | + | (site-locale lang) | |
32 | + | `((doctype "html") | |
33 | + | (head | |
34 | + | (meta (@ (charset "utf-8"))) | |
35 | + | (meta (@ (name "viewport") (content "width=device-width, initial-scale=1"))) | |
36 | + | (title ,(list title " ??? " (site-title site))) | |
37 | + | (link (@ (rel "stylesheet") (href "/css/nani.css"))) | |
38 | + | (link (@ (rel "stylesheet") (href "/css/device.css")))) | |
39 | + | (body (@ (lang ,lang)) | |
40 | + | (header | |
41 | + | (span (a (@ (href "/")) "????")) | |
42 | + | (nav (@ (id "main-menu")) | |
43 | + | (label (@ (for "hamburger") (id "hamburger-label")) | |
44 | + | (img (@ (alt "(open the menu)") (src "/images/hamburger.png")))) | |
45 | + | (input (@ (id "hamburger") (type "checkbox"))) | |
46 | + | (ul | |
47 | + | (li (a (@ (href "/index.html")) ,(_ "Features"))) | |
48 | + | (li (a (@ (href "/documentation.html")) ,(_ "Documentation"))) | |
49 | + | (li (a (@ (href "https://framagit.org/nani-project/nani-app")) | |
50 | + | ,(_ "Build it")))))) | |
51 | + | (div (@ (id "page")) | |
52 | + | (div (@ (id "content-block")) (div (@ (id "content")) ,body))) | |
53 | + | (footer | |
54 | + | (div (@ (class "footer-flex")) | |
55 | + | (p "?? Copyright Julien Lepiller 2019") | |
56 | + | (p (a (@ (href "/mentions.html")) ,(_ "Legal notices")))) | |
57 | + | (p ,(_ "The source of this website can be seen at | |
58 | + | <a href=\"~a\">framagit</a>. This website is free software; you can redistribute | |
59 | + | it and/or modify it under the terms of the GNU Affero General Public License | |
60 | + | as published by the Free Software Foundation; either version 3 of the License, | |
61 | + | or (at your option) any later version." | |
62 | + | "https://framagit.org/nani-project/nani-website")))))) | |
63 | + | #:post-template | |
64 | + | (lambda (post) | |
65 | + | `((article | |
66 | + | (h1 ,(post-ref post 'title)) | |
67 | + | (p (@ (class "date")) ,(_ "by ~a ??? ~a" (post-ref post 'author) (date->string* (post-date post)))) | |
68 | + | (div ,(post-sxml post))))) | |
69 | + | #:collection-template | |
70 | + | (lambda (site title posts prefix) | |
71 | + | (define (post-uri post) | |
72 | + | (string-append "/" (or prefix "") | |
73 | + | (site-post-slug site post) ".html")) | |
74 | + | `(div | |
75 | + | (p (a (@ (href "/blog-complete.html")) ,(_ "View posts for every language"))) | |
76 | + | (div (@ (id "post-list")) | |
77 | + | ,@(map (lambda (post) | |
78 | + | (let ((language (fold (lambda (key acc) (if (member key (post-ref post 'tags)) key acc)) "" languages))) | |
79 | + | `(div (@ (class ,(string-append "post " language))) | |
80 | + | (p (@ (class "title")) | |
81 | + | (a (@ (href ,(post-uri post))) | |
82 | + | ,(post-ref post 'title))) | |
83 | + | (p (@ (class "post-content")) | |
84 | + | ,(post-ref post 'summary)) | |
85 | + | (p (@ (class "date")) | |
86 | + | (span | |
87 | + | (a (@ (href ,(post-uri post))) | |
88 | + | ,(_ "Read"))) | |
89 | + | (span (@ (class ,language)) ,language) | |
90 | + | ,(date->string* (post-date post)))))) | |
91 | + | posts)))))) |