Version Description
- Added native MO compiler
- Added hash generation config option
- Added direct MO download from editor
- Fixed some translations and added German
Download this release
Release Info
Developer | timwhitlock |
Plugin | Loco Translate |
Version | 1.4 |
Comparing to | |
See all releases |
Code changes from version 1.3.1 to 1.4
- languages/loco-translate-de_DE.mo +0 -0
- languages/loco-translate-de_DE.po +483 -0
- languages/loco-translate-nl_BE.mo +0 -0
- languages/loco-translate-nl_BE.po +111 -35
- languages/loco-translate-nl_NL.mo +0 -0
- languages/loco-translate-nl_NL.po +111 -35
- languages/loco-translate.pot +111 -35
- lib/build/gettext-compiled.php +2 -2
- lib/build/locales-compiled.php +1 -1
- lib/build/shell-compiled.php +2 -2
- lib/build/test.php +85 -0
- lib/loco-admin.php +64 -11
- lib/loco-boot.php +21 -6
- loco.php +1 -1
- php/loco-download.php +60 -5
- php/loco-fatal.php +1 -1
- php/loco-posave.php +25 -22
- pub/css/loco-admin.css +1 -1
- pub/js/build/admin-poedit.js +114 -114
- pub/js/lang/dummy.js +21 -0
- pub/js/lang/dummy.php +17 -0
- pub/js/lang/loco-translate-de_DE.js +33 -0
- pub/js/lang/loco-translate-nl_BE.js +33 -0
- pub/js/lang/loco-translate-nl_NL.js +33 -0
- readme.txt +22 -13
- tpl/admin-fscheck.tpl.php +1 -1
- tpl/admin-list.tpl.php +1 -1
- tpl/admin-opts.tpl.php +39 -9
- tpl/admin-poedit.tpl.php +15 -4
languages/loco-translate-de_DE.mo
ADDED
Binary file
|
languages/loco-translate-de_DE.po
ADDED
@@ -0,0 +1,483 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Loco Translate\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: Thu Jan 02 2014 17:30:57 GMT+0000 (GMT)\n"
|
6 |
+
"PO-Revision-Date: Sat Jan 04 2014 20:45:42 GMT+0000 (GMT)\n"
|
7 |
+
"Last-Translator: admin <support@localise.biz>\n"
|
8 |
+
"Language-Team: \n"
|
9 |
+
"Language: German\n"
|
10 |
+
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
11 |
+
"MIME-Version: 1.0\n"
|
12 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
13 |
+
"Content-Transfer-Encoding: 8bit\n"
|
14 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
15 |
+
"X-Poedit-Basepath: .\n"
|
16 |
+
"X-Poedit-SearchPath-0: ..\n"
|
17 |
+
"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;"
|
18 |
+
"_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;"
|
19 |
+
"_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;"
|
20 |
+
"esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;"
|
21 |
+
"comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
|
22 |
+
"X-Generator: Loco - https://localise.biz/\n"
|
23 |
+
"X-Loco-Target-Locale: de_DE"
|
24 |
+
|
25 |
+
#. Translators: Bold text label in admin error messages
|
26 |
+
#: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
|
27 |
+
msgctxt "Message label"
|
28 |
+
msgid "Error"
|
29 |
+
msgstr "Fehler"
|
30 |
+
|
31 |
+
#: ../lib/loco-admin.php:24 ../pub/js/lang/dummy.php:6
|
32 |
+
msgctxt "Message label"
|
33 |
+
msgid "Warning"
|
34 |
+
msgstr "Warnung"
|
35 |
+
|
36 |
+
#: ../lib/loco-admin.php:33 ../pub/js/lang/dummy.php:5
|
37 |
+
msgctxt "Message label"
|
38 |
+
msgid "OK"
|
39 |
+
msgstr "OK"
|
40 |
+
|
41 |
+
#: ../lib/loco-admin.php:47
|
42 |
+
msgid "Settings saved"
|
43 |
+
msgstr "Einstellungen gespeichert"
|
44 |
+
|
45 |
+
#: ../lib/loco-admin.php:120
|
46 |
+
msgid "New PO file"
|
47 |
+
msgstr "Neue PO-Datei"
|
48 |
+
|
49 |
+
#: ../lib/loco-admin.php:230
|
50 |
+
msgid "You must specify a valid locale for a new PO file"
|
51 |
+
msgstr "Du musst einen gültigen Pfad für die PO-Datei angeben"
|
52 |
+
|
53 |
+
#: ../lib/loco-admin.php:252 ../lib/loco-admin.php:342
|
54 |
+
msgid "No translatable strings found"
|
55 |
+
msgstr "Keine übersetzbaren Zeichenketten gefunden"
|
56 |
+
|
57 |
+
#: ../lib/loco-admin.php:252
|
58 |
+
msgid "Cannot create a PO file."
|
59 |
+
msgstr "Erstellen der PO-Datei fehlgeschlagen."
|
60 |
+
|
61 |
+
#: ../lib/loco-admin.php:259
|
62 |
+
msgid "PO file already exists with locale %s"
|
63 |
+
msgstr "PO-Datei existiert schon unter %s"
|
64 |
+
|
65 |
+
#: ../lib/loco-admin.php:312
|
66 |
+
msgid ""
|
67 |
+
"File cannot be created automatically. Fix the file permissions or use Download "
|
68 |
+
"instead of Save"
|
69 |
+
msgstr ""
|
70 |
+
"Datei kann nicht automatisch erstellt werden. Setze die Datei-Zugriffsrechte "
|
71 |
+
"oder benutze Download anstatt Speichern"
|
72 |
+
|
73 |
+
#: ../lib/loco-admin.php:321 ../lib/loco-admin.php:330
|
74 |
+
msgid "%s file is empty"
|
75 |
+
msgstr "Datei (%s) ist leer"
|
76 |
+
|
77 |
+
#: ../lib/loco-admin.php:322 ../lib/loco-admin.php:337
|
78 |
+
msgid "Run Sync to update from source code"
|
79 |
+
msgstr "Benutze Sync, um von der Quelle zu aktualisieren"
|
80 |
+
|
81 |
+
#: ../lib/loco-admin.php:326
|
82 |
+
msgid "No strings could be extracted from source code"
|
83 |
+
msgstr "Es konnten keine Zeichenketten vom Quellcode extrahiert werden"
|
84 |
+
|
85 |
+
#: ../lib/loco-admin.php:333
|
86 |
+
msgid "Run Sync to update from %s"
|
87 |
+
msgstr "Benutze Sync, um aus %s zu aktualisieren"
|
88 |
+
|
89 |
+
#: ../lib/loco-admin.php:352
|
90 |
+
msgid "Source code has been modified, run Sync to update POT"
|
91 |
+
msgstr "Quellcode wurde geändert, benutze Sync um POT zu aktualisieren"
|
92 |
+
|
93 |
+
#: ../lib/loco-admin.php:356
|
94 |
+
msgid "POT has been modified since PO file was saved, run Sync to update"
|
95 |
+
msgstr ""
|
96 |
+
"POT wurde aktualisiert bevor die PO-Datei gespeichert wurde. Benutze Sync zum "
|
97 |
+
"Aktualisieren."
|
98 |
+
|
99 |
+
#: ../lib/loco-admin.php:429
|
100 |
+
msgid "Bad file path"
|
101 |
+
msgstr "Falscher Dateipfad"
|
102 |
+
|
103 |
+
#: ../lib/loco-admin.php:732
|
104 |
+
msgctxt "Add button"
|
105 |
+
msgid "New template"
|
106 |
+
msgstr "Neues Template"
|
107 |
+
|
108 |
+
#: ../lib/loco-admin.php:751
|
109 |
+
msgctxt "Add button"
|
110 |
+
msgid "New language"
|
111 |
+
msgstr "Neue Sprache"
|
112 |
+
|
113 |
+
#: ../lib/loco-admin.php:790
|
114 |
+
msgid "%s%% translated"
|
115 |
+
msgstr "%s%% übersetzt"
|
116 |
+
|
117 |
+
#: ../lib/loco-admin.php:790
|
118 |
+
msgid "1 string"
|
119 |
+
msgid_plural "%s strings"
|
120 |
+
msgstr[0] "1 Zeichenkette"
|
121 |
+
msgstr[1] "%s Zeichenketten"
|
122 |
+
|
123 |
+
#: ../lib/loco-admin.php:793
|
124 |
+
msgid "%s fuzzy"
|
125 |
+
msgstr "%s undeutlich"
|
126 |
+
|
127 |
+
#: ../lib/loco-admin.php:796
|
128 |
+
msgid "%s untranslated"
|
129 |
+
msgstr "%s nicht übersetzt"
|
130 |
+
|
131 |
+
#: ../lib/loco-admin.php:838
|
132 |
+
msgid "Failed to compile MO file with built-in compiler"
|
133 |
+
msgstr "Kompilieren der MO-Datei mit dem internen Kompilierer fehlgeschlagen."
|
134 |
+
|
135 |
+
#: ../lib/loco-admin.php:867
|
136 |
+
msgid "Loco, Translation Management"
|
137 |
+
msgstr "Loco, Translation Management"
|
138 |
+
|
139 |
+
#: ../lib/loco-admin.php:869
|
140 |
+
msgid "Translation"
|
141 |
+
msgstr "Übersetzung"
|
142 |
+
|
143 |
+
#: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
|
144 |
+
msgid "Manage translations"
|
145 |
+
msgstr "Übersetzungen verwalten"
|
146 |
+
|
147 |
+
#: ../lib/loco-admin.php:884 ../tpl/admin-fscheck.tpl.php:7 ../tpl/admin-opts.tpl.php:7 ../tpl/admin-poedit.tpl.php:8 ../tpl/admin-poinit.tpl.php:8 ../tpl/admin-root.tpl.php:7
|
148 |
+
msgid "Settings"
|
149 |
+
msgstr "Einstellungen"
|
150 |
+
|
151 |
+
#: ../lib/loco-admin.php:908
|
152 |
+
msgid "File download failed"
|
153 |
+
msgstr "Dateidownload ist fehlgeschlagen"
|
154 |
+
|
155 |
+
#: ../lib/loco-locales.php:70
|
156 |
+
msgid "Unknown language"
|
157 |
+
msgstr "Unbekannte Sprache"
|
158 |
+
|
159 |
+
#: ../lib/loco-packages.php:240 ../lib/loco-packages.php:246
|
160 |
+
msgid "Some files not writable"
|
161 |
+
msgstr "Einige Dateien nicht schreibbar"
|
162 |
+
|
163 |
+
#: ../lib/loco-packages.php:249
|
164 |
+
msgid "Some files missing"
|
165 |
+
msgstr "Einige Dateien fehlen"
|
166 |
+
|
167 |
+
#: ../lib/loco-packages.php:255
|
168 |
+
msgid "\"%s\" folder not writable"
|
169 |
+
msgstr "Ordner \"%s\" nicht schreibbar"
|
170 |
+
|
171 |
+
#: ../lib/loco-packages.php:266
|
172 |
+
msgid "Folder not writable"
|
173 |
+
msgstr "Ordner nicht schreibbar"
|
174 |
+
|
175 |
+
#: ../lib/loco-packages.php:268
|
176 |
+
msgid "POT file not writable"
|
177 |
+
msgstr "POT-Datei nicht schreibbar"
|
178 |
+
|
179 |
+
#: ../lib/loco-packages.php:272
|
180 |
+
msgid "PO file not writable"
|
181 |
+
msgstr "PO-Datei nicht schreibbar"
|
182 |
+
|
183 |
+
#: ../lib/loco-packages.php:274
|
184 |
+
msgid "MO file not writable"
|
185 |
+
msgstr "MO-Datei nicht schreibbar"
|
186 |
+
|
187 |
+
#: ../lib/loco-packages.php:274
|
188 |
+
msgid "MO file not found"
|
189 |
+
msgstr "MO-Datei nicht gefunden"
|
190 |
+
|
191 |
+
#: ../php/loco-ajax.php:17 ../php/loco-download.php:21
|
192 |
+
msgid "User does not have permission to manage translations"
|
193 |
+
msgstr "Benutzer hat keine Rechte die Übersetzungen zu verwalten"
|
194 |
+
|
195 |
+
#: ../php/loco-download.php:68 ../php/loco-posave.php:88
|
196 |
+
msgid "Failed to compile MO file with %s, check your settings"
|
197 |
+
msgstr "Kompilieren der MO-Datei fehlgeschlagen. Bitte prüfe Deine Einstellungen"
|
198 |
+
|
199 |
+
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
200 |
+
msgid "Invalid data posted to server"
|
201 |
+
msgstr "Ungültige Daten zum Server gesendet"
|
202 |
+
|
203 |
+
#: ../php/loco-posave.php:23 ../php/loco-posync.php:22
|
204 |
+
msgid "Package not found called %s"
|
205 |
+
msgstr "Paket %s nicht gefunden"
|
206 |
+
|
207 |
+
#: ../php/loco-posave.php:37
|
208 |
+
msgid ""
|
209 |
+
"Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create "
|
210 |
+
"it manually."
|
211 |
+
msgstr ""
|
212 |
+
"Webserver kann Ordner \"%s\" nicht in \"%s\" erstellen. Setze die Zugriffsrechte "
|
213 |
+
"oder erstelle den Ordner selbst."
|
214 |
+
|
215 |
+
#: ../php/loco-posave.php:40
|
216 |
+
msgid ""
|
217 |
+
"Web server cannot create files in the \"%s\" directory. Fix file permissions or "
|
218 |
+
"use the download function."
|
219 |
+
msgstr ""
|
220 |
+
"Webserver kann keine Dateien im Ordner \"%s\" erstellen. Setze die Datei-"
|
221 |
+
"Zugriffsrechte oder benutze Download anstatt Speichern."
|
222 |
+
|
223 |
+
#: ../php/loco-posave.php:48
|
224 |
+
msgid ""
|
225 |
+
"%s file is not writable by the web server. Fix file permissions or download and "
|
226 |
+
"copy to \"%s/%s\"."
|
227 |
+
msgstr ""
|
228 |
+
"Datei %s ist vom Webserver nicht schreibbar. Setze die Datei-Zugriffsrechte "
|
229 |
+
"oder benutze Download anstatt Speichern und speichere die Datei auf dem Server "
|
230 |
+
"unter \"%s/%s\" ab."
|
231 |
+
|
232 |
+
#: ../php/loco-posave.php:69
|
233 |
+
msgid "Cannot create MO file"
|
234 |
+
msgstr "Erstellen der MO-Datei fehlgeschlagen."
|
235 |
+
|
236 |
+
#: ../php/loco-posave.php:72
|
237 |
+
msgid "Cannot overwrite MO file"
|
238 |
+
msgstr "Überschreiben der MO-Datei fehlgeschlagen"
|
239 |
+
|
240 |
+
#: ../php/loco-posave.php:98
|
241 |
+
msgid "Failed to write MO file"
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: ../php/loco-posync.php:53
|
245 |
+
msgid "No strings could be extracted from source files"
|
246 |
+
msgstr "Es konnten keine Zeichenketten aus der Quelle extrahiert werden"
|
247 |
+
|
248 |
+
#: ../pub/js/lang/dummy.php:8
|
249 |
+
msgid "Unknown error"
|
250 |
+
msgstr "Unbekannter Fehler"
|
251 |
+
|
252 |
+
#: ../pub/js/lang/dummy.php:9
|
253 |
+
msgid "PO file saved"
|
254 |
+
msgstr "PO-Datei gespeichert"
|
255 |
+
|
256 |
+
#: ../pub/js/lang/dummy.php:10
|
257 |
+
msgid "and MO file compiled"
|
258 |
+
msgstr "und MO-Datei kompiliert"
|
259 |
+
|
260 |
+
#: ../pub/js/lang/dummy.php:11
|
261 |
+
msgid "Merged from %s"
|
262 |
+
msgstr "Aus %s zusammengeführt"
|
263 |
+
|
264 |
+
#: ../pub/js/lang/dummy.php:12
|
265 |
+
msgid "Merged from source code"
|
266 |
+
msgstr "Aus Quelle zusammengeführt"
|
267 |
+
|
268 |
+
#: ../pub/js/lang/dummy.php:13
|
269 |
+
msgid "Already up to date with %s"
|
270 |
+
msgstr "Bereit auf dem aktuellen Stand mit %s"
|
271 |
+
|
272 |
+
#: ../pub/js/lang/dummy.php:14
|
273 |
+
msgid "Already up to date with source code"
|
274 |
+
msgstr "Bereit mit der Quelle auf dem aktuellen Stand"
|
275 |
+
|
276 |
+
#: ../pub/js/lang/dummy.php:15
|
277 |
+
msgid "1 new string added"
|
278 |
+
msgid_plural "%s new strings added"
|
279 |
+
msgstr[0] "1 neue Zeichenkette hinzugefügt"
|
280 |
+
msgstr[1] "%s neue Zeichenketten hinzugefügt"
|
281 |
+
|
282 |
+
#: ../pub/js/lang/dummy.php:16
|
283 |
+
msgid "1 obsolete string removed"
|
284 |
+
msgid_plural "%s obsolete strings removed"
|
285 |
+
msgstr[0] "1 veraltete Zeichenkette entfernt"
|
286 |
+
msgstr[1] "%s veraltete Zeichenketten entfernt"
|
287 |
+
|
288 |
+
#: ../pub/js/lang/dummy.php:17
|
289 |
+
msgid "Your changes will be lost if you continue without saving"
|
290 |
+
msgstr "Deine Änderungen gehen verloren, wenn du fortsetzt ohne zu Speichern"
|
291 |
+
|
292 |
+
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
293 |
+
msgid "Packages"
|
294 |
+
msgstr "Pakete"
|
295 |
+
|
296 |
+
#: ../tpl/admin-fscheck.tpl.php:8
|
297 |
+
msgid "File check"
|
298 |
+
msgstr "Dateiprüfung"
|
299 |
+
|
300 |
+
#: ../tpl/admin-fscheck.tpl.php:17
|
301 |
+
msgid "File system permissions for %s"
|
302 |
+
msgstr "Dateisystem-Rechte für %s"
|
303 |
+
|
304 |
+
#: ../tpl/admin-fscheck.tpl.php:40
|
305 |
+
msgid "Back"
|
306 |
+
msgstr "Zurück"
|
307 |
+
|
308 |
+
#: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
|
309 |
+
msgid "Get help"
|
310 |
+
msgstr "Hilfe erhalten"
|
311 |
+
|
312 |
+
#: ../tpl/admin-list.tpl.php:11
|
313 |
+
msgctxt "Table header"
|
314 |
+
msgid "Package details"
|
315 |
+
msgstr "Paketdetails"
|
316 |
+
|
317 |
+
#: ../tpl/admin-list.tpl.php:14
|
318 |
+
msgctxt "Table header"
|
319 |
+
msgid "Translations (PO)"
|
320 |
+
msgstr "Übersetzungen (PO)"
|
321 |
+
|
322 |
+
#: ../tpl/admin-list.tpl.php:17
|
323 |
+
msgctxt "Table header"
|
324 |
+
msgid "Template (POT)"
|
325 |
+
msgstr "Template (POT)"
|
326 |
+
|
327 |
+
#: ../tpl/admin-list.tpl.php:20
|
328 |
+
msgctxt "Table header"
|
329 |
+
msgid "File permissions"
|
330 |
+
msgstr "Dateizugriffsrechte"
|
331 |
+
|
332 |
+
#: ../tpl/admin-list.tpl.php:38
|
333 |
+
msgid "1 language"
|
334 |
+
msgid_plural "%u languages"
|
335 |
+
msgstr[0] "1 Sprache"
|
336 |
+
msgstr[1] "%u Sprachen"
|
337 |
+
|
338 |
+
#: ../tpl/admin-list.tpl.php:43
|
339 |
+
msgctxt "Modified time"
|
340 |
+
msgid "Updated"
|
341 |
+
msgstr "Aktualisiert"
|
342 |
+
|
343 |
+
#: ../tpl/admin-list.tpl.php:93
|
344 |
+
msgid "OK"
|
345 |
+
msgstr "OK"
|
346 |
+
|
347 |
+
#: ../tpl/admin-nav.tpl.php:20
|
348 |
+
msgid "Powered by"
|
349 |
+
msgstr "Präsentiert von"
|
350 |
+
|
351 |
+
#: ../tpl/admin-opts.tpl.php:18
|
352 |
+
msgid "Configure Loco Translate"
|
353 |
+
msgstr "Konfiguriere Loco Translate"
|
354 |
+
|
355 |
+
#: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
|
356 |
+
msgid "Compiling MO files"
|
357 |
+
msgstr "MO-Dateien kompilieren"
|
358 |
+
|
359 |
+
#: ../tpl/admin-opts.tpl.php:36
|
360 |
+
msgid "Use built-in MO compiler."
|
361 |
+
msgstr "Benutze internen MO-Kompilierer"
|
362 |
+
|
363 |
+
#: ../tpl/admin-opts.tpl.php:42
|
364 |
+
msgid "Use external command:"
|
365 |
+
msgstr "Benutze externes Befehlsprogramm:"
|
366 |
+
|
367 |
+
#: ../tpl/admin-opts.tpl.php:47
|
368 |
+
msgid "Enter path to msgfmt on server"
|
369 |
+
msgstr "Pfad zum msgfmt-Programm"
|
370 |
+
|
371 |
+
#: ../tpl/admin-opts.tpl.php:54
|
372 |
+
msgid "Generate hash tables"
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: ../tpl/admin-opts.tpl.php:63
|
376 |
+
msgid "Save settings"
|
377 |
+
msgstr "Einstellungen speichern"
|
378 |
+
|
379 |
+
#: ../tpl/admin-poedit.tpl.php:31
|
380 |
+
msgid "Template file"
|
381 |
+
msgstr "Templatedatei"
|
382 |
+
|
383 |
+
#: ../tpl/admin-poedit.tpl.php:39
|
384 |
+
msgctxt "Dropdown label"
|
385 |
+
msgid "Switch to..."
|
386 |
+
msgstr "Wechsle zu..."
|
387 |
+
|
388 |
+
#: ../tpl/admin-poedit.tpl.php:57
|
389 |
+
msgid "Updated"
|
390 |
+
msgstr "Aktualisiert"
|
391 |
+
|
392 |
+
#: ../tpl/admin-poedit.tpl.php:62
|
393 |
+
msgid "never"
|
394 |
+
msgstr "niemals"
|
395 |
+
|
396 |
+
#: ../tpl/admin-poedit.tpl.php:87
|
397 |
+
msgctxt "Editor button"
|
398 |
+
msgid "Save"
|
399 |
+
msgstr "Speichern"
|
400 |
+
|
401 |
+
#: ../tpl/admin-poedit.tpl.php:94 ../tpl/admin-poedit.tpl.php:103
|
402 |
+
msgctxt "Editor button"
|
403 |
+
msgid "Download"
|
404 |
+
msgstr "Download"
|
405 |
+
|
406 |
+
#: ../tpl/admin-poedit.tpl.php:115
|
407 |
+
msgctxt "Editor button"
|
408 |
+
msgid "Sync"
|
409 |
+
msgstr "Sync"
|
410 |
+
|
411 |
+
#: ../tpl/admin-poedit.tpl.php:120
|
412 |
+
msgctxt "Editor button"
|
413 |
+
msgid "Revert"
|
414 |
+
msgstr "zurücksetzen"
|
415 |
+
|
416 |
+
#: ../tpl/admin-poedit.tpl.php:125
|
417 |
+
msgctxt "Editor button"
|
418 |
+
msgid "Add"
|
419 |
+
msgstr "Hinzufügen"
|
420 |
+
|
421 |
+
#: ../tpl/admin-poedit.tpl.php:130
|
422 |
+
msgctxt "Editor button"
|
423 |
+
msgid "Del"
|
424 |
+
msgstr "Löschen"
|
425 |
+
|
426 |
+
#: ../tpl/admin-poedit.tpl.php:135
|
427 |
+
msgctxt "Editor button"
|
428 |
+
msgid "Fuzzy"
|
429 |
+
msgstr "Undeutlich"
|
430 |
+
|
431 |
+
#: ../tpl/admin-poedit.tpl.php:139
|
432 |
+
msgid "Filter translations"
|
433 |
+
msgstr "Übersetzungen filtern"
|
434 |
+
|
435 |
+
#: ../tpl/admin-poedit.tpl.php:143
|
436 |
+
msgctxt "Editor button"
|
437 |
+
msgid "Help"
|
438 |
+
msgstr "Hilfe"
|
439 |
+
|
440 |
+
#: ../tpl/admin-poinit.tpl.php:21
|
441 |
+
msgid "Initialize new translations in %s"
|
442 |
+
msgstr "Initialisiere neue Übersetzung in %s"
|
443 |
+
|
444 |
+
#: ../tpl/admin-poinit.tpl.php:34
|
445 |
+
msgid "Select from common languages"
|
446 |
+
msgstr "Wähle aus den Standardsprachen"
|
447 |
+
|
448 |
+
#: ../tpl/admin-poinit.tpl.php:45
|
449 |
+
msgctxt "Form label"
|
450 |
+
msgid "or enter any language code"
|
451 |
+
msgstr "oder trage den Sprach-Code ein"
|
452 |
+
|
453 |
+
#: ../tpl/admin-poinit.tpl.php:51
|
454 |
+
msgctxt "Submit button"
|
455 |
+
msgid "Start translating"
|
456 |
+
msgstr "Starte Übersetzung"
|
457 |
+
|
458 |
+
#: ../tpl/admin-root.tpl.php:18
|
459 |
+
msgid "New version available"
|
460 |
+
msgstr "Neue Version verfügbar"
|
461 |
+
|
462 |
+
#: ../tpl/admin-root.tpl.php:21
|
463 |
+
msgid "Upgrade to version %s of Loco Translate"
|
464 |
+
msgstr "Bitte upgrade Loco Translate auf Version %s"
|
465 |
+
|
466 |
+
#: ../tpl/admin-root.tpl.php:31
|
467 |
+
msgid "Select a plugin or theme to translate"
|
468 |
+
msgstr "Wähle ein Plugin oder Theme zum Übersetzen"
|
469 |
+
|
470 |
+
#: ../tpl/admin-root.tpl.php:40
|
471 |
+
msgctxt "Package list header"
|
472 |
+
msgid "Themes"
|
473 |
+
msgstr "Themes"
|
474 |
+
|
475 |
+
#: ../tpl/admin-root.tpl.php:53
|
476 |
+
msgctxt "Package list header"
|
477 |
+
msgid "Plugins"
|
478 |
+
msgstr "Plugins"
|
479 |
+
|
480 |
+
#: ../tpl/admin-root.tpl.php:66
|
481 |
+
msgctxt "Package list header"
|
482 |
+
msgid "Core"
|
483 |
+
msgstr "Core"
|
languages/loco-translate-nl_BE.mo
CHANGED
Binary file
|
languages/loco-translate-nl_BE.po
CHANGED
@@ -2,9 +2,9 @@ msgid ""
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Loco Translate\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date:
|
6 |
-
"PO-Revision-Date:
|
7 |
-
"Last-Translator:
|
8 |
"Language-Team: \n"
|
9 |
"Language: Dutch (Belgium)\n"
|
10 |
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
@@ -22,23 +22,23 @@ msgstr ""
|
|
22 |
"X-Poedit-Basepath: .\n"
|
23 |
"X-Poedit-SearchPath-0: .."
|
24 |
|
25 |
-
|
26 |
-
#: ../lib/loco-admin.php:15
|
27 |
msgctxt "Message label"
|
28 |
msgid "Error"
|
29 |
msgstr "Fout"
|
30 |
|
31 |
-
#: ../lib/loco-admin.php:24
|
32 |
msgctxt "Message label"
|
33 |
msgid "Warning"
|
34 |
msgstr "Waarschuwing"
|
35 |
|
36 |
-
#: ../lib/loco-admin.php:33
|
37 |
msgctxt "Message label"
|
38 |
msgid "OK"
|
39 |
msgstr "OK"
|
40 |
|
41 |
-
#: ../lib/loco-admin.php:
|
42 |
msgid "Settings saved"
|
43 |
msgstr ""
|
44 |
|
@@ -98,50 +98,58 @@ msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up t
|
|
98 |
msgid "Bad file path"
|
99 |
msgstr "Foute bestandslocatie"
|
100 |
|
101 |
-
#: ../lib/loco-admin.php:
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr "Nieuw sjabloon"
|
105 |
|
106 |
-
#: ../lib/loco-admin.php:
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr "Nieuwe taal"
|
110 |
|
111 |
-
#: ../lib/loco-admin.php:
|
112 |
msgid "%s%% translated"
|
113 |
msgstr "%s%% vertaald"
|
114 |
|
115 |
-
#: ../lib/loco-admin.php:
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] "1 te vertalen tekst"
|
119 |
msgstr[1] "%s te vertalen teksten"
|
120 |
|
121 |
-
#: ../lib/loco-admin.php:
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr "%s onzeker"
|
124 |
|
125 |
-
#: ../lib/loco-admin.php:
|
126 |
-
msgid "%s
|
127 |
msgstr "%s onvertaald"
|
128 |
|
129 |
-
#: ../lib/loco-admin.php:
|
|
|
|
|
|
|
|
|
130 |
msgid "Loco, Translation Management"
|
131 |
msgstr "Loco, vertalingsbeheer"
|
132 |
|
133 |
-
#: ../lib/loco-admin.php:
|
134 |
msgid "Translation"
|
135 |
msgstr ""
|
136 |
|
137 |
-
#: ../lib/loco-admin.php:
|
138 |
msgid "Manage translations"
|
139 |
msgstr "Beheer vertalingen"
|
140 |
|
141 |
-
#: ../lib/loco-admin.php:
|
142 |
msgid "Settings"
|
143 |
msgstr ""
|
144 |
|
|
|
|
|
|
|
|
|
145 |
#: ../lib/loco-locales.php:70
|
146 |
msgid "Unknown language"
|
147 |
msgstr "Onbekende taal"
|
@@ -178,10 +186,14 @@ msgstr ""
|
|
178 |
msgid "MO file not found"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: ../php/loco-ajax.php:17
|
182 |
msgid "User does not have permission to manage translations"
|
183 |
msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
|
184 |
|
|
|
|
|
|
|
|
|
185 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
186 |
msgid "Invalid data posted to server"
|
187 |
msgstr "Ongeldige gegevens op server"
|
@@ -214,22 +226,66 @@ msgstr ""
|
|
214 |
"Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
|
215 |
"schrijfrechten of download en kopieer naar \"%s/%s\"."
|
216 |
|
217 |
-
#: ../php/loco-posave.php:
|
218 |
msgid "Cannot create MO file"
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: ../php/loco-posave.php:
|
222 |
msgid "Cannot overwrite MO file"
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: ../php/loco-posave.php:
|
226 |
-
msgid "Failed to
|
227 |
msgstr ""
|
228 |
|
229 |
#: ../php/loco-posync.php:53
|
230 |
msgid "No strings could be extracted from source files"
|
231 |
msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
|
232 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
234 |
msgid "Packages"
|
235 |
msgstr "Pakketten"
|
@@ -246,6 +302,10 @@ msgstr ""
|
|
246 |
msgid "Back"
|
247 |
msgstr ""
|
248 |
|
|
|
|
|
|
|
|
|
249 |
#: ../tpl/admin-list.tpl.php:11
|
250 |
msgctxt "Table header"
|
251 |
msgid "Package details"
|
@@ -289,11 +349,27 @@ msgstr "Ondersteund door"
|
|
289 |
msgid "Configure Loco Translate"
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: ../tpl/admin-opts.tpl.php:27
|
293 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: ../tpl/admin-opts.tpl.php:
|
297 |
msgid "Save settings"
|
298 |
msgstr ""
|
299 |
|
@@ -319,41 +395,41 @@ msgctxt "Editor button"
|
|
319 |
msgid "Save"
|
320 |
msgstr "Opslaan"
|
321 |
|
322 |
-
#: ../tpl/admin-poedit.tpl.php:94
|
323 |
msgctxt "Editor button"
|
324 |
msgid "Download"
|
325 |
msgstr "Downloaden"
|
326 |
|
327 |
-
#: ../tpl/admin-poedit.tpl.php:
|
328 |
msgctxt "Editor button"
|
329 |
msgid "Sync"
|
330 |
msgstr "Sync"
|
331 |
|
332 |
-
#: ../tpl/admin-poedit.tpl.php:
|
333 |
msgctxt "Editor button"
|
334 |
msgid "Revert"
|
335 |
msgstr "Ongedaan maken"
|
336 |
|
337 |
-
#: ../tpl/admin-poedit.tpl.php:
|
338 |
msgctxt "Editor button"
|
339 |
msgid "Add"
|
340 |
msgstr "Toevoegen"
|
341 |
|
342 |
-
#: ../tpl/admin-poedit.tpl.php:
|
343 |
msgctxt "Editor button"
|
344 |
msgid "Del"
|
345 |
msgstr "Verwijder"
|
346 |
|
347 |
-
#: ../tpl/admin-poedit.tpl.php:
|
348 |
msgctxt "Editor button"
|
349 |
msgid "Fuzzy"
|
350 |
msgstr "Onzeker"
|
351 |
|
352 |
-
#: ../tpl/admin-poedit.tpl.php:
|
353 |
msgid "Filter translations"
|
354 |
msgstr "Filter vertalingen"
|
355 |
|
356 |
-
#: ../tpl/admin-poedit.tpl.php:
|
357 |
msgctxt "Editor button"
|
358 |
msgid "Help"
|
359 |
msgstr "Help"
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Loco Translate\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: Thu Jan 02 2014 17:30:57 GMT+0000 (GMT)\n"
|
6 |
+
"PO-Revision-Date: Sat Jan 04 2014 20:46:00 GMT+0000 (GMT)\n"
|
7 |
+
"Last-Translator: admin <support@localise.biz>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: Dutch (Belgium)\n"
|
10 |
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
22 |
"X-Poedit-Basepath: .\n"
|
23 |
"X-Poedit-SearchPath-0: .."
|
24 |
|
25 |
+
#. Translators: Bold text label in admin error messages
|
26 |
+
#: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
|
27 |
msgctxt "Message label"
|
28 |
msgid "Error"
|
29 |
msgstr "Fout"
|
30 |
|
31 |
+
#: ../lib/loco-admin.php:24 ../pub/js/lang/dummy.php:6
|
32 |
msgctxt "Message label"
|
33 |
msgid "Warning"
|
34 |
msgstr "Waarschuwing"
|
35 |
|
36 |
+
#: ../lib/loco-admin.php:33 ../pub/js/lang/dummy.php:5
|
37 |
msgctxt "Message label"
|
38 |
msgid "OK"
|
39 |
msgstr "OK"
|
40 |
|
41 |
+
#: ../lib/loco-admin.php:47
|
42 |
msgid "Settings saved"
|
43 |
msgstr ""
|
44 |
|
98 |
msgid "Bad file path"
|
99 |
msgstr "Foute bestandslocatie"
|
100 |
|
101 |
+
#: ../lib/loco-admin.php:732
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr "Nieuw sjabloon"
|
105 |
|
106 |
+
#: ../lib/loco-admin.php:751
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr "Nieuwe taal"
|
110 |
|
111 |
+
#: ../lib/loco-admin.php:790
|
112 |
msgid "%s%% translated"
|
113 |
msgstr "%s%% vertaald"
|
114 |
|
115 |
+
#: ../lib/loco-admin.php:790
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] "1 te vertalen tekst"
|
119 |
msgstr[1] "%s te vertalen teksten"
|
120 |
|
121 |
+
#: ../lib/loco-admin.php:793
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr "%s onzeker"
|
124 |
|
125 |
+
#: ../lib/loco-admin.php:796
|
126 |
+
msgid "%s untranslated"
|
127 |
msgstr "%s onvertaald"
|
128 |
|
129 |
+
#: ../lib/loco-admin.php:838
|
130 |
+
msgid "Failed to compile MO file with built-in compiler"
|
131 |
+
msgstr ""
|
132 |
+
|
133 |
+
#: ../lib/loco-admin.php:867
|
134 |
msgid "Loco, Translation Management"
|
135 |
msgstr "Loco, vertalingsbeheer"
|
136 |
|
137 |
+
#: ../lib/loco-admin.php:869
|
138 |
msgid "Translation"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
|
142 |
msgid "Manage translations"
|
143 |
msgstr "Beheer vertalingen"
|
144 |
|
145 |
+
#: ../lib/loco-admin.php:884 ../tpl/admin-fscheck.tpl.php:7 ../tpl/admin-opts.tpl.php:7 ../tpl/admin-poedit.tpl.php:8 ../tpl/admin-poinit.tpl.php:8 ../tpl/admin-root.tpl.php:7
|
146 |
msgid "Settings"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: ../lib/loco-admin.php:908
|
150 |
+
msgid "File download failed"
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
#: ../lib/loco-locales.php:70
|
154 |
msgid "Unknown language"
|
155 |
msgstr "Onbekende taal"
|
186 |
msgid "MO file not found"
|
187 |
msgstr ""
|
188 |
|
189 |
+
#: ../php/loco-ajax.php:17 ../php/loco-download.php:21
|
190 |
msgid "User does not have permission to manage translations"
|
191 |
msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
|
192 |
|
193 |
+
#: ../php/loco-download.php:68 ../php/loco-posave.php:88
|
194 |
+
msgid "Failed to compile MO file with %s, check your settings"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
198 |
msgid "Invalid data posted to server"
|
199 |
msgstr "Ongeldige gegevens op server"
|
226 |
"Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
|
227 |
"schrijfrechten of download en kopieer naar \"%s/%s\"."
|
228 |
|
229 |
+
#: ../php/loco-posave.php:69
|
230 |
msgid "Cannot create MO file"
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: ../php/loco-posave.php:72
|
234 |
msgid "Cannot overwrite MO file"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: ../php/loco-posave.php:98
|
238 |
+
msgid "Failed to write MO file"
|
239 |
msgstr ""
|
240 |
|
241 |
#: ../php/loco-posync.php:53
|
242 |
msgid "No strings could be extracted from source files"
|
243 |
msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
|
244 |
|
245 |
+
#: ../pub/js/lang/dummy.php:8
|
246 |
+
msgid "Unknown error"
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: ../pub/js/lang/dummy.php:9
|
250 |
+
msgid "PO file saved"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: ../pub/js/lang/dummy.php:10
|
254 |
+
msgid "and MO file compiled"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: ../pub/js/lang/dummy.php:11
|
258 |
+
msgid "Merged from %s"
|
259 |
+
msgstr ""
|
260 |
+
|
261 |
+
#: ../pub/js/lang/dummy.php:12
|
262 |
+
msgid "Merged from source code"
|
263 |
+
msgstr ""
|
264 |
+
|
265 |
+
#: ../pub/js/lang/dummy.php:13
|
266 |
+
msgid "Already up to date with %s"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: ../pub/js/lang/dummy.php:14
|
270 |
+
msgid "Already up to date with source code"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: ../pub/js/lang/dummy.php:15
|
274 |
+
msgid "1 new string added"
|
275 |
+
msgid_plural "%s new strings added"
|
276 |
+
msgstr[0] ""
|
277 |
+
msgstr[1] ""
|
278 |
+
|
279 |
+
#: ../pub/js/lang/dummy.php:16
|
280 |
+
msgid "1 obsolete string removed"
|
281 |
+
msgid_plural "%s obsolete strings removed"
|
282 |
+
msgstr[0] ""
|
283 |
+
msgstr[1] ""
|
284 |
+
|
285 |
+
#: ../pub/js/lang/dummy.php:17
|
286 |
+
msgid "Your changes will be lost if you continue without saving"
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
290 |
msgid "Packages"
|
291 |
msgstr "Pakketten"
|
302 |
msgid "Back"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
|
306 |
+
msgid "Get help"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
#: ../tpl/admin-list.tpl.php:11
|
310 |
msgctxt "Table header"
|
311 |
msgid "Package details"
|
349 |
msgid "Configure Loco Translate"
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
|
353 |
+
msgid "Compiling MO files"
|
354 |
+
msgstr ""
|
355 |
+
|
356 |
+
#: ../tpl/admin-opts.tpl.php:36
|
357 |
+
msgid "Use built-in MO compiler."
|
358 |
+
msgstr ""
|
359 |
+
|
360 |
+
#: ../tpl/admin-opts.tpl.php:42
|
361 |
+
msgid "Use external command:"
|
362 |
+
msgstr ""
|
363 |
+
|
364 |
+
#: ../tpl/admin-opts.tpl.php:47
|
365 |
+
msgid "Enter path to msgfmt on server"
|
366 |
+
msgstr ""
|
367 |
+
|
368 |
+
#: ../tpl/admin-opts.tpl.php:54
|
369 |
+
msgid "Generate hash tables"
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: ../tpl/admin-opts.tpl.php:63
|
373 |
msgid "Save settings"
|
374 |
msgstr ""
|
375 |
|
395 |
msgid "Save"
|
396 |
msgstr "Opslaan"
|
397 |
|
398 |
+
#: ../tpl/admin-poedit.tpl.php:94 ../tpl/admin-poedit.tpl.php:103
|
399 |
msgctxt "Editor button"
|
400 |
msgid "Download"
|
401 |
msgstr "Downloaden"
|
402 |
|
403 |
+
#: ../tpl/admin-poedit.tpl.php:115
|
404 |
msgctxt "Editor button"
|
405 |
msgid "Sync"
|
406 |
msgstr "Sync"
|
407 |
|
408 |
+
#: ../tpl/admin-poedit.tpl.php:120
|
409 |
msgctxt "Editor button"
|
410 |
msgid "Revert"
|
411 |
msgstr "Ongedaan maken"
|
412 |
|
413 |
+
#: ../tpl/admin-poedit.tpl.php:125
|
414 |
msgctxt "Editor button"
|
415 |
msgid "Add"
|
416 |
msgstr "Toevoegen"
|
417 |
|
418 |
+
#: ../tpl/admin-poedit.tpl.php:130
|
419 |
msgctxt "Editor button"
|
420 |
msgid "Del"
|
421 |
msgstr "Verwijder"
|
422 |
|
423 |
+
#: ../tpl/admin-poedit.tpl.php:135
|
424 |
msgctxt "Editor button"
|
425 |
msgid "Fuzzy"
|
426 |
msgstr "Onzeker"
|
427 |
|
428 |
+
#: ../tpl/admin-poedit.tpl.php:139
|
429 |
msgid "Filter translations"
|
430 |
msgstr "Filter vertalingen"
|
431 |
|
432 |
+
#: ../tpl/admin-poedit.tpl.php:143
|
433 |
msgctxt "Editor button"
|
434 |
msgid "Help"
|
435 |
msgstr "Help"
|
languages/loco-translate-nl_NL.mo
CHANGED
Binary file
|
languages/loco-translate-nl_NL.po
CHANGED
@@ -2,9 +2,9 @@ msgid ""
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Loco Translate\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date:
|
6 |
-
"PO-Revision-Date:
|
7 |
-
"Last-Translator:
|
8 |
"Language-Team: \n"
|
9 |
"Language: Dutch\n"
|
10 |
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
@@ -22,23 +22,23 @@ msgstr ""
|
|
22 |
"X-Poedit-Basepath: .\n"
|
23 |
"X-Poedit-SearchPath-0: .."
|
24 |
|
25 |
-
|
26 |
-
#: ../lib/loco-admin.php:15
|
27 |
msgctxt "Message label"
|
28 |
msgid "Error"
|
29 |
msgstr "Fout"
|
30 |
|
31 |
-
#: ../lib/loco-admin.php:24
|
32 |
msgctxt "Message label"
|
33 |
msgid "Warning"
|
34 |
msgstr "Waarschuwing"
|
35 |
|
36 |
-
#: ../lib/loco-admin.php:33
|
37 |
msgctxt "Message label"
|
38 |
msgid "OK"
|
39 |
msgstr "OK"
|
40 |
|
41 |
-
#: ../lib/loco-admin.php:
|
42 |
msgid "Settings saved"
|
43 |
msgstr ""
|
44 |
|
@@ -98,50 +98,58 @@ msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up t
|
|
98 |
msgid "Bad file path"
|
99 |
msgstr "Foute bestandslocatie"
|
100 |
|
101 |
-
#: ../lib/loco-admin.php:
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr "Nieuw sjabloon"
|
105 |
|
106 |
-
#: ../lib/loco-admin.php:
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr "Nieuwe taal"
|
110 |
|
111 |
-
#: ../lib/loco-admin.php:
|
112 |
msgid "%s%% translated"
|
113 |
msgstr "%s%% vertaald"
|
114 |
|
115 |
-
#: ../lib/loco-admin.php:
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] "1 te vertalen tekst"
|
119 |
msgstr[1] "%s te vertalen teksten"
|
120 |
|
121 |
-
#: ../lib/loco-admin.php:
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr "%s onzeker"
|
124 |
|
125 |
-
#: ../lib/loco-admin.php:
|
126 |
-
msgid "%s
|
127 |
msgstr "%s onvertaald"
|
128 |
|
129 |
-
#: ../lib/loco-admin.php:
|
|
|
|
|
|
|
|
|
130 |
msgid "Loco, Translation Management"
|
131 |
msgstr "Loco, vertalingsbeheer"
|
132 |
|
133 |
-
#: ../lib/loco-admin.php:
|
134 |
msgid "Translation"
|
135 |
msgstr ""
|
136 |
|
137 |
-
#: ../lib/loco-admin.php:
|
138 |
msgid "Manage translations"
|
139 |
msgstr "Beheer vertalingen"
|
140 |
|
141 |
-
#: ../lib/loco-admin.php:
|
142 |
msgid "Settings"
|
143 |
msgstr ""
|
144 |
|
|
|
|
|
|
|
|
|
145 |
#: ../lib/loco-locales.php:70
|
146 |
msgid "Unknown language"
|
147 |
msgstr "Onbekende taal"
|
@@ -178,10 +186,14 @@ msgstr ""
|
|
178 |
msgid "MO file not found"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: ../php/loco-ajax.php:17
|
182 |
msgid "User does not have permission to manage translations"
|
183 |
msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
|
184 |
|
|
|
|
|
|
|
|
|
185 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
186 |
msgid "Invalid data posted to server"
|
187 |
msgstr "Ongeldige gegevens op server"
|
@@ -214,22 +226,66 @@ msgstr ""
|
|
214 |
"Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
|
215 |
"schrijfrechten of download en kopieer naar \"%s/%s\"."
|
216 |
|
217 |
-
#: ../php/loco-posave.php:
|
218 |
msgid "Cannot create MO file"
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: ../php/loco-posave.php:
|
222 |
msgid "Cannot overwrite MO file"
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: ../php/loco-posave.php:
|
226 |
-
msgid "Failed to
|
227 |
msgstr ""
|
228 |
|
229 |
#: ../php/loco-posync.php:53
|
230 |
msgid "No strings could be extracted from source files"
|
231 |
msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
|
232 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
234 |
msgid "Packages"
|
235 |
msgstr "Pakketten"
|
@@ -246,6 +302,10 @@ msgstr ""
|
|
246 |
msgid "Back"
|
247 |
msgstr ""
|
248 |
|
|
|
|
|
|
|
|
|
249 |
#: ../tpl/admin-list.tpl.php:11
|
250 |
msgctxt "Table header"
|
251 |
msgid "Package details"
|
@@ -289,11 +349,27 @@ msgstr "Ondersteund door"
|
|
289 |
msgid "Configure Loco Translate"
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: ../tpl/admin-opts.tpl.php:27
|
293 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: ../tpl/admin-opts.tpl.php:
|
297 |
msgid "Save settings"
|
298 |
msgstr ""
|
299 |
|
@@ -319,41 +395,41 @@ msgctxt "Editor button"
|
|
319 |
msgid "Save"
|
320 |
msgstr "Opslaan"
|
321 |
|
322 |
-
#: ../tpl/admin-poedit.tpl.php:94
|
323 |
msgctxt "Editor button"
|
324 |
msgid "Download"
|
325 |
msgstr "Downloaden"
|
326 |
|
327 |
-
#: ../tpl/admin-poedit.tpl.php:
|
328 |
msgctxt "Editor button"
|
329 |
msgid "Sync"
|
330 |
msgstr "Sync"
|
331 |
|
332 |
-
#: ../tpl/admin-poedit.tpl.php:
|
333 |
msgctxt "Editor button"
|
334 |
msgid "Revert"
|
335 |
msgstr "Ongedaan maken"
|
336 |
|
337 |
-
#: ../tpl/admin-poedit.tpl.php:
|
338 |
msgctxt "Editor button"
|
339 |
msgid "Add"
|
340 |
msgstr "Toevoegen"
|
341 |
|
342 |
-
#: ../tpl/admin-poedit.tpl.php:
|
343 |
msgctxt "Editor button"
|
344 |
msgid "Del"
|
345 |
msgstr "Verwijder"
|
346 |
|
347 |
-
#: ../tpl/admin-poedit.tpl.php:
|
348 |
msgctxt "Editor button"
|
349 |
msgid "Fuzzy"
|
350 |
msgstr "Onzeker"
|
351 |
|
352 |
-
#: ../tpl/admin-poedit.tpl.php:
|
353 |
msgid "Filter translations"
|
354 |
msgstr "Filter vertalingen"
|
355 |
|
356 |
-
#: ../tpl/admin-poedit.tpl.php:
|
357 |
msgctxt "Editor button"
|
358 |
msgid "Help"
|
359 |
msgstr "Help"
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Loco Translate\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: Thu Jan 02 2014 17:30:57 GMT+0000 (GMT)\n"
|
6 |
+
"PO-Revision-Date: Sat Jan 04 2014 20:46:05 GMT+0000 (GMT)\n"
|
7 |
+
"Last-Translator: admin <support@localise.biz>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: Dutch\n"
|
10 |
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
22 |
"X-Poedit-Basepath: .\n"
|
23 |
"X-Poedit-SearchPath-0: .."
|
24 |
|
25 |
+
#. Translators: Bold text label in admin error messages
|
26 |
+
#: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
|
27 |
msgctxt "Message label"
|
28 |
msgid "Error"
|
29 |
msgstr "Fout"
|
30 |
|
31 |
+
#: ../lib/loco-admin.php:24 ../pub/js/lang/dummy.php:6
|
32 |
msgctxt "Message label"
|
33 |
msgid "Warning"
|
34 |
msgstr "Waarschuwing"
|
35 |
|
36 |
+
#: ../lib/loco-admin.php:33 ../pub/js/lang/dummy.php:5
|
37 |
msgctxt "Message label"
|
38 |
msgid "OK"
|
39 |
msgstr "OK"
|
40 |
|
41 |
+
#: ../lib/loco-admin.php:47
|
42 |
msgid "Settings saved"
|
43 |
msgstr ""
|
44 |
|
98 |
msgid "Bad file path"
|
99 |
msgstr "Foute bestandslocatie"
|
100 |
|
101 |
+
#: ../lib/loco-admin.php:732
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr "Nieuw sjabloon"
|
105 |
|
106 |
+
#: ../lib/loco-admin.php:751
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr "Nieuwe taal"
|
110 |
|
111 |
+
#: ../lib/loco-admin.php:790
|
112 |
msgid "%s%% translated"
|
113 |
msgstr "%s%% vertaald"
|
114 |
|
115 |
+
#: ../lib/loco-admin.php:790
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] "1 te vertalen tekst"
|
119 |
msgstr[1] "%s te vertalen teksten"
|
120 |
|
121 |
+
#: ../lib/loco-admin.php:793
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr "%s onzeker"
|
124 |
|
125 |
+
#: ../lib/loco-admin.php:796
|
126 |
+
msgid "%s untranslated"
|
127 |
msgstr "%s onvertaald"
|
128 |
|
129 |
+
#: ../lib/loco-admin.php:838
|
130 |
+
msgid "Failed to compile MO file with built-in compiler"
|
131 |
+
msgstr ""
|
132 |
+
|
133 |
+
#: ../lib/loco-admin.php:867
|
134 |
msgid "Loco, Translation Management"
|
135 |
msgstr "Loco, vertalingsbeheer"
|
136 |
|
137 |
+
#: ../lib/loco-admin.php:869
|
138 |
msgid "Translation"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
|
142 |
msgid "Manage translations"
|
143 |
msgstr "Beheer vertalingen"
|
144 |
|
145 |
+
#: ../lib/loco-admin.php:884 ../tpl/admin-fscheck.tpl.php:7 ../tpl/admin-opts.tpl.php:7 ../tpl/admin-poedit.tpl.php:8 ../tpl/admin-poinit.tpl.php:8 ../tpl/admin-root.tpl.php:7
|
146 |
msgid "Settings"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: ../lib/loco-admin.php:908
|
150 |
+
msgid "File download failed"
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
#: ../lib/loco-locales.php:70
|
154 |
msgid "Unknown language"
|
155 |
msgstr "Onbekende taal"
|
186 |
msgid "MO file not found"
|
187 |
msgstr ""
|
188 |
|
189 |
+
#: ../php/loco-ajax.php:17 ../php/loco-download.php:21
|
190 |
msgid "User does not have permission to manage translations"
|
191 |
msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
|
192 |
|
193 |
+
#: ../php/loco-download.php:68 ../php/loco-posave.php:88
|
194 |
+
msgid "Failed to compile MO file with %s, check your settings"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
198 |
msgid "Invalid data posted to server"
|
199 |
msgstr "Ongeldige gegevens op server"
|
226 |
"Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
|
227 |
"schrijfrechten of download en kopieer naar \"%s/%s\"."
|
228 |
|
229 |
+
#: ../php/loco-posave.php:69
|
230 |
msgid "Cannot create MO file"
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: ../php/loco-posave.php:72
|
234 |
msgid "Cannot overwrite MO file"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: ../php/loco-posave.php:98
|
238 |
+
msgid "Failed to write MO file"
|
239 |
msgstr ""
|
240 |
|
241 |
#: ../php/loco-posync.php:53
|
242 |
msgid "No strings could be extracted from source files"
|
243 |
msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
|
244 |
|
245 |
+
#: ../pub/js/lang/dummy.php:8
|
246 |
+
msgid "Unknown error"
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: ../pub/js/lang/dummy.php:9
|
250 |
+
msgid "PO file saved"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: ../pub/js/lang/dummy.php:10
|
254 |
+
msgid "and MO file compiled"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: ../pub/js/lang/dummy.php:11
|
258 |
+
msgid "Merged from %s"
|
259 |
+
msgstr ""
|
260 |
+
|
261 |
+
#: ../pub/js/lang/dummy.php:12
|
262 |
+
msgid "Merged from source code"
|
263 |
+
msgstr ""
|
264 |
+
|
265 |
+
#: ../pub/js/lang/dummy.php:13
|
266 |
+
msgid "Already up to date with %s"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: ../pub/js/lang/dummy.php:14
|
270 |
+
msgid "Already up to date with source code"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: ../pub/js/lang/dummy.php:15
|
274 |
+
msgid "1 new string added"
|
275 |
+
msgid_plural "%s new strings added"
|
276 |
+
msgstr[0] ""
|
277 |
+
msgstr[1] ""
|
278 |
+
|
279 |
+
#: ../pub/js/lang/dummy.php:16
|
280 |
+
msgid "1 obsolete string removed"
|
281 |
+
msgid_plural "%s obsolete strings removed"
|
282 |
+
msgstr[0] ""
|
283 |
+
msgstr[1] ""
|
284 |
+
|
285 |
+
#: ../pub/js/lang/dummy.php:17
|
286 |
+
msgid "Your changes will be lost if you continue without saving"
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
290 |
msgid "Packages"
|
291 |
msgstr "Pakketten"
|
302 |
msgid "Back"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
|
306 |
+
msgid "Get help"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
#: ../tpl/admin-list.tpl.php:11
|
310 |
msgctxt "Table header"
|
311 |
msgid "Package details"
|
349 |
msgid "Configure Loco Translate"
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
|
353 |
+
msgid "Compiling MO files"
|
354 |
+
msgstr ""
|
355 |
+
|
356 |
+
#: ../tpl/admin-opts.tpl.php:36
|
357 |
+
msgid "Use built-in MO compiler."
|
358 |
+
msgstr ""
|
359 |
+
|
360 |
+
#: ../tpl/admin-opts.tpl.php:42
|
361 |
+
msgid "Use external command:"
|
362 |
+
msgstr ""
|
363 |
+
|
364 |
+
#: ../tpl/admin-opts.tpl.php:47
|
365 |
+
msgid "Enter path to msgfmt on server"
|
366 |
+
msgstr ""
|
367 |
+
|
368 |
+
#: ../tpl/admin-opts.tpl.php:54
|
369 |
+
msgid "Generate hash tables"
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: ../tpl/admin-opts.tpl.php:63
|
373 |
msgid "Save settings"
|
374 |
msgstr ""
|
375 |
|
395 |
msgid "Save"
|
396 |
msgstr "Opslaan"
|
397 |
|
398 |
+
#: ../tpl/admin-poedit.tpl.php:94 ../tpl/admin-poedit.tpl.php:103
|
399 |
msgctxt "Editor button"
|
400 |
msgid "Download"
|
401 |
msgstr "Downloaden"
|
402 |
|
403 |
+
#: ../tpl/admin-poedit.tpl.php:115
|
404 |
msgctxt "Editor button"
|
405 |
msgid "Sync"
|
406 |
msgstr "Sync"
|
407 |
|
408 |
+
#: ../tpl/admin-poedit.tpl.php:120
|
409 |
msgctxt "Editor button"
|
410 |
msgid "Revert"
|
411 |
msgstr "Ongedaan maken"
|
412 |
|
413 |
+
#: ../tpl/admin-poedit.tpl.php:125
|
414 |
msgctxt "Editor button"
|
415 |
msgid "Add"
|
416 |
msgstr "Toevoegen"
|
417 |
|
418 |
+
#: ../tpl/admin-poedit.tpl.php:130
|
419 |
msgctxt "Editor button"
|
420 |
msgid "Del"
|
421 |
msgstr "Verwijder"
|
422 |
|
423 |
+
#: ../tpl/admin-poedit.tpl.php:135
|
424 |
msgctxt "Editor button"
|
425 |
msgid "Fuzzy"
|
426 |
msgstr "Onzeker"
|
427 |
|
428 |
+
#: ../tpl/admin-poedit.tpl.php:139
|
429 |
msgid "Filter translations"
|
430 |
msgstr "Filter vertalingen"
|
431 |
|
432 |
+
#: ../tpl/admin-poedit.tpl.php:143
|
433 |
msgctxt "Editor button"
|
434 |
msgid "Help"
|
435 |
msgstr "Help"
|
languages/loco-translate.pot
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
|
2 |
#, fuzzy
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Loco Translate\n"
|
6 |
"Report-Msgid-Bugs-To: \n"
|
7 |
-
"POT-Creation-Date:
|
8 |
-
"POT-Revision-Date:
|
9 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
10 |
"Last-Translator: \n"
|
11 |
"Language-Team: \n"
|
@@ -24,23 +24,23 @@ msgstr ""
|
|
24 |
"comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
|
25 |
"X-Generator: Loco - https://localise.biz/"
|
26 |
|
27 |
-
|
28 |
-
#: ../lib/loco-admin.php:15
|
29 |
msgctxt "Message label"
|
30 |
msgid "Error"
|
31 |
msgstr ""
|
32 |
|
33 |
-
#: ../lib/loco-admin.php:24
|
34 |
msgctxt "Message label"
|
35 |
msgid "Warning"
|
36 |
msgstr ""
|
37 |
|
38 |
-
#: ../lib/loco-admin.php:33
|
39 |
msgctxt "Message label"
|
40 |
msgid "OK"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: ../lib/loco-admin.php:
|
44 |
msgid "Settings saved"
|
45 |
msgstr ""
|
46 |
|
@@ -98,50 +98,58 @@ msgstr ""
|
|
98 |
msgid "Bad file path"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: ../lib/loco-admin.php:
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr ""
|
105 |
|
106 |
-
#: ../lib/loco-admin.php:
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: ../lib/loco-admin.php:
|
112 |
msgid "%s%% translated"
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: ../lib/loco-admin.php:
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] ""
|
119 |
msgstr[1] ""
|
120 |
|
121 |
-
#: ../lib/loco-admin.php:
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr ""
|
124 |
|
125 |
-
#: ../lib/loco-admin.php:
|
126 |
-
msgid "%s
|
127 |
msgstr ""
|
128 |
|
129 |
-
#: ../lib/loco-admin.php:
|
|
|
|
|
|
|
|
|
130 |
msgid "Loco, Translation Management"
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: ../lib/loco-admin.php:
|
134 |
msgid "Translation"
|
135 |
msgstr ""
|
136 |
|
137 |
-
#: ../lib/loco-admin.php:
|
138 |
msgid "Manage translations"
|
139 |
msgstr ""
|
140 |
|
141 |
-
#: ../lib/loco-admin.php:
|
142 |
msgid "Settings"
|
143 |
msgstr ""
|
144 |
|
|
|
|
|
|
|
|
|
145 |
#: ../lib/loco-locales.php:70
|
146 |
msgid "Unknown language"
|
147 |
msgstr ""
|
@@ -178,10 +186,14 @@ msgstr ""
|
|
178 |
msgid "MO file not found"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: ../php/loco-ajax.php:17
|
182 |
msgid "User does not have permission to manage translations"
|
183 |
msgstr ""
|
184 |
|
|
|
|
|
|
|
|
|
185 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
186 |
msgid "Invalid data posted to server"
|
187 |
msgstr ""
|
@@ -208,22 +220,66 @@ msgid ""
|
|
208 |
"copy to \"%s/%s\"."
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: ../php/loco-posave.php:
|
212 |
msgid "Cannot create MO file"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: ../php/loco-posave.php:
|
216 |
msgid "Cannot overwrite MO file"
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: ../php/loco-posave.php:
|
220 |
-
msgid "Failed to
|
221 |
msgstr ""
|
222 |
|
223 |
#: ../php/loco-posync.php:53
|
224 |
msgid "No strings could be extracted from source files"
|
225 |
msgstr ""
|
226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
228 |
msgid "Packages"
|
229 |
msgstr ""
|
@@ -240,6 +296,10 @@ msgstr ""
|
|
240 |
msgid "Back"
|
241 |
msgstr ""
|
242 |
|
|
|
|
|
|
|
|
|
243 |
#: ../tpl/admin-list.tpl.php:11
|
244 |
msgctxt "Table header"
|
245 |
msgid "Package details"
|
@@ -283,11 +343,27 @@ msgstr ""
|
|
283 |
msgid "Configure Loco Translate"
|
284 |
msgstr ""
|
285 |
|
286 |
-
#: ../tpl/admin-opts.tpl.php:27
|
287 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
msgstr ""
|
289 |
|
290 |
-
#: ../tpl/admin-opts.tpl.php:
|
291 |
msgid "Save settings"
|
292 |
msgstr ""
|
293 |
|
@@ -313,41 +389,41 @@ msgctxt "Editor button"
|
|
313 |
msgid "Save"
|
314 |
msgstr ""
|
315 |
|
316 |
-
#: ../tpl/admin-poedit.tpl.php:94
|
317 |
msgctxt "Editor button"
|
318 |
msgid "Download"
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: ../tpl/admin-poedit.tpl.php:
|
322 |
msgctxt "Editor button"
|
323 |
msgid "Sync"
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: ../tpl/admin-poedit.tpl.php:
|
327 |
msgctxt "Editor button"
|
328 |
msgid "Revert"
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: ../tpl/admin-poedit.tpl.php:
|
332 |
msgctxt "Editor button"
|
333 |
msgid "Add"
|
334 |
msgstr ""
|
335 |
|
336 |
-
#: ../tpl/admin-poedit.tpl.php:
|
337 |
msgctxt "Editor button"
|
338 |
msgid "Del"
|
339 |
msgstr ""
|
340 |
|
341 |
-
#: ../tpl/admin-poedit.tpl.php:
|
342 |
msgctxt "Editor button"
|
343 |
msgid "Fuzzy"
|
344 |
msgstr ""
|
345 |
|
346 |
-
#: ../tpl/admin-poedit.tpl.php:
|
347 |
msgid "Filter translations"
|
348 |
msgstr ""
|
349 |
|
350 |
-
#: ../tpl/admin-poedit.tpl.php:
|
351 |
msgctxt "Editor button"
|
352 |
msgid "Help"
|
353 |
msgstr ""
|
1 |
+
#. Loco Gettext template
|
2 |
#, fuzzy
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Loco Translate\n"
|
6 |
"Report-Msgid-Bugs-To: \n"
|
7 |
+
"POT-Creation-Date: Thu Jan 02 2014 17:30:57 GMT+0000 (GMT)\n"
|
8 |
+
"POT-Revision-Date: Sat Jan 04 2014 20:45:33 GMT+0000 (GMT)\n"
|
9 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
10 |
"Last-Translator: \n"
|
11 |
"Language-Team: \n"
|
24 |
"comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
|
25 |
"X-Generator: Loco - https://localise.biz/"
|
26 |
|
27 |
+
#. Translators: Bold text label in admin error messages
|
28 |
+
#: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
|
29 |
msgctxt "Message label"
|
30 |
msgid "Error"
|
31 |
msgstr ""
|
32 |
|
33 |
+
#: ../lib/loco-admin.php:24 ../pub/js/lang/dummy.php:6
|
34 |
msgctxt "Message label"
|
35 |
msgid "Warning"
|
36 |
msgstr ""
|
37 |
|
38 |
+
#: ../lib/loco-admin.php:33 ../pub/js/lang/dummy.php:5
|
39 |
msgctxt "Message label"
|
40 |
msgid "OK"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: ../lib/loco-admin.php:47
|
44 |
msgid "Settings saved"
|
45 |
msgstr ""
|
46 |
|
98 |
msgid "Bad file path"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: ../lib/loco-admin.php:732
|
102 |
msgctxt "Add button"
|
103 |
msgid "New template"
|
104 |
msgstr ""
|
105 |
|
106 |
+
#: ../lib/loco-admin.php:751
|
107 |
msgctxt "Add button"
|
108 |
msgid "New language"
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: ../lib/loco-admin.php:790
|
112 |
msgid "%s%% translated"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: ../lib/loco-admin.php:790
|
116 |
msgid "1 string"
|
117 |
msgid_plural "%s strings"
|
118 |
msgstr[0] ""
|
119 |
msgstr[1] ""
|
120 |
|
121 |
+
#: ../lib/loco-admin.php:793
|
122 |
msgid "%s fuzzy"
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: ../lib/loco-admin.php:796
|
126 |
+
msgid "%s untranslated"
|
127 |
msgstr ""
|
128 |
|
129 |
+
#: ../lib/loco-admin.php:838
|
130 |
+
msgid "Failed to compile MO file with built-in compiler"
|
131 |
+
msgstr ""
|
132 |
+
|
133 |
+
#: ../lib/loco-admin.php:867
|
134 |
msgid "Loco, Translation Management"
|
135 |
msgstr ""
|
136 |
|
137 |
+
#: ../lib/loco-admin.php:869
|
138 |
msgid "Translation"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
|
142 |
msgid "Manage translations"
|
143 |
msgstr ""
|
144 |
|
145 |
+
#: ../lib/loco-admin.php:884 ../tpl/admin-fscheck.tpl.php:7 ../tpl/admin-opts.tpl.php:7 ../tpl/admin-poedit.tpl.php:8 ../tpl/admin-poinit.tpl.php:8 ../tpl/admin-root.tpl.php:7
|
146 |
msgid "Settings"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: ../lib/loco-admin.php:908
|
150 |
+
msgid "File download failed"
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
#: ../lib/loco-locales.php:70
|
154 |
msgid "Unknown language"
|
155 |
msgstr ""
|
186 |
msgid "MO file not found"
|
187 |
msgstr ""
|
188 |
|
189 |
+
#: ../php/loco-ajax.php:17 ../php/loco-download.php:21
|
190 |
msgid "User does not have permission to manage translations"
|
191 |
msgstr ""
|
192 |
|
193 |
+
#: ../php/loco-download.php:68 ../php/loco-posave.php:88
|
194 |
+
msgid "Failed to compile MO file with %s, check your settings"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
#: ../php/loco-posave.php:10 ../php/loco-posync.php:9
|
198 |
msgid "Invalid data posted to server"
|
199 |
msgstr ""
|
220 |
"copy to \"%s/%s\"."
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: ../php/loco-posave.php:69
|
224 |
msgid "Cannot create MO file"
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: ../php/loco-posave.php:72
|
228 |
msgid "Cannot overwrite MO file"
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: ../php/loco-posave.php:98
|
232 |
+
msgid "Failed to write MO file"
|
233 |
msgstr ""
|
234 |
|
235 |
#: ../php/loco-posync.php:53
|
236 |
msgid "No strings could be extracted from source files"
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: ../pub/js/lang/dummy.php:8
|
240 |
+
msgid "Unknown error"
|
241 |
+
msgstr ""
|
242 |
+
|
243 |
+
#: ../pub/js/lang/dummy.php:9
|
244 |
+
msgid "PO file saved"
|
245 |
+
msgstr ""
|
246 |
+
|
247 |
+
#: ../pub/js/lang/dummy.php:10
|
248 |
+
msgid "and MO file compiled"
|
249 |
+
msgstr ""
|
250 |
+
|
251 |
+
#: ../pub/js/lang/dummy.php:11
|
252 |
+
msgid "Merged from %s"
|
253 |
+
msgstr ""
|
254 |
+
|
255 |
+
#: ../pub/js/lang/dummy.php:12
|
256 |
+
msgid "Merged from source code"
|
257 |
+
msgstr ""
|
258 |
+
|
259 |
+
#: ../pub/js/lang/dummy.php:13
|
260 |
+
msgid "Already up to date with %s"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: ../pub/js/lang/dummy.php:14
|
264 |
+
msgid "Already up to date with source code"
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: ../pub/js/lang/dummy.php:15
|
268 |
+
msgid "1 new string added"
|
269 |
+
msgid_plural "%s new strings added"
|
270 |
+
msgstr[0] ""
|
271 |
+
msgstr[1] ""
|
272 |
+
|
273 |
+
#: ../pub/js/lang/dummy.php:16
|
274 |
+
msgid "1 obsolete string removed"
|
275 |
+
msgid_plural "%s obsolete strings removed"
|
276 |
+
msgstr[0] ""
|
277 |
+
msgstr[1] ""
|
278 |
+
|
279 |
+
#: ../pub/js/lang/dummy.php:17
|
280 |
+
msgid "Your changes will be lost if you continue without saving"
|
281 |
+
msgstr ""
|
282 |
+
|
283 |
#: ../tpl/admin-fscheck.tpl.php:6 ../tpl/admin-opts.tpl.php:6 ../tpl/admin-poedit.tpl.php:6 ../tpl/admin-poinit.tpl.php:6 ../tpl/admin-root.tpl.php:6
|
284 |
msgid "Packages"
|
285 |
msgstr ""
|
296 |
msgid "Back"
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
|
300 |
+
msgid "Get help"
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
#: ../tpl/admin-list.tpl.php:11
|
304 |
msgctxt "Table header"
|
305 |
msgid "Package details"
|
343 |
msgid "Configure Loco Translate"
|
344 |
msgstr ""
|
345 |
|
346 |
+
#: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
|
347 |
+
msgid "Compiling MO files"
|
348 |
+
msgstr ""
|
349 |
+
|
350 |
+
#: ../tpl/admin-opts.tpl.php:36
|
351 |
+
msgid "Use built-in MO compiler."
|
352 |
+
msgstr ""
|
353 |
+
|
354 |
+
#: ../tpl/admin-opts.tpl.php:42
|
355 |
+
msgid "Use external command:"
|
356 |
+
msgstr ""
|
357 |
+
|
358 |
+
#: ../tpl/admin-opts.tpl.php:47
|
359 |
+
msgid "Enter path to msgfmt on server"
|
360 |
+
msgstr ""
|
361 |
+
|
362 |
+
#: ../tpl/admin-opts.tpl.php:54
|
363 |
+
msgid "Generate hash tables"
|
364 |
msgstr ""
|
365 |
|
366 |
+
#: ../tpl/admin-opts.tpl.php:63
|
367 |
msgid "Save settings"
|
368 |
msgstr ""
|
369 |
|
389 |
msgid "Save"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: ../tpl/admin-poedit.tpl.php:94 ../tpl/admin-poedit.tpl.php:103
|
393 |
msgctxt "Editor button"
|
394 |
msgid "Download"
|
395 |
msgstr ""
|
396 |
|
397 |
+
#: ../tpl/admin-poedit.tpl.php:115
|
398 |
msgctxt "Editor button"
|
399 |
msgid "Sync"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: ../tpl/admin-poedit.tpl.php:120
|
403 |
msgctxt "Editor button"
|
404 |
msgid "Revert"
|
405 |
msgstr ""
|
406 |
|
407 |
+
#: ../tpl/admin-poedit.tpl.php:125
|
408 |
msgctxt "Editor button"
|
409 |
msgid "Add"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: ../tpl/admin-poedit.tpl.php:130
|
413 |
msgctxt "Editor button"
|
414 |
msgid "Del"
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: ../tpl/admin-poedit.tpl.php:135
|
418 |
msgctxt "Editor button"
|
419 |
msgid "Fuzzy"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: ../tpl/admin-poedit.tpl.php:139
|
423 |
msgid "Filter translations"
|
424 |
msgstr ""
|
425 |
|
426 |
+
#: ../tpl/admin-poedit.tpl.php:143
|
427 |
msgctxt "Editor button"
|
428 |
msgid "Help"
|
429 |
msgstr ""
|
lib/build/gettext-compiled.php
CHANGED
@@ -2,6 +2,6 @@
|
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
-
* @date
|
6 |
*/
|
7 |
-
class LocoArray implements Iterator { private $i; private $length; private $keys; private $vals; private $index; public function __construct( array $data = array() ){ $this->keys = array_keys( $data ); $this->vals = array_values( $data ); $this->index = array_flip( array_map( 'strtolower', $this->keys ) ); $this->length = count( $this->keys ); $this->rewind(); } public function add( $key, $val ){ $k = strtolower($key); if( isset($this->index[$k]) ){ $this->keys[ $this->index[$k] ] = $key; $this->vals[ $this->index[$k] ] = $val; } else { $this->index[$k] = $this->length++; $this->keys[] = $key; $this->vals[] = $val; } return $this; } public function to_array(){ return array_combine( $this->keys, $this->vals ); } public function count(){ return $this->length; } public function trimmed( $prop ){ return trim( $this->__get($prop) ); } public function has( $key ){ return isset( $this->index[ strtolower($key) ] ); } public function __get( $key ){ $key = strtolower( $key ); return isset($this->index[$key]) ? $this->vals[ $this->index[$key] ] : null; } public function rewind(){ $this->i = reset( $this->index ); } public function key(){ return is_int($this->i) ? $this->keys[$this->i] : null; } public function current(){ return is_int($this->i) ? $this->vals[$this->i] : null; } public function valid(){ return is_int($this->i); } public function next(){ $this->i = next( $this->index ); } } define( 'LOCO_FLAG_OK', 0 ); define( 'LOCO_FLAG_ERROR', 1 ); define( 'LOCO_FLAG_REVIEW', 2 ); define( 'LOCO_FLAG_PENDING', 3 ); define( 'LOCO_FLAG_FUZZY', 4 ); function loco_flags(){ static $flags = array ( LOCO_FLAG_OK => 'Translated', LOCO_FLAG_ERROR => 'Incorrect', LOCO_FLAG_REVIEW => 'Needs review', LOCO_FLAG_PENDING => 'Pending sign-off', LOCO_FLAG_FUZZY => 'Fuzzy', ); return $flags; } function loco_flag( $f ){ $flags = loco_flags(); if( ! isset($flags[$f]) ){ throw new Exception('Invalid LOCO_FLAG_ constant ', var_export($f,1) ); } return $flags[$f]; } function loco_po_flags(){ static $map = array ( LOCO_FLAG_FUZZY => '#, fuzzy', ); return $map; } function loco_parse_po( $src ){ $i = -1; $key = ''; $entries = array(); $template = array( '#' => array(), 'id' => array(), 'str' => array(), 'ctxt' => array() ); foreach( preg_split('/[\r\n]+/', $src) as $line ){ while( $line = trim($line) ){ $c = $line{0}; if( '"' === $c ){ if( $key && isset($entry) ){ $entry[$key][$idx][] = loco_po_unquote( $line ); } } else if( '#' === $c ){ if( isset($entry['i']) ){ unset( $entry ); $entry = $template; } $f = empty($line{1}) ? ' ' : $line{1}; $entry['#'][$f][] = trim( substr( $line, 1+strlen($f) ), "/ \n\r\t" ); } else if( preg_match('/^msg(id|str|ctxt|id_plural)(?:\[(\d+)\])?[ \t]+/', $line, $r ) ){ $key = $r[1]; $idx = isset($r[2]) ? (int) $r[2] : 0; if( 'str' === $key ){ if( ! isset($entry['i']) ){ $entry['i'] = ++$i; $entries[$i] = &$entry; } } else if( ! isset($entry) || isset($entry['i']) ){ unset( $entry ); $entry = $template; } $line = substr( $line, strlen($r[0]) ); continue; } continue 2; } } unset( $entry ); $assets = array(); foreach( $entries as $i => $entry ){ $asset = array ( 'id' => '', 'source' => implode('',$entry['id'][0]), 'target' => implode('',$entry['str'][0]), ); if( isset($entry['ctxt'][0]) ){ $asset['context'] = implode('',$entry['ctxt'][0]); } $comments = array(); isset($entry['#'][' ']) and $comments = array_merge( $comments, $entry['#'][' ']); isset($entry['#']['.']) and $comments = array_merge( $comments, $entry['#']['.']); $comments and $asset['comment'] = implode("\n", $comments); if( isset($entry['#'][':']) ){ $asset['refs'] = implode( "\n", $entry['#'][':'] ); } if( isset($entry['#'][',']) ){ foreach( $entry['#'][','] as $flag ){ if( $flag = loco_po_parse_flag($flag) ){ $asset['flag'] = $flag; break; } } } $pidx = count($assets); $assets[] = $asset; if( isset($entry['id_plural']) || isset($entry['str'][1]) ){ $idx = 0; $num = max( 2, count($entry['str']) ); while( ++$idx < $num ){ $assets[] = array ( 'id' => '', 'parent' => $pidx, 'plural' => $idx, 'source' => isset($entry['id_plural'][0]) ? implode('',$entry['id_plural'][0]) : '', 'target' => isset($entry['str'][$idx]) ? implode('',$entry['str'][$idx]) : '', ); } } } return $assets; } function loco_po_parse_flag( $text, $flag = 0 ){ $map = loco_po_flags(); foreach( explode(',',$text) as $needle ){ if( $needle = trim($needle) ){ foreach( $map as $loco_flag => $haystack ){ if( false !== stripos($haystack, $needle) ){ $flag |= $loco_flag; break; } } } } return $flag; } function loco_po_unquote( $str ){ return substr( stripcslashes($str), 1, -1 ); } function loco_parse_po_headers( $str ){ $headers = new LocoArray( array() ); foreach( explode("\n",$str) as $line ){ $i = strpos($line,':') and $key = trim( substr($line,0,$i) ) and $headers->add( $key, trim( substr($line,++$i) ) ); } return $headers; } final class PHPTokens implements Iterator { private $tokens; private $i; private $skip_tokens = array(); private $skip_strings = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function ignore(){ foreach( func_get_args() as $t ){ if( is_int($t) ){ $this->skip_tokens[$t] = true; } else { $this->skip_strings[$t] = true; } } return $this; } public function advance(){ $this->next(); return $this->current(); } public function rewind(){ $this->i = false === reset($this->tokens) ? null : key($this->tokens); } public function valid(){ return isset($this->i); } public function key(){ return $this->i; } public function next(){ $this->i = false === next($this->tokens) ? null : key($this->tokens); } public function current(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( is_array($tok) ){ if( isset($this->skip_tokens[$tok[0]]) ){ $this->next(); } else { return $tok; } } else if( isset($this->skip_strings[$tok]) ){ $this->next(); } else { return $tok; } } return false; } } function loco_parse_comment($comment){ if( '*' === $comment{1} ){ $lines = array(); foreach( explode("\n", $comment) as $line ){ $line and $lines[] = trim($line,"/* \r\t"); } $comment = implode("\n", $lines); } return trim( $comment,"/ \n\r\t" ); } function decapse_string( $s ){ if( empty($s) ){ return ''; } $q = $s{0}; switch( $q ){ case "'": case '"': $s = substr( $s, 1, -1 ); if( '"' === $q ){ return stripcslashes($s); } return str_replace( array( '\\'.$q, '\\\\' ), array( $q, '\\' ), $s ); default: trigger_error( "Bad quote character ($q) at offset 0", E_USER_NOTICE ); return $s; } } function loco_extract_php( array $tokens, $fileref = '' ){ $extractor = new LocoPHPExtractor; return $extractor->extract( $tokens, $fileref ); } final class LocoPHPExtractor { private static $rules = array ( '_' => 's', 'gettext' => 's', 'dgettext' => '_s', 'ngettext' => 'sp', 'dngettext' => '_sp', '__' => 's', '_e' => 's', '_c' => 's', '_n' => 'sp', '_n_noop' => 'sp', '_nc' => 'sp', '__ngettext' => 'sp', '__ngettext_noop' => 'sp', '_x' => 'sc', '_ex' => 'sc', '_nx' => 'sp_c', '_nx_noop' => 'spc', '_n_js' => 'sp', '_nx_js' => 'spc', 'esc_attr__' => 's', 'esc_html__' => 's', 'esc_attr_e' => 's', 'esc_html_e' => 's', 'esc_attr_x' => 'sc', 'esc_html_x' => 'sc', 'comments_number_link' => '_sp', 't' => 's', 'st' => 's', 'trans' => 's', 'transChoice' => 'sp', ); private $exp = array(); private $reg = array(); public function extract( array $tokens, $fileref = '' ){ $tokens = new PHPTokens( $tokens ); $tokens->ignore( T_WHITESPACE ); $comment = ''; foreach( $tokens as $tok ){ if( isset($args) ){ if( ')' === $tok ){ isset($arg) and $arg and $args[] = $arg; $this->push( $rule, $args, $comment, $ref ); unset($args,$arg); $comment = ''; } else if( ',' === $tok ){ isset($arg) and $arg and $args[] = $arg; unset($arg); } else if( isset($arg) ){ $arg[] = $tok; } else { $arg = array( $tok ); } } else if( is_array($tok) ){ list($t,$s) = $tok; if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $comment = $s; } else if( T_STRING === $t && isset(self::$rules[$s]) && '(' === $tokens->advance() ){ $rule = self::$rules[$s]; $args = array(); $ref = $fileref ? $fileref.':'.$tok[2]: ''; } else if( $comment && false === stripos($comment, 'translators') ){ $comment = ''; } } } return $this->exp; } private function push( $rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); foreach( $args as $i => $tokens ){ if( 1 === count($tokens) && is_array($tokens[0]) && T_CONSTANT_ENCAPSED_STRING === $tokens[0][0] ){ $args[$i] = decapse_string( $tokens[0][1] ); } else { $args[$i] = null; } } $key = $msgid = $args[$s]; if( ! $msgid ){ return null; } $entry = array ( 'id' => '', 'source' => $msgid, 'target' => '', ); if( $c && isset($args[$c]) ){ $entry['context'] = $args[$c]; $key .= "\0". $args[$c]; } if( $ref ){ $entry['refs'] = $ref; } if( $comment ){ $entry['comment'] = loco_parse_comment($comment); } if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $a = array(); isset($this->exp[$index]['refs']) and $a[] = $this->exp[$index]['refs']; isset($entry['refs']) and $a[] = $entry['refs']; $a && $this->exp[$index]['refs'] = implode(" ", $a ); $a = array(); isset($this->exp[$index]['comment']) and $a[] = $this->exp[$index]['comment']; isset($entry['comment']) and $a[] = $entry['comment']; $a && $this->exp[$index]['comment'] = implode("\n", $a ); } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[] = $entry; } if( $p && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array ( 'id' => '', 'source' => $msgid_plural, 'target' => '', 'plural' => 1, 'parent' => $index, ); $key = $msgid_plural."\0\0"; if( isset($this->reg[$key]) ){ $plural_index = $this->reg[$key]; $this->exp[$plural_index] = $entry; } else { $plural_index = count($this->exp); $this->reg[$key] = $plural_index; $this->exp[] = $entry; } } return $index; } public function get_xgettext( $input = '-' ){ $cmd = defined('WHICH_XGETTEXT') ? WHICH_XGETTEXT : 'xgettext'; $cmd.= ' -LPHP -c -o-'; if( $k = $this->get_xgettext_keywords() ){ $cmd.= ' -k'.implode(' -k', $k ); } return $cmd.' '.$input; } public function get_xgettext_keywords(){ $ks = array(); foreach( self::$rules as $word => $rule ){ $s = strpos( $rule, 's'); $k = $word.':'.++$s; if( false !== $p = strpos( $rule, 'p') ){ $k.= ','.++$p; } if( false !== $p = strpos( $rule, 'c') ){ $k.= ','.++$p.'c'; } $ks[] = $k; } return $ks; } } function loco_relative_path( $source_path, $target_path ){ $rel = ''; $common = false; $src = preg_split('!/+!', $source_path, -1, PREG_SPLIT_NO_EMPTY ); $dst = preg_split('!/+!', $target_path, -1, PREG_SPLIT_NO_EMPTY ); while( $src && $dst ){ if( current($src) !== current($dst) ){ break; } $common = true; array_shift($src); array_shift($dst); } if( ! $common ){ return $target_path; } if( $src ){ $up = array_fill( 0, count($src), '..' ); $rel = implode('/', $up ); } if( $dst ){ $rel && $rel .= '/'; $rel .= implode('/', $dst ); } return $rel; } function loco_po_stats( array $po ){ $t = $n = $f = $u = 0; foreach( $po as $r ){ if( ! isset($r['source']) || '' === $r['source'] ){ continue; } if( isset($r['parent']) && is_int($r['parent']) ){ continue; } $t++; if( '' === $r['target'] ){ $u++; } else if( isset($r['flag']) && LOCO_FLAG_FUZZY === $r['flag'] ){ $f++; } else { $n++; } } $r = $t && $n ? $n / $t : 0; $p = (string) round( $r * 100 ); return compact('t','p','f','u'); }
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
+
* @date Sat, 04 Jan 2014 20:28:03 +0000
|
6 |
*/
|
7 |
+
class LocoArray implements Iterator { private $i; private $length; private $keys; private $vals; private $index; public function __construct( array $data = array() ){ $this->keys = array_keys( $data ); $this->vals = array_values( $data ); $this->index = array_flip( array_map( 'strtolower', $this->keys ) ); $this->length = count( $this->keys ); $this->rewind(); } public function add( $key, $val ){ $k = strtolower($key); if( isset($this->index[$k]) ){ $this->keys[ $this->index[$k] ] = $key; $this->vals[ $this->index[$k] ] = $val; } else { $this->index[$k] = $this->length++; $this->keys[] = $key; $this->vals[] = $val; } return $this; } public function to_array(){ return array_combine( $this->keys, $this->vals ); } function __toString(){ $pairs = array(); foreach( $this->keys as $i => $key ){ $pairs[] = trim($key).': '.$this->vals[$i]; } return implode("\n", $pairs ); } public function count(){ return $this->length; } public function trimmed( $prop ){ return trim( $this->__get($prop) ); } public function has( $key ){ return isset( $this->index[ strtolower($key) ] ); } public function __get( $key ){ $key = strtolower( $key ); return isset($this->index[$key]) ? $this->vals[ $this->index[$key] ] : null; } public function rewind(){ $this->i = reset( $this->index ); } public function key(){ return is_int($this->i) ? $this->keys[$this->i] : null; } public function current(){ return is_int($this->i) ? $this->vals[$this->i] : null; } public function valid(){ return is_int($this->i); } public function next(){ $this->i = next( $this->index ); } } define( 'LOCO_FLAG_OK', 0 ); define( 'LOCO_FLAG_ERROR', 1 ); define( 'LOCO_FLAG_REVIEW', 2 ); define( 'LOCO_FLAG_PENDING', 3 ); define( 'LOCO_FLAG_FUZZY', 4 ); function loco_flags(){ static $flags = array ( LOCO_FLAG_OK => 'Translated', LOCO_FLAG_ERROR => 'Incorrect', LOCO_FLAG_REVIEW => 'Needs review', LOCO_FLAG_PENDING => 'Pending sign-off', LOCO_FLAG_FUZZY => 'Fuzzy', ); return $flags; } function loco_flag( $f ){ $flags = loco_flags(); if( ! isset($flags[$f]) ){ throw new Exception('Invalid LOCO_FLAG_ constant ', var_export($f,1) ); } return $flags[$f]; } function loco_po_flags(){ static $map = array ( LOCO_FLAG_FUZZY => '#, fuzzy', ); return $map; } function loco_parse_po( $src ){ $i = -1; $key = ''; $entries = array(); $template = array( '#' => array(), 'id' => array(), 'str' => array(), 'ctxt' => array() ); foreach( preg_split('/[\r\n]+/', $src) as $line ){ while( $line = trim($line) ){ $c = $line{0}; if( '"' === $c ){ if( $key && isset($entry) ){ $entry[$key][$idx][] = loco_po_unquote( $line ); } } else if( '#' === $c ){ if( isset($entry['i']) ){ unset( $entry ); $entry = $template; } $f = empty($line{1}) ? ' ' : $line{1}; $entry['#'][$f][] = trim( substr( $line, 1+strlen($f) ), "/ \n\r\t" ); } else if( preg_match('/^msg(id|str|ctxt|id_plural)(?:\[(\d+)\])?[ \t]+/', $line, $r ) ){ $key = $r[1]; $idx = isset($r[2]) ? (int) $r[2] : 0; if( 'str' === $key ){ if( ! isset($entry['i']) ){ $entry['i'] = ++$i; $entries[$i] = &$entry; } } else if( ! isset($entry) || isset($entry['i']) ){ unset( $entry ); $entry = $template; } $line = substr( $line, strlen($r[0]) ); continue; } continue 2; } } unset( $entry ); $assets = array(); foreach( $entries as $i => $entry ){ $asset = array ( 'id' => '', 'source' => implode('',$entry['id'][0]), 'target' => implode('',$entry['str'][0]), ); if( isset($entry['ctxt'][0]) ){ $asset['context'] = implode('',$entry['ctxt'][0]); } $comments = array(); isset($entry['#'][' ']) and $comments = array_merge( $comments, $entry['#'][' ']); isset($entry['#']['.']) and $comments = array_merge( $comments, $entry['#']['.']); $comments and $asset['comment'] = implode("\n", $comments); if( isset($entry['#'][':']) ){ $asset['refs'] = implode( "\n", $entry['#'][':'] ); } if( isset($entry['#'][',']) ){ foreach( $entry['#'][','] as $flag ){ if( $flag = loco_po_parse_flag($flag) ){ $asset['flag'] = $flag; break; } } } $pidx = count($assets); $assets[] = $asset; if( isset($entry['id_plural']) || isset($entry['str'][1]) ){ $idx = 0; $num = max( 2, count($entry['str']) ); while( ++$idx < $num ){ $assets[] = array ( 'id' => '', 'parent' => $pidx, 'plural' => $idx, 'source' => isset($entry['id_plural'][0]) ? implode('',$entry['id_plural'][0]) : '', 'target' => isset($entry['str'][$idx]) ? implode('',$entry['str'][$idx]) : '', ); } } } return $assets; } function loco_po_parse_flag( $text, $flag = 0 ){ $map = loco_po_flags(); foreach( explode(',',$text) as $needle ){ if( $needle = trim($needle) ){ foreach( $map as $loco_flag => $haystack ){ if( false !== stripos($haystack, $needle) ){ $flag |= $loco_flag; break; } } } } return $flag; } function loco_po_unquote( $str ){ return substr( stripcslashes($str), 1, -1 ); } function loco_parse_po_headers( $str ){ $headers = new LocoArray( array() ); foreach( explode("\n",$str) as $line ){ $i = strpos($line,':') and $key = trim( substr($line,0,$i) ) and $headers->add( $key, trim( substr($line,++$i) ) ); } return $headers; } final class PHPTokens implements Iterator { private $tokens; private $i; private $skip_tokens = array(); private $skip_strings = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function ignore(){ foreach( func_get_args() as $t ){ if( is_int($t) ){ $this->skip_tokens[$t] = true; } else { $this->skip_strings[$t] = true; } } return $this; } public function advance(){ $this->next(); return $this->current(); } public function rewind(){ $this->i = false === reset($this->tokens) ? null : key($this->tokens); } public function valid(){ return isset($this->i); } public function key(){ return $this->i; } public function next(){ $this->i = false === next($this->tokens) ? null : key($this->tokens); } public function current(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( is_array($tok) ){ if( isset($this->skip_tokens[$tok[0]]) ){ $this->next(); } else { return $tok; } } else if( isset($this->skip_strings[$tok]) ){ $this->next(); } else { return $tok; } } return false; } } function loco_parse_comment($comment){ if( '*' === $comment{1} ){ $lines = array(); foreach( explode("\n", $comment) as $line ){ $line and $lines[] = trim($line,"/* \r\t"); } $comment = implode("\n", $lines); } return trim( $comment,"/ \n\r\t" ); } function decapse_string( $s ){ if( empty($s) ){ return ''; } $q = $s{0}; switch( $q ){ case "'": case '"': $s = substr( $s, 1, -1 ); if( '"' === $q ){ return stripcslashes($s); } return str_replace( array( '\\'.$q, '\\\\' ), array( $q, '\\' ), $s ); default: trigger_error( "Bad quote character ($q) at offset 0", E_USER_NOTICE ); return $s; } } function loco_extract_php( array $tokens, $fileref = '' ){ $extractor = new LocoPHPExtractor; return $extractor->extract( $tokens, $fileref ); } final class LocoPHPExtractor { private static $rules = array ( '_' => 's', 'gettext' => 's', 'dgettext' => '_s', 'ngettext' => 'sp', 'dngettext' => '_sp', '__' => 's', '_e' => 's', '_c' => 's', '_n' => 'sp', '_n_noop' => 'sp', '_nc' => 'sp', '__ngettext' => 'sp', '__ngettext_noop' => 'sp', '_x' => 'sc', '_ex' => 'sc', '_nx' => 'sp_c', '_nx_noop' => 'spc', '_n_js' => 'sp', '_nx_js' => 'spc', 'esc_attr__' => 's', 'esc_html__' => 's', 'esc_attr_e' => 's', 'esc_html_e' => 's', 'esc_attr_x' => 'sc', 'esc_html_x' => 'sc', 'comments_number_link' => '_sp', 't' => 's', 'st' => 's', 'trans' => 's', 'transChoice' => 'sp', ); private $exp = array(); private $reg = array(); public function extract( array $tokens, $fileref = '' ){ $tokens = new PHPTokens( $tokens ); $tokens->ignore( T_WHITESPACE ); $comment = ''; foreach( $tokens as $tok ){ if( isset($args) ){ if( ')' === $tok ){ isset($arg) and $arg and $args[] = $arg; $this->push( $rule, $args, $comment, $ref ); unset($args,$arg); $comment = ''; } else if( ',' === $tok ){ isset($arg) and $arg and $args[] = $arg; unset($arg); } else if( isset($arg) ){ $arg[] = $tok; } else { $arg = array( $tok ); } } else if( is_array($tok) ){ list($t,$s) = $tok; if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $comment = $s; } else if( T_STRING === $t && isset(self::$rules[$s]) && '(' === $tokens->advance() ){ $rule = self::$rules[$s]; $args = array(); $ref = $fileref ? $fileref.':'.$tok[2]: ''; } else if( $comment && false === stripos($comment, 'translators') ){ $comment = ''; } } } return $this->exp; } private function push( $rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); foreach( $args as $i => $tokens ){ if( 1 === count($tokens) && is_array($tokens[0]) && T_CONSTANT_ENCAPSED_STRING === $tokens[0][0] ){ $args[$i] = decapse_string( $tokens[0][1] ); } else { $args[$i] = null; } } $key = $msgid = $args[$s]; if( ! $msgid ){ return null; } $entry = array ( 'id' => '', 'source' => $msgid, 'target' => '', ); if( $c && isset($args[$c]) ){ $entry['context'] = $args[$c]; $key .= "\0". $args[$c]; } if( $ref ){ $entry['refs'] = $ref; } if( $comment ){ $entry['comment'] = loco_parse_comment($comment); } if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $a = array(); isset($this->exp[$index]['refs']) and $a[] = $this->exp[$index]['refs']; isset($entry['refs']) and $a[] = $entry['refs']; $a && $this->exp[$index]['refs'] = implode(" ", $a ); $a = array(); isset($this->exp[$index]['comment']) and $a[] = $this->exp[$index]['comment']; isset($entry['comment']) and $a[] = $entry['comment']; $a && $this->exp[$index]['comment'] = implode("\n", $a ); } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[] = $entry; } if( $p && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array ( 'id' => '', 'source' => $msgid_plural, 'target' => '', 'plural' => 1, 'parent' => $index, ); $key = $msgid_plural."\0\0"; if( isset($this->reg[$key]) ){ $plural_index = $this->reg[$key]; $this->exp[$plural_index] = $entry; } else { $plural_index = count($this->exp); $this->reg[$key] = $plural_index; $this->exp[] = $entry; } } return $index; } public function get_xgettext( $input = '-' ){ $cmd = defined('WHICH_XGETTEXT') ? WHICH_XGETTEXT : 'xgettext'; $cmd.= ' -LPHP -c -o-'; if( $k = $this->get_xgettext_keywords() ){ $cmd.= ' -k'.implode(' -k', $k ); } return $cmd.' '.$input; } public function get_xgettext_keywords(){ $ks = array(); foreach( self::$rules as $word => $rule ){ $s = strpos( $rule, 's'); $k = $word.':'.++$s; if( false !== $p = strpos( $rule, 'p') ){ $k.= ','.++$p; } if( false !== $p = strpos( $rule, 'c') ){ $k.= ','.++$p.'c'; } $ks[] = $k; } return $ks; } } function loco_relative_path( $source_path, $target_path ){ $rel = ''; $common = false; $src = preg_split('!/+!', $source_path, -1, PREG_SPLIT_NO_EMPTY ); $dst = preg_split('!/+!', $target_path, -1, PREG_SPLIT_NO_EMPTY ); while( $src && $dst ){ if( current($src) !== current($dst) ){ break; } $common = true; array_shift($src); array_shift($dst); } if( ! $common ){ return $target_path; } if( $src ){ $up = array_fill( 0, count($src), '..' ); $rel = implode('/', $up ); } if( $dst ){ $rel && $rel .= '/'; $rel .= implode('/', $dst ); } return $rel; } class LocoMo { private $bin; private $msgs; private $head; private $hash; public function __construct( array $export, LocoArray $head = null ){ if( ! $head ){ $head = new LocoArray( array( 'Project-Id-Version' => 'None', 'MIME-Version' => '1.0', 'Content-Type' => 'text/plain; charset=UTF-8', 'Content-Transfer-Encoding' => '8bit', 'X-Generator' => 'Loco '.PLUG_HTTP_ADDR, ) ); } $this->head = $head; $this->msgs = $export; $this->bin = ''; } public function enableHash(){ return $this->hash = new LocoMoTable; } public function setHeader( $key, $val ){ $this->head->add($key, $val); return $this; } public function setProject( LocoProject $Proj ){ return $this ->setHeader( 'Project-Id-Version', $Proj->proj_name ) ->setHeader($key, $val) ; } public function setLocale( LocoProjectLocale $Loc ){ return $this ->setHeader( 'Language', $Loc->label ) ->setHeader( 'Plural-Forms', 'nplurals='.$Loc->nplurals.'; plural='.$Loc->pluraleq.';' ) ; } public function count(){ return count($this->msgs); } public function compile(){ $table = array(''); $sources = array(''); $targets = array( $this->head->__toString() ); foreach( $this->msgs as $r ){ $msgid = $r['key']; if( isset($r['context']) && $r['context'] ){ $msgid or $msgid = "(".$r['context'].')'; $msgid = $r['context']."\x04".$msgid; } if( ! $msgid ){ continue; } $msgstr = $r['translation']; if( ! $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$p['key']; } $msgstr .= "\0".$p['translation']; } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = ''; $this->writeInteger( 0x950412de ); $this->writeInteger( 0 ); $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $i => $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ){ $this->bin .= pack( 'V', $num ); return $this; } } class LocoMoTable { private $size = 0; private $bin = ''; private $map; public function __construct( $data = null ){ if( is_array($data) ){ $this->compile( $data ); } else if( $data ){ $this->parse( $data ); } } public function count(){ if( ! isset($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2'); } } return $this->size; } public function bytes(){ return $this->count() * 4; } public function __toString(){ return $this->bin; } public function export(){ if( ! is_array($this->map) ){ $this->parse( $this->bin ); } return $this->map; } private function reset( $length ){ $this->size = max( 3, self::next_prime ( $length * 4 / 3 ) ); $this->bin = null; $this->map = array(); return $this->size; } public function compile( array $msgids ){ $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } return $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } public function parse( $bin ){ $this->bin = (string) $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = array(); $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } return $this->map; } public static function hashpjw( $str ){ $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( $str{$i} ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ){ $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if ($num === 1 ){ return false; } if( $num === 2 ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } } function loco_msgfmt( $po, $withhash = false ){ if( ! is_array($po) ){ $po = loco_parse_po( $po ); } $head = null; if( isset($po[0]) && '' === $po[0]['source'] ){ $head = loco_parse_po_headers( $po[0]['target'] ); $po[0] = null; } $export = array(); foreach( $po as $i => $r ){ if( ! $r ){ continue; } $msg = array ( 'key' => $r['source'], 'translation' => $r['target'], ); if( isset($r['parent']) ){ unset( $parent ); $parent = &$export[ $r['parent'] ]; isset($parent['plurals']) or $parent['plurals'] = array(); $parent['plurals'][] = $msg; } else { isset($r['context']) and $msg['context'] = $r['context']; $export[$i] = $msg; } } $mo = new LocoMo( $export, $head ); if( $withhash ){ $mo->enableHash(); } return $mo->compile(); } function loco_po_stats( array $po ){ $t = $n = $f = $u = 0; foreach( $po as $r ){ if( ! isset($r['source']) || '' === $r['source'] ){ continue; } if( isset($r['parent']) && is_int($r['parent']) ){ continue; } $t++; if( '' === $r['target'] ){ $u++; } else if( isset($r['flag']) && LOCO_FLAG_FUZZY === $r['flag'] ){ $f++; } else { $n++; } } $r = $t && $n ? $n / $t : 0; $p = (string) round( $r * 100 ); return compact('t','p','f','u'); }
|
lib/build/locales-compiled.php
CHANGED
@@ -2,6 +2,6 @@
|
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
-
* @date
|
6 |
*/
|
7 |
return unserialize('a:130:{s:5:"af_ZA";s:24:"Afrikaans (South Africa)";s:5:"ar_AE";s:29:"Arabic (United Arab Emirates)";s:5:"ar_IL";s:15:"Arabic (Israel)";s:5:"az_TR";s:20:"Azerbaijani (Turkey)";s:5:"bg_BG";s:9:"Bulgarian";s:5:"bn_BD";s:20:"Bengali (Bangladesh)";s:5:"bs_BA";s:30:"Bosnian (Bosnia & Herzegovina)";s:5:"cs_CZ";s:5:"Czech";s:5:"cy_GB";s:5:"Welsh";s:5:"da_DK";s:6:"Danish";s:5:"de_AT";s:16:"German (Austria)";s:5:"de_CH";s:20:"German (Switzerland)";s:5:"de_DE";s:6:"German";s:5:"el_CY";s:14:"Greek (Cyprus)";s:5:"el_GR";s:5:"Greek";s:5:"en_AE";s:30:"English (United Arab Emirates)";s:5:"en_AU";s:19:"English (Australia)";s:5:"en_CA";s:16:"English (Canada)";s:5:"en_GB";s:12:"English (UK)";s:5:"en_HK";s:19:"English (Hong Kong)";s:5:"en_IE";s:17:"English (Ireland)";s:5:"en_IN";s:15:"English (India)";s:5:"en_NZ";s:21:"English (New Zealand)";s:5:"en_SG";s:19:"English (Singapore)";s:5:"en_US";s:13:"English (USA)";s:5:"en_ZA";s:22:"English (South Africa)";s:5:"es_AR";s:19:"Spanish (Argentina)";s:5:"es_BO";s:17:"Spanish (Bolivia)";s:5:"es_CL";s:15:"Spanish (Chile)";s:5:"es_CO";s:18:"Spanish (Colombia)";s:5:"es_CR";s:20:"Spanish (Costa Rica)";s:5:"es_CU";s:14:"Spanish (Cuba)";s:5:"es_DO";s:28:"Spanish (Dominican Republic)";s:5:"es_EC";s:17:"Spanish (Ecuador)";s:5:"es_ES";s:7:"Spanish";s:5:"es_GT";s:19:"Spanish (Guatemala)";s:5:"es_HN";s:18:"Spanish (Honduras)";s:5:"es_MX";s:16:"Spanish (Mexico)";s:5:"es_NI";s:19:"Spanish (Nicaragua)";s:5:"es_PA";s:16:"Spanish (Panama)";s:5:"es_PE";s:14:"Spanish (Peru)";s:5:"es_PY";s:18:"Spanish (Paraguay)";s:5:"es_SV";s:21:"Spanish (El Salvador)";s:5:"es_UY";s:17:"Spanish (Uruguay)";s:5:"es_VE";s:19:"Spanish (Venezuela)";s:5:"et_EE";s:8:"Estonian";s:5:"fa_AF";s:21:"Persian (Afghanistan)";s:5:"fa_IR";s:14:"Persian (Iran)";s:5:"fi_FI";s:7:"Finnish";s:5:"fo_DK";s:17:"Faroese (Denmark)";s:5:"fo_FO";s:23:"Faroese (Faroe Islands)";s:5:"fr_BE";s:16:"French (Belgium)";s:5:"fr_CA";s:15:"French (Canada)";s:5:"fr_CH";s:20:"French (Switzerland)";s:5:"fr_FR";s:6:"French";s:5:"fr_HT";s:14:"French (Haiti)";s:5:"ga_IE";s:15:"Irish (Ireland)";s:5:"gl_ES";s:16:"Galician (Spain)";s:5:"gn_PY";s:18:"Guarani (Paraguay)";s:5:"he_IL";s:15:"Hebrew (Israel)";s:5:"hi_IN";s:13:"Hindi (India)";s:5:"hr_HR";s:8:"Croatian";s:5:"ht_HT";s:14:"Haitian Creole";s:5:"hu_HU";s:9:"Hungarian";s:5:"hy_AM";s:8:"Armenian";s:5:"id_ID";s:10:"Indonesian";s:5:"is_IS";s:9:"Icelandic";s:5:"it_CH";s:21:"Italian (Switzerland)";s:5:"it_IT";s:7:"Italian";s:5:"ja_JP";s:8:"Japanese";s:5:"jv_ID";s:20:"Javanese (Indonesia)";s:5:"ka_GE";s:8:"Georgian";s:5:"kk_KZ";s:6:"Kazakh";s:5:"kn_IN";s:15:"Kannada (India)";s:5:"ko_KR";s:6:"Korean";s:5:"lb_LU";s:13:"Luxembourgish";s:5:"li_NL";s:24:"Limburgish (Netherlands)";s:5:"lo_LA";s:10:"Lao (Laos)";s:5:"lt_LT";s:10:"Lithuanian";s:5:"lv_LV";s:7:"Latvian";s:5:"mg_MG";s:21:"Malagasy (Madagascar)";s:5:"ms_MY";s:16:"Malay (Malaysia)";s:5:"mt_MT";s:7:"Maltese";s:5:"my_MM";s:17:"Burmese (Myanmar)";s:5:"nb_NO";s:7:"Bokmål";s:5:"ne_NP";s:6:"Nepali";s:5:"nl_BE";s:15:"Dutch (Belgium)";s:5:"nl_NL";s:5:"Dutch";s:5:"nn_NO";s:7:"Nynorsk";s:5:"no_NO";s:9:"Norwegian";s:5:"os_GE";s:18:"Ossetian (Georgia)";s:5:"os_RU";s:17:"Ossetian (Russia)";s:5:"os_TR";s:17:"Ossetian (Turkey)";s:5:"pa_IN";s:15:"Punjabi (India)";s:5:"pl_PL";s:6:"Polish";s:5:"pt_BR";s:19:"Portuguese (Brazil)";s:5:"pt_PT";s:10:"Portuguese";s:5:"ro_RO";s:8:"Romanian";s:5:"ru_RU";s:7:"Russian";s:5:"ru_UA";s:17:"Russian (Ukraine)";s:5:"sa_IN";s:16:"Sanskrit (India)";s:5:"sc_IT";s:17:"Sardinian (Italy)";s:5:"sd_PK";s:17:"Sindhi (Pakistan)";s:5:"si_LK";s:19:"Sinhala (Sri Lanka)";s:5:"sk_SK";s:6:"Slovak";s:5:"sl_SI";s:9:"Slovenian";s:5:"so_SO";s:6:"Somali";s:5:"sq_AL";s:18:"Albanian (Albania)";s:5:"sr_RS";s:7:"Serbian";s:5:"su_ID";s:21:"Sundanese (Indonesia)";s:5:"sv_SE";s:7:"Swedish";s:5:"sw_KE";s:15:"Swahili (Kenya)";s:5:"sw_KM";s:17:"Swahili (Comoros)";s:5:"sw_TZ";s:18:"Swahili (Tanzania)";s:5:"sw_UG";s:16:"Swahili (Uganda)";s:5:"ta_IN";s:13:"Tamil (India)";s:5:"ta_LK";s:17:"Tamil (Sri Lanka)";s:5:"te_IN";s:14:"Telugu (India)";s:5:"tg_TJ";s:18:"Tajik (Tajikistan)";s:5:"th_TW";s:13:"Thai (Taiwan)";s:5:"tr_TR";s:7:"Turkish";s:5:"ug_CN";s:14:"Uyghur (China)";s:5:"uk_UA";s:19:"Ukrainian (Ukraine)";s:5:"ur_IN";s:12:"Urdu (India)";s:5:"ur_PK";s:15:"Urdu (Pakistan)";s:5:"uz_UZ";s:18:"Uzbek (Uzbekistan)";s:5:"vi_VN";s:10:"Vietnamese";s:5:"zh_CN";s:7:"Chinese";s:5:"zh_HK";s:19:"Chinese (Hong Kong)";s:5:"zh_TW";s:16:"Chinese (Taiwan)";}');
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
+
* @date Sat, 04 Jan 2014 20:28:03 +0000
|
6 |
*/
|
7 |
return unserialize('a:130:{s:5:"af_ZA";s:24:"Afrikaans (South Africa)";s:5:"ar_AE";s:29:"Arabic (United Arab Emirates)";s:5:"ar_IL";s:15:"Arabic (Israel)";s:5:"az_TR";s:20:"Azerbaijani (Turkey)";s:5:"bg_BG";s:9:"Bulgarian";s:5:"bn_BD";s:20:"Bengali (Bangladesh)";s:5:"bs_BA";s:30:"Bosnian (Bosnia & Herzegovina)";s:5:"cs_CZ";s:5:"Czech";s:5:"cy_GB";s:5:"Welsh";s:5:"da_DK";s:6:"Danish";s:5:"de_AT";s:16:"German (Austria)";s:5:"de_CH";s:20:"German (Switzerland)";s:5:"de_DE";s:6:"German";s:5:"el_CY";s:14:"Greek (Cyprus)";s:5:"el_GR";s:5:"Greek";s:5:"en_AE";s:30:"English (United Arab Emirates)";s:5:"en_AU";s:19:"English (Australia)";s:5:"en_CA";s:16:"English (Canada)";s:5:"en_GB";s:12:"English (UK)";s:5:"en_HK";s:19:"English (Hong Kong)";s:5:"en_IE";s:17:"English (Ireland)";s:5:"en_IN";s:15:"English (India)";s:5:"en_NZ";s:21:"English (New Zealand)";s:5:"en_SG";s:19:"English (Singapore)";s:5:"en_US";s:13:"English (USA)";s:5:"en_ZA";s:22:"English (South Africa)";s:5:"es_AR";s:19:"Spanish (Argentina)";s:5:"es_BO";s:17:"Spanish (Bolivia)";s:5:"es_CL";s:15:"Spanish (Chile)";s:5:"es_CO";s:18:"Spanish (Colombia)";s:5:"es_CR";s:20:"Spanish (Costa Rica)";s:5:"es_CU";s:14:"Spanish (Cuba)";s:5:"es_DO";s:28:"Spanish (Dominican Republic)";s:5:"es_EC";s:17:"Spanish (Ecuador)";s:5:"es_ES";s:7:"Spanish";s:5:"es_GT";s:19:"Spanish (Guatemala)";s:5:"es_HN";s:18:"Spanish (Honduras)";s:5:"es_MX";s:16:"Spanish (Mexico)";s:5:"es_NI";s:19:"Spanish (Nicaragua)";s:5:"es_PA";s:16:"Spanish (Panama)";s:5:"es_PE";s:14:"Spanish (Peru)";s:5:"es_PY";s:18:"Spanish (Paraguay)";s:5:"es_SV";s:21:"Spanish (El Salvador)";s:5:"es_UY";s:17:"Spanish (Uruguay)";s:5:"es_VE";s:19:"Spanish (Venezuela)";s:5:"et_EE";s:8:"Estonian";s:5:"fa_AF";s:21:"Persian (Afghanistan)";s:5:"fa_IR";s:14:"Persian (Iran)";s:5:"fi_FI";s:7:"Finnish";s:5:"fo_DK";s:17:"Faroese (Denmark)";s:5:"fo_FO";s:23:"Faroese (Faroe Islands)";s:5:"fr_BE";s:16:"French (Belgium)";s:5:"fr_CA";s:15:"French (Canada)";s:5:"fr_CH";s:20:"French (Switzerland)";s:5:"fr_FR";s:6:"French";s:5:"fr_HT";s:14:"French (Haiti)";s:5:"ga_IE";s:15:"Irish (Ireland)";s:5:"gl_ES";s:16:"Galician (Spain)";s:5:"gn_PY";s:18:"Guarani (Paraguay)";s:5:"he_IL";s:15:"Hebrew (Israel)";s:5:"hi_IN";s:13:"Hindi (India)";s:5:"hr_HR";s:8:"Croatian";s:5:"ht_HT";s:14:"Haitian Creole";s:5:"hu_HU";s:9:"Hungarian";s:5:"hy_AM";s:8:"Armenian";s:5:"id_ID";s:10:"Indonesian";s:5:"is_IS";s:9:"Icelandic";s:5:"it_CH";s:21:"Italian (Switzerland)";s:5:"it_IT";s:7:"Italian";s:5:"ja_JP";s:8:"Japanese";s:5:"jv_ID";s:20:"Javanese (Indonesia)";s:5:"ka_GE";s:8:"Georgian";s:5:"kk_KZ";s:6:"Kazakh";s:5:"kn_IN";s:15:"Kannada (India)";s:5:"ko_KR";s:6:"Korean";s:5:"lb_LU";s:13:"Luxembourgish";s:5:"li_NL";s:24:"Limburgish (Netherlands)";s:5:"lo_LA";s:10:"Lao (Laos)";s:5:"lt_LT";s:10:"Lithuanian";s:5:"lv_LV";s:7:"Latvian";s:5:"mg_MG";s:21:"Malagasy (Madagascar)";s:5:"ms_MY";s:16:"Malay (Malaysia)";s:5:"mt_MT";s:7:"Maltese";s:5:"my_MM";s:17:"Burmese (Myanmar)";s:5:"nb_NO";s:7:"Bokmål";s:5:"ne_NP";s:6:"Nepali";s:5:"nl_BE";s:15:"Dutch (Belgium)";s:5:"nl_NL";s:5:"Dutch";s:5:"nn_NO";s:7:"Nynorsk";s:5:"no_NO";s:9:"Norwegian";s:5:"os_GE";s:18:"Ossetian (Georgia)";s:5:"os_RU";s:17:"Ossetian (Russia)";s:5:"os_TR";s:17:"Ossetian (Turkey)";s:5:"pa_IN";s:15:"Punjabi (India)";s:5:"pl_PL";s:6:"Polish";s:5:"pt_BR";s:19:"Portuguese (Brazil)";s:5:"pt_PT";s:10:"Portuguese";s:5:"ro_RO";s:8:"Romanian";s:5:"ru_RU";s:7:"Russian";s:5:"ru_UA";s:17:"Russian (Ukraine)";s:5:"sa_IN";s:16:"Sanskrit (India)";s:5:"sc_IT";s:17:"Sardinian (Italy)";s:5:"sd_PK";s:17:"Sindhi (Pakistan)";s:5:"si_LK";s:19:"Sinhala (Sri Lanka)";s:5:"sk_SK";s:6:"Slovak";s:5:"sl_SI";s:9:"Slovenian";s:5:"so_SO";s:6:"Somali";s:5:"sq_AL";s:18:"Albanian (Albania)";s:5:"sr_RS";s:7:"Serbian";s:5:"su_ID";s:21:"Sundanese (Indonesia)";s:5:"sv_SE";s:7:"Swedish";s:5:"sw_KE";s:15:"Swahili (Kenya)";s:5:"sw_KM";s:17:"Swahili (Comoros)";s:5:"sw_TZ";s:18:"Swahili (Tanzania)";s:5:"sw_UG";s:16:"Swahili (Uganda)";s:5:"ta_IN";s:13:"Tamil (India)";s:5:"ta_LK";s:17:"Tamil (Sri Lanka)";s:5:"te_IN";s:14:"Telugu (India)";s:5:"tg_TJ";s:18:"Tajik (Tajikistan)";s:5:"th_TW";s:13:"Thai (Taiwan)";s:5:"tr_TR";s:7:"Turkish";s:5:"ug_CN";s:14:"Uyghur (China)";s:5:"uk_UA";s:19:"Ukrainian (Ukraine)";s:5:"ur_IN";s:12:"Urdu (India)";s:5:"ur_PK";s:15:"Urdu (Pakistan)";s:5:"uz_UZ";s:18:"Uzbek (Uzbekistan)";s:5:"vi_VN";s:10:"Vietnamese";s:5:"zh_CN";s:7:"Chinese";s:5:"zh_HK";s:19:"Chinese (Hong Kong)";s:5:"zh_TW";s:16:"Chinese (Taiwan)";}');
|
lib/build/shell-compiled.php
CHANGED
@@ -2,6 +2,6 @@
|
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
-
* @date
|
6 |
*/
|
7 |
-
function loco_compile_mo( $po ){ $descriptorspec = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'a'), ); $cmd = WHICH_MSGFMT.' -o - -'; $process = proc_open($cmd, $descriptorspec, $pipes ); if( ! $process ){ throw new Exception('Failed to open process to '.$cmd); } fwrite($pipes[0], $po); fclose($pipes[0]); $err = stream_get_contents($pipes[2]); fclose($pipes[2]); $mo = stream_get_contents($pipes[1]); fclose($pipes[1]); $e = proc_close($process); if( 0 !== $e ){ $err and trigger_error( $err, E_USER_WARNING ); throw new Exception( WHICH_MSGFMT.' exited with code '.sprintf('%d',$e).'; Got '.strlen($mo).' bytes from '.strlen($po).' bytes'); } if( ! $mo ){ throw new Exception('Empty file from '.WHICH_MSGFMT); } return $mo; } function loco_compile_mo_file( $pofile, $mofile = '' ){ $descriptorspec = array ( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'a'), ); if( ! $mofile ){ $mofile = $pofile.'.mo'; } $cmd = WHICH_MSGFMT.' -o '.escapeshellarg($mofile).' '.escapeshellarg($pofile); $process = proc_open($cmd, $descriptorspec, $pipes ); if( ! $process ){ throw new Exception('Failed to open process to '.$cmd); } $err = stream_get_contents($pipes[0]); fclose($pipes[0]); $e = proc_close($process); if( 0 !== $e ){ $err and trigger_error( $err, E_USER_WARNING ); throw new Exception('Gettext msgfmt exited with code '.sprintf('%d',$e).';'); } return $mofile; } function loco_find_executable( $name ){ $paths = array ( '/usr/local/', '/usr/', '/', '~/' ); $descriptorspec = array ( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w'), ); foreach( array('bin/','sbin/') as $dir ){ foreach( $paths as $path ){ $bin = $path.$dir.$name; $cmd = '[ -x '.escapeshellarg($bin).' ]'; $process = proc_open( $cmd, $descriptorspec, $pipes ); if( ! $process ){ return ''; } $e = proc_close($process); if( 0 === $e ){ return $bin; } } } return ''; }
|
2 |
/**
|
3 |
* Compiled source code - DO NOT EDIT!
|
4 |
* @author Tim Whitlock http://timwhitlock.info/
|
5 |
+
* @date Sat, 04 Jan 2014 20:28:03 +0000
|
6 |
*/
|
7 |
+
function loco_compile_mo( $po ){ $descriptorspec = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'a'), ); $cmd = WHICH_MSGFMT.' -o - -'; $process = proc_open($cmd, $descriptorspec, $pipes ); if( ! $process ){ throw new Exception('Failed to open process to '.$cmd); } fwrite($pipes[0], $po); fclose($pipes[0]); $err = stream_get_contents($pipes[2]); fclose($pipes[2]); $mo = stream_get_contents($pipes[1]); fclose($pipes[1]); $e = proc_close($process); if( 0 !== $e ){ $err and trigger_error( $err, E_USER_WARNING ); throw new Exception( WHICH_MSGFMT.' exited with code '.sprintf('%d',$e).'; Got '.strlen($mo).' bytes from '.strlen($po).' bytes'); } if( ! $mo ){ throw new Exception('Empty file from '.WHICH_MSGFMT); } return $mo; } function loco_compile_mo_file( $pofile, $mofile = '' ){ $descriptorspec = array ( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'a'), ); if( ! $mofile ){ $mofile = $pofile.'.mo'; } $cmd = WHICH_MSGFMT.' -o '.escapeshellarg($mofile).' '.escapeshellarg($pofile); $process = proc_open($cmd, $descriptorspec, $pipes ); if( ! $process ){ throw new Exception('Failed to open process to '.$cmd); } $err = stream_get_contents($pipes[0]); fclose($pipes[0]); $e = proc_close($process); if( 0 !== $e ){ $err and trigger_error( $err, E_USER_WARNING ); throw new Exception('Gettext msgfmt exited with code '.sprintf('%d',$e).';'); } if( ! file_exists($mofile) ){ throw new Exception('Gettext msgfmt failed to create '.$mofile); } return $mofile; } function loco_find_executable( $name ){ $paths = array ( '/usr/local/', '/usr/', '/', '~/' ); $descriptorspec = array ( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w'), ); foreach( array('bin/','sbin/') as $dir ){ foreach( $paths as $path ){ $bin = $path.$dir.$name; $cmd = '[ -x '.escapeshellarg($bin).' ]'; $process = proc_open( $cmd, $descriptorspec, $pipes ); if( ! $process ){ return ''; } $e = proc_close($process); if( 0 === $e ){ return $bin; } } } return ''; }
|
lib/build/test.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Unit tests for compiled Loco utils.
|
4 |
+
* $ php -c /etc -f /path/to/phpunit.phar - --colors path/to/test.php
|
5 |
+
*/
|
6 |
+
require __DIR__.'/gettext-compiled.php';
|
7 |
+
require __DIR__.'/locales-compiled.php';
|
8 |
+
require __DIR__.'/shell-compiled.php';
|
9 |
+
require __DIR__.'/../loco-locales.php';
|
10 |
+
|
11 |
+
|
12 |
+
class LocoTest extends PHPUnit_Framework_TestCase {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Test PO parser.
|
16 |
+
*/
|
17 |
+
public function testParsePO(){
|
18 |
+
$popath = __DIR__.'/../../languages/loco-translate-de_DE.po';
|
19 |
+
$this->assertFileExists( $popath );
|
20 |
+
$posrc = file_get_contents($popath);
|
21 |
+
$po = loco_parse_po( $posrc );
|
22 |
+
// test header as guaranteed first string
|
23 |
+
$head = $po[0];
|
24 |
+
$this->assertEquals( '', $head['source'] );
|
25 |
+
$head = loco_parse_po_headers( $head['target'] );
|
26 |
+
/* @var $head LocoArray */
|
27 |
+
$this->assertEquals( 'Loco Translate', $head->__get('Project-Id-Version'), 'Failed to extract Project-Id-Version' );
|
28 |
+
$this->assertEquals( 'German', $head->language, 'Failed to extract Language header' );
|
29 |
+
return $po;
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Test native MO writer
|
35 |
+
* @depends testParsePO
|
36 |
+
*/
|
37 |
+
public function testNativeMsgfmt( array $po ){
|
38 |
+
$bin = loco_msgfmt( $po );
|
39 |
+
$this->assertStringStartsWith( "\xDE\x12\x04\x95\0\0\0\0", $bin, 'Bad magic number encoding' );
|
40 |
+
$this->assertStringEndsWith( "\0", $bin, 'Bad mo file ending' );
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Test shell msgfmt MO writer
|
47 |
+
*/
|
48 |
+
public function testShellMsgfmt(){
|
49 |
+
// test finding of executable
|
50 |
+
$cmd = loco_find_executable('msgfmt');
|
51 |
+
$this->assertStringEndsWith('/msgfmt', $cmd );
|
52 |
+
define( 'WHICH_MSGFMT', $cmd );
|
53 |
+
// test shell compile via temp file
|
54 |
+
$popath = realpath( __DIR__.'/../../languages/loco-translate-de_DE.po' );
|
55 |
+
$mopath = tempnam( sys_get_temp_dir(), 'loco-mo-' );
|
56 |
+
register_shutdown_function('unlink', $mopath );
|
57 |
+
$this->assertEquals( $mopath, loco_compile_mo_file( $popath, $mopath ), 'Failed to compile MO' );
|
58 |
+
$bin = file_get_contents( $mopath );
|
59 |
+
$this->assertStringEndsWith( "\0", $bin, 'Bad mo file ending' );
|
60 |
+
}
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Test locale data
|
66 |
+
*/
|
67 |
+
public function testLocales(){
|
68 |
+
$locale = loco_locale_resolve( '--fr_FR' );
|
69 |
+
$this->assertEquals('French', $locale->get_name(), 'Failed to parse language code fr_FR' );
|
70 |
+
// object equality
|
71 |
+
$other = LocoLocale::init('fr','');
|
72 |
+
$this->assertTrue( $locale->equal_to($other), $locale.' is not the same locale as '.$other );
|
73 |
+
// plurals
|
74 |
+
$data = $locale->export();
|
75 |
+
$this->assertEquals( 2, (int) $data['nplurals'] );
|
76 |
+
// preg matching
|
77 |
+
$pattern = '/'.$locale->preg().'/';
|
78 |
+
$this->assertTrue( (bool) preg_match($pattern, '--fr_FR' ) );
|
79 |
+
}
|
80 |
+
|
81 |
+
|
82 |
+
|
83 |
+
}
|
84 |
+
|
85 |
+
|
lib/loco-admin.php
CHANGED
@@ -42,16 +42,17 @@ abstract class LocoAdmin {
|
|
42 |
public static function render_page_options(){
|
43 |
// update applicaion settings if posted
|
44 |
if( isset($_POST['loco']) && is_array( $update = $_POST['loco'] ) ){
|
|
|
45 |
$args = Loco::config( $update );
|
46 |
$args['success'] = Loco::__('Settings saved');
|
47 |
}
|
48 |
else {
|
49 |
$args = Loco::config();
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
}
|
56 |
Loco::render('admin-opts', $args );
|
57 |
}
|
@@ -75,7 +76,6 @@ abstract class LocoAdmin {
|
|
75 |
$package = LocoPackage::get( $_GET['name'], $_GET['type'] );
|
76 |
}
|
77 |
|
78 |
-
|
79 |
// Extract messages if 'xgettext' is in query string
|
80 |
//
|
81 |
if( isset($_GET['xgettext']) ){
|
@@ -429,7 +429,8 @@ abstract class LocoAdmin {
|
|
429 |
self::error( Loco::__('Bad file path').' '.var_export($path,1) );
|
430 |
return '';
|
431 |
}
|
432 |
-
|
|
|
433 |
}
|
434 |
|
435 |
|
@@ -792,14 +793,54 @@ abstract class LocoAdmin {
|
|
792 |
$extra[] = sprintf( Loco::__('%s fuzzy'), number_format($f) );
|
793 |
}
|
794 |
if( $u ){
|
795 |
-
$extra[] = sprintf( Loco::__('%s
|
796 |
}
|
797 |
if( $extra ){
|
798 |
$text .= ' ('.implode(', ',$extra).')';
|
799 |
}
|
800 |
return $text;
|
801 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
802 |
|
|
|
803 |
}
|
804 |
|
805 |
|
@@ -849,7 +890,7 @@ function _loco_hook__plugin_row_meta( $links, $file = '' ){
|
|
849 |
/**
|
850 |
* execute ajax actions
|
851 |
*/
|
852 |
-
function
|
853 |
extract( Loco::postdata() );
|
854 |
if( isset($action) ){
|
855 |
require Loco::basedir().'/php/loco-ajax.php';
|
@@ -857,14 +898,26 @@ function _lock_hook__wp_ajax(){
|
|
857 |
}
|
858 |
|
859 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
860 |
|
861 |
|
862 |
add_action('admin_menu', '_loco_hook__admin_menu' );
|
863 |
add_action('plugin_row_meta', '_loco_hook__plugin_row_meta', 10, 2 );
|
864 |
|
865 |
// ajax hooks all going through one central function
|
866 |
-
add_action('wp_ajax_loco-posave', '
|
867 |
-
add_action('wp_ajax_loco-posync', '
|
|
|
868 |
|
869 |
// WP_LANG_DIR was introduced in Wordpress 2.1.0.
|
870 |
if( ! defined('WP_LANG_DIR') ){
|
42 |
public static function render_page_options(){
|
43 |
// update applicaion settings if posted
|
44 |
if( isset($_POST['loco']) && is_array( $update = $_POST['loco'] ) ){
|
45 |
+
$update += array( 'gen_hash' => '0' );
|
46 |
$args = Loco::config( $update );
|
47 |
$args['success'] = Loco::__('Settings saved');
|
48 |
}
|
49 |
else {
|
50 |
$args = Loco::config();
|
51 |
+
}
|
52 |
+
// establish a default msgfmt if required and possible
|
53 |
+
if( $args['use_msgfmt'] && ! $args['which_msgfmt'] ){
|
54 |
+
function_exists('loco_find_executable') or loco_require('build/shell-compiled');
|
55 |
+
$args['which_msgfmt'] = loco_find_executable('msgfmt');// and Loco::config( $args );
|
56 |
}
|
57 |
Loco::render('admin-opts', $args );
|
58 |
}
|
76 |
$package = LocoPackage::get( $_GET['name'], $_GET['type'] );
|
77 |
}
|
78 |
|
|
|
79 |
// Extract messages if 'xgettext' is in query string
|
80 |
//
|
81 |
if( isset($_GET['xgettext']) ){
|
429 |
self::error( Loco::__('Bad file path').' '.var_export($path,1) );
|
430 |
return '';
|
431 |
}
|
432 |
+
// returning original path in case something was symlinked outside the web root
|
433 |
+
return $path;
|
434 |
}
|
435 |
|
436 |
|
793 |
$extra[] = sprintf( Loco::__('%s fuzzy'), number_format($f) );
|
794 |
}
|
795 |
if( $u ){
|
796 |
+
$extra[] = sprintf( Loco::__('%s untranslated'), number_format($f) );
|
797 |
}
|
798 |
if( $extra ){
|
799 |
$text .= ' ('.implode(', ',$extra).')';
|
800 |
}
|
801 |
return $text;
|
802 |
}
|
803 |
+
|
804 |
+
|
805 |
+
/**
|
806 |
+
* get configured path to external msgfmt command, including --no-hash argument
|
807 |
+
* @return string
|
808 |
+
*/
|
809 |
+
public static function msgfmt_command(){
|
810 |
+
$conf = Loco::config();
|
811 |
+
if( ! $conf['use_msgfmt'] || ! $conf['which_msgfmt'] ){
|
812 |
+
return '';
|
813 |
+
}
|
814 |
+
$cmd = escapeshellarg( trim( $conf['which_msgfmt'] ) );
|
815 |
+
if( ! $conf['gen_hash'] ){
|
816 |
+
$cmd .= ' --no-hash';
|
817 |
+
}
|
818 |
+
return $cmd;
|
819 |
+
}
|
820 |
+
|
821 |
+
|
822 |
+
/**
|
823 |
+
* Execute native msgfmt command
|
824 |
+
* @param string po source
|
825 |
+
* @return string binary mo source
|
826 |
+
*/
|
827 |
+
public static function msgfmt_native( $po ){
|
828 |
+
try {
|
829 |
+
$conf = Loco::config();
|
830 |
+
loco_require('build/gettext-compiled');
|
831 |
+
$gen_hash = (bool) $conf['gen_hash'];
|
832 |
+
$mo = loco_msgfmt( $po, $gen_hash );
|
833 |
+
}
|
834 |
+
catch( Exception $Ex ){
|
835 |
+
error_log( $Ex->getMessage(), 0 );
|
836 |
+
}
|
837 |
+
if( ! $mo ){
|
838 |
+
throw new Exception( sprintf( Loco::__('Failed to compile MO file with built-in compiler') ) );
|
839 |
+
}
|
840 |
+
return $mo;
|
841 |
+
}
|
842 |
|
843 |
+
|
844 |
}
|
845 |
|
846 |
|
890 |
/**
|
891 |
* execute ajax actions
|
892 |
*/
|
893 |
+
function _loco_hook__wp_ajax(){
|
894 |
extract( Loco::postdata() );
|
895 |
if( isset($action) ){
|
896 |
require Loco::basedir().'/php/loco-ajax.php';
|
898 |
}
|
899 |
|
900 |
|
901 |
+
/**
|
902 |
+
* execute file download actions
|
903 |
+
*/
|
904 |
+
function _loco_hook__wp_ajax_download(){
|
905 |
+
extract( Loco::postdata() );
|
906 |
+
if( isset($action) ){
|
907 |
+
require Loco::basedir().'/php/loco-download.php';
|
908 |
+
die( __('File download failed') );
|
909 |
+
}
|
910 |
+
}
|
911 |
+
|
912 |
|
913 |
|
914 |
add_action('admin_menu', '_loco_hook__admin_menu' );
|
915 |
add_action('plugin_row_meta', '_loco_hook__plugin_row_meta', 10, 2 );
|
916 |
|
917 |
// ajax hooks all going through one central function
|
918 |
+
add_action('wp_ajax_loco-posave', '_loco_hook__wp_ajax' );
|
919 |
+
add_action('wp_ajax_loco-posync', '_loco_hook__wp_ajax' );
|
920 |
+
add_action('wp_ajax_loco-download', '_loco_hook__wp_ajax_download' );
|
921 |
|
922 |
// WP_LANG_DIR was introduced in Wordpress 2.1.0.
|
923 |
if( ! defined('WP_LANG_DIR') ){
|
lib/loco-boot.php
CHANGED
@@ -8,7 +8,7 @@ abstract class Loco {
|
|
8 |
/** plugin namespace */
|
9 |
const NS = 'loco-translate';
|
10 |
|
11 |
-
const VERSION = '1.
|
12 |
const CAPABILITY = 'manage_options';
|
13 |
|
14 |
/* whether to enable APC cache */
|
@@ -35,11 +35,11 @@ abstract class Loco {
|
|
35 |
*/
|
36 |
public static function load_textdomain(){
|
37 |
$locale = get_locale();
|
38 |
-
if( 0 === strpos($locale,'en') ){
|
39 |
return;
|
40 |
}
|
41 |
$plugin_rel_path = basename( self::basedir() );
|
42 |
-
load_plugin_textdomain( Loco::NS, false, $plugin_rel_path );
|
43 |
}
|
44 |
|
45 |
|
@@ -115,7 +115,13 @@ abstract class Loco {
|
|
115 |
$stubs = func_get_args();
|
116 |
if( ! isset($v) ){
|
117 |
$v = WP_DEBUG ? time() : Loco::VERSION;
|
118 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
}
|
120 |
foreach( $stubs as $stub ){
|
121 |
$js = Loco::baseurl().'/pub/js/'.$stub.'.js';
|
@@ -251,11 +257,16 @@ abstract class Loco {
|
|
251 |
static $conf;
|
252 |
if( ! isset($conf) ){
|
253 |
$conf = array (
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
255 |
);
|
256 |
foreach( $conf as $key => $val ){
|
257 |
$conf[$key] = get_option( Loco::NS.'-'.$key);
|
258 |
-
if(
|
259 |
$conf[$key] = $val;
|
260 |
}
|
261 |
}
|
@@ -266,6 +277,10 @@ abstract class Loco {
|
|
266 |
$conf[$key] = $val;
|
267 |
}
|
268 |
}
|
|
|
|
|
|
|
|
|
269 |
return $conf;
|
270 |
}
|
271 |
}
|
8 |
/** plugin namespace */
|
9 |
const NS = 'loco-translate';
|
10 |
|
11 |
+
const VERSION = '1.4';
|
12 |
const CAPABILITY = 'manage_options';
|
13 |
|
14 |
/* whether to enable APC cache */
|
35 |
*/
|
36 |
public static function load_textdomain(){
|
37 |
$locale = get_locale();
|
38 |
+
if( ! $locale || 0 === strpos($locale,'en') ){
|
39 |
return;
|
40 |
}
|
41 |
$plugin_rel_path = basename( self::basedir() );
|
42 |
+
load_plugin_textdomain( Loco::NS, false, $plugin_rel_path.'/languages' );
|
43 |
}
|
44 |
|
45 |
|
115 |
$stubs = func_get_args();
|
116 |
if( ! isset($v) ){
|
117 |
$v = WP_DEBUG ? time() : Loco::VERSION;
|
118 |
+
// enqueue JavaScript translations once
|
119 |
+
$trans = 'lang/dummy';
|
120 |
+
$locale = get_locale() and
|
121 |
+
0 !== strpos( $locale, 'en' ) and
|
122 |
+
file_exists( Loco::basedir().'/pub/js/lang/'.Loco::NS.'-'.$locale.'.js' ) and
|
123 |
+
$trans = 'lang/'.Loco::NS.'-'.$locale;
|
124 |
+
array_unshift( $stubs, $trans );
|
125 |
}
|
126 |
foreach( $stubs as $stub ){
|
127 |
$js = Loco::baseurl().'/pub/js/'.$stub.'.js';
|
257 |
static $conf;
|
258 |
if( ! isset($conf) ){
|
259 |
$conf = array (
|
260 |
+
// whether to use external msgfmt command (1), or internal (default)
|
261 |
+
'use_msgfmt' => false,
|
262 |
+
// which external msgfmt command to use
|
263 |
+
'which_msgfmt' => '',
|
264 |
+
// whether to compile hash table into mo files
|
265 |
+
'gen_hash' => '0',
|
266 |
);
|
267 |
foreach( $conf as $key => $val ){
|
268 |
$conf[$key] = get_option( Loco::NS.'-'.$key);
|
269 |
+
if( ! is_string($conf[$key]) ){
|
270 |
$conf[$key] = $val;
|
271 |
}
|
272 |
}
|
277 |
$conf[$key] = $val;
|
278 |
}
|
279 |
}
|
280 |
+
// force msgfmt usage if path is set (legacy installs/upgrades)
|
281 |
+
if( false === $conf['use_msgfmt'] ){
|
282 |
+
$conf['use_msgfmt'] = $conf['which_msgfmt'] ? '1' : '0';
|
283 |
+
}
|
284 |
return $conf;
|
285 |
}
|
286 |
}
|
loco.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Loco Translate
|
|
4 |
Plugin URI: http://wordpress.org/extend/plugins/loco-translate
|
5 |
Description: Translate Wordpress plugins and themes directly in your browser
|
6 |
Author: Tim Whitlock
|
7 |
-
Version: 1.
|
8 |
Author URI: http://localise.biz/help/wordpress/translate-plugin
|
9 |
*/
|
10 |
|
4 |
Plugin URI: http://wordpress.org/extend/plugins/loco-translate
|
5 |
Description: Translate Wordpress plugins and themes directly in your browser
|
6 |
Author: Tim Whitlock
|
7 |
+
Version: 1.4
|
8 |
Author URI: http://localise.biz/help/wordpress/translate-plugin
|
9 |
*/
|
10 |
|
php/loco-download.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
*
|
4 |
*/
|
5 |
try {
|
6 |
|
@@ -8,22 +8,77 @@ try {
|
|
8 |
throw new Exception( 'Method not permitted', 405 );
|
9 |
}
|
10 |
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
if( empty($po) ){
|
13 |
throw new Exception( 'Empty source data', 422 );
|
14 |
}
|
15 |
|
16 |
if( empty($path) ){
|
17 |
$name = 'messages.po';
|
|
|
18 |
}
|
19 |
else {
|
20 |
$name = basename($path);
|
|
|
21 |
}
|
22 |
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
header('Content-Disposition: attachment; filename='.$name, true );
|
26 |
-
echo $
|
27 |
exit(0);
|
28 |
|
29 |
|
1 |
<?php
|
2 |
/**
|
3 |
+
* PO/MO download script
|
4 |
*/
|
5 |
try {
|
6 |
|
8 |
throw new Exception( 'Method not permitted', 405 );
|
9 |
}
|
10 |
|
11 |
+
// no errors ruining response please
|
12 |
+
if( false === ini_set( 'display_errors', 0 ) ){
|
13 |
+
error_reporting(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
if( ! function_exists('current_user_can') || ! class_exists('LocoAdmin') ){
|
17 |
+
throw new Exception('Wordpress not bootstrapped');
|
18 |
+
}
|
19 |
+
|
20 |
+
if( ! current_user_can(Loco::CAPABILITY) ){
|
21 |
+
throw new Exception( Loco::__('User does not have permission to manage translations'), 403 );
|
22 |
+
}
|
23 |
+
|
24 |
if( empty($po) ){
|
25 |
throw new Exception( 'Empty source data', 422 );
|
26 |
}
|
27 |
|
28 |
if( empty($path) ){
|
29 |
$name = 'messages.po';
|
30 |
+
$ext = 'po';
|
31 |
}
|
32 |
else {
|
33 |
$name = basename($path);
|
34 |
+
$ext = strtolower( pathinfo( $name, PATHINFO_EXTENSION ) );
|
35 |
}
|
36 |
|
37 |
+
// Simple post-through for PO and POT
|
38 |
+
if( 'mo' !== $ext ){
|
39 |
+
header('Content-Type: application/x-gettext; charset=UTF-8', true );
|
40 |
+
header('Content-Length: '.strlen($po), true );
|
41 |
+
header('Content-Disposition: attachment; filename='.$name, true );
|
42 |
+
echo $po;
|
43 |
+
exit(0);
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
// Attempt to compile MO direct to file via shell
|
48 |
+
if( $msgfmt = LocoAdmin::msgfmt_command() ){
|
49 |
+
try {
|
50 |
+
loco_require('build/shell-compiled');
|
51 |
+
define( 'WHICH_MSGFMT', $msgfmt );
|
52 |
+
// use temp file if possible, due to stdin size restrictions
|
53 |
+
if( $popath = tempnam( sys_get_temp_dir(), 'loco-' ) ){
|
54 |
+
register_shutdown_function( 'unlink', $popath );
|
55 |
+
file_put_contents( $popath, $po );
|
56 |
+
$mopath = loco_compile_mo_file( $popath, $mopath );
|
57 |
+
register_shutdown_function( 'unlink', $mopath );
|
58 |
+
$mo = file_get_contents( $mopath );
|
59 |
+
}
|
60 |
+
else {
|
61 |
+
$mo = loco_compile_mo( $po );
|
62 |
+
}
|
63 |
+
}
|
64 |
+
catch( Exception $Ex ){
|
65 |
+
error_log( $Ex->getMessage(), 0 );
|
66 |
+
}
|
67 |
+
if( ! $mo ){
|
68 |
+
throw new Exception( sprintf( Loco::__('Failed to compile MO file with %s, check your settings'), WHICH_MSGFMT ) );
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
// Fall back to in-built MO compiler - requires PO is parsed too
|
73 |
+
else {
|
74 |
+
$mo = LocoAdmin::msgfmt_native($po);
|
75 |
+
}
|
76 |
+
|
77 |
+
// exit with binary MO
|
78 |
+
header('Content-Type: application/x-gettext-translation; charset=UTF-8', true );
|
79 |
+
header('Content-Length: '.strlen($mo), true );
|
80 |
header('Content-Disposition: attachment; filename='.$name, true );
|
81 |
+
echo $mo;
|
82 |
exit(0);
|
83 |
|
84 |
|
php/loco-fatal.php
CHANGED
@@ -6,7 +6,7 @@ $status = $Ex->getCode() or $status = 500;
|
|
6 |
$message = $Ex->getMessage();
|
7 |
|
8 |
|
9 |
-
if( ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'XMLHttpRequest' === $_SERVER['HTTP_X_REQUESTED_WITH'] )
|
10 |
$type = 'application/json; charset=UTF-8';
|
11 |
$body = json_encode( compact('status','message') );
|
12 |
}
|
6 |
$message = $Ex->getMessage();
|
7 |
|
8 |
|
9 |
+
if( ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'XMLHttpRequest' === $_SERVER['HTTP_X_REQUESTED_WITH'] ) ){
|
10 |
$type = 'application/json; charset=UTF-8';
|
11 |
$body = json_encode( compact('status','message') );
|
12 |
}
|
php/loco-posave.php
CHANGED
@@ -60,33 +60,24 @@
|
|
60 |
|
61 |
|
62 |
// attempt to write MO file also, but may fail for numerous reasons.
|
63 |
-
|
64 |
try {
|
65 |
|
66 |
-
//
|
67 |
-
$
|
68 |
-
|
69 |
-
|
70 |
-
if( false === $conf['which_msgfmt'] ){
|
71 |
-
function_exists('loco_find_executable') or loco_require('build/shell-compiled');
|
72 |
-
$conf['which_msgfmt'] = loco_find_executable('msgfmt') and
|
73 |
-
Loco::config( $conf );
|
74 |
}
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
throw new Exception( Loco::__('Cannot create MO file') );
|
82 |
-
}
|
83 |
-
else if( file_exists($mopath) && ! is_writable($mopath) ){
|
84 |
-
throw new Exception( Loco::__('Cannot overwrite MO file') );
|
85 |
-
}
|
86 |
-
// attempt to compile MO direct to file via shell
|
87 |
try {
|
88 |
$bytes = 0;
|
89 |
-
|
|
|
90 |
$mopath = loco_compile_mo_file( $path, $mopath );
|
91 |
$bytes = $mopath && file_exists($mopath) ? filesize($mopath) : 0;
|
92 |
}
|
@@ -97,10 +88,22 @@
|
|
97 |
throw new Exception( sprintf( Loco::__('Failed to compile MO file with %s, check your settings'), WHICH_MSGFMT ) );
|
98 |
}
|
99 |
$response['compiled'] = $bytes;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
}
|
|
|
|
|
|
|
101 |
}
|
102 |
catch( Exception $e ){
|
103 |
$response['compiled'] = $e->getMessage();
|
|
|
104 |
}
|
105 |
}
|
106 |
|
60 |
|
61 |
|
62 |
// attempt to write MO file also, but may fail for numerous reasons.
|
63 |
+
while( ! $ispot ){
|
64 |
try {
|
65 |
|
66 |
+
// check target MO path before compiling
|
67 |
+
$mopath = preg_replace( '/\.po$/', '.mo', $path );
|
68 |
+
if( ! file_exists($mopath) && ! is_writable( dirname($mopath) ) ){
|
69 |
+
throw new Exception( Loco::__('Cannot create MO file') );
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
+
else if( file_exists($mopath) && ! is_writable($mopath) ){
|
72 |
+
throw new Exception( Loco::__('Cannot overwrite MO file') );
|
73 |
+
}
|
74 |
+
|
75 |
+
// attempt to compile MO direct to file via shell
|
76 |
+
if( $msgfmt = LocoAdmin::msgfmt_command() ){
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
try {
|
78 |
$bytes = 0;
|
79 |
+
loco_require('build/shell-compiled');
|
80 |
+
define( 'WHICH_MSGFMT', $msgfmt );
|
81 |
$mopath = loco_compile_mo_file( $path, $mopath );
|
82 |
$bytes = $mopath && file_exists($mopath) ? filesize($mopath) : 0;
|
83 |
}
|
88 |
throw new Exception( sprintf( Loco::__('Failed to compile MO file with %s, check your settings'), WHICH_MSGFMT ) );
|
89 |
}
|
90 |
$response['compiled'] = $bytes;
|
91 |
+
break;
|
92 |
+
}
|
93 |
+
|
94 |
+
// Fall back to in-built MO compiler - requires PO is parsed too
|
95 |
+
$mo = LocoAdmin::msgfmt_native($po);
|
96 |
+
$bytes = file_put_contents( $mopath, $mo );
|
97 |
+
if( ! $bytes ){
|
98 |
+
throw new Exception( Loco::__('Failed to write MO file') );
|
99 |
}
|
100 |
+
$response['compiled'] = $bytes;
|
101 |
+
break;
|
102 |
+
|
103 |
}
|
104 |
catch( Exception $e ){
|
105 |
$response['compiled'] = $e->getMessage();
|
106 |
+
break;
|
107 |
}
|
108 |
}
|
109 |
|
pub/css/loco-admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-poedit .wg-cell,.wrap #loco-poedit .wg-cell div{position:relative;box-sizing:border-box;-moz-box-sizing:border-box}.wrap #loco-poedit .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}.wrap #loco-poedit .wg-split{background:#eee}.wrap #loco-poedit .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.wrap #loco-poedit .wg-split-x>div>.not-first>*{margin-left:6px}.wrap #loco-poedit .wg-split-y>div>.not-first>*{margin-top:6px}.wrap #loco-poedit .wg-split>div>.has-title .wg-content{margin-top:0}.wrap #loco-poedit .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}.wrap #loco-poedit .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}.wrap #loco-poedit .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}.wrap #loco-poedit .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png) center center no-repeat}.wrap #loco-poedit .wg-split-y>div{cursor:move;cursor:ns-resize;cursor:row-resize}.wrap #loco-poedit .wg-split-y>div>.not-first:before{height:6px;width:100%;background:transparent url(../img/wg/splity.png) center center no-repeat}.wrap #loco-poedit .wg-split>div.locked{cursor:default}.wrap #loco-poedit .wg-split-x>div.locked>.not-first>*{margin-left:1px}.wrap #loco-poedit .wg-split-y>div.locked>.not-first>*{margin-top:1px}.wrap #loco-poedit .wg-split>div.locked>.not-first:before{display:none}.wrap #loco-poedit .wg-title{background:#ddd;cursor:default !important;margin:0;padding:4px 6px;font-size:1em;white-space:nowrap}.wrap #loco-poedit .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;-moz-box-sizing:border-box}.wrap #loco-poedit .is-table .wg-cols{outline:none}.wrap #loco-poedit .is-table .wg-col{float:left;clear:none}.wrap #loco-poedit .is-table .wg-title{padding:3px 10px;margin:0 !important;font-weight:normal}.wrap #loco-poedit .is-table .wg-thead>div>.not-first:before{background-position:center 1px}.wrap #loco-poedit .is-table .wg-thead{background:#ddd;border-bottom:solid 1px #ccc}.wrap #loco-poedit .is-table .wg-tr{height:1.6em;overflow:hidden}.wrap #loco-poedit .is-table .wg-tr:nth-child(even){background-color:#f3f7fd}.wrap #loco-poedit .is-table .wg-tr.selected{background-color:#3875d7;color:#fff}.wrap #loco-poedit .is-table .wg-td{white-space:nowrap;line-height:1.2em;margin:0.3em 4px;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden}.wrap #loco-poedit .is-table .wg-tbody .not-first .wg-td{margin-left:10px}.wrap #loco-poedit .is-table .wg-cols.filtered .wg-tr{display:none}.wrap #loco-poedit .is-table .wg-cols.filtered .wg-tr.filtered{display:block}.wrap #loco-poedit .is-field>.wg-content{cursor:text;outline:none;white-space:pre-wrap}.wrap #loco-poedit .is-field>.wg-content:focus{-moz-box-shadow:inset 0 0 10px #3875d7;-webkit-box-shadow:inset 0 0 10px #3875d7;box-shadow:inset 0 0 10px #3875d7}.wrap #loco-poedit .is-field.readonly>.wg-content{cursor:default;background:#f8f8f8;text-shadow:0 1px #fff}.wrap #loco-poedit .is-field.readonly>.wg-content:focus{-moz-box-shadow:inset 0 0 10px #cc0000;-webkit-box-shadow:inset 0 0 10px #cc0000;box-shadow:inset 0 0 10px #cc0000}.wrap #loco-poedit .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:0.5em 1em;color:#000;text-decoration:none;-moz-border-radius:0.2em;-webkit-border-radius:0.2em;border-radius:0.2em}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a:hover{background-color:#f3f7fd}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a.active{background-color:#3875d7;color:#fff}@media all and (max-width: 768px){.wrap #loco-poedit .wg-split-x>div>.not-first>*{margin-left:20px}.wrap #loco-poedit .wg-split-y>div>.not-first>*{margin-top:20px}.wrap #loco-poedit .wg-split-x>div>.not-first:before{width:20px}.wrap #loco-poedit .wg-split-y>div>.not-first:before{height:20px}}.wrap #loco-poedit .is-table .po-fuzzy{color:#b59829;font-weight:bold}.wrap #loco-poedit .is-table .po-empty{color:#1f507a;font-weight:bold}.wrap #loco-poedit .is-table .wg-col.first .wg-td:before{font-family:loco;vertical-align:middle;display:inline-block;content:" ";width:1.2em;line-height:1}.wrap #loco-poedit .is-table .po-incorrect,.wrap #loco-poedit .is-table .po-needs-review{color:#CC0000}.wrap #loco-poedit .is-table .wg-col.first .po-flagged .wg-td:before{content:"\e60e"}.wrap #loco-poedit .is-table .wg-col.first .po-comment .wg-td:before{content:"\e613";color:#999}.wrap #loco-poedit .is-table .wg-col.first .po-unsaved .wg-td:before{content:"\e612";color:#f1d040}.wrap #loco-poedit #po-list .wg-content{padding:0}.wrap #loco-poedit #po-source>.wg-body>.has-title>h2{background:transparent;font-weight:normal;float:left;clear:none;min-width:4em}.wrap #loco-poedit #po-source>.wg-body>.has-title>.wg-content{clear:none}.wrap .flag{width:16px;height:11px;display:inline-block;background:url(../img/flags.tiny.png) no-repeat}.wrap .flag.flag-ad{background-position:-16px 0}.wrap .flag.flag-ae{background-position:-32px 0}.wrap .flag.flag-af{background-position:-48px 0}.wrap .flag.flag-ag{background-position:-64px 0}.wrap .flag.flag-ai{background-position:-80px 0}.wrap .flag.flag-al{background-position:-96px 0}.wrap .flag.flag-am{background-position:-112px 0}.wrap .flag.flag-an{background-position:-128px 0}.wrap .flag.flag-ao{background-position:-144px 0}.wrap .flag.flag-ar{background-position:-160px 0}.wrap .flag.flag-as{background-position:-176px 0}.wrap .flag.flag-at{background-position:-192px 0}.wrap .flag.flag-au{background-position:-208px 0}.wrap .flag.flag-aw{background-position:-224px 0}.wrap .flag.flag-az{background-position:-240px 0}.wrap .flag.flag-ba{background-position:0 -11px}.wrap .flag.flag-bb{background-position:-16px -11px}.wrap .flag.flag-bd{background-position:-32px -11px}.wrap .flag.flag-be{background-position:-48px -11px}.wrap .flag.flag-bf{background-position:-64px -11px}.wrap .flag.flag-bg{background-position:-80px -11px}.wrap .flag.flag-bh{background-position:-96px -11px}.wrap .flag.flag-bi{background-position:-112px -11px}.wrap .flag.flag-bj{background-position:-128px -11px}.wrap .flag.flag-bm{background-position:-144px -11px}.wrap .flag.flag-bn{background-position:-160px -11px}.wrap .flag.flag-bo{background-position:-176px -11px}.wrap .flag.flag-br{background-position:-192px -11px}.wrap .flag.flag-bs{background-position:-208px -11px}.wrap .flag.flag-bt{background-position:-224px -11px}.wrap .flag.flag-bw{background-position:-240px -11px}.wrap .flag.flag-by{background-position:0 -22px}.wrap .flag.flag-bz{background-position:-16px -22px}.wrap .flag.flag-ca{background-position:-32px -22px}.wrap .flag.flag-cd{background-position:-48px -22px}.wrap .flag.flag-cf{background-position:-64px -22px}.wrap .flag.flag-cg{background-position:-80px -22px}.wrap .flag.flag-ch{background-position:-96px -22px}.wrap .flag.flag-ci{background-position:-112px -22px}.wrap .flag.flag-ck{background-position:-128px -22px}.wrap .flag.flag-cl{background-position:-144px -22px}.wrap .flag.flag-cm{background-position:-160px -22px}.wrap .flag.flag-cn{background-position:-176px -22px}.wrap .flag.flag-co{background-position:-192px -22px}.wrap .flag.flag-cr{background-position:-208px -22px}.wrap .flag.flag-cu{background-position:-224px -22px}.wrap .flag.flag-cv{background-position:-240px -22px}.wrap .flag.flag-cw{background-position:0 -33px}.wrap .flag.flag-cy{background-position:-16px -33px}.wrap .flag.flag-cz{background-position:-32px -33px}.wrap .flag.flag-de{background-position:-48px -33px}.wrap .flag.flag-dj{background-position:-64px -33px}.wrap .flag.flag-dk{background-position:-80px -33px}.wrap .flag.flag-dm{background-position:-96px -33px}.wrap .flag.flag-do{background-position:-112px -33px}.wrap .flag.flag-dz{background-position:-128px -33px}.wrap .flag.flag-ec{background-position:-144px -33px}.wrap .flag.flag-ee{background-position:-160px -33px}.wrap .flag.flag-eg{background-position:-176px -33px}.wrap .flag.flag-eh{background-position:-192px -33px}.wrap .flag.flag-er{background-position:-208px -33px}.wrap .flag.flag-es{background-position:-224px -33px}.wrap .flag.flag-et{background-position:-240px -33px}.wrap .flag.flag-fi{background-position:0 -44px}.wrap .flag.flag-fj{background-position:-16px -44px}.wrap .flag.flag-fk{background-position:-32px -44px}.wrap .flag.flag-fm{background-position:-48px -44px}.wrap .flag.flag-fo{background-position:-64px -44px}.wrap .flag.flag-fr{background-position:-80px -44px}.wrap .flag.flag-ga{background-position:-96px -44px}.wrap .flag.flag-gb{background-position:-112px -44px}.wrap .flag.flag-gd{background-position:-128px -44px}.wrap .flag.flag-ge{background-position:-144px -44px}.wrap .flag.flag-gf{background-position:-160px -44px}.wrap .flag.flag-gh{background-position:-176px -44px}.wrap .flag.flag-gi{background-position:-192px -44px}.wrap .flag.flag-gl{background-position:-208px -44px}.wrap .flag.flag-gm{background-position:-224px -44px}.wrap .flag.flag-gn{background-position:-240px -44px}.wrap .flag.flag-gp{background-position:0 -55px}.wrap .flag.flag-gq{background-position:-16px -55px}.wrap .flag.flag-gr{background-position:-32px -55px}.wrap .flag.flag-gt{background-position:-48px -55px}.wrap .flag.flag-gu{background-position:-64px -55px}.wrap .flag.flag-gw{background-position:-80px -55px}.wrap .flag.flag-gy{background-position:-96px -55px}.wrap .flag.flag-hk{background-position:-112px -55px}.wrap .flag.flag-hn{background-position:-128px -55px}.wrap .flag.flag-hr{background-position:-144px -55px}.wrap .flag.flag-ht{background-position:-160px -55px}.wrap .flag.flag-hu{background-position:-176px -55px}.wrap .flag.flag-id{background-position:-192px -55px}.wrap .flag.flag-ie{background-position:-208px -55px}.wrap .flag.flag-il{background-position:-224px -55px}.wrap .flag.flag-in{background-position:-240px -55px}.wrap .flag.flag-iq{background-position:0 -66px}.wrap .flag.flag-ir{background-position:-16px -66px}.wrap .flag.flag-is{background-position:-32px -66px}.wrap .flag.flag-it{background-position:-48px -66px}.wrap .flag.flag-jm{background-position:-64px -66px}.wrap .flag.flag-jo{background-position:-80px -66px}.wrap .flag.flag-jp{background-position:-96px -66px}.wrap .flag.flag-ke{background-position:-112px -66px}.wrap .flag.flag-kg{background-position:-128px -66px}.wrap .flag.flag-kh{background-position:-144px -66px}.wrap .flag.flag-ki{background-position:-160px -66px}.wrap .flag.flag-km{background-position:-176px -66px}.wrap .flag.flag-kn{background-position:-192px -66px}.wrap .flag.flag-kp{background-position:-208px -66px}.wrap .flag.flag-kr{background-position:-224px -66px}.wrap .flag.flag-kw{background-position:-240px -66px}.wrap .flag.flag-ky{background-position:0 -77px}.wrap .flag.flag-kz{background-position:-16px -77px}.wrap .flag.flag-la{background-position:-32px -77px}.wrap .flag.flag-lb{background-position:-48px -77px}.wrap .flag.flag-lc{background-position:-64px -77px}.wrap .flag.flag-li{background-position:-80px -77px}.wrap .flag.flag-lk{background-position:-96px -77px}.wrap .flag.flag-lr{background-position:-112px -77px}.wrap .flag.flag-ls{background-position:-128px -77px}.wrap .flag.flag-lt{background-position:-144px -77px}.wrap .flag.flag-lu{background-position:-160px -77px}.wrap .flag.flag-lv{background-position:-176px -77px}.wrap .flag.flag-ly{background-position:-192px -77px}.wrap .flag.flag-ma{background-position:-208px -77px}.wrap .flag.flag-mc{background-position:-224px -77px}.wrap .flag.flag-md{background-position:-240px -77px}.wrap .flag.flag-me{background-position:0 -88px}.wrap .flag.flag-mg{background-position:-16px -88px}.wrap .flag.flag-mh{background-position:-32px -88px}.wrap .flag.flag-mk{background-position:-48px -88px}.wrap .flag.flag-ml{background-position:-64px -88px}.wrap .flag.flag-mm{background-position:-80px -88px}.wrap .flag.flag-mn{background-position:-96px -88px}.wrap .flag.flag-mo{background-position:-112px -88px}.wrap .flag.flag-mp{background-position:-128px -88px}.wrap .flag.flag-mq{background-position:-144px -88px}.wrap .flag.flag-mr{background-position:-160px -88px}.wrap .flag.flag-ms{background-position:-176px -88px}.wrap .flag.flag-mt{background-position:-192px -88px}.wrap .flag.flag-mu{background-position:-208px -88px}.wrap .flag.flag-mv{background-position:-224px -88px}.wrap .flag.flag-mw{background-position:-240px -88px}.wrap .flag.flag-mx{background-position:0 -99px}.wrap .flag.flag-my{background-position:-16px -99px}.wrap .flag.flag-mz{background-position:-32px -99px}.wrap .flag.flag-na{background-position:-48px -99px}.wrap .flag.flag-nc{background-position:-64px -99px}.wrap .flag.flag-ne{background-position:-80px -99px}.wrap .flag.flag-nf{background-position:-96px -99px}.wrap .flag.flag-ng{background-position:-112px -99px}.wrap .flag.flag-ni{background-position:-128px -99px}.wrap .flag.flag-nl{background-position:-144px -99px}.wrap .flag.flag-no{background-position:-160px -99px}.wrap .flag.flag-np{background-position:-176px -99px}.wrap .flag.flag-nr{background-position:-192px -99px}.wrap .flag.flag-nu{background-position:-208px -99px}.wrap .flag.flag-nz{background-position:-224px -99px}.wrap .flag.flag-om{background-position:-240px -99px}.wrap .flag.flag-pa{background-position:0 -110px}.wrap .flag.flag-pe{background-position:-16px -110px}.wrap .flag.flag-pf{background-position:-32px -110px}.wrap .flag.flag-pg{background-position:-48px -110px}.wrap .flag.flag-ph{background-position:-64px -110px}.wrap .flag.flag-pk{background-position:-80px -110px}.wrap .flag.flag-pl{background-position:-96px -110px}.wrap .flag.flag-pm{background-position:-112px -110px}.wrap .flag.flag-pn{background-position:-128px -110px}.wrap .flag.flag-pr{background-position:-144px -110px}.wrap .flag.flag-ps{background-position:-160px -110px}.wrap .flag.flag-pt{background-position:-176px -110px}.wrap .flag.flag-pw{background-position:-192px -110px}.wrap .flag.flag-py{background-position:-208px -110px}.wrap .flag.flag-qa{background-position:-224px -110px}.wrap .flag.flag-re{background-position:-240px -110px}.wrap .flag.flag-ro{background-position:0 -121px}.wrap .flag.flag-rs{background-position:-16px -121px}.wrap .flag.flag-ru{background-position:-32px -121px}.wrap .flag.flag-rw{background-position:-48px -121px}.wrap .flag.flag-sa{background-position:-64px -121px}.wrap .flag.flag-sb{background-position:-80px -121px}.wrap .flag.flag-sc{background-position:-96px -121px}.wrap .flag.flag-sd{background-position:-112px -121px}.wrap .flag.flag-se{background-position:-128px -121px}.wrap .flag.flag-sg{background-position:-144px -121px}.wrap .flag.flag-sh{background-position:-160px -121px}.wrap .flag.flag-si{background-position:-176px -121px}.wrap .flag.flag-sk{background-position:-192px -121px}.wrap .flag.flag-sl{background-position:-208px -121px}.wrap .flag.flag-sm{background-position:-224px -121px}.wrap .flag.flag-sn{background-position:-240px -121px}.wrap .flag.flag-so{background-position:0 -132px}.wrap .flag.flag-sr{background-position:-16px -132px}.wrap .flag.flag-ss{background-position:-32px -132px}.wrap .flag.flag-st{background-position:-48px -132px}.wrap .flag.flag-sv{background-position:-64px -132px}.wrap .flag.flag-sy{background-position:-80px -132px}.wrap .flag.flag-sz{background-position:-96px -132px}.wrap .flag.flag-tc{background-position:-112px -132px}.wrap .flag.flag-td{background-position:-128px -132px}.wrap .flag.flag-tg{background-position:-144px -132px}.wrap .flag.flag-th{background-position:-160px -132px}.wrap .flag.flag-tj{background-position:-176px -132px}.wrap .flag.flag-tk{background-position:-192px -132px}.wrap .flag.flag-tl{background-position:-208px -132px}.wrap .flag.flag-tm{background-position:-224px -132px}.wrap .flag.flag-tn{background-position:-240px -132px}.wrap .flag.flag-to{background-position:0 -143px}.wrap .flag.flag-tr{background-position:-16px -143px}.wrap .flag.flag-tt{background-position:-32px -143px}.wrap .flag.flag-tv{background-position:-48px -143px}.wrap .flag.flag-tw{background-position:-64px -143px}.wrap .flag.flag-tz{background-position:-80px -143px}.wrap .flag.flag-ua{background-position:-96px -143px}.wrap .flag.flag-ug{background-position:-112px -143px}.wrap .flag.flag-us{background-position:-128px -143px}.wrap .flag.flag-uy{background-position:-144px -143px}.wrap .flag.flag-uz{background-position:-160px -143px}.wrap .flag.flag-va{background-position:-176px -143px}.wrap .flag.flag-vc{background-position:-192px -143px}.wrap .flag.flag-ve{background-position:-208px -143px}.wrap .flag.flag-vg{background-position:-224px -143px}.wrap .flag.flag-vi{background-position:-240px -143px}.wrap .flag.flag-vn{background-position:0 -154px}.wrap .flag.flag-vu{background-position:-16px -154px}.wrap .flag.flag-wf{background-position:-32px -154px}.wrap .flag.flag-ws{background-position:-48px -154px}.wrap .flag.flag-ye{background-position:-64px -154px}.wrap .flag.flag-yt{background-position:-80px -154px}.wrap .flag.flag-za{background-position:-96px -154px}.wrap .flag.flag-zm{background-position:-112px -154px}.wrap .flag.flag-zw{background-position:-128px -154px}.wrap .loco-add>*:before{content:"\e60c"}.wrap .loco-del>*:before{content:"\e60d"}.wrap .loco-save>*:before{content:"\e610"}.wrap .loco-sync>*:before{content:"\e633"}.wrap .loco-help>*:before{content:"\3f"}.wrap .loco-revert>*:before{content:"\e634"}.wrap .loco-fuzzy>*:before{content:"\e607"}.wrap .loco-download>*:before{content:"\e608"}.wrap .loco-ok>*:before{content:"\e618"}.wrap .loco-warn>*:before{content:"\e62e"}.wrap .loco-edit-pot>*:before{content:"\e61e"}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}.wrap div{position:relative}h2 .nav-tab.nav-tab-loco{float:right;border-color:transparent;font-size:16px;color:#2e892e;background:transparent}h2 .nav-tab.nav-tab-loco:hover{color:#3db63d}.widefat thead tr th{width:25%}.wrap .loco-list{margin:10px 0}.wrap .loco-list li>a:before,.wrap .loco-list li>span:before{padding-right:0.5em;font-family:loco;color:inherit}.wrap .loco-list li.loco-add a{color:#666666}.wrap .loco-list li.loco-add a:hover{color:#000}.wrap .loco-list li.loco-edit-po .flag{margin-right:6px}.wrap .loco-list li.loco-warn>*:before{color:#cc0000}.wrap .loco-list li.loco-ok>*:before{color:#006600}.wrap .loco-list .loco-details li{margin-bottom:0}.wrap .loco-list .loco-mtime{color:#999}.wrap .loco-list .loco-progress{color:#999}.error a.dismiss,.updated a.dismiss{text-decoration:none;font-size:20px;line-height:1;display:block;position:absolute;right:10px;top:5px}.wrap div.loco-message{margin-top:10px}.wrap div.loco-success{border-color:#00CC00;background-color:#ccffcc}.wrap div.loco-message:hover{border-color:#000}form.loco-switcher{display:inline;display:inline-block;padding:0 5px}form.loco-switcher select{font-weight:normal;height:auto;display:inline}.wrap #loco-poedit{border:solid 1px #ccc}.wrap #loco-poedit-inner{min-height:600px;font-size:14px;clear:both}.wrap #loco-poedit-inner h2{color:#000;line-height:1}#loco-nav{font-size:14px;height:50px}#loco-nav form{display:block;padding:0;margin:0}#loco-search,#loco-nav button{display:block;position:relative;float:left;clear:none;box-sizing:border-box;margin:5px 0 0 5px;height:40px;text-align:left}#loco-nav button.loco-help{float:right;margin-right:5px}#loco-nav button span:before{padding-right:0.5em;font-family:loco}.wp-core-ui button.loco-inverted,.wp-core-ui button.loco-inverted:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#e0e0e0), to(#fefefe));background-image:-webkit-linear-gradient(top, #e0e0e0, #fefefe);background-image:-moz-linear-gradient(top, #e0e0e0, #fefefe);background-image:-o-linear-gradient(top, #e0e0e0, #fefefe);background-image:linear-gradient(to bottom, #e0e0e0, #fefefe)}#loco-filter input[type="text"]{padding-left:10px;margin-left:20px;width:300px;font-size:15px}#loco-filter .icon.clear{display:none !important}.loco-fscheck .loco-list{margin-bottom:20px}
|
1 |
+
.wrap #loco-poedit .wg-cell,.wrap #loco-poedit .wg-cell div{position:relative;box-sizing:border-box;-moz-box-sizing:border-box}.wrap #loco-poedit .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}.wrap #loco-poedit .wg-split{background:#eee}.wrap #loco-poedit .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.wrap #loco-poedit .wg-split-x>div>.not-first>*{margin-left:6px}.wrap #loco-poedit .wg-split-y>div>.not-first>*{margin-top:6px}.wrap #loco-poedit .wg-split>div>.has-title .wg-content{margin-top:0}.wrap #loco-poedit .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}.wrap #loco-poedit .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}.wrap #loco-poedit .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}.wrap #loco-poedit .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png) center center no-repeat}.wrap #loco-poedit .wg-split-y>div{cursor:move;cursor:ns-resize;cursor:row-resize}.wrap #loco-poedit .wg-split-y>div>.not-first:before{height:6px;width:100%;background:transparent url(../img/wg/splity.png) center center no-repeat}.wrap #loco-poedit .wg-split>div.locked{cursor:default}.wrap #loco-poedit .wg-split-x>div.locked>.not-first>*{margin-left:1px}.wrap #loco-poedit .wg-split-y>div.locked>.not-first>*{margin-top:1px}.wrap #loco-poedit .wg-split>div.locked>.not-first:before{display:none}.wrap #loco-poedit .wg-title{background:#ddd;cursor:default !important;margin:0;padding:4px 6px;font-size:1em;white-space:nowrap}.wrap #loco-poedit .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;-moz-box-sizing:border-box}.wrap #loco-poedit .is-table .wg-cols{outline:none}.wrap #loco-poedit .is-table .wg-col{float:left;clear:none}.wrap #loco-poedit .is-table .wg-title{padding:3px 10px;margin:0 !important;font-weight:normal}.wrap #loco-poedit .is-table .wg-thead>div>.not-first:before{background-position:center 1px}.wrap #loco-poedit .is-table .wg-thead{background:#ddd;border-bottom:solid 1px #ccc}.wrap #loco-poedit .is-table .wg-tr{height:1.6em;overflow:hidden}.wrap #loco-poedit .is-table .wg-tr:nth-child(even){background-color:#f3f7fd}.wrap #loco-poedit .is-table .wg-tr.selected{background-color:#3875d7;color:#fff}.wrap #loco-poedit .is-table .wg-td{white-space:nowrap;line-height:1.2em;margin:0.3em 4px;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden}.wrap #loco-poedit .is-table .wg-tbody .not-first .wg-td{margin-left:10px}.wrap #loco-poedit .is-table .wg-cols.filtered .wg-tr{display:none}.wrap #loco-poedit .is-table .wg-cols.filtered .wg-tr.filtered{display:block}.wrap #loco-poedit .is-field>.wg-content{cursor:text;outline:none;white-space:pre-wrap}.wrap #loco-poedit .is-field>.wg-content:focus{-moz-box-shadow:inset 0 0 10px #3875d7;-webkit-box-shadow:inset 0 0 10px #3875d7;box-shadow:inset 0 0 10px #3875d7}.wrap #loco-poedit .is-field.readonly>.wg-content{cursor:default;background:#f8f8f8;text-shadow:0 1px #fff}.wrap #loco-poedit .is-field.readonly>.wg-content:focus{-moz-box-shadow:inset 0 0 10px #cc0000;-webkit-box-shadow:inset 0 0 10px #cc0000;box-shadow:inset 0 0 10px #cc0000}.wrap #loco-poedit .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:0.5em 1em;color:#000;text-decoration:none;-moz-border-radius:0.2em;-webkit-border-radius:0.2em;border-radius:0.2em}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a:hover{background-color:#f3f7fd}.wrap #loco-poedit .wg-split-x>nav.wg-tabs>a.active{background-color:#3875d7;color:#fff}@media all and (max-width: 768px){.wrap #loco-poedit .wg-split-x>div>.not-first>*{margin-left:20px}.wrap #loco-poedit .wg-split-y>div>.not-first>*{margin-top:20px}.wrap #loco-poedit .wg-split-x>div>.not-first:before{width:20px}.wrap #loco-poedit .wg-split-y>div>.not-first:before{height:20px}}.wrap #loco-poedit .is-table .po-fuzzy{color:#b59829;font-weight:bold}.wrap #loco-poedit .is-table .po-empty{color:#1f507a;font-weight:bold}.wrap #loco-poedit .is-table .wg-col.first .wg-td:before{font-family:loco;vertical-align:middle;display:inline-block;content:" ";width:1.2em;line-height:1}.wrap #loco-poedit .is-table .po-incorrect,.wrap #loco-poedit .is-table .po-needs-review{color:#CC0000}.wrap #loco-poedit .is-table .wg-col.first .po-flagged .wg-td:before{content:"\e60e"}.wrap #loco-poedit .is-table .wg-col.first .po-comment .wg-td:before{content:"\e613";color:#999}.wrap #loco-poedit .is-table .wg-col.first .po-unsaved .wg-td:before{content:"\e612";color:#f1d040}.wrap #loco-poedit #po-list .wg-content{padding:0}.wrap #loco-poedit #po-source>.wg-body>.has-title>h2{background:transparent;font-weight:normal;float:left;clear:none;min-width:4em}.wrap #loco-poedit #po-source>.wg-body>.has-title>.wg-content{clear:none}.wrap #loco-poedit #po-source>.wg-body>.has-title>h2{min-width:4.5em}.wrap .flag{width:16px;height:11px;display:inline-block;background:url(../img/flags.tiny.png) no-repeat}.wrap .flag.flag-ad{background-position:-16px 0}.wrap .flag.flag-ae{background-position:-32px 0}.wrap .flag.flag-af{background-position:-48px 0}.wrap .flag.flag-ag{background-position:-64px 0}.wrap .flag.flag-ai{background-position:-80px 0}.wrap .flag.flag-al{background-position:-96px 0}.wrap .flag.flag-am{background-position:-112px 0}.wrap .flag.flag-an{background-position:-128px 0}.wrap .flag.flag-ao{background-position:-144px 0}.wrap .flag.flag-ar{background-position:-160px 0}.wrap .flag.flag-as{background-position:-176px 0}.wrap .flag.flag-at{background-position:-192px 0}.wrap .flag.flag-au{background-position:-208px 0}.wrap .flag.flag-aw{background-position:-224px 0}.wrap .flag.flag-az{background-position:-240px 0}.wrap .flag.flag-ba{background-position:0 -11px}.wrap .flag.flag-bb{background-position:-16px -11px}.wrap .flag.flag-bd{background-position:-32px -11px}.wrap .flag.flag-be{background-position:-48px -11px}.wrap .flag.flag-bf{background-position:-64px -11px}.wrap .flag.flag-bg{background-position:-80px -11px}.wrap .flag.flag-bh{background-position:-96px -11px}.wrap .flag.flag-bi{background-position:-112px -11px}.wrap .flag.flag-bj{background-position:-128px -11px}.wrap .flag.flag-bm{background-position:-144px -11px}.wrap .flag.flag-bn{background-position:-160px -11px}.wrap .flag.flag-bo{background-position:-176px -11px}.wrap .flag.flag-br{background-position:-192px -11px}.wrap .flag.flag-bs{background-position:-208px -11px}.wrap .flag.flag-bt{background-position:-224px -11px}.wrap .flag.flag-bw{background-position:-240px -11px}.wrap .flag.flag-by{background-position:0 -22px}.wrap .flag.flag-bz{background-position:-16px -22px}.wrap .flag.flag-ca{background-position:-32px -22px}.wrap .flag.flag-cd{background-position:-48px -22px}.wrap .flag.flag-cf{background-position:-64px -22px}.wrap .flag.flag-cg{background-position:-80px -22px}.wrap .flag.flag-ch{background-position:-96px -22px}.wrap .flag.flag-ci{background-position:-112px -22px}.wrap .flag.flag-ck{background-position:-128px -22px}.wrap .flag.flag-cl{background-position:-144px -22px}.wrap .flag.flag-cm{background-position:-160px -22px}.wrap .flag.flag-cn{background-position:-176px -22px}.wrap .flag.flag-co{background-position:-192px -22px}.wrap .flag.flag-cr{background-position:-208px -22px}.wrap .flag.flag-cu{background-position:-224px -22px}.wrap .flag.flag-cv{background-position:-240px -22px}.wrap .flag.flag-cw{background-position:0 -33px}.wrap .flag.flag-cy{background-position:-16px -33px}.wrap .flag.flag-cz{background-position:-32px -33px}.wrap .flag.flag-de{background-position:-48px -33px}.wrap .flag.flag-dj{background-position:-64px -33px}.wrap .flag.flag-dk{background-position:-80px -33px}.wrap .flag.flag-dm{background-position:-96px -33px}.wrap .flag.flag-do{background-position:-112px -33px}.wrap .flag.flag-dz{background-position:-128px -33px}.wrap .flag.flag-ec{background-position:-144px -33px}.wrap .flag.flag-ee{background-position:-160px -33px}.wrap .flag.flag-eg{background-position:-176px -33px}.wrap .flag.flag-eh{background-position:-192px -33px}.wrap .flag.flag-er{background-position:-208px -33px}.wrap .flag.flag-es{background-position:-224px -33px}.wrap .flag.flag-et{background-position:-240px -33px}.wrap .flag.flag-fi{background-position:0 -44px}.wrap .flag.flag-fj{background-position:-16px -44px}.wrap .flag.flag-fk{background-position:-32px -44px}.wrap .flag.flag-fm{background-position:-48px -44px}.wrap .flag.flag-fo{background-position:-64px -44px}.wrap .flag.flag-fr{background-position:-80px -44px}.wrap .flag.flag-ga{background-position:-96px -44px}.wrap .flag.flag-gb{background-position:-112px -44px}.wrap .flag.flag-gd{background-position:-128px -44px}.wrap .flag.flag-ge{background-position:-144px -44px}.wrap .flag.flag-gf{background-position:-160px -44px}.wrap .flag.flag-gh{background-position:-176px -44px}.wrap .flag.flag-gi{background-position:-192px -44px}.wrap .flag.flag-gl{background-position:-208px -44px}.wrap .flag.flag-gm{background-position:-224px -44px}.wrap .flag.flag-gn{background-position:-240px -44px}.wrap .flag.flag-gp{background-position:0 -55px}.wrap .flag.flag-gq{background-position:-16px -55px}.wrap .flag.flag-gr{background-position:-32px -55px}.wrap .flag.flag-gt{background-position:-48px -55px}.wrap .flag.flag-gu{background-position:-64px -55px}.wrap .flag.flag-gw{background-position:-80px -55px}.wrap .flag.flag-gy{background-position:-96px -55px}.wrap .flag.flag-hk{background-position:-112px -55px}.wrap .flag.flag-hn{background-position:-128px -55px}.wrap .flag.flag-hr{background-position:-144px -55px}.wrap .flag.flag-ht{background-position:-160px -55px}.wrap .flag.flag-hu{background-position:-176px -55px}.wrap .flag.flag-id{background-position:-192px -55px}.wrap .flag.flag-ie{background-position:-208px -55px}.wrap .flag.flag-il{background-position:-224px -55px}.wrap .flag.flag-in{background-position:-240px -55px}.wrap .flag.flag-iq{background-position:0 -66px}.wrap .flag.flag-ir{background-position:-16px -66px}.wrap .flag.flag-is{background-position:-32px -66px}.wrap .flag.flag-it{background-position:-48px -66px}.wrap .flag.flag-jm{background-position:-64px -66px}.wrap .flag.flag-jo{background-position:-80px -66px}.wrap .flag.flag-jp{background-position:-96px -66px}.wrap .flag.flag-ke{background-position:-112px -66px}.wrap .flag.flag-kg{background-position:-128px -66px}.wrap .flag.flag-kh{background-position:-144px -66px}.wrap .flag.flag-ki{background-position:-160px -66px}.wrap .flag.flag-km{background-position:-176px -66px}.wrap .flag.flag-kn{background-position:-192px -66px}.wrap .flag.flag-kp{background-position:-208px -66px}.wrap .flag.flag-kr{background-position:-224px -66px}.wrap .flag.flag-kw{background-position:-240px -66px}.wrap .flag.flag-ky{background-position:0 -77px}.wrap .flag.flag-kz{background-position:-16px -77px}.wrap .flag.flag-la{background-position:-32px -77px}.wrap .flag.flag-lb{background-position:-48px -77px}.wrap .flag.flag-lc{background-position:-64px -77px}.wrap .flag.flag-li{background-position:-80px -77px}.wrap .flag.flag-lk{background-position:-96px -77px}.wrap .flag.flag-lr{background-position:-112px -77px}.wrap .flag.flag-ls{background-position:-128px -77px}.wrap .flag.flag-lt{background-position:-144px -77px}.wrap .flag.flag-lu{background-position:-160px -77px}.wrap .flag.flag-lv{background-position:-176px -77px}.wrap .flag.flag-ly{background-position:-192px -77px}.wrap .flag.flag-ma{background-position:-208px -77px}.wrap .flag.flag-mc{background-position:-224px -77px}.wrap .flag.flag-md{background-position:-240px -77px}.wrap .flag.flag-me{background-position:0 -88px}.wrap .flag.flag-mg{background-position:-16px -88px}.wrap .flag.flag-mh{background-position:-32px -88px}.wrap .flag.flag-mk{background-position:-48px -88px}.wrap .flag.flag-ml{background-position:-64px -88px}.wrap .flag.flag-mm{background-position:-80px -88px}.wrap .flag.flag-mn{background-position:-96px -88px}.wrap .flag.flag-mo{background-position:-112px -88px}.wrap .flag.flag-mp{background-position:-128px -88px}.wrap .flag.flag-mq{background-position:-144px -88px}.wrap .flag.flag-mr{background-position:-160px -88px}.wrap .flag.flag-ms{background-position:-176px -88px}.wrap .flag.flag-mt{background-position:-192px -88px}.wrap .flag.flag-mu{background-position:-208px -88px}.wrap .flag.flag-mv{background-position:-224px -88px}.wrap .flag.flag-mw{background-position:-240px -88px}.wrap .flag.flag-mx{background-position:0 -99px}.wrap .flag.flag-my{background-position:-16px -99px}.wrap .flag.flag-mz{background-position:-32px -99px}.wrap .flag.flag-na{background-position:-48px -99px}.wrap .flag.flag-nc{background-position:-64px -99px}.wrap .flag.flag-ne{background-position:-80px -99px}.wrap .flag.flag-nf{background-position:-96px -99px}.wrap .flag.flag-ng{background-position:-112px -99px}.wrap .flag.flag-ni{background-position:-128px -99px}.wrap .flag.flag-nl{background-position:-144px -99px}.wrap .flag.flag-no{background-position:-160px -99px}.wrap .flag.flag-np{background-position:-176px -99px}.wrap .flag.flag-nr{background-position:-192px -99px}.wrap .flag.flag-nu{background-position:-208px -99px}.wrap .flag.flag-nz{background-position:-224px -99px}.wrap .flag.flag-om{background-position:-240px -99px}.wrap .flag.flag-pa{background-position:0 -110px}.wrap .flag.flag-pe{background-position:-16px -110px}.wrap .flag.flag-pf{background-position:-32px -110px}.wrap .flag.flag-pg{background-position:-48px -110px}.wrap .flag.flag-ph{background-position:-64px -110px}.wrap .flag.flag-pk{background-position:-80px -110px}.wrap .flag.flag-pl{background-position:-96px -110px}.wrap .flag.flag-pm{background-position:-112px -110px}.wrap .flag.flag-pn{background-position:-128px -110px}.wrap .flag.flag-pr{background-position:-144px -110px}.wrap .flag.flag-ps{background-position:-160px -110px}.wrap .flag.flag-pt{background-position:-176px -110px}.wrap .flag.flag-pw{background-position:-192px -110px}.wrap .flag.flag-py{background-position:-208px -110px}.wrap .flag.flag-qa{background-position:-224px -110px}.wrap .flag.flag-re{background-position:-240px -110px}.wrap .flag.flag-ro{background-position:0 -121px}.wrap .flag.flag-rs{background-position:-16px -121px}.wrap .flag.flag-ru{background-position:-32px -121px}.wrap .flag.flag-rw{background-position:-48px -121px}.wrap .flag.flag-sa{background-position:-64px -121px}.wrap .flag.flag-sb{background-position:-80px -121px}.wrap .flag.flag-sc{background-position:-96px -121px}.wrap .flag.flag-sd{background-position:-112px -121px}.wrap .flag.flag-se{background-position:-128px -121px}.wrap .flag.flag-sg{background-position:-144px -121px}.wrap .flag.flag-sh{background-position:-160px -121px}.wrap .flag.flag-si{background-position:-176px -121px}.wrap .flag.flag-sk{background-position:-192px -121px}.wrap .flag.flag-sl{background-position:-208px -121px}.wrap .flag.flag-sm{background-position:-224px -121px}.wrap .flag.flag-sn{background-position:-240px -121px}.wrap .flag.flag-so{background-position:0 -132px}.wrap .flag.flag-sr{background-position:-16px -132px}.wrap .flag.flag-ss{background-position:-32px -132px}.wrap .flag.flag-st{background-position:-48px -132px}.wrap .flag.flag-sv{background-position:-64px -132px}.wrap .flag.flag-sy{background-position:-80px -132px}.wrap .flag.flag-sz{background-position:-96px -132px}.wrap .flag.flag-tc{background-position:-112px -132px}.wrap .flag.flag-td{background-position:-128px -132px}.wrap .flag.flag-tg{background-position:-144px -132px}.wrap .flag.flag-th{background-position:-160px -132px}.wrap .flag.flag-tj{background-position:-176px -132px}.wrap .flag.flag-tk{background-position:-192px -132px}.wrap .flag.flag-tl{background-position:-208px -132px}.wrap .flag.flag-tm{background-position:-224px -132px}.wrap .flag.flag-tn{background-position:-240px -132px}.wrap .flag.flag-to{background-position:0 -143px}.wrap .flag.flag-tr{background-position:-16px -143px}.wrap .flag.flag-tt{background-position:-32px -143px}.wrap .flag.flag-tv{background-position:-48px -143px}.wrap .flag.flag-tw{background-position:-64px -143px}.wrap .flag.flag-tz{background-position:-80px -143px}.wrap .flag.flag-ua{background-position:-96px -143px}.wrap .flag.flag-ug{background-position:-112px -143px}.wrap .flag.flag-us{background-position:-128px -143px}.wrap .flag.flag-uy{background-position:-144px -143px}.wrap .flag.flag-uz{background-position:-160px -143px}.wrap .flag.flag-va{background-position:-176px -143px}.wrap .flag.flag-vc{background-position:-192px -143px}.wrap .flag.flag-ve{background-position:-208px -143px}.wrap .flag.flag-vg{background-position:-224px -143px}.wrap .flag.flag-vi{background-position:-240px -143px}.wrap .flag.flag-vn{background-position:0 -154px}.wrap .flag.flag-vu{background-position:-16px -154px}.wrap .flag.flag-wf{background-position:-32px -154px}.wrap .flag.flag-ws{background-position:-48px -154px}.wrap .flag.flag-ye{background-position:-64px -154px}.wrap .flag.flag-yt{background-position:-80px -154px}.wrap .flag.flag-za{background-position:-96px -154px}.wrap .flag.flag-zm{background-position:-112px -154px}.wrap .flag.flag-zw{background-position:-128px -154px}.wrap .loco-add>*:before{content:"\e60c"}.wrap .loco-del>*:before{content:"\e60d"}.wrap .loco-save>*:before{content:"\e610"}.wrap .loco-sync>*:before{content:"\e633"}.wrap .loco-help>*:before{content:"\3f"}.wrap .loco-revert>*:before{content:"\e634"}.wrap .loco-fuzzy>*:before{content:"\e607"}.wrap .loco-download>*:before{content:"\e608"}.wrap .loco-ok>*:before{content:"\e618"}.wrap .loco-warn>*:before{content:"\e62e"}.wrap .loco-edit-pot>*:before{content:"\e61e"}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}.wrap div{position:relative}h2 .nav-tab.nav-tab-loco{float:right;border-color:transparent;font-size:16px;color:#2e892e;background:transparent}h2 .nav-tab.nav-tab-loco:hover{color:#3db63d}.widefat thead tr th{width:25%}.wrap .loco-list{margin:10px 0}.wrap .loco-list li>a:before,.wrap .loco-list li>span:before{padding-right:0.5em;font-family:loco;color:inherit}.wrap .loco-list li.loco-add a{color:#666666}.wrap .loco-list li.loco-add a:hover{color:#000}.wrap .loco-list li.loco-edit-po .flag{margin-right:6px}.wrap .loco-list li.loco-warn>*:before{color:#cc0000}.wrap .loco-list li.loco-ok>*:before{color:#006600}.wrap .loco-list .loco-details li{margin-bottom:0}.wrap .loco-list .loco-mtime{color:#999}.wrap .loco-list .loco-progress{color:#999}.error a.dismiss,.updated a.dismiss{text-decoration:none;font-size:20px;line-height:1;display:block;position:absolute;right:10px;top:5px}.wrap div.loco-message{margin-top:10px}.wrap div.loco-success{border-color:#00CC00;background-color:#ccffcc}.wrap div.loco-message:hover{border-color:#000}form.loco-switcher{display:inline;display:inline-block;padding:0 5px}form.loco-switcher select{font-weight:normal;height:auto;display:inline}h3.title .loco-meta{font-weight:normal;font-size:14px}.wrap #loco-poedit{border:solid 1px #ccc}.wrap #loco-poedit-inner{min-height:600px;font-size:14px;clear:both}.wrap #loco-poedit-inner h2{color:#000;line-height:1}#loco-nav{font-size:14px;height:50px}#loco-nav form{display:block;padding:0;margin:0}#loco-search,#loco-nav button{display:block;position:relative;float:left;clear:none;box-sizing:border-box;margin:5px 0 0 5px;height:40px;text-align:left}#loco-nav button.loco-help{float:right;margin-right:5px}#loco-nav button span:before{padding-right:0.5em;font-family:loco}.wp-core-ui button.loco-inverted,.wp-core-ui button.loco-inverted:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#e0e0e0), to(#fefefe));background-image:-webkit-linear-gradient(top, #e0e0e0, #fefefe);background-image:-moz-linear-gradient(top, #e0e0e0, #fefefe);background-image:-o-linear-gradient(top, #e0e0e0, #fefefe);background-image:linear-gradient(to bottom, #e0e0e0, #fefefe)}#loco-filter input[type="text"]{padding-left:10px;margin-left:20px;width:300px;font-size:15px}#loco-filter .icon.clear{display:none !important}.loco-fscheck .loco-list{margin-bottom:20px}
|
pub/js/build/admin-poedit.js
CHANGED
@@ -1,76 +1,76 @@
|
|
1 |
-
(function(u,
|
2 |
-
(f||k)+'"></div>').insertBefore(e("#loco-poedit"));c=e(
|
3 |
-
function
|
4 |
-
(Array.prototype.indexOf=function(c){if(null==this)throw new TypeError;var
|
5 |
-
|
6 |
-
function(a,c){return f(["_trackPageview",{page:
|
7 |
-
"ga"),ga("create",
|
8 |
-
location.href;f("set",{page:location.pathname+location.hash,title:e.title,location:g});return c};return c}({},u,
|
9 |
-
b.indexOf("#"))return f(
|
10 |
-
f.fadeOut(400,function(){e(this).remove();f=null});return!1}function
|
11 |
-
"Empty message");
|
12 |
-
d.alert,
|
13 |
-
"Log in",callback:function(h,
|
14 |
-
y=c.init=function(){if(!
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
return c}({},u,
|
19 |
-
b.statusText||f[
|
20 |
-
|
21 |
-
b){g.autoSize();var
|
22 |
-
c){
|
23 |
-
var l=
|
24 |
-
c.replace=function(
|
25 |
-
return!1}function b
|
26 |
-
c.options[
|
27 |
-
this.id&&
|
28 |
-
c.extend=function(
|
29 |
-
case 40:return this.hoverNext(1),f(
|
30 |
-
this.list.css("min-width",String(a
|
31 |
-
|
32 |
-
h);this.options[h]={value:
|
33 |
-
a,this.length++};
|
34 |
-
return
|
35 |
-
c.value?this.selectIndex(0,!0):this.selectValue(
|
36 |
-
return c}({},u,
|
37 |
-
h||
|
38 |
-
a
|
39 |
-
|
40 |
-
E());return!0});C&&
|
41 |
-
b.getAttribute("data-modal")?l.initForm(
|
42 |
-
h.getAttribute("data-ajax-target");g&&(g=e("#"+g),e(h).click(function(
|
43 |
-
return this};c.el=function(b
|
44 |
-
|
45 |
-
this.clear()}c.create=function(){return new f};
|
46 |
-
|
47 |
-
k[
|
48 |
-
|
49 |
-
"px").css("width",
|
50 |
-
return
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
function(
|
56 |
-
c,f){
|
57 |
-
|
58 |
-
|
59 |
-
a.getAttribute("data-icon");if(
|
60 |
-
|
61 |
-
function(
|
62 |
-
"Report-Msgid-Bugs-To":"","POT-Creation-Date":a||"","POT-Revision-Date":a||"","PO-Revision-Date":a||"","Last-Translator":"","Language-Team":"",Language:"","Plural-Forms":"","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-Poedit-SourceCharset":"UTF-8"}}function
|
63 |
-
1,d=[],e=-1,f;++e<b.length;){a=b[e];for(c&&c!==e&&(a+="\n");a&&a.charAt(79);){for(f=80;--f;)if(-1!==" \n\r.?!,;:-".indexOf(a.charAt(f))){f++;break}f||(f=79);d.push(
|
64 |
-
this.status=0}c.create=function(a){return new l(a)};
|
65 |
-
(c.lang||"en")+"_"+(c.region||"GB"),a["PO-Revision-Date"]=d,delete a["POT-Revision-Date"]):(a.Language="",a["Plural-Forms"]="nplurals=INTEGER; plural=EXPRESSION",a["POT-Revision-Date"]=d,a["PO-Revision-Date"]="YEAR-MO-DA HO:MI+ZONE");a["X-Generator"]="Loco - https://localise.biz/";return a};
|
66 |
-
|
67 |
-
if(-1!==a){var b=this.rows.cut(a,1);if(b&&b.length)return this.length=this.rows.length,this.rows.each(function(a,b,c){b.idx=c}),a}};
|
68 |
-
c.source||c.id,e=c.context,d||e)f=new
|
69 |
-
|
70 |
-
b.push("");this.rows.each(function(a,c){a&&(b.push(c.toString(e)),b.push(""))});return b.join("\n")};
|
71 |
-
|
72 |
-
"\n").split("\n").join("\n
|
73 |
-
function(){var a=0;this.translation()||(a+=2);this.fuzzy()&&(a+=1);return a};
|
74 |
"\u03b7":"h","\u03b9":"i","\u03be":"j","\u03ba":"k","\u03bb":"l","\u03bc":"m","\u03bd":"n","\u03bf":"o","\u03c0":"p","\u03c1":"r","\u03c3":"s","\u03c4":"t","\u03b8":"u","\u03c9":"v","\u03c2":"s","\u03c7":"x","\u03c5":"y","\u03b6":"z","\u0444":"a","\u0438":"b","\u0441":"c","\u0432":"d","\u0443":"e","\u0430":"f","\u043f":"g","\u0440":"h","\u0448":"i","\u043e":"j","\u043b":"k","\u0434":"l","\u044c":"m","\u0442":"n","\u0449":"o","\u0437":"p","\u0439":"\ua647","\u043a":"r","\u044b":"s","\u0435":"t","\u0433":"u",
|
75 |
"\u043c":"v","\u0446":"w","\u0447":"x","\u043d":"y","\u044f":"z","\u00aa":"a","\u00e1":"a","\u00e0":"a","\u0103":"a","\u1eaf":"a","\u1eb1":"a","\u1eb5":"a","\u1eb3":"a","\u00e2":"a","\u1ea5":"a","\u1ea7":"a","\u1eab":"a","\u1ea9":"a","\u01ce":"a","\u00e5":"a","\u01fb":"a","\u00e4":"a","\u01df":"a","\u00e3":"a","\u0227":"a","\u01e1":"a","\u0105":"a","\u0101":"a","\u1ea3":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1eb7":"a","\u1ead":"a","\u1e01":"a","\ua733":"a","\u00e6":"a","\u01fd":"a","\u01e3":"a",
|
76 |
"\ua735":"a","\ua737":"a","\ua739":"a","\ua73b":"a","\ua73d":"a","\u1e9a":"a","\u2c65":"\u2c65","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"\u0180","\u0183":"\u0183","\u0107":"c","\u0109":"c","\u010d":"c","\u010b":"c","\u00e7":"c","\u1e09":"c","\u023c":"\u023c","\ua792":"\ua793","\u0188":"\u0188","\ua73f":"\ua73f","\u010f":"d","\u1e0b":"d","\u1e11":"d","\u1e0d":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u00f0":"d","\ua77a":"d","\u0238":"d","\u01f3":"d","\u01f2":"d","\u01c6":"d","\u01c5":"d",
|
@@ -105,44 +105,44 @@ function(){var a=0;this.translation()||(a+=2);this.fuzzy()&&(a+=1);return a};d.c
|
|
105 |
"\u04ab":"\u04ab","\u2dee":"n","\ua68d":"\ua68d","\u050f":"\u050f","\u04ad":"\u04ad","\ua68b":"\ua68b","\u045b":"\u045b","\u045c":"\u045b","\ua677":"e","\u04ef":"e","\u045e":"e","\u04f1":"e","\u04f3":"e","\u04af":"\u04af","\u04b1":"\u04b1","\u2df9":"\ua64b","\ua64b":"\ua64b","\u0479":"\u0479","\u2def":"\u0445","\u0445":"\u0445","\u04fd":"\u04fd","\u04ff":"\u04ff","\u04b3":"\u04b3","\u04bb":"\u04bb","\u0527":"\u0527","\ua695":"\ua695","\ua67b":"\u0461","\u0461":"\u0461","\u047f":"\u047f","\ua64d":"\ua64d",
|
106 |
"\u047d":"\u047d","\u047b":"\u047b","\u2df0":"w","\ua661":"\ua661","\ua68f":"\ua68f","\u04b5":"\u04b5","\ua691":"\ua691","\u2df1":"x","\ua693":"\ua693","\u04f5":"\ua693","\u04b7":"\u04b7","\u04cc":"\u04cc","\u04b9":"\u04b9","\ua687":"\ua687","\u04bd":"\u04bd","\u04bf":"\u04bf","\u045f":"\u045f","\u2df2":"i","\ua697":"\ua697","\u2df3":"o","\ua64f":"\ua64f","\ua678":"\u044a","\u044a":"\u044a","\ua651":"\ua651","\ua679":"s","\u04f9":"s","\ua67a":"m","\u048d":"\u048d","\u2dfa":"\u0463","\u0463":"\u0463",
|
107 |
"\ua653":"\ua653","\u044d":"\u044d","\u04ed":"\u044d","\u2dfb":"\u044e","\u044e":"\u044e","\ua655":"\ua655","\u2dfc":"\ua657","\ua657":"\ua657","\u0519":"\u0519","\ua69f":"\u0465","\u0465":"\u0465","\u2dfd":"\u0467","\u0467":"\u0467","\ua659":"\ua659","\u2dfe":"\u046b","\u046b":"\u046b","\ua65b":"\ua65b","\u0469":"\u0469","\ua65d":"\ua65d","\u2dff":"\u046d","\u046d":"\u046d","\u046f":"\u046f","\u0471":"\u0471","\u2df4":"\u0473","\u0473":"\u0473","\u0475":"\u0475","\u0477":"\u0475","\ua65f":"\ua65f",
|
108 |
-
"\u04a9":"\u04a9","\u051d":"\u051d","\u04cf":"\u04cf"});
|
109 |
-
var
|
110 |
-
|
111 |
-
function(
|
112 |
-
-1:1:0)});y=null;return!0};k[l]=function(
|
113 |
-
"none")},scroll:function(
|
114 |
-
[];++d<e.length;)c(d,e[d])},
|
115 |
-
a);if(!z)return!0;e(k).one("mouseup",c).mousemove(d);return l(a)}function g(a,b){var c=b.type;"touchmove"===c?z&&z.move(b):"touchstart"===c?z=f(a.target,b):"touchend"===c&&z&&(z=null)}function
|
116 |
-
c.selectRow(d+=b););return l(a)}}return!0}function l(a){a.stopPropagation();a.preventDefault();return!1}function
|
117 |
-
"true").focus(function(){for(var d=e(a),f=-1;++f<c.length;)d.bind(c[f],b);return!0}).blur(function(){for(var
|
118 |
-
|
119 |
-
f=b.length,
|
120 |
-
this.field=null),this.table&&(this.table=null),this.el.removeChild(this.body));this.body=this.el.appendChild(
|
121 |
-
b=0;b<arguments.length;)a=Math.max(0,Math.min(1,arguments[b++])),this.cells[b].pos=a;this.redraw();return this};
|
122 |
-
return this};
|
123 |
-
c=d.childNodes;d.style.width=a+"px";for(var a=b.length,f=1;0<=--a;)d=b.cells[a],c[a].style.width=String(100*(f-d.pos))+"%",f=d.pos;return!0};
|
124 |
-
return this};
|
125 |
-
[];rows=this.splity(c+"-thead",c+"-body");thead=rows[0];tbody=rows[1];thead.css.push("wg-thead");tbody.css.push("wg-tbody");
|
126 |
-
k.el)||20;this.resize(tbody.fixed);e(l).attr("tabindex","-1").keydown(
|
127 |
-
c.innerHTML=" ";return d};
|
128 |
-
h.find("div.selected").removeClass("selected");d.addClass("selected");h.data("row",a);if(b)f.scrollTo(d[0],!0);else{var k=g.scrollTop;h.focus();k&&(g.scrollTop=k);f.scrollTo(d[0])}h.trigger("wgRowSelect",[a,c])}return this};
|
129 |
-
this;for(c.addClass("filtered").find("div.filtered").removeClass("filtered");++b<a.length;)c=a[b],c=this.tr(c),c.length&&e(c).addClass("filtered");return this};
|
130 |
-
[a.data("index")]);return a}var c=this;c.nav&&c.el.removeChild(c.nav);c.nav=c.el.insertBefore(
|
131 |
-
return c}({},u,
|
132 |
-
b,c){w.add(c,b.toText())});y="";D=
|
133 |
-
function
|
134 |
-
b);c&&/\S/.test(c)?e(d).text(c.replace("\n"," ")):e(d).html(" ")}function
|
135 |
-
|
136 |
-
e);0===e&&
|
137 |
-
"-plural"),
|
138 |
-
"Source text");a(1,"Translation")},eachRow:function(a){var b=0;
|
139 |
-
function(){z();S.textarea("",!1);
|
140 |
-
[d]),t(
|
141 |
-
stats:function(){return
|
142 |
-
|
143 |
-
|
144 |
-
return
|
145 |
-
function(c){
|
146 |
-
!1}).bind("poSave",function(){c.disabled=!0});e(c).click(function(
|
147 |
-
"";var k=
|
148 |
-
|
1 |
+
(function(u,A,e,V){function N(c){var a=0,e,f=[].slice.call(arguments,1);return c.replace(/%(s|u|%)/g,function(d,c){if("%"===c)return"%";e=f[a++];return String(e)||""})}function Q(c){c.stopPropagation();c.preventDefault();return!1}function ca(c,a){function k(){f();d=setTimeout(function(){e(c).fadeOut(1E3,a)},g)}function f(){d&&clearTimeout(d);d=null}var d,g=5E3;k();e(c).mouseenter(f).mouseleave(k)}function Y(c,a){function k(a){e(c).remove();e(u).triggerHandler("resize");return a&&Q(a)}e('<a class="dismiss" href="#">×</a>').appendTo(c).click(k);
|
2 |
+
a||ca(c,k)}function W(c,a,k,f){var d="loco-js-"+k;k=A.getElementById(d)||e('<div id="'+d+'" class="loco-message '+(f||k)+'"></div>').insertBefore(e("#loco-poedit"));c=e(A.createElement("p")).text(c);a=e(A.createElement("strong")).text(a+": ");c.prepend(a).appendTo(e(k).html(""));e(u).triggerHandler("resize");Y(k);e("div.loco-warning").remove()}function Z(c){return W(c,G("OK"),"updated loco-success")}function X(){var c=H.stats(),a=c.t,k=c.f,f=c.u,a=N(G("1 string","%s strings",a),a),d=[];S&&(a=N(G("%s%% translated"),
|
3 |
+
c.p.replace("%",""))+", "+a,k&&d.push(N(G("%s fuzzy"),k)),f&&d.push(N(G("%s untranslated"),f)),d.length&&(a+=" ("+d.join(", ")+")"));e("#loco-po-status").text(a)}function $(c,a,k){function f(d,c,b){b=b||G("Unknown error");W(b,G("Error"),"error");k&&k(d,c,b)}return e.ajax({url:aa,type:c.method,data:e(c).serialize(),dataType:"json",error:f,success:function(c,g,b){!c||c.error?f(b,g,c&&c.error&&c.error.message):a&&a(c,g,b)}})}var s=function(){var c={};return{register:function(a,e){c[a]=e},require:function(a,
|
4 |
+
e){var f=c[a];if(!f)throw Error('CommonJS error: failed to require("'+e+'")');return f}}}();s.register("$1",function(c,a,e){Array.prototype.indexOf||(Array.prototype.indexOf=function(c){if(null==this)throw new TypeError;var d,a=Object(this),b=a.length>>>0;if(0===b)return-1;d=0;1<arguments.length&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&Infinity!=d&&-Infinity!=d&&(d=(0<d||-1)*Math.floor(Math.abs(d))));if(d>=b)return-1;for(d=0<=d?d:Math.max(b-Math.abs(d),0);d<b;d++)if(d in a&&a[d]===c)return d;return-1});
|
5 |
+
return c}({},u,A));s.register("$16",function(c,a,e){function f(m){b||a._gat&&(b=_gat._createTracker(d,"loco"));if(b){var l=m.shift();b[l].apply(b,m)}else g&&g.push(m);return c}var d,g,b;c._init=function(b){if(d=b.code){g=a._gaq||(a._gaq=[]);g.push(["_setAccount",d]);g.push(["_trackPageview"]);g.push(["_setDomainName",b.host]);b=e.createElement("script");b.type="text/javascript";b.async=!0;b.src=("https:"==e.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js";var l=e.getElementsByTagName("script")[0];
|
6 |
+
l.parentNode.insertBefore(b,l)}return c};c.event=function(b,c,a,h){return f(["_trackEvent",b||"",c||"",a||"",h||0])};c.page=function(b,c){return f(["_trackPageview",{page:b||location.pathname+location.hash,title:c||e.title}])};return c}({},u,A));s.register("$17",function(c,a,e){function f(b,m){if(d)d[b](m);else a.ga&&ga(b,m);return c}var d,g;c._init=function(b){b.code&&(function(b,c,a,h,d,p,g){b.GoogleAnalyticsObject=d;b[d]=b[d]||function(){(b[d].q=b[d].q||[]).push(arguments)};b[d].l=1*new Date;p=
|
7 |
+
c.createElement(a);g=c.getElementsByTagName(a)[0];p.async=1;p.src=h;g.parentNode.insertBefore(p,g)}(a,e,"script","//www.google-analytics.com/analytics.js","ga"),ga("create",b.code,{alwaysSendReferrer:!0}),b.custom&&f("set",b.custom),c.page(),ga(function(b){d=b}));return c};c.event=function(b,c,a,d){return f("send",{hitType:"event",eventCategory:b||"",eventAction:c||"",eventLabel:a||"",eventValue:Number(d||0)})};c.page=function(b,c){var a={hitType:"pageview",page:b||location.pathname+location.hash,
|
8 |
+
title:c||e.title};a.location=location.protocol+"//"+location.hostname+a.page;g&&f("set",{referrer:g});g=a.location;return f("send",a)};c.reset=function(){g=location.href;f("set",{page:location.pathname+location.hash,title:e.title,location:g});return c};return c}({},u,A));s.register("$8",function(c,a,k){function f(b,a){e(b).click(function(b){d&&d.event(a,"click",this.getAttribute("href")||"");return!0});b=null;return c}var d,g=location.hostname;c.init=function(b){!d&&b&&(g=b.host||(b.host=g),d=b.legacy?
|
9 |
+
s.require("$16","legacy.js"):s.require("$17","universal.js"),d._init(b));return c};c.link=function(b){for(var a=b.getAttribute("href");a&&"#"!==a;){if(0===a.indexOf("#"))return f(b,"anchor");if(0===a.indexOf("http")||0===a.indexOf("//")){if(-1!==a.indexOf(g)&&/^(https?:)*\/\/([^\/]+)/.exec(a)&&g===RegExp.$2)break;b.setAttribute("target","_blank");f(b,"external")}break}return c};c.page=function(){d&&d.page.apply(d,arguments);return c};c.event=function(){d&&d.event.apply(d,arguments);return c};c.reset=
|
10 |
+
function(){d&&d.reset&&d.reset();return c};return c}({},u,A));s.register("$22",function(c,a,k){function f(b,c,a,d,h){function v(){t&&clearTimeout(t);f&&f.fadeOut(400,function(){e(this).remove();f=null});return!1}function p(){n();-1!==d&&(t=setTimeout(v,d||2E3));f.unbind("mouseleave");f.mouseenter(n)}function n(){t&&clearTimeout(t);t=null;f.unbind("mouseenter");f.mouseleave(p)}var t;g||(g=k.createElement("div"),g.id="growls",k.body.appendChild(g));var f=e('<div class="growl growl-'+a+'"><div><a class="close" href="#"><span>X</span></a><span class="badge"></span><p class="message"></p><small class="caption"></small></div></div>');
|
11 |
+
f.find("p").text(b||"Empty message");c?f.find("small").text(c):f.find("small").remove();if(h.length){h.push({label:"Cancel",callback:v,css:"cancel"});var z,B=e('<form action="#" class="dialog"></form>');c=function(b,h){z=e('<input type="button" value="'+h.label+'" class="butt '+(h.css||"")+'" />');z.click(function(b){"function"===typeof h.callback&&h.callback(b,{close:v})});B.append(z);return z};for(b=0;b<h.length;b++)c(b,h[b]);f.append(B)}e(g).prepend(f.hide().fadeIn(400));f.find("a").click(v);p()}
|
12 |
+
var d,g;c.init=function(){if(!d)return d=a.alert,a.alert=function(b){b=String(b).split("\n");var a=b[1]&&b.slice(1).join("\n");c.alert(b[0],a)},c};c.debug=function(b){d(b);return c};c.alert=function(b,c,g,e,h){try{return f(b,c||"",g||"alert",e||4E3,h||[]),!0}catch(v){return b+="\n\n--\n"+(v.message||v),d.call(a,b),!1}};c.success=function(b,a,d){return c.alert(b,a,"success",d||2E3)};c.dialog=function(b,a,d,g){return c.alert(b,a,g||"alert",-1,d)};c.login=function(b,a,d,g){c.dialog(a||"You're not logged in",
|
13 |
+
d||"Please log in to continue",[{label:g||"Log in",callback:function(h,c){location.assign(b||"/session/auth/login?r="+encodeURIComponent(location.href))}}])};return c}({},u,A));s.register("$19",function(c,a,k){function f(b){return 27===b.keyCode&&p&&n?(J(),b.preventDefault(),!1):!0}function d(h){if(p){var c=Math.max(b.height(),m.outerHeight(!0));c&&r.css("height",c+"px");h&&(q=e(a).innerWidth(),D(w))}return!0}function g(b){b?(h.show(),l.addClass("has-title")):(h.hide(),l.removeClass("has-title"))}
|
14 |
+
var b,m,l,r,h,v,p=!1,n=!1,t=!1,E,z,B,q,w,y=c.init=function(){if(!b){b=e('<div id="overlay"></div>');m=e('<div class="overlay-frame"></div>');l=e('<div class="overlay-container"></div>');h=e('<div class="overlay-title"><span class="title">Untitled</span></div>');v=e('<a class="overlay-close" href="#"><span>x</span></a>');r=e('<div class="overlay-bg"></div>');b.append(m.append(l)).append(r).prependTo(k.body);e(k).bind("keydown",f);e(a).resize(d);B=l.outerWidth(!0)-l.width()+(m.innerWidth()-m.width());
|
15 |
+
l.outerHeight(!0);l.outerHeight(!1);m.innerHeight();m.height();q=e(a).innerWidth();E=parseInt(l.css("width"));if(!E||isNaN(E))E=l.width();z=parseInt(l.css("height"));if(!z||isNaN(z))z=l.height();h.append(v.hide()).hide().prependTo(m);b.hide()}return b},D=c.width=function(h){y();if(null===h)m.css("width",""),l.css("width","");else{h=h||E||640;x=h+B;w=h;var a=q;x>a?(x=a,h=x-B,b.addClass("spill")):b.removeClass("spill");m.css("width",x+"px");l.css("width",h+"px")}return c};c.autoSize=function(){y();
|
16 |
+
d();var b=E||0;l.children().each(function(h,c){b=Math.max(b,e(c).outerWidth(!0))});D(b);return c};c.css=function(b){y().attr("class",b);return c};c.html=function(b){y();a.innerShiv&&(b=innerShiv(b,!1));return l.html(b)};c.append=function(b){y();b instanceof jQuery||(b=e(b));l.append(b);return c};var J=c.close=function(h){if(p){var a=function(){y().hide();e(k.body).removeClass("has-overlay");p=!1;l.html("");p=null;b.trigger("overlayClosed",[c])};null==h&&(h=300);h?b.fadeOut(h,a):a()}return c};c.title=
|
17 |
+
function(b){y();t=b||"";h.find("span.title").text(t);null!=b?g(!0):n||g(!1);return c};c.enableClose=function(){y();n=!0;v.unbind("click").bind("click",function(b){J();return!1});g(!0);v.show();return c};c.disableClose=function(){y();n=!1;v.hide();p&&t||g(!1);return c};c.open=function(){y();l.html("");D(E);b.attr("class","");e(k.body).addClass("has-overlay");y().show();p=!0;d();c.title(null);n&&g(!0);b.trigger("overlayOpened",[c]);return c};c.listen=function(b){y().bind("overlayClosed",b);return c};
|
18 |
+
c.unlisten=function(b){y().unbind("overlayClosed",b);return c};return c}({},u,A));s.register("$18",function(c,a,k){var f={401:"You've been logged out",404:"Not Found",500:"Server Error",502:"Bad Gateway",503:"Service unavailable",504:"Gateway timeout"};c.getErrors=function(){return f};c.jsonLink=function(c){if(!c)return"";c=c.split("?");c[0]=c[0].replace(/(\.[a-z0-9]{1,4})?$/i,".json");return c.join("?")};c.errorData=function(c,a,b){var m,l;b=c.responseText;a=c.status;if(!b&&0===a)return null;try{m=
|
19 |
+
e.parseJSON(b)||{}}catch(r){m={},l=r.message||r}l||(l=m.statusText||c.statusText||f[a]||"Unknown Error");m.error=l;return m};c.ajax=function(d,g,b,m){function l(){b&&b()}function f(b){b.alert&&alert(b.alert);var h=b.success;h&&s.require("$22","growl.js").success.apply(this,h.push?h:[h]);h=m||e(k.body);h.trigger("locoAjaxSuccess",[b]);var c=b.events;if(c&&c.length)for(var d,g=s.require("$8","ga.js");d=c.shift();)h.trigger(d,[b]),g.event("ajax",d);b.modal&&s.require("$10","LocoModal.js").replace(b.modal);
|
20 |
+
if(b.download)a.location.assign(b.download);else if(b.redirect)return a.location.assign(b.redirect),!1;l();return!0}function h(b,h,a){401===b.status?(s.require("$22","growl.js").login(),l()):(h=c.errorData(b,h,a),null!=h&&(a=h.error,"function"===typeof g&&!1===g(null,a,b.status)?l():h&&h.data&&!f(h.data)||(alert(a||"Unknown error"),l())))}d.error=h;d.success=function(b,c,a){if(!b)return h(a,"unknown");b.status&&alert(b.statusText||"Unknown error");"function"===typeof g&&!1===g(b&&b.data?b.data:b)?
|
21 |
+
l():b&&b.data?f(b.data):l()};e.ajax(d)};return c}({},u,A));s.register("$10",function(c,a,k){function f(b,c){g.autoSize();var a=g.init();s.require("$2","html.js").init(a);a.find("[data-script]").each(function(b,h){h=e(h);for(var a=-1,d,p=h.attr("data-script").split(" ");++a<p.length;)d=p[a],m[d]?m[d](h,c||{}):alert("Unknown script "+d)});a.trigger("locoModalLoaded",[g,b||"",c||{}]);var d,l=a.find("form")[0];if(l)a:for(a=0;a<l.elements.length;a++)switch(d=l.elements[a],d.type){case "text":case "email":case "textarea":e(d).focus();
|
22 |
+
break a}}function d(b){var a=e(b.currentTarget),c=a.attr("data-modal");if("close"===c){r();var d=a.attr("href");if(d&&-1!==d.indexOf("#!"))return!0}else{var m="submit"===b.type,f=a.attr("title")||a.attr("data-title"),d=a.attr("href")||a.attr("action"),z=m?a.serialize():"",a=m?a.attr("method"):"get";l(d,f,a,z);c||(c=d.split("/").slice(1,4).join("-"));c="modal "+c;g.width(null).css(c).autoSize()}b.stopPropagation();b.preventDefault();return!1}var g=s.require("$19","overlay.js"),b=s.require("$8","ga.js"),
|
23 |
+
m={},l=c.load=function(h,a,d,m){g.open().title("Loading ..").disableClose().css("modal").html('<div class="overlay-placeholder"></div>');var l=s.require("$18","http.js");d={type:d||"get",data:m||"",url:l.jsonLink(h)};l.ajax(d,function(c,d,m){var p=c&&c.html;if(!p)return c=e('<h3 class="error"></h3>').text(d||"Unknown error"),g.enableClose().title("Error "+m||"?").html("").append(c),!1;a=c.title||a||"Untitled";g.enableClose().title(a).html(p);f(h,c.js);b.page(h,a);g.init().one("overlayClosed",function(){b.reset()});
|
24 |
+
return!0});return c},r=c.close=function(){g.close();return c};c.initLink=function(b){b.click(d)};c.initForm=function(b){e(b).submit(d)};c.replace=function(b){var a=b&&b.html,c=b&&b.url,d=b&&b.title;c?(l(c,d),b=b&&b.css||c.split("/").slice(1,4).join("-"),g.width(null).css(" modal "+b).autoSize()):a&&(g.open().html(a),d&&g.enableClose().title(d),f("",b&&b.js))};c.find=function(b){return g.init().find(b)};c.script=function(b,a){if(a){if("function"!==typeof a.run)throw Error(b+" macro has no run function");
|
25 |
+
m[b]=a.run;return c}return m[b]};return c}({},u,A));s.register("$12",function(c,a,k){function f(b){b.stopPropagation();b.preventDefault();return!1}function d(b,a,c){if(c=c||b.getElement(a))c.unbind().mouseup(function(c){c.stopPropagation();b.selectIndex(a,!0);return!1}).mouseover(function(){e(this).addClass("over");b.hover=a;return!0}).mouseout(function(){e(this).removeClass("over");b.hover=-1;return!0}),c=null;return b}function g(b){if(b){var a=this,c=b[0];a.id=c.id||"";a.name=c.name||"";a.prefix=
|
26 |
+
c.getAttribute("data-prefix");a.defaultIcon=c.getAttribute("data-icon")||"jshide";var d=c.selectedIndex,h=[],g,p,n;for(p=0;p<c.options.length;p++)g=c.options[p],n=g.disabled,g=e(g),h.push([g.val(),g.text(),g.attr("data-icon")||"",n]);a.hidden=e('<input type="hidden" name="'+a.name+'" value="" />').appendTo(c.form);a.list=e('<ul class="clearfix"></ul>');a.icon=e('<span class="icon"> </span>');a.selection=e('<span class="label"></span>');a.handle=e('<a class="handle" href="#"></a>').attr("tabindex",
|
27 |
+
b.attr("tabindex")||"").append(a.icon).append(a.selection);a.wrapper=e("<div></div>").addClass(c.className).addClass("selector").append(a.handle).append(a.list).replaceAll(c);this.id&&a.wrapper.attr("id",this.id);for(a.clearOptions();g=h.shift();)a.addOption.apply(a,g);a.handle.click(function(b){b.preventDefault();return!1}).mouseover(function(b){return a.onRollover(b)}).mouseout(function(b){return a.onRollout(b)}).mousedown(function(b){return a.onPress(b)}).keydown(function(b){return a.onKeydown(b)});
|
28 |
+
e(k.body).mouseup(function(b){return a.onRelease(b)}).keydown(function(b){return a.onGlobalKeydown(b)});a.close();a.selectIndex(d)}}c.create=function(b){return new g(b)};c.extend=function(b){b.prototype=new g};a=g.prototype;a.onRollover=function(b){return this.over=!0};a.onRollout=function(b){this.over=!1;return!0};a.onPress=function(b){return this.active?this.over?(this.close(),b.stopPropagation(),b.preventDefault(),!1):!0:(this.open(),b.stopPropagation(),b.preventDefault(),this.handle.focus(),!1)};
|
29 |
+
a.onRelease=function(b){this.active&&!this.over&&this.close();return!0};a.onGlobalKeydown=function(b){if(this.active)switch(b.keyCode){case 27:return this.close(),f(b);case 40:return this.hoverNext(1),f(b);case 38:return this.hoverNext(-1),f(b);case 13:if(-1!=this.hover)return this.selectIndex(this.hover,!0),this.hoverItem(-1),this.close(),f(b)}return!0};a.onKeydown=function(b){return this.active||40!==b.keyCode?!0:(this.open(),f(b))};a.open=function(){this.active=!0;this.hover=-1;this.wrapper.addClass("active");
|
30 |
+
var b=this.handle.outerHeight()||0;this.list.show().css("top",b+"px");var b=this.handle.outerWidth()||0,a=this.list.outerWidth()||0;b>a&&(a-=this.list.width(),this.list.css("min-width",String(b-a)+"px"))};a.close=function(){this.list.hide();this.active=!1;-1!==this.hover&&(this.getElement(this.hover).removeClass("over"),this.hover=-1);this.wrapper.removeClass("active")};a.hoverItem=function(b,a){-1!==this.hover&&this.getElement(this.hover).removeClass("over");this.hover=b;-1!==b&&(a=a||this.getElement(b),
|
31 |
+
a.addClass("over"))};a.hoverNext=function(b){var a=this.options.length;if(a){a-=1;if(-1==this.hover)b=0<b?0:a;else{b=this.hover+b;if(0>b){this.close();return}b>a&&(b=0)}this.hoverItem(b)}};a.enableChange=function(b){this.eventName=b;this.eventData=[].slice.call(arguments,1);return this};a.clearOptions=function(){this.index={};this.length=0;this.options=[];this.list.html("");this.hidden.val("");this.idx=this.hover=-1;return this};a.addOption=function(b,a,c,g){var h=this.options.length,f=e("<span></span>").addClass(c||
|
32 |
+
"jshide"),p=e('<span class="label"></span>').text(a||b),f=e("<li></li>").append(f).append(p).appendTo(this.list);f.attr("data-option",h);this.options[h]={value:b,text:a,icon:c};this.index[b]=h;this.length=h+1;g?this.disableIndex(h):d(this,h,f);return h};a.disableOption=function(b){return this.disableIndex(this.index[b])};a.disableIndex=function(b){(b=this.getElement(b))&&b.addClass("disabled").unbind();return this};a.enableOption=function(b){return this.enableIndex(this.index[b])};a.enableIndex=function(b){return d(this,
|
33 |
+
b)};a.reIndex=function(){this.index={};this.length=0;for(var b=this.options.length;-1<--b;)this.index[this.options[b].value]=b,this.length++};a.selectValue=function(b,a){return this.selectIndex(this.index[b],a)};a.selectIndex=function(b,a){var c=this.options[b];c&&(this.hidden.val(c.value),b!==this.idx&&(this.idx=b,this.setLabel(c.text),this.icon.attr("class",c.icon||this.defaultIcon),a&&this.change()),this.active&&this.close());return this};a.setLabel=function(b){this.selection.text(b);this.prefix&&
|
34 |
+
this.selection.prepend(e('<span class="prefix"></span>').text(this.prefix))};a.val=function(){var b=this.options[this.idx];return b&&b.value};a.change=function(){var b=this.eventName||"change",a=this.eventData&&this.eventData.slice()||[];a.unshift(this.val());this.wrapper.trigger(b,a);return this};a.renameOption=function(b,a){var c=this.index[b],d=this.options[c];d&&(d.text=a,this.getElement(c).find("span.label").text(a),c===this.idx&&this.setLabel(a));return this};a.removeOption=function(b){var a=
|
35 |
+
this.index[b],c=this.options[a];c&&(b=this.val(),this.getElement(a).remove(),this.options.splice(a,1),this.reIndex(),b===c.value?this.selectIndex(0,!0):this.selectValue(b,!1))};a.getElement=function(b){return this.list.find("li").eq(b)};a=null;return c}({},u,A));s.register("$20",function(c,a,e){function f(b){d&&(b=g[b]||b);return b}var d=navigator.msPointerEnabled,g={touchstart:"MSPointerDown",touchmove:"MSPointerMove",touchend:"MSPointerUp"};c.bind=function(b,a,d){b=f(b);a.addEventListener&&a.addEventListener(b,
|
36 |
+
d,!1);return c};c.unbind=function(b,a,d){b=f(b);a.removeEventListener&&a.removeEventListener(b,d,!1);return c};return c}({},u,A));s.register("$13",function(c,a,k){function f(){m&&clearTimeout(m);m=null}function d(b){b.preventDefault();b.stopPropagation();return!1}var g,b,m,l=100,r=100,h=!1,v=!1,p;c.delays=function(b,a){l=b||0;r=a||0};c.kill=function(){b&&b.hide().stop().remove();b=null;g&&g.hide().html("")};c.text=function(a){b&&b.find("label.tip").text(a)};c.init=function(n){function t(){g||(g=e('<div id="tipholder"></div>').appendTo(k.body));
|
37 |
+
return g}function E(){f();y?m=setTimeout(z,y):z()}function z(){f();h||v||q()}function B(){f();b&&(b.stop(),b.remove());var a=n.offset();b=J.clone();t().show().append(b);var c=Math.round(a.left),a=Math.round(a.top);b.hasClass("tooltip-right")&&(c-=b.outerWidth(!1),c+=n.outerWidth(!1));a=b.hasClass("tooltip-top")?a-b.outerHeight():a+n.outerHeight();t().css("left",c+"px").css("top",a+"px");b.mouseenter(function(){h=!0;return!1}).mouseleave(function(){h=!1;E();return!0});Boolean(b.find("form").length|
|
38 |
+
b.find("a").length)||b.click(w);n.trigger("tooltipOpen",[b])}function q(){function a(){c.kill()}b?b.fadeOut(500,a):a();n.trigger("tooltipClose",[b])}function w(){!1!==n.triggerHandler("click")&&C&&(location.href=C);return!1}var y=Number(n.attr("data-hide-delay")||r),D=Number(n.attr("data-show-delay")||l),J=n.find("div.tooltip"),F=n.attr("title");if(!J.length){if(!F)return;J=e('<div class="tooltip"></div>').append(e('<label class="tip"></label>').text(F));n.hasClass("hastip-top")&&J.addClass("tooltip-top");
|
39 |
+
n.hasClass("hastip-right")&&J.addClass("tooltip-right");n.prepend(J)}F&&(n.attr("data-title")&&J.children("label.tip").text(F),n.attr("data-title",F),n.attr("title",""));var C=n.attr("href");"#"===C&&(C="");F=s.require("$20","touch.js").bind("touchstart",n[0],d).bind("touchmove",n[0],d).bind("touchend",n[0],function(b){setTimeout(w,300);return d(b)});null==p&&(p=!1,F.bind("touchstart",a,function(){return p=!0}).bind("touchend",a,function(){setTimeout(function(){p=!1},300);return!0}));n.mouseover(function(){p||
|
40 |
+
(v=!0,f(),b?B():D?m=setTimeout(B,D):B());return!0}).mouseout(function(){p||(v=!1,E());return!0});C&&n.click(function(){v=!1;q();return!0})};return c}({},u,A));s.register("$2",function(c,a,k){var f=a.ieVersion;c.ie=function(a){return a?f<=a:f};var d=c.init=function(a){a?a instanceof jQuery||(a=e(a)):a=e(k.body);var b=s.require("$8","ga.js"),m=s.require("$9","forms.js"),l=s.require("$10","LocoModal.js"),r=s.require("$11","LocoAutoComplete.js"),h=s.require("$12","LocoSelector.js"),v=s.require("$13",
|
41 |
+
"tooltip.js");a.find("form").each(function(b,a){var c=e(a);f&&10>f&&m.placeholders(c);a.getAttribute("data-modal")?l.initForm(a):a.action&&0!==a.action.indexOf("#")&&!a.target&&m.jsonify(a);c.hasClass("hasreveal")&&m.revealify(c);c.find("input.button").each(function(b,a){m.linkify(a)});c.find("input.auto-comp").each(function(b,a){r.init(a)});c.find("select.selector").each(function(b,a){h.create(e(a))})});a.find("a").each(function(a,h){-1!==h.className.indexOf("hastip")&&v.init(e(h));if(-1!==h.href.indexOf("/modal/")||
|
42 |
+
h.getAttribute("data-modal"))l.initLink(e(h));else{b.link(h);var g=h.getAttribute("data-ajax-target");g&&(g=e("#"+g),e(h).click(function(b){b.preventDefault();g.addClass("loading");e.get(h.href,function(b){b=c.$(b).replaceAll(g);d(b);b.trigger("locoAhah")});return!1}))}});m=l=r=a=null;return c};c.$=function(c){return e(a.innerShiv?innerShiv(c,!1):c)};e.fn._html=function(c){return null!=c?(c=this.html(a.innerShiv?innerShiv(c,!1):c),d(this),c):j.html()};e.fn.macro=function(a,b){if("function"!==typeof a.run)throw Error("macro has no run function");
|
43 |
+
a.run(this,b||{});return this};c.el=function(a,b){var c=k.createElement(a||"div");b&&(c.className=b);return c};c.txt=function(a){return k.createTextNode(a||"")};return c}({},u,A));s.register("$6",function(c,a,k){var f=s.require("$2","html.js").ie()?["keyup","paste"]:["input"];c.listen=function(a,c){function b(){n[v?"show":"hide"]()}function m(){a.value!==v&&(r&&clearTimeout(r),v=a.value,p&&a.setAttribute("size",v.length||1),b(),r=setTimeout(function(){c(v)},h))}function l(){m();return!0}a=a instanceof
|
44 |
+
jQuery?a[0]:a;for(var r,h=150,v=a.value,p=1===Number(a.size),n=e('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').click(function(b){a.value="";m();return!1}),t=-1,E=e(a);++t<f.length;)E.bind(f[t],l);E.after(n);b();t=E=null;return{ping:m,val:function(c){if(null==c)return v;r&&clearTimeout(r);a.value=v=c;b()}}};return c}({},u,A));s.register("$4",function(c,a,e){function f(){var a,c;this.clear=function(){this.length=0;a={};c=[]};this.getTree=function(){return a};this.getData=
|
45 |
+
function(){return c};this.clear()}c.create=function(){return new f};a=f.prototype;a.depth=0;a.matchall=!0;a.ignorecase=!0;a.nonword=/[\-.?!;:,_*^+=~`"'(){}<>[\]\/\\\u00a0\u1680\u180e\u2000-\u206f\u2e00-\u2e7f\u3000-\u303f]+/g;a.translit=function(a,c){function b(b){return a[b]||b}c=c||/[^a-z0-9]/g;this.trans=function(a){return a.replace(c,b)}};a.stoppers=function(a){this.stopped=function(c){return Boolean(a[c])}};a.add=function(a,c){null==c&&(c=String(a));var b=-1,e,f,r,h,v,p=this.normalize(c);e=this.getData();
|
46 |
+
var n=e.length;e.push(a);for(this.length++;++b<p.length;)if(e=p[b],!this.stopped(e)){f=this.getTree();r=Math.min(e.length,this.depth)||e.length;for(h=0;h<r;h++)v=e.charAt(h),f=f[v]||(f[v]={});e=f[" "]||(f[" "]=[]);e.push(n)}return this};a.find=function(a,c){function b(a,c){var h,d,e;for(p in a)if(e=a[p]," "===p)for(h in e)n=e[h],d=t[n]||(t[n]={length:0,words:{}}),d.length+=d.words[c]?0:1,d.words[c]=1+(d.words[c]||0);else b(e,c)}var e=-1,f,r,h,v,p,n,t={},E=[],k=this.normalize(a),B=this.getData();a:for(;++e<
|
47 |
+
k.length;){f=k[e];r=this.getTree();h=Math.min(f.length,this.depth)||f.length;for(v=0;v<h;v++){p=f.charAt(v);if(!r[p])continue a;r=r[p]}b(r,f)}for(n in t)this.matchall&&t[n].length<k.length||E.push(B[n]);c&&(c.query=a,c.words=k);return E};a.normalize=function(a){for(var c=-1,b={},e=[],f=this.split(a);++c<f.length;)if(a=f[c])if(this.ignorecase&&(a=a.toLowerCase()),a=this.strip(a))this.trans&&(a=this.trans(a)),b[a]||(e.push(a),b[a]=!0);return e};a.stopped=function(a){return 1===a.length};a.split=function(a){return a.split(/\s+/)};
|
48 |
+
a.strip=function(a){return a.replace(this.nonword,"")};a=null;return c}({},u,A));s.register("$11",function(c,a,k){function f(a){this.url="/auto/"+a+".json?q=";this.dead={}}function d(){this.dict=s.require("$4","dict.js").create()}c.init=function(a){function b(){if("hint"!==F){var b=D.val()&&!(L&&L.val())&&null==w&&!k;ba[b?"addClass":"removeClass"]("error")}}function c(){u.show();var b=D.outerWidth(!1),a=D.outerHeight(!1),h=D.css("margin-top");h&&(h=parseInt(h),isNaN(h)||(a+=h));b-=2;u.css("top",a+
|
49 |
+
"px").css("width",b+"px");k=!0}function l(){u.hide();k=!1}function r(){u.html("");l();E=0;y=w=null}function h(a){r();var h;for(h=0;h<a.length;h++){var d=h,q=a[h],f=e('<span class="label"></span>').text(q.label),g=e('<div class="auto-comp-result"></div>'),w=void 0;for(w in q)g.attr("data-"+w,q[w]);q.icon&&g.append(e("<span></span>").attr("class",q.icon));g.append(f);v(d,g)}(E=a.length)?(B&&c(),p(0)):(p(null),b())}function v(b,a){u.append(a);a.click(function(c){c.stopPropagation();p(b,a);t();return!1});
|
50 |
+
return a}function p(b,a){y&&(y.removeClass("selected"),y=null);w=null;null==b?L&&L.val(""):(a||(a=u.find("div.auto-comp-result").eq(b)),a.length&&(a.addClass("selected"),w=b,y=a))}function n(b){if(E){var a=E-1;null==w?b=0<b?0:a:(b=w+b,0>b?b=a:b>a&&(b=0));return p(b)}}function t(){if(null==w)A.val(""),L&&L.val("");else{var a=u.find("div.auto-comp-result").eq(w),c=a.attr("data-value"),h=a.attr("data-label");L&&L.val(c);A.val(h);l();a=a.clone();r();v(0,a);E=1;p(0,a);b();a.trigger("locoAutocomp",[c,h,
|
51 |
+
a])}}var E=0,k=!1,B=!1,q=a.form,w=null,y=null,D=e(a),J=D.attr("name"),F=D.attr("data-mode"),C=D.attr("data-provider"),L="hint"!==F&&e('<input type="hidden" value="" name="'+J+'" />').appendTo(q),ba=e('<div class="auto-comp-wrap"></div>').replaceAll(D),u=e('<div class="auto-comp-drop"></div>');C&&(C=new f(C));L&&D.attr("name","_"+J);D.attr("autocomplete","off");ba.append(D).append(u);l();D.focus(function(b){B=!0;1<E&&c()}).blur(function(a){B=!1;b()}).keydown(function(b){function a(){b.preventDefault();
|
52 |
+
b.stopPropagation();return!1}switch(b.keyCode){case 27:k&&(b.stopPropagation(),l(),D.blur());break;case 40:E&&(k?n(1):c());break;case 38:k&&n(-1);break;case 13:if(k)return t(),a();if(!w&&"hint"!==F)return a()}return!0});var A=s.require("$6","LocoTextListener.js").listen(D,function(b){C&&C.fetch(b,h)});(q=D.attr("data-pre"))&&(q=e.parseJSON(q))&&q.value&&q.label?(h([q]),t()):!a.value||L&&L.val()||!C||C.fetch(a.value,function(b){h(b);t()});return{$:D,clear:r,reset:function(){r();D.val("");L&&L.val("");
|
53 |
+
A.ping()},preload:function(b){E&&r();C=new d;var a,c;for(a in b)c=b[a],C.add(c)},mode:function(b){F=b}}};f.prototype.fetch=function(a,b){if(!a)return b&&b([]),this;var c,d=this.dead;for(c in d)if(0===a.indexOf(c))return b&&b([]),this;c={dataType:"json",url:this.url+encodeURIComponent(a)};s.require("$18","http.js").ajax(c,function(c){var h=c&&c.results;h&&(b&&c.query&&c.query===a&&b(c.results),h.length||(d[a]=0));return!0});return this};d.prototype.add=function(a){var b=a.fulltext||a.label||a.value;
|
54 |
+
b&&this.dict.add(a,b)};d.prototype.fetch=function(a,b){if(!a)return b&&b([]),this;var c=this.dict.find(a);b(c)};return c}({},u,A));s.register("$9",function(c,a,k){function f(b){function a(){b.value===h&&(b.value="",d.removeClass("placeheld"));return!0}function c(){""===b.value&&(b.value=h,d.addClass("placeheld"));return!0}var d=e(b);if(!d.hasClass("auto-comp")){var h=d.attr("placeholder");if(h)return d.focus(a).blur(c),c(),{kill:function(){a();d.unbind("focus",a).unbind("blur",c)}}}}var d=c.enable=
|
55 |
+
function(b){function d(b,a){a.getAttribute("data-was-disabled")||(a.disabled=!1)}b.find(".button").removeClass("loading");b.find("input").each(d);b.find("select").each(d);b.find("textarea").each(d);a.attachEvent&&b.hasClass("has-placeholders")&&c.placeholders(b)},g=c.disable=function(a){function c(a,b){b.disabled?b.setAttribute("data-was-disabled","true"):b.disabled=!0}a.find(".button").addClass("loading");a.find("input").each(c);a.find("select").each(c);a.find("textarea").each(c)};c.jsonify=function(b,
|
56 |
+
c,f){b instanceof jQuery||(b=e(b));b.disable||(e.fn.disable=function(){g(this);return this},e.fn.enable=function(){d(this);this.placehold&&this.placehold();return this});var k="";b.find('[type="submit"]').click(function(a){a&&a.target&&a.target.name&&(k=encodeURIComponent(a.target.name)+"="+encodeURIComponent(a.target.value));return!0});b.submit(function(h){if(h&&h.isDefaultPrevented&&h.isDefaultPrevented()||f&&!1===f(h))return!1;var d=a.tinyMCE;d&&b.find("textarea.editor").each(function(a,b){var c=
|
57 |
+
d.get(b.id);c&&c.save()});var e=b.serialize();k&&(e&&(e+="&"),e+=k,k="");b.disable();var g=s.require("$18","http.js"),e={url:g.jsonLink(b.attr("action")),type:b.attr("method"),data:e};g.ajax(e,c,function(){b.enable()},b);h.preventDefault();h.stopPropagation();return!1});if(b.hasClass("autopost")){var h,v=Number(b.attr("data-autopost-delay")||500);b.find('input[type="checkbox"]').change(function(){h&&clearTimeout(h);h=setTimeout(function(){b.submit()},v);return!0})}};c.revealify=function(a){a.find("div[data-reveal-if]").each(function(c,
|
58 |
+
d){function f(a){var b;z=z||a.target;if("."===k)b=Boolean(z&&z[E]);else if("="===k){var c,d;b=e(z.form).serializeArray();for(d in b)b[d].name===n&&(c=b[d].value);b=E===c}if(b!==p)if(p=b,a)h[p?"slideDown":"slideUp"](200);else h[p?"show":"hide"]();return!0}var h=e(d),g=/^([_\w\-\[\]]+)(\.|=)(.+)$/.exec(h.attr("data-reveal-if"));if(g){var p,n=g[1],k=g[2],E=g[3],g=a[0][n];g.length||(g=[g]);var z;for(c=0;c<g.length;c++)z=g[c],f(),e(z).change(f).removeClass("jshide");g=g=z=null}});a=null};c.linkify=function(a){var c=
|
59 |
+
a.getAttribute("data-icon");if(c){var d=e(a),f=e("<a> </a>");f.attr("href",a.form.action);f.attr("class",d.attr("class"));f.attr("tabindex",d.attr("tabindex"));d.attr("tabindex","-1");f.text(d.val());c&&e("<span></span>").prependTo(f).addClass(c);d.hide().after(f);f.click(function(a){d.click();return!1})}};c.placeholders=function(a){var c,d=[];a.find("input[placeholder]").each(function(a,b){"password"!==b.type&&(c=f(b))&&d.push(c)});d.length&&(a.submit(function(){for(var a in d)d[a].kill()}),a.addClass("has-placeholders"),
|
60 |
+
c=i=null)};return c}({},u,A));s.register("$14",function(c,a,e){function f(a){this.reIndex([]);if(a)for(var c in a)this.add(c,a[c])}c.init=function(a){return new f(a)};a=f.prototype;a.reIndex=function(a){var c=-1;for(this.ords={};++c<a.length;)this.ords[a[c]]=c;this.keys=a;this.length=c};a.key=function(a,c){if(null==c)return this.keys[a];var b=this.keys[a],e=this.ords[c];if(c!==b){if(null!=e)throw Error("Clash with item at ["+e+"]");this.keys[a]=c;delete this.ords[b];this.ords[c]=a}return a};a.indexOf=
|
61 |
+
function(a){a=this.ords[a];return null==a?-1:a};a.add=function(a,c){var b=this.ords[a];null==b&&(this.keys[this.length]=a,b=this.ords[a]=this.length++);this[b]=c;return b};a.get=function(a){return this[this.ords[a]]};a.cut=function(a,c){var b=[].splice.call(this,a,c);this.keys.splice(a,c);this.reIndex(this.keys);return b};a.each=function(a){for(var c=-1;++c<this.length;)a(this.keys[c],this[c],c);return this};a=null;return c}({},u,A));s.register("$3",function(c,a,e){function f(a){return{"Project-Id-Version":"PACKAGE VERSION",
|
62 |
+
"Report-Msgid-Bugs-To":"","POT-Creation-Date":a||"","POT-Revision-Date":a||"","PO-Revision-Date":a||"","Last-Translator":"","Language-Team":"",Language:"","Plural-Forms":"","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-Poedit-SourceCharset":"UTF-8"}}function d(a,b){var c=a||"";b&&(c+="\x00"+b);return c}function g(){return s.require("$14","collection.js").init()}function b(a){if(!a)return'""';for(var b=a.replace("\r\n","\n").split("\n"),c=b.length-
|
63 |
+
1,d=[],e=-1,f;++e<b.length;){a=b[e];for(c&&c!==e&&(a+="\n");a&&a.charAt(79);){for(f=80;--f;)if(-1!==" \n\r.?!,;:-".indexOf(a.charAt(f))){f++;break}f||(f=79);d.push(m(a.substr(0,f)));a=a.substr(f)}a&&d.push(m(a))}d[1]&&d.unshift("");return'"'+d.join('"\n"')+'"'}function m(a){return a.replace(/(["\\])/g,"\\$1").replace(/\n/g,"\\n")}function l(a){this.head={};this.headers(f(this.now()));this.locale(a);this.length=0;this.rows=g()}function r(a,b){this.src=[a||""];this.msg=[b||""];this.ref=this.cmt="";
|
64 |
+
this.status=0}c.create=function(a){return new l(a)};a=l.prototype;a.now=function(){return(new Date).toString()};a.header=function(a,b){if(null==b)return this.headers()[a]||"";this.head[a]=b||"";return this};a.headers=function(a){var b;if(null!=a){for(b in a)this.head[b]=a[b];return this}var c=this.locale(),d=this.now();a={};for(b in this.head)a[b]=String(this.head[b]);c?(a.Language=c.label||"Unknown locale",a["Plural-Forms"]="nplurals="+(c.nplurals||"2")+"; plural="+(c.pluraleq||"n!=1"),a["X-Loco-Target-Locale"]=
|
65 |
+
(c.lang||"en")+"_"+(c.region||"GB"),a["PO-Revision-Date"]=d,delete a["POT-Revision-Date"]):(a.Language="",a["Plural-Forms"]="nplurals=INTEGER; plural=EXPRESSION",a["POT-Revision-Date"]=d,a["PO-Revision-Date"]="YEAR-MO-DA HO:MI+ZONE");a["X-Generator"]="Loco - https://localise.biz/";return a};a.locale=function(a){if(null==a)return this.loc;this.loc=a||{lang:"en",region:"GB",nplurals:2,pluraleq:"n == 1 ? 0 : 1",label:"English"};this.loc.toString=function(){return this.lang+"_"+this.region};return this};
|
66 |
+
a.lock=function(a){this.locale(a||!1);return this.loc};a.unlock=function(){var a=this.loc;this.loc=null;return a};a.reIndex=function(a,b){var c=this.indexOf(a),d=a.hash(),e=this.rows.indexOf(d);return e===c?c:-1!==e?(b=(b||0)+1,a.source("Error, duplicate "+String(b)+": "+a.source()),this.reIndex(a,b)):this.rows.key(c,d)};a.get=function(a,b){var c=d(a,b);return this.rows.get(c)};a.indexOf=function(a){null==a.idx&&(a.idx=this.rows.indexOf(a.hash()));return a.idx};a.del=function(a){a=this.indexOf(a);
|
67 |
+
if(-1!==a){var b=this.rows.cut(a,1);if(b&&b.length)return this.length=this.rows.length,this.rows.each(function(a,b,c){b.idx=c}),a}};a.add=function(a,b){a instanceof r||(a=new r(a));b&&a.context(b);var c=a.hash();if(this.rows.get(c))throw Error("Duplicate message at index "+this.indexOf(a));a.idx=this.rows.add(c,a);this.length=this.rows.length;return a};a.each=function(a){this.rows.each(a);return this};a.load=function(a){for(var b=-1,c,d,e,f,g=[],B=[],q=[],w=[];++b<a.length;)if(c=a[b],null==c.parent){if(d=
|
68 |
+
c.source||c.id,e=c.context,d||e)f=new r(d,c.target||""),e&&f.context(e),c.flag&&f.flag(c.flag,!0),c.comment&&f.comment(c.comment),c.refs&&f.location(c.refs),c.message=f,f.translation()?f.fuzzy()?q.push(f):B.push(f):w.push(f)}else g.push(c);for(b=-1;++b<g.length;)try{c=g[b];d=c.source||c.id;f=a[c.parent]&&a[c.parent].message;if(!f)throw Error("parent missing for plural "+d);1===c.plural&&f.plural(d);f.translate(c.target||"",c.plural)}catch(y){}d=[w,q,B];for(b=0;3>b;b++)for(c=d[b],a=-1;++a<c.length;)try{this.add(c[a])}catch(k){}return this};
|
69 |
+
a.merge=function(a){var b,c=this.rows,d=g(),e={add:[],del:[]};a=a.rows;this.rows.each(function(b,c){a.get(b)||e.del.push(c)});a.each(function(a,h){try{(b=c.get(a))?h.ref&&b.location(h.ref):(b=h,e.add.push(b)),b.idx=d.add(a,b)}catch(f){}});this.rows=d;this.length=d.length;return e};a.row=function(a){return this.rows[a]};a.toString=function(){var a,b=[],c=[],d=this.headers(),e=!this.loc;for(a in d)c.push(a+": "+d[a]);c=new r("",c.join("\n"));e&&(c.comment("Loco Gettext template"),c.fuzzy(!0));b.push(c.toString());
|
70 |
+
b.push("");this.rows.each(function(a,c){a&&(b.push(c.toString(e)),b.push(""))});return b.join("\n")};a=r.prototype;a.hash=function(){return d(this.source(),this.context())};a.flag=function(a,b){var c=a===(a&this.status);if(null==b)return c;b?this.status|=a:c&&(this.status^=a);return this};a.fuzzy=function(a){return this.flag(4,a)};a.source=function(a,b){if(null==a)return this.src[0];this.src[0]=a;this.plural(b);return this};a.plural=function(a){if(null==a)return this.src[1];this.src[1]=a||"";return this};
|
71 |
+
a.each=function(a){for(var b=-1;++b<this.msg.length;)a(b,this.msg[b]);return this};a.translate=function(a,b){this.msg[b||0]=a||"";return this};a.translation=function(a){return this.msg[a||0]||""};a.comment=function(a){if(null==a)return this.cmt;this.cmt=a||"";return this};a.location=function(a){if(null==a)return this.ref;this.ref=a||"";return this};a.context=function(a){if(null==a)return this.src[2]||"";this.src[2]=a||"";return this};a.toString=function(a){var c,d=[];this.cmt&&d.push("#. "+this.cmt.replace("\r\n",
|
72 |
+
"\n").split("\n").join("\n#. "));this.ref&&d.push("#: "+this.ref.replace("\r\n","\n").split("\n").join("\n#: "));!a&&this.fuzzy()&&d.push("#, fuzzy");this.src[2]&&d.push("msgctxt "+b(this.src[2]));d.push("msgid "+b(this.src[0]));if(null==this.src[1])d.push("msgstr "+b(a?"":this.msg[0]));else for(c=-1,d.push("msgid_plural "+b(this.src[1]));++c<this.msg.length;)d.push("msgstr["+c+"] "+b(a?"":this.msg[c]));return d.join("\n")};a.toText=function(){return this.src.join(" ")+" "+this.msg.join(" ")};a.weight=
|
73 |
+
function(){var a=0;this.translation()||(a+=2);this.fuzzy()&&(a+=1);return a};a.compare=function(a,b){var c=this.weight(),d=a.weight();if(c>d)return 1;if(c<d)return-1;if(b){c=this.hash().toLowerCase();d=a.hash().toLowerCase();if(c<d)return 1;if(c>d)return-1}return 0};a.equals=function(a){return this===a||this.source()===a.source()&&this.context()===a.context()};a=a=null;return c}({},u,A));s.register("$5",{"\u0131":"i","\u03b1":"a","\u03b2":"b","\u03c8":"c","\u03b4":"d","\u03b5":"e","\u03c6":"f","\u03b3":"g",
|
74 |
"\u03b7":"h","\u03b9":"i","\u03be":"j","\u03ba":"k","\u03bb":"l","\u03bc":"m","\u03bd":"n","\u03bf":"o","\u03c0":"p","\u03c1":"r","\u03c3":"s","\u03c4":"t","\u03b8":"u","\u03c9":"v","\u03c2":"s","\u03c7":"x","\u03c5":"y","\u03b6":"z","\u0444":"a","\u0438":"b","\u0441":"c","\u0432":"d","\u0443":"e","\u0430":"f","\u043f":"g","\u0440":"h","\u0448":"i","\u043e":"j","\u043b":"k","\u0434":"l","\u044c":"m","\u0442":"n","\u0449":"o","\u0437":"p","\u0439":"\ua647","\u043a":"r","\u044b":"s","\u0435":"t","\u0433":"u",
|
75 |
"\u043c":"v","\u0446":"w","\u0447":"x","\u043d":"y","\u044f":"z","\u00aa":"a","\u00e1":"a","\u00e0":"a","\u0103":"a","\u1eaf":"a","\u1eb1":"a","\u1eb5":"a","\u1eb3":"a","\u00e2":"a","\u1ea5":"a","\u1ea7":"a","\u1eab":"a","\u1ea9":"a","\u01ce":"a","\u00e5":"a","\u01fb":"a","\u00e4":"a","\u01df":"a","\u00e3":"a","\u0227":"a","\u01e1":"a","\u0105":"a","\u0101":"a","\u1ea3":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1eb7":"a","\u1ead":"a","\u1e01":"a","\ua733":"a","\u00e6":"a","\u01fd":"a","\u01e3":"a",
|
76 |
"\ua735":"a","\ua737":"a","\ua739":"a","\ua73b":"a","\ua73d":"a","\u1e9a":"a","\u2c65":"\u2c65","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"\u0180","\u0183":"\u0183","\u0107":"c","\u0109":"c","\u010d":"c","\u010b":"c","\u00e7":"c","\u1e09":"c","\u023c":"\u023c","\ua792":"\ua793","\u0188":"\u0188","\ua73f":"\ua73f","\u010f":"d","\u1e0b":"d","\u1e11":"d","\u1e0d":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u00f0":"d","\ua77a":"d","\u0238":"d","\u01f3":"d","\u01f2":"d","\u01c6":"d","\u01c5":"d",
|
105 |
"\u04ab":"\u04ab","\u2dee":"n","\ua68d":"\ua68d","\u050f":"\u050f","\u04ad":"\u04ad","\ua68b":"\ua68b","\u045b":"\u045b","\u045c":"\u045b","\ua677":"e","\u04ef":"e","\u045e":"e","\u04f1":"e","\u04f3":"e","\u04af":"\u04af","\u04b1":"\u04b1","\u2df9":"\ua64b","\ua64b":"\ua64b","\u0479":"\u0479","\u2def":"\u0445","\u0445":"\u0445","\u04fd":"\u04fd","\u04ff":"\u04ff","\u04b3":"\u04b3","\u04bb":"\u04bb","\u0527":"\u0527","\ua695":"\ua695","\ua67b":"\u0461","\u0461":"\u0461","\u047f":"\u047f","\ua64d":"\ua64d",
|
106 |
"\u047d":"\u047d","\u047b":"\u047b","\u2df0":"w","\ua661":"\ua661","\ua68f":"\ua68f","\u04b5":"\u04b5","\ua691":"\ua691","\u2df1":"x","\ua693":"\ua693","\u04f5":"\ua693","\u04b7":"\u04b7","\u04cc":"\u04cc","\u04b9":"\u04b9","\ua687":"\ua687","\u04bd":"\u04bd","\u04bf":"\u04bf","\u045f":"\u045f","\u2df2":"i","\ua697":"\ua697","\u2df3":"o","\ua64f":"\ua64f","\ua678":"\u044a","\u044a":"\u044a","\ua651":"\ua651","\ua679":"s","\u04f9":"s","\ua67a":"m","\u048d":"\u048d","\u2dfa":"\u0463","\u0463":"\u0463",
|
107 |
"\ua653":"\ua653","\u044d":"\u044d","\u04ed":"\u044d","\u2dfb":"\u044e","\u044e":"\u044e","\ua655":"\ua655","\u2dfc":"\ua657","\ua657":"\ua657","\u0519":"\u0519","\ua69f":"\u0465","\u0465":"\u0465","\u2dfd":"\u0467","\u0467":"\u0467","\ua659":"\ua659","\u2dfe":"\u046b","\u046b":"\u046b","\ua65b":"\ua65b","\u0469":"\u0469","\ua65d":"\ua65d","\u2dff":"\u046d","\u046d":"\u046d","\u046f":"\u046f","\u0471":"\u0471","\u2df4":"\u0473","\u0473":"\u0473","\u0475":"\u0475","\u0477":"\u0475","\ua65f":"\ua65f",
|
108 |
+
"\u04a9":"\u04a9","\u051d":"\u051d","\u04cf":"\u04cf"});s.register("$23",function(c,a,e){var f=a.requestAnimationFrame,d=a.cancelAnimationFrame,g=0;if(!f||!d)for(var b in{ms:1,moz:1,webkit:1,o:1})if(f=a[b+"RequestAnimationFrame"])if(d=a[b+"CancelAnimationFrame"]||a[b+"CancelRequestAnimationFrame"])break;f&&d||(f=function(b){var c=m();timeToCall=Math.max(0,16-(c-g));nextTime=c+timeToCall;timerId=a.setTimeout(function(){b(nextTime)},timeToCall);g=nextTime;return timerId},d=function(a){clearTimeout(a)});
|
109 |
+
var m=Date.now||function(){return(new Date).getTime()};c.loop=function(a,b){function c(){g=f(c,b);a(e++)}var e=0,g;c();return{stop:function(){g&&d(g);g=null}}};return c}({},u,A));s.register("$21",function(c,a,e){function f(a,c,d,e){if(b){var f=d;d=function(a){if((a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType)return f(a)}}a.addEventListener(c,d,e);return{unbind:function(){a.removeEventListener(c,d,e)}}}function d(a){a.preventDefault();a.stopPropagation();return!1}var g,b=!!a.navigator.msPointerEnabled,
|
110 |
+
m=b?"MSPointerDown":"touchstart",l=b?"MSPointerMove":"touchmove",r=b?"MSPointerUp":"touchend";c.ok=function(a){null==g&&(g="function"===typeof e.body.addEventListener);g&&a&&a(c);return g};c.ms=function(){return b};c.dragger=function(a,b){function c(b){a.addEventListener(b,f[b],!1)}function e(b){a.removeEventListener(b,f[b],!1)}var f={};f[m]=function(a){h(a,function(c,d){d.type=m;b(a,d,B)});c(l);c(r);return!0};f[r]=function(a){e(l);e(r);h(a,function(c,d){d.type=r;b(a,d,B)});return!0};f[l]=function(a){h(a,
|
111 |
+
function(c,d){d.type=l;b(a,d,B)});return d(a)};c(m);var B={kill:function(){e(m);e(l);e(r);a=B=b=null}};return B};c.swiper=function(a,c,e){function f(b){a.addEventListener(b,k[b],!1)}function g(b){a.removeEventListener(b,k[b],!1)}function B(){q&&q.stop();q=null}var q,w,y,k={},J=[],F=[],C=[];k[m]=function(b){w=!1;B();var c=v();h(b,function(a,b){J[a]=c;F[a]=b.clientX;C[a]=b.clientY});y=a.scrollLeft;return!0};k[r]=function(a){h(a,function(a,b){var d=v()-J[a],e=F[a]-b.clientX,d=Math.abs(e)/d;c(d,e?0>e?
|
112 |
+
-1:1:0)});y=null;return!0};k[l]=function(b){var c,e;null==y||h(b,function(a,b){c=F[a]-b.clientX;e=C[a]-b.clientY});if(e&&Math.abs(e)>Math.abs(c))return w=!0;c&&(w=!0,a.scrollLeft=Math.max(0,y+c));return d(b)};if(!b||e)f(m),f(l),f(r),b&&(a.className+=" mstouch");return{kill:function(){g(m);g(l);g(r);B()},swiped:function(){return w},ms:function(){return b},snap:function(c){b&&!e&&(a.style["-ms-scroll-snap-points-x"]="snapInterval(0px,"+c+"px)",a.style["-ms-scroll-snap-type"]="mandatory",a.style["-ms-scroll-chaining"]=
|
113 |
+
"none")},scroll:function(b,c,d){B();var e=a.scrollLeft,f=b>e?1:-1,h=Math[1===f?"min":"max"],g=Math.round(16*c*f);return q=s.require("$23","fps.js").loop(function(c){c&&(e=Math.max(0,h(b,e+g)),a.scrollLeft=e,b===e&&(B(),d&&d(e)))},a)}}};c.start=function(a,b){return f(a,m,b,!1)};c.move=function(a,b){return f(a,l,b,!1)};c.end=function(a,b){return f(a,r,b,!1)};var h=c.each=function(a,c){if(b)(a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType&&c(0,a);else for(var d=-1,e=(a.originalEvent||a).changedTouches||
|
114 |
+
[];++d<e.length;)c(d,e[d])},v=Date.now||function(){return(new Date).getTime()};return c}({},u,A));s.register("$15",function(c,a,k){function f(a,b){var c=a.id,d=c&&u[c],e=d&&d.parent();if(!d||!e)return null;var f=(c=e.dir===t)?"X":"Y",c=c?r:h,g=c(e.el),k=b["offset"+f];null==k&&(k=b["page"+f]-c(a));k&&(g+=k);return{move:function(a){e.resize(a["page"+f]-g,d);return!0}}}function d(a,b){function c(){e(k).unbind("mousemove",d);z=null;return!0}function d(a){z?z.move(a):c();return!0}if(z)return!0;z=f(a.target,
|
115 |
+
a);if(!z)return!0;e(k).one("mouseup",c).mousemove(d);return l(a)}function g(a,b){var c=b.type;"touchmove"===c?z&&z.move(b):"touchstart"===c?z=f(a.target,b):"touchend"===c&&z&&(z=null)}function b(a){var b=e(a.target).closest("div.wg-tr"),c=b.length&&b.closest("div.is-table");(c=c&&u[c.attr("id")])&&c.selectRow(Number(b.attr("data-row")));return l(a)}function m(a){var b=a.keyCode;if(b=40===b?1:38===b?-1:0){var c=e(a.target),d=c.data("row");if(-1<d&&(c=(c=c.closest("div.is-table"))&&u[c.attr("id")])){for(;!1===
|
116 |
+
c.selectRow(d+=b););return l(a)}}return!0}function l(a){a.stopPropagation();a.preventDefault();return!1}function r(a,b){b||(b=k.body);for(var c=a.offsetLeft||0;(a=a.offsetParent)&&a!==b;)c+=a.offsetLeft||0;return c}function h(a,b){b||(b=k.body);for(var c=a.offsetTop||0;(a=a.offsetParent)&&a!==b;)c+=a.offsetTop||0;return c}function v(a){function b(){var c=a.innerHTML;c!==d&&(d=c,e(a).trigger("wgChange",[c]));return!0}var c=n.ie()?["keyup","paste"]:["input"],d=a.innerHTML,f=d;return e(a).attr("contenteditable",
|
117 |
+
"true").focus(function(){for(var d=e(a),f=-1;++f<c.length;)d.bind(c[f],b);return!0}).blur(function(){for(var g=e(a),h=-1;++h<c.length;)g.unbind(c[h]);b();f!==d&&e(a).trigger("wgChanged",[a]);return!0})}function p(a){this.el=a;this.id=a.id;this.pos=this.index=0;this.css=["wg-cell"];u[a.id]=this;this.clear()}var n=s.require("$2","html.js"),t=1,u={},z=!1;c.init=function(a){var b=new p(a);b.restyle().redraw();b.root=!0;s.require("$21","touch.js").ok(function(b){b.dragger(a,g)});e(a).mousedown(d);return b};
|
118 |
+
a=p.prototype;a.each=function(a){for(var b=-1;++b<this.length;)a(b,this.cells[b]);return this};a.bind=function(){return this.$("bind",arguments)};a.unbind=function(){return this.$("unbind",arguments)};a.$=function(a,b){e.fn[a].apply(e(this.el),b);return this};a.parent=function(){return this.pid&&u[this.pid]};a.splitx=function(){return this._split(t,arguments)};a.splity=function(){return this._split(2,arguments)};a._split=function(a,b){this.dir&&this.dir!==a&&this.clear();this.dir=a;var c=-1,d,e=this.length,
|
119 |
+
f=b.length,g=1/(e+f),h=0;if(e)throw Error("Todo: implement re-split");for(;++c<f;){d=n.el();this.body.appendChild(d);for(var k=d,l=b[c],m=l,r=1;u[l];)l=m+"-"+ ++r;k.id=l;d=new p(d);d.index=e+c;d.pid=this.id;d.pos=h;h+=g;this.cells.push(d);this.length++}this.restyle().redraw();return this.cells};a.clear=function(){for(var a=-1,b;++a<this.length;)b=this.cells[a].clear(),delete u[b.id];this.cells=[];this.length=0;this.nav&&this.el.removeChild(this.nav);this.nav=null;this.body&&(this.field&&n.ie()&&(e(this.body).triggerHandler("blur"),
|
120 |
+
this.field=null),this.table&&(this.table=null),this.el.removeChild(this.body));this.body=this.el.appendChild(n.el("","wg-body"));return this};a.resize=function(a,b){if(!b&&(b=this.cells[1],!b))return;var c=b.index,d=e(this.el)[this.dir===t?"width":"height"](),f=this.cells[c+1],c=this.cells[c-1];pad=(b.body||b.el.firstChild).offsetTop||0;max=(f?f.pos*d:d)-pad;min=c?c.pos*d:0;b.pos=Math.min(max,Math.max(min,a))/d;(d=this.parent())&&d.table?d.redraw():this.redraw();return this};a.distribute=function(){for(var a,
|
121 |
+
b=0;b<arguments.length;)a=Math.max(0,Math.min(1,arguments[b++])),this.cells[b].pos=a;this.redraw();return this};a.restyle=function(){var a=this.css.slice();this.root&&a.push("wg-root");0===this.index?a.push("first"):a.push("not-first");this.dir&&(a.push("wg-split"),2===this.dir?a.push("wg-split-y"):a.push("wg-split-x"));this.t&&a.push("has-title");this.nav&&a.push("has-nav");this.table?a.push("is-table"):null!=this.field&&(a.push("is-field"),this.field||a.push("readonly"));this.el.className=a.join(" ");
|
122 |
+
return this};a.redraw=function(){if(this.body){var a=this.el.clientHeight||0,b=this.body.offsetTop||0;b<a&&(a-=b);this.body.style.height=String(a)+"px"}for(var a=this.length,c,d=1,f=2===this.dir?"height":"width";0<=--a;)b=this.cells[a],this.nav?c=1:(b.fixed&&(b.pos=b.fixed/e(this.el)[f]()),c=d-b.pos,d=b.pos),b.el.style[f]=String(100*c)+"%",b.restyle().redraw();this.table&&this.redrawTable();return this};a.redrawTable=function(){var a=-1,b=this.cells[0],c=this.cells[1],a=e(c.body).width(),d=c.body.firstChild,
|
123 |
+
c=d.childNodes;d.style.width=a+"px";for(var a=b.length,f=1;0<=--a;)d=b.cells[a],c[a].style.width=String(100*(f-d.pos))+"%",f=d.pos;return!0};a.contents=function(a){if(null===a)return this.body.innerHTML;this.cells.length?this.clear():this.body&&this.el.removeChild(this.body);this.body=this.el.appendChild(n.el("","wg-content"));"string"===typeof a?e(this.body)._html(a):this.append(a);this.redraw();return this};a.textarea=function(a,b){var c=n.txt(a);this.contents(c);(this.field=b)&&v(this.body);this.restyle();
|
124 |
+
return this};a.append=function(a){a.nodeType?n.init(this.body.appendChild(a)):n.init(e(a).appendTo(this.body));return this};a.header=function(a,b){if(!arguments.length)return this.el.getElementsByTagName("h2")[0];var c=["wg-title"];b&&c.push(b);this.t=n.txt(a||"");this.el.insertBefore(n.el("h2",c.join(" ")),this.body).appendChild(this.t);this.restyle().redraw();return this};a.title=function(a){this.t?this.t.nodeValue=a||"":this.header(a);return this.t};a.tabulate=function(a){var c=this.id,d=[],f=
|
125 |
+
[];rows=this.splity(c+"-thead",c+"-body");thead=rows[0];tbody=rows[1];thead.css.push("wg-thead");tbody.css.push("wg-tbody");a.eachCol(function(a,b){d.push(c+"-col"+a);f.push(b)});for(var g=-1,k,l=n.el("","wg-cols"),p=thead._split(t,d);++g<p.length;)k=p[g],k.header(f[g]),l.appendChild(n.el("","wg-col "+(0===g?"":"not-")+"first"));tbody.contents(l);a.eachRow(function(a,b,c){tbody._addRow(b,c)});e(tbody.el).mousedown(b);this.lock();this.table=a;this.restyle().redraw();k=thead.cells[0];tbody.fixed=h(k.body,
|
126 |
+
k.el)||20;this.resize(tbody.fixed);e(l).attr("tabindex","-1").keydown(m);return l};a.lock=function(){this.body.className+=" locked";return this};a.addRow=function(a,b){this.table&&this.cells[1]&&this.cells[1]._addRow(a,b);return this};a._addRow=function(a,b){var c,d=this.body.firstChild.childNodes,e=d.length,f=d[0].childNodes.length,g=-1;for(b=b&&"wg-tr "+b||"wg-tr";++g<e;)c=d[g].appendChild(n.el("",b)),c.setAttribute("data-row",f),c=c.appendChild(n.el("","wg-td")),a[g]&&/\S/.test(a[g])?c.appendChild(n.txt(a[g])):
|
127 |
+
c.innerHTML=" ";return d};a.tr=function(a){for(var b=-1,c,d=[],e=this.cells[1].body.firstChild.childNodes;++b<e.length;)(c=e[b].childNodes[a])&&d.push(c);return d};a.td=function(a,b){try{return this.cells[1].body.firstChild.childNodes[b].childNodes[a].firstChild}catch(c){return null}};a.selectRow=function(a,b){var c=this.table&&this.table.row(a);if(!c)return null;var d=this.tr(a);if(d.length){var d=e(d),f=this.cells[1],g=f.body,h=e(g.firstChild);if(h.hasClass("filtered")&&!d.hasClass("filtered"))return!1;
|
128 |
+
h.find("div.selected").removeClass("selected");d.addClass("selected");h.data("row",a);if(b)f.scrollTo(d[0],!0);else{var k=g.scrollTop;h.focus();k&&(g.scrollTop=k);f.scrollTo(d[0])}h.trigger("wgRowSelect",[a,c])}return this};a.deselectRow=function(){if(this.table){var a=e(this.cells[1].body.firstChild),b=a.data("row");a.find("div.selected").removeClass("selected");a.data("row",null);a.trigger("wgRowDeselect",[b])}};a.filterRows=function(a){var b=-1,c;c=e(this.cells[1].body.firstChild);if(!a)return c.removeClass("filtered"),
|
129 |
+
this;for(c.addClass("filtered").find("div.filtered").removeClass("filtered");++b<a.length;)c=a[b],c=this.tr(c),c.length&&e(c).addClass("filtered");return this};a.scrollTo=function(a,b){var c,d=this.body.scrollTop,f=this.body.clientHeight+d,g=h(a,this.body),k=g+e(a).outerHeight();d>g?c=g:f<k&&(c=k-this.body.clientHeight);null!=c&&(b?this.body.scrollTop=c:e(this.body).animate({scrollTop:c},300));return this};a.navigize=function(a){function b(a,c){d=a.show();f=c.addClass("active");a.trigger("wgTabSelect",
|
130 |
+
[a.data("index")]);return a}var c=this;c.nav&&c.el.removeChild(c.nav);c.nav=c.el.insertBefore(n.el("nav","wg-tabs"),c.body);var d,f,g=e(c.nav).click(function(a){var g=e(a.target),h=g.data("tab");if(h){var k=f;d&&d.hide();k&&k.removeClass("active");b(h,g).children().focus();c.redraw();return l(a)}});c.each(function(c,f){f.pos=0;var h=e(f.el).data("index",c),k=e('<a href="#'+f.id+'"></a>').data("tab",h).text(a[c]).appendTo(g);d?h&&h.hide():b(h,k)});c.lock();c.restyle().redraw();g=null;return c};a=null;
|
131 |
+
return c}({},u,A));s.register("$7",function(c,a,k){function f(a){var c=k.createElement("pre");c.innerHTML=a.replace(/<(p|div|br) ?\/?>/ig,"\n<$1>").replace(/(^\n+|\n+$)/g,"");a="string"===typeof c.textContent?c.textContent:"string"===typeof c.innerText?c.innerText:e(c).text();return a}c.init=function(c){function g(){var a=q.length,b=0,c=0,d=0;q.each(function(a,e){e.translation()?e.fuzzy()?d++:b++:c++});return{t:a,p:String(b?Math.round(100*(b/a)):0)+"%",f:d,u:c}}function b(){w.clear();q.each(function(a,
|
132 |
+
b,c){w.add(c,b.toText())});y="";D=q.length}function k(a,b){var c,d={};if(y===a)return D||0;if(!q.length)return 0;if(a){if(y&&!D&&0===a.indexOf(y))return 0;c=w.find(a,d);d.words.length||(a="")}y=a;D=c?c.length:q.length;K.filterRows(c);d=C?q.indexOf(C):-1;if(-1===d||c&&-1===c.indexOf(d))c?c.length?K.selectRow(c[0],!0):K.deselectRow():K.selectRow(0,!0);b||t("poFilter",[y,D]);return D}function l(a){if(!a)return["",""];var b=[a.source()||"",a.translation()||""];(a=a.context())&&(b[0]+=" [ "+a+" ]");return b}
|
133 |
+
function r(a){if(a=a||C){var b=q.indexOf(a),b=K.tr(b),c=b[0].className.replace(/\s*po-[a-z]+/g,""),c=c+(" "+v(a)+" po-unsaved");e(b).attr("class",c);t("poUnsaved",[++H])}}function h(a,b){b=b||C;if(!b)return null;var c=b.fuzzy();null!=a&&c!=a&&(b.fuzzy(a),t("poFuzzy",[b,a]),t(G,[b]),r(b));return c}function v(a){var b=[];a&&(a.fuzzy()&&b.push("po-fuzzy"),a.translation()||b.push("po-empty"),a.comment()&&b.push("po-comment"));return b.join(" ")}function p(a,b){var c=l(a)[b||0],d=q.indexOf(a),d=K.td(d,
|
134 |
+
b);c&&/\S/.test(c)?e(d).text(c.replace("\n"," ")):e(d).html(" ")}function n(a){a!==A&&(F=(A=a)?q.lock(F):q.unlock()||F,t("poLock",[a,F]),C&&B(C))}function t(a,b){return e(c).trigger(a,b||[])}function u(){if(q&&q.row){y&&(y="",D=q.length,t("poFilter",[y,D]));var a;K.table&&(a=I?I.parentNode.scrollTop:0,K.clear());I=K.tabulate(M);a&&(I.parentNode.scrollTop=a);t("poLoad");(a=q.locale())?(F=a,n(!0)):n(!1);return!!q.length}K.clear().header("Error").contents("Invalid PO")}function z(){R.unbind().clear();
|
135 |
+
P.unbind().clear();S.unbind();C&&(t("poDeselected",[C]),C=null)}function B(a){function c(){var d=F&&F.lang&&"en"!==F.lang&&F.label;P.title(d?d+" translation:":"Translation:");if(m){var k=[],l=s.require("$14","collection.js").init();a.each(function(a,b){k.push("Form "+a);l.add("plural-"+a,b)});O=P.splitx.apply(P,l.keys);P.each(function(a,b){b.textarea(l[a],g)});P.navigize(k).bind("wgTabSelect",function(a,b){e=b})}else P.textarea(a.translation(),g);P.bind("wgChange",function(b,c){var d=f(c);a.translate(d,
|
136 |
+
e);0===e&&p(a,1);a.fuzzy()?h(!1,a):r(a)}).bind("wgChanged",function(c){w&&b();t(G,[a])})}function d(){P.title("Context:");P.textarea(a.context(),!0);P.bind("wgChange",function(b,c){var d=f(c);a.context(d);a.source();p(a,0);r(a)}).bind("wgChanged",function(){q.reIndex(a);w&&b();t(G,[a])})}z();C=a;S.textarea(a.comment(),!0).bind("wgChange",function(b,c){var d=f(c);a.comment(d);t("poComment",[a,d]);r(a)});var e=0,g=A,k=!A,l=a.source()||"",m=a.plural()||"";(function(){m?(O=R.splity(R.id+"-singular",R.id+
|
137 |
+
"-plural"),O[0].header("Singular:").textarea(l,k),O[1].header("Plural:").textarea(m,k),R.lock()):R.textarea(l,k);R.title("Source text:");k&&R.bind("wgChange",function(b,c){var d=f(c);R.id+"-plural"===b.target.parentNode.id?a.plural(d):(a.source(d),p(a,0));r(a)}).bind("wgChanged",function(c){R.id+"-plural"===c.target.parentNode.id||q.reIndex(a);w&&b();t(G,[a])})})();g?c():d();t("poSelected",[a]);data=null}var q,w,y,D,A,F,C,H=0,G="poUpdate",I,M={row:function(a){return l(q.row(a))},eachCol:function(a){a(0,
|
138 |
+
"Source text");a(1,"Translation")},eachRow:function(a){var b=0;q.each(function(c,d){a(b++,l(d),v(d))})}},N=s.require("$15","LocoWinGrid.js").init(c),O=N.splity("po-list","po-edit"),K=O[0],Q=O[1],O=Q.splitx("po-trans","po-comment"),T=O[0],S=O[1].header("Comment:"),O=T.splity("po-source","po-target"),R=O[0].header("Source text:"),P=O[1].header("Translation:");N.distribute(0.34);Q.distribute(0.8);e(a).resize(function(){N.redraw(!0);return!0});K.bind("wgRowSelect",function(a,b,c){a=q.row(b);B(a);return!0}).bind("wgRowDeselect",
|
139 |
+
function(){z();S.textarea("",!1);R.textarea("",!1).title("Source text not loaded:");P.textarea("",!1).title("Translation not loaded:");t("poSelected",[null]);return!0});return{bind:function(a,b){return e(c).bind(a,b)},load:function(a){q=a;w&&b();u()&&K.selectRow(0)},save:function(a){if(H||a)e(I).find("div.po-unsaved").removeClass("po-unsaved"),t("poSave");H=0;return q},fuzzy:function(a){return h(a)},del:function(a,c){var d=arguments.length?q.get(a,c):C;if(d){var e=y,f=q.del(d);null!=f&&(t("poDel",
|
140 |
+
[d]),t(G,[d]),u(),w&&b(),C&&C.equals(d)&&z(),q.length&&(e&&k(e),C||(f=Math.min(f,q.length-1),K.selectRow(f))))}},add:function(a,b){var c,d=q.get(a,b);d?c=q.indexOf(d):(c=q.length,d=q.add(a,b),K.addRow(M.row(c),v(d)),r(d),w&&w.add(q.indexOf(d),d.toText()),t("poAdd",[d]),t(G,[d]));y&&k("");K.selectRow(c);return d},lock:function(){n(!0)},unlock:function(){n(!1)},locked:function(){return Boolean(A)},filter:function(a){return w&&q&&q.length&&k(a,!0)},searchable:function(a){a&&(w=a,q&&b());return w&&!0},
|
141 |
+
stats:function(){return g()}}};return c}({},u,A));s.require("$1","array.js");s.require("$2","html.js");V=u.loco||{};var aa=u.ajaxurl||"/wp-admin/admin-ajax.php",U=V.conf||{},S=U.locale,M=s.require("$3","po.js").create(S),I={},T=A.getElementById("loco-poedit-inner"),G=V.t||function(c){return c};e(u).resize(function(){function c(){var c;c=T;for(var d=c.offsetTop||0;(c=c.offsetParent)&&void 0!==c;)d+=c.offsetTop||0;c=d;d=e(u).innerHeight();c=Math.max(k,d-c-a);T.style.height=String(c)+"px";return!0}var a=
|
142 |
+
20,k=parseInt(e(T).css("min-height")||0);c();return c}());I.save=function(c){function a(){c.disabled=!1}a();H.bind("poUnsaved",function(){e(c).addClass("button-primary loco-flagged")}).bind("poSave",function(){e(c).removeClass("button-primary loco-flagged")});e(c.form).submit(function(k){var f=k.target;k.target.po.value=M.toString();c.disabled=!0;$(f,function(c){a();e("#loco-po-modified").text(c.modified);H.save(!0);var f=G("PO file saved"),b=c.filename;c=c.compiled;null!=c&&(/\D/.test(c)?W(c,G("Error"),
|
143 |
+
"error"):(f+=" "+G("and MO file compiled"),b=b.replace(/\.po$/i,".mo")));Z(f+" - "+b)},a);return Q(k)});return!0};I.download_po=I.download_mo=function(c){c.disabled=!1;c.form.action=aa;e(c).click(function(){c.form.po.value=M.toString();e(T).trigger("poSave");return!0});return!0};I.add=!S&&function(c){c.disabled=!1;e(c).click(function(a){var c=1,e;for(e="New message";M.get(e);)c=/(\d+)/.exec(e)?Math.max(c,RegExp.$1):c,e="New message "+ ++c;H.add(e);return Q(a)});return!0};I.del=!S&&function(c){c.disabled=
|
144 |
+
!1;e(c).click(function(a){H.del();return Q(a)});return!0};I.fuzzy=S&&function(c){function a(a){c.disabled=null==a;e(c)[a?"addClass":"removeClass"]("loco-inverted")}H.bind("poSelected",function(c,e){a(e&&H.locked()?e.fuzzy():null)}).bind("poFuzzy",function(c,e,d){a(H.locked()?d:null)});e(c).click(function(a){var c=!H.fuzzy();H.fuzzy(c);return Q(a)});return!0};I.sync=function(c){function a(){c.disabled=!1}a();H.bind("poUnsaved",function(){c.disabled=!0}).bind("poSave",function(){a()});e(c.form).submit(function(k){c.disabled=
|
145 |
+
!0;$(k.target,function(c){a();var d=s.require("$3","po.js").create(void 0);d.load(c.exp);var g=[],d=M.merge(d),b=d.add.length,k=d.del.length;H.load(M);if(b||k){g.push(c.pot?N(G("Merged from %s"),c.pot):G("Merged from source code"));b&&g.push(N(G("1 new string added","%s new strings added",b),b));k&&g.push(N(G("1 obsolete string removed","%s obsolete strings removed",k),k));e(T).trigger("poUnsaved",[]);if(u.console&&console.log){for(b=-1;++b<d.add.length;)console.log(" + "+d.add[b].source());for(b=
|
146 |
+
-1;++b<d.del.length;)console.log(" - "+d.del[b].source())}X()}else g.push(c.pot?N(G("Already up to date with %s"),c.pot):G("Already up to date with source code"));M.headers(c.headers||{});Z(g.join(". "))},a);return Q(k)});return!0};I.revert=function(c){H.bind("poUnsaved",function(){c.disabled=!1}).bind("poSave",function(){c.disabled=!0});e(c).click(function(a){location.reload();return Q(a)});return!0};I.help=function(){return!0};T.innerHTML="";var H=s.require("$7","poedit.js").init(T);e("#loco-nav").find("button").each(function(c,
|
147 |
+
a){var k=a.getAttribute("data-loco");I[k]&&I[k](a)||e(a).hide()});I=null;(function(c){e(c.form).submit(function(a){return Q(a)});var a=s.require("$4","dict.js").create();a.depth=10;a.translit(s.require("$5","translit.json"));H.searchable(a);c.disabled=!1;c.value="";var k=s.require("$6","LocoTextListener.js").listen(c,function(a){H.filter(a)});H.bind("poFilter",function(a,c){k.val(c)});c=a=null})(A.getElementById("loco-search"));H.bind("poUnsaved",function(){u.onbeforeunload=function(){return G("Your changes will be lost if you continue without saving")}}).bind("poSave",
|
148 |
+
function(){u.onbeforeunload=null}).bind("poUpdate",X);S?M.load(U.po||{}):M.load(U.pot||{});M.headers(U.headers);H.load(M);X();e("#wpbody-content").find("div.loco-message").each(function(c,a){Y(a,!0)})})(window,document,window.jQuery);
|
pub/js/lang/dummy.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Dummy translations, simply echos back as if translations all missing
|
3 |
+
*/
|
4 |
+
loco = window.loco||{}, loco.t = function(){
|
5 |
+
|
6 |
+
// calc numeric index of a plural form (0-1)
|
7 |
+
function pluralIndex( n ){
|
8 |
+
return Number( n != 1 );
|
9 |
+
}
|
10 |
+
|
11 |
+
// expose public t() function
|
12 |
+
return function( msgid1, msgid2, n ){
|
13 |
+
if( null == n ){
|
14 |
+
return msgid1||'';
|
15 |
+
}
|
16 |
+
// plural operation
|
17 |
+
n = pluralIndex( n );
|
18 |
+
return n ? msgid2 || msgid1 : msgid1 || '';
|
19 |
+
};
|
20 |
+
|
21 |
+
}();
|
pub/js/lang/dummy.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* here for source code extraction until xgettext is applied to js files too
|
4 |
+
*/
|
5 |
+
_x('OK','Message label');
|
6 |
+
_x('Warning','Message label');
|
7 |
+
_x('Error','Message label');
|
8 |
+
__('Unknown error');
|
9 |
+
__('PO file saved');
|
10 |
+
__('and MO file compiled');
|
11 |
+
__('Merged from %s');
|
12 |
+
__('Merged from source code');
|
13 |
+
__('Already up to date with %s');
|
14 |
+
__('Already up to date with source code');
|
15 |
+
_n('1 new string added','%s new strings added', 2 );
|
16 |
+
_n('1 obsolete string removed','%s obsolete strings removed', 2 );
|
17 |
+
__('Your changes will be lost if you continue without saving');
|
pub/js/lang/loco-translate-de_DE.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Loco js export: JavaScript function
|
3 |
+
* Project: loco.js conversion
|
4 |
+
* Release: Working copy
|
5 |
+
* Locale: de_DE, German
|
6 |
+
* Exported at: Sat, 04 Jan 2014 20:46:53 +0000
|
7 |
+
*/
|
8 |
+
loco = window.loco||{}, loco.t = function( pairs ){
|
9 |
+
|
10 |
+
// named plural forms according to Unicode
|
11 |
+
var pluralForms = ["one","other"];
|
12 |
+
|
13 |
+
// calc numeric index of a plural form (0-1)
|
14 |
+
function pluralIndex( n ){
|
15 |
+
return Number( (n != 1) );
|
16 |
+
}
|
17 |
+
|
18 |
+
// expose public t() function
|
19 |
+
return function( msgid1, msgid2, n ){
|
20 |
+
var value = pairs[msgid1];
|
21 |
+
// singular if no multiplier
|
22 |
+
if( null == n ){
|
23 |
+
n = 1;
|
24 |
+
}
|
25 |
+
// plurals stored as objects, e.g. { one: "" }
|
26 |
+
if( value instanceof Object ){
|
27 |
+
value = value[ pluralForms[ pluralIndex(n) ] || 'one' ];
|
28 |
+
}
|
29 |
+
return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
|
30 |
+
};
|
31 |
+
}(
|
32 |
+
{"Error":"Fehler","Warning":"Warnung","OK":"OK","Settings saved":"Einstellungen gespeichert","New PO file":"Neue PO-Datei","You must specify a valid locale for a new PO file":"Du musst einen g\u00fcltigen Pfad f\u00fcr die PO-Datei angeben","No translatable strings found":"Keine \u00fcbersetzbaren Zeichenketten gefunden","Cannot create a PO file.":"Erstellen der PO-Datei fehlgeschlagen.","PO file already exists with locale %s":"PO-Datei existiert schon unter %s","File cannot be created automatically. Fix the file permissions or use Download instead of Save":"Datei kann nicht automatisch erstellt werden. Setze die Datei-Zugriffsrechte oder benutze Download anstatt Speichern","%s file is empty":"Datei (%s) ist leer","Run Sync to update from source code":"Benutze Sync, um von der Quelle zu aktualisieren","No strings could be extracted from source code":"Es konnten keine Zeichenketten vom Quellcode extrahiert werden","Run Sync to update from %s":"Benutze Sync, um aus %s zu aktualisieren","Source code has been modified, run Sync to update POT":"Quellcode wurde ge\u00e4ndert, benutze Sync um POT zu aktualisieren","POT has been modified since PO file was saved, run Sync to update":"POT wurde aktualisiert bevor die PO-Datei gespeichert wurde. Benutze Sync zum Aktualisieren.","Bad file path":"Falscher Dateipfad","New template":"Neues Template","New language":"Neue Sprache","%s%% translated":"%s%% \u00fcbersetzt","1 string":{"one":"1 Zeichenkette","other":"%s Zeichenketten"},"%s fuzzy":"%s undeutlich","%s untranslated":"%s nicht \u00fcbersetzt","Failed to compile MO file with built-in compiler":"Kompilieren der MO-Datei mit dem internen Kompilierer fehlgeschlagen.","Loco, Translation Management":"Loco, Translation Management","Translation":"\u00dcbersetzung","Manage translations":"\u00dcbersetzungen verwalten","Settings":"Einstellungen","File download failed":"Dateidownload ist fehlgeschlagen","Unknown language":"Unbekannte Sprache","Some files not writable":"Einige Dateien nicht schreibbar","Some files missing":"Einige Dateien fehlen","\"%s\" folder not writable":"Ordner \"%s\" nicht schreibbar","Folder not writable":"Ordner nicht schreibbar","POT file not writable":"POT-Datei nicht schreibbar","PO file not writable":"PO-Datei nicht schreibbar","MO file not writable":"MO-Datei nicht schreibbar","MO file not found":"MO-Datei nicht gefunden","User does not have permission to manage translations":"Benutzer hat keine Rechte die \u00dcbersetzungen zu verwalten","Failed to compile MO file with %s, check your settings":"Kompilieren der MO-Datei fehlgeschlagen. Bitte pr\u00fcfe Deine Einstellungen","Invalid data posted to server":"Ung\u00fcltige Daten zum Server gesendet","Package not found called %s":"Paket %s nicht gefunden","Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create it manually.":"Webserver kann Ordner \"%s\" nicht in \"%s\" erstellen. Setze die Zugriffsrechte oder erstelle den Ordner selbst.","Web server cannot create files in the \"%s\" directory. Fix file permissions or use the download function.":"Webserver kann keine Dateien im Ordner \"%s\" erstellen. Setze die Datei-Zugriffsrechte oder benutze Download anstatt Speichern.","%s file is not writable by the web server. Fix file permissions or download and copy to \"%s\/%s\".":"Datei %s ist vom Webserver nicht schreibbar. Setze die Datei-Zugriffsrechte oder benutze Download anstatt Speichern und speichere die Datei auf dem Server unter \"%s\/%s\" ab.","Cannot create MO file":"Erstellen der MO-Datei fehlgeschlagen.","Cannot overwrite MO file":"\u00dcberschreiben der MO-Datei fehlgeschlagen","Failed to write MO file":"","No strings could be extracted from source files":"Es konnten keine Zeichenketten aus der Quelle extrahiert werden","Unknown error":"Unbekannter Fehler","PO file saved":"PO-Datei gespeichert","and MO file compiled":"und MO-Datei kompiliert","Merged from %s":"Aus %s zusammengef\u00fchrt","Merged from source code":"Aus Quelle zusammengef\u00fchrt","Already up to date with %s":"Bereit auf dem aktuellen Stand mit %s","Already up to date with source code":"Bereit mit der Quelle auf dem aktuellen Stand","1 new string added":{"one":"1 neue Zeichenkette hinzugef\u00fcgt","other":"%s neue Zeichenketten hinzugef\u00fcgt"},"1 obsolete string removed":{"one":"1 veraltete Zeichenkette entfernt","other":"%s veraltete Zeichenketten entfernt"},"Your changes will be lost if you continue without saving":"Deine \u00c4nderungen gehen verloren, wenn du fortsetzt ohne zu Speichern","Packages":"Pakete","File check":"Dateipr\u00fcfung","File system permissions for %s":"Dateisystem-Rechte f\u00fcr %s","Back":"Zur\u00fcck","Get help":"Hilfe erhalten","Package details":"Paketdetails","Translations (PO)":"\u00dcbersetzungen (PO)","Template (POT)":"Template (POT)","File permissions":"Dateizugriffsrechte","1 language":{"one":"1 Sprache","other":"%u Sprachen"},"Updated":"Aktualisiert","Powered by":"Pr\u00e4sentiert von","Configure Loco Translate":"Konfiguriere Loco Translate","Compiling MO files":"MO-Dateien kompilieren","Use built-in MO compiler.":"Benutze internen MO-Kompilierer","Use external command:":"Benutze externes Befehlsprogramm:","Enter path to msgfmt on server":"Pfad zum msgfmt-Programm","Generate hash tables":"","Save settings":"Einstellungen speichern","Template file":"Templatedatei","Switch to...":"Wechsle zu...","never":"niemals","Save":"Speichern","Download":"Download","Sync":"Sync","Revert":"zur\u00fccksetzen","Add":"Hinzuf\u00fcgen","Del":"L\u00f6schen","Fuzzy":"Undeutlich","Filter translations":"\u00dcbersetzungen filtern","Help":"Hilfe","Initialize new translations in %s":"Initialisiere neue \u00dcbersetzung in %s","Select from common languages":"W\u00e4hle aus den Standardsprachen","or enter any language code":"oder trage den Sprach-Code ein","Start translating":"Starte \u00dcbersetzung","New version available":"Neue Version verf\u00fcgbar","Upgrade to version %s of Loco Translate":"Bitte upgrade Loco Translate auf Version %s","Select a plugin or theme to translate":"W\u00e4hle ein Plugin oder Theme zum \u00dcbersetzen","Themes":"Themes","Plugins":"Plugins","Core":"Core"}
|
33 |
+
);
|
pub/js/lang/loco-translate-nl_BE.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Loco js export: JavaScript function
|
3 |
+
* Project: loco.js conversion
|
4 |
+
* Release: Working copy
|
5 |
+
* Locale: nl_BE, Dutch (Belgium)
|
6 |
+
* Exported at: Sat, 04 Jan 2014 20:46:53 +0000
|
7 |
+
*/
|
8 |
+
loco = window.loco||{}, loco.t = function( pairs ){
|
9 |
+
|
10 |
+
// named plural forms according to Unicode
|
11 |
+
var pluralForms = ["one","other"];
|
12 |
+
|
13 |
+
// calc numeric index of a plural form (0-1)
|
14 |
+
function pluralIndex( n ){
|
15 |
+
return Number( (n != 1) );
|
16 |
+
}
|
17 |
+
|
18 |
+
// expose public t() function
|
19 |
+
return function( msgid1, msgid2, n ){
|
20 |
+
var value = pairs[msgid1];
|
21 |
+
// singular if no multiplier
|
22 |
+
if( null == n ){
|
23 |
+
n = 1;
|
24 |
+
}
|
25 |
+
// plurals stored as objects, e.g. { one: "" }
|
26 |
+
if( value instanceof Object ){
|
27 |
+
value = value[ pluralForms[ pluralIndex(n) ] || 'one' ];
|
28 |
+
}
|
29 |
+
return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
|
30 |
+
};
|
31 |
+
}(
|
32 |
+
{"Error":"Fout","Warning":"Waarschuwing","OK":"","Settings saved":"","New PO file":"Nieuw PO-bestand","You must specify a valid locale for a new PO file":"Specifieer een geldige locale voor een nieuw PO-bestand","No translatable strings found":"Geen vertaalbare teksten gevonden","Cannot create a PO file.":"Kan geen PO-bestand aanmaken","PO file already exists with locale %s":"PO-bestand bestaat al in locale %s","File cannot be created automatically. Fix the file permissions or use Download instead of Save":"Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik download en bewaar.","%s file is empty":"Het bestand %s is leeg","Run Sync to update from source code":"Voer Sync uit om de broncode up te daten","No strings could be extracted from source code":"Er kon geen tekst uit de broncode gehaald worden","Run Sync to update from %s":"Gebruik Sync om vanuit %s up te daten","Source code has been modified, run Sync to update POT":"Broncode is veranderd. Gebruik Sync om POT up te daten","POT has been modified since PO file was saved, run Sync to update":"POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten","Bad file path":"Foute bestandslocatie","New template":"Nieuw sjabloon","New language":"Nieuwe taal","%s%% translated":"%s%% vertaald","1 string":{"one":"1 te vertalen tekst","other":"%s te vertalen teksten"},"%s fuzzy":"%s onzeker","%s untranslated":"%s onvertaald","Failed to compile MO file with built-in compiler":"","Loco, Translation Management":"Loco, vertalingsbeheer","Translation":"","Manage translations":"Beheer vertalingen","Settings":"","File download failed":"","Unknown language":"Onbekende taal","Some files not writable":"Sommige bestanden hebben geen schrijfrechten","Some files missing":"","\"%s\" folder not writable":"Map \"%s\" heeft geen schrijfrechten","Folder not writable":"","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","User does not have permission to manage translations":"Gebruik heeft geen rechten om vertalingen te beheren","Failed to compile MO file with %s, check your settings":"","Invalid data posted to server":"Ongeldige gegevens op server","Package not found called %s":"","Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create it manually.":"Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak het zelf aan.","Web server cannot create files in the \"%s\" directory. Fix file permissions or use the download function.":"Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik de downloadfunctie.","%s file is not writable by the web server. Fix file permissions or download and copy to \"%s\/%s\".":"Bestand %s kan niet beschreven worden door de webserver. Bewerk de schrijfrechten of download en kopieer naar \"%s\/%s\".","Cannot create MO file":"","Cannot overwrite MO file":"","Failed to write MO file":"","No strings could be extracted from source files":"Er konden geen te vertalen teksten uit de bronbestanden gehaald worden","Unknown error":"","PO file saved":"","and MO file compiled":"","Merged from %s":"","Merged from source code":"","Already up to date with %s":"","Already up to date with source code":"","1 new string added":{"one":""},"1 obsolete string removed":{"one":""},"Your changes will be lost if you continue without saving":"","Packages":"Pakketten","File check":"","File system permissions for %s":"","Back":"","Get help":"","Package details":"Pakketdetails","Translations (PO)":"Vertalingen (PO)","Template (POT)":"Sjabloon (POT)","File permissions":"Bestandsrechten","1 language":{"one":"1 taal","other":"%u talen"},"Updated":"Ge\u00fcpdated","Powered by":"Ondersteund door","Configure Loco Translate":"","Compiling MO files":"","Use built-in MO compiler.":"","Use external command:":"","Enter path to msgfmt on server":"","Generate hash tables":"","Save settings":"","Template file":"Sjabloonbestand","Switch to...":"","never":"nooit","Save":"Opslaan","Download":"Downloaden","Sync":"Sync","Revert":"Ongedaan maken","Add":"Toevoegen","Del":"Verwijder","Fuzzy":"Onzeker","Filter translations":"Filter vertalingen","Help":"Help","Initialize new translations in %s":"Start nieuwe vertalingen in %s","Select from common languages":"Selecteer van gebruikelijke talen","or enter any language code":"of geef een taalcode op","Start translating":"Start vertalen","New version available":"Nieuwe versie beschikbaar","Upgrade to version %s of Loco Translate":"Loco Translate upgraden naar versie %s","Select a plugin or theme to translate":"Selecteer een plug-in of thema om te vertalen","Themes":"Thema's","Plugins":"Plug-ins","Core":""}
|
33 |
+
);
|
pub/js/lang/loco-translate-nl_NL.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Loco js export: JavaScript function
|
3 |
+
* Project: loco.js conversion
|
4 |
+
* Release: Working copy
|
5 |
+
* Locale: nl_NL, Dutch
|
6 |
+
* Exported at: Sat, 04 Jan 2014 20:46:53 +0000
|
7 |
+
*/
|
8 |
+
loco = window.loco||{}, loco.t = function( pairs ){
|
9 |
+
|
10 |
+
// named plural forms according to Unicode
|
11 |
+
var pluralForms = ["one","other"];
|
12 |
+
|
13 |
+
// calc numeric index of a plural form (0-1)
|
14 |
+
function pluralIndex( n ){
|
15 |
+
return Number( (n != 1) );
|
16 |
+
}
|
17 |
+
|
18 |
+
// expose public t() function
|
19 |
+
return function( msgid1, msgid2, n ){
|
20 |
+
var value = pairs[msgid1];
|
21 |
+
// singular if no multiplier
|
22 |
+
if( null == n ){
|
23 |
+
n = 1;
|
24 |
+
}
|
25 |
+
// plurals stored as objects, e.g. { one: "" }
|
26 |
+
if( value instanceof Object ){
|
27 |
+
value = value[ pluralForms[ pluralIndex(n) ] || 'one' ];
|
28 |
+
}
|
29 |
+
return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
|
30 |
+
};
|
31 |
+
}(
|
32 |
+
{"Error":"Fout","Warning":"Waarschuwing","OK":"","Settings saved":"","New PO file":"Nieuw PO-bestand","You must specify a valid locale for a new PO file":"Specifieer een geldige locale voor een nieuw PO-bestand","No translatable strings found":"Geen vertaalbare teksten gevonden","Cannot create a PO file.":"Kan geen PO-bestand aanmaken","PO file already exists with locale %s":"PO-bestand bestaat al in locale %s","File cannot be created automatically. Fix the file permissions or use Download instead of Save":"Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik download en bewaar.","%s file is empty":"Het bestand %s is leeg","Run Sync to update from source code":"Voer Sync uit om de broncode up te daten","No strings could be extracted from source code":"Er kon geen tekst uit de broncode gehaald worden","Run Sync to update from %s":"Gebruik Sync om vanuit %s up te daten","Source code has been modified, run Sync to update POT":"Broncode is veranderd. Gebruik Sync om POT up te daten","POT has been modified since PO file was saved, run Sync to update":"POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten","Bad file path":"Foute bestandslocatie","New template":"Nieuw sjabloon","New language":"Nieuwe taal","%s%% translated":"%s%% vertaald","1 string":{"one":"1 te vertalen tekst","other":"%s te vertalen teksten"},"%s fuzzy":"%s onzeker","%s untranslated":"%s onvertaald","Failed to compile MO file with built-in compiler":"","Loco, Translation Management":"Loco, vertalingsbeheer","Translation":"","Manage translations":"Beheer vertalingen","Settings":"","File download failed":"","Unknown language":"Onbekende taal","Some files not writable":"Sommige bestanden hebben geen schrijfrechten","Some files missing":"","\"%s\" folder not writable":"Map \"%s\" heeft geen schrijfrechten","Folder not writable":"","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","User does not have permission to manage translations":"Gebruik heeft geen rechten om vertalingen te beheren","Failed to compile MO file with %s, check your settings":"","Invalid data posted to server":"Ongeldige gegevens op server","Package not found called %s":"","Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create it manually.":"Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak het zelf aan.","Web server cannot create files in the \"%s\" directory. Fix file permissions or use the download function.":"Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik de downloadfunctie.","%s file is not writable by the web server. Fix file permissions or download and copy to \"%s\/%s\".":"Bestand %s kan niet beschreven worden door de webserver. Bewerk de schrijfrechten of download en kopieer naar \"%s\/%s\".","Cannot create MO file":"","Cannot overwrite MO file":"","Failed to write MO file":"","No strings could be extracted from source files":"Er konden geen te vertalen teksten uit de bronbestanden gehaald worden","Unknown error":"","PO file saved":"","and MO file compiled":"","Merged from %s":"","Merged from source code":"","Already up to date with %s":"","Already up to date with source code":"","1 new string added":{"one":""},"1 obsolete string removed":{"one":""},"Your changes will be lost if you continue without saving":"","Packages":"Pakketten","File check":"","File system permissions for %s":"","Back":"","Get help":"","Package details":"Pakketdetails","Translations (PO)":"Vertalingen (PO)","Template (POT)":"Sjabloon (POT)","File permissions":"Bestandsrechten","1 language":{"one":"1 taal","other":"%u talen"},"Updated":"Ge\u00fcpdated","Powered by":"Ondersteund door","Configure Loco Translate":"","Compiling MO files":"","Use built-in MO compiler.":"","Use external command:":"","Enter path to msgfmt on server":"","Generate hash tables":"","Save settings":"","Template file":"Sjabloonbestand","Switch to...":"","never":"nooit","Save":"Opslaan","Download":"Downloaden","Sync":"Sync","Revert":"Ongedaan maken","Add":"Toevoegen","Del":"Verwijder","Fuzzy":"Onzeker","Filter translations":"Filter vertalingen","Help":"Help","Initialize new translations in %s":"Start nieuwe vertalingen in %s","Select from common languages":"Selecteer van gebruikelijke talen","or enter any language code":"of geef een taalcode op","Start translating":"Start vertalen","New version available":"Nieuwe versie beschikbaar","Upgrade to version %s of Loco Translate":"Loco Translate upgraden naar versie %s","Select a plugin or theme to translate":"Selecteer een plug-in of thema om te vertalen","Themes":"Thema's","Plugins":"Plug-ins","Core":""}
|
33 |
+
);
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: timwhitlock
|
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, POEdit, productivity
|
4 |
Requires at least: 3.5
|
5 |
Tested up to: 3.8
|
6 |
-
Stable tag: 1.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -17,10 +17,11 @@ The Loco Translate plugin provides in-browser editing of PO files used for local
|
|
17 |
Features include:
|
18 |
|
19 |
* POEdit style translations editor within Wordpress admin
|
|
|
20 |
* Extraction of translatable strings from your source code
|
21 |
-
*
|
22 |
|
23 |
-
|
24 |
|
25 |
|
26 |
|
@@ -38,7 +39,7 @@ If you want to create new translations for a theme or plugin, follow these steps
|
|
38 |
3. Find the theme or plugin in the list at *Tools > Manage Translations*
|
39 |
4. Click `+ New language` and follow the on-screen prompts.
|
40 |
|
41 |
-
|
42 |
|
43 |
Please note that this plugin doesn’t support Windows servers.
|
44 |
|
@@ -52,32 +53,33 @@ No. It's for manually entering your own translations, but we do intend to be int
|
|
52 |
|
53 |
= Why can't it extract any translatable strings from my code? =
|
54 |
|
55 |
-
The extraction process looks
|
56 |
|
57 |
Using your own custom functions like `myTranslate('Foo')` won't work. Neither will using variables, such as `__( $foo )`.
|
58 |
|
59 |
|
60 |
= Do I need to create a POT file? =
|
61 |
|
62 |
-
There are some good reasons to, but you don't have to in order to use this plugin.
|
63 |
|
64 |
Loco Translate allows you to work purely with PO files and keep them up to date with the source code without the interim step of maintaining a POT file.
|
65 |
|
66 |
|
67 |
-
= Why do I get errors when I try to save
|
68 |
|
69 |
-
To
|
70 |
|
71 |
-
You shouldn't do this
|
72 |
|
73 |
-
If you're unsure how to set file permission on your server, ask your
|
74 |
|
75 |
|
76 |
= How do I create MO files? =
|
77 |
|
78 |
-
|
79 |
|
80 |
-
|
|
|
81 |
|
82 |
|
83 |
= Does it support Windows? =
|
@@ -95,6 +97,12 @@ At the user end, yes you can access the interface on Windows using Internet Expl
|
|
95 |
|
96 |
== Changelog ==
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
= 1.3.1 =
|
99 |
* style tweak for wp 3.8
|
100 |
* suppressing exception when proc_open fails
|
@@ -144,7 +152,7 @@ At the user end, yes you can access the interface on Windows using Internet Expl
|
|
144 |
|
145 |
== Upgrade Notice ==
|
146 |
|
147 |
-
= 1.
|
148 |
* Bug fixes and improvements.
|
149 |
|
150 |
|
@@ -161,3 +169,4 @@ These features are on our todo list. There's no particular timeframe for any of
|
|
161 |
== Credits ==
|
162 |
|
163 |
* Dutch translations courtesy of [Niels Geryl](http://hetwittepaard.be)
|
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, POEdit, productivity
|
4 |
Requires at least: 3.5
|
5 |
Tested up to: 3.8
|
6 |
+
Stable tag: 1.4
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
17 |
Features include:
|
18 |
|
19 |
* POEdit style translations editor within Wordpress admin
|
20 |
+
* Create and update language files directly in your theme or plugin
|
21 |
* Extraction of translatable strings from your source code
|
22 |
+
* Native MO file compilation without the need for Gettext on your system
|
23 |
|
24 |
+
Official [Loco](https://localise.biz/) WordPress plugin by <a href="//twitter.com/timwhitlock">@timwhitlock</a> / <a rel="author" href="https://plus.google.com/106703751121449519322">Tim Whitlock</a>
|
25 |
|
26 |
|
27 |
|
39 |
3. Find the theme or plugin in the list at *Tools > Manage Translations*
|
40 |
4. Click `+ New language` and follow the on-screen prompts.
|
41 |
|
42 |
+
A quick guide on using the plugin is [available here](https://localise.biz/help/wordpress/translate-plugin), but make sure you're familiar with the conventions of [Translating Wordpress](http://codex.wordpress.org/Translating_WordPress) before you start.
|
43 |
|
44 |
Please note that this plugin doesn’t support Windows servers.
|
45 |
|
53 |
|
54 |
= Why can't it extract any translatable strings from my code? =
|
55 |
|
56 |
+
The extraction process looks for Wordpress translation functions with string literal arguments, such as `__('Foo')`.
|
57 |
|
58 |
Using your own custom functions like `myTranslate('Foo')` won't work. Neither will using variables, such as `__( $foo )`.
|
59 |
|
60 |
|
61 |
= Do I need to create a POT file? =
|
62 |
|
63 |
+
There are some good reasons to do so, but you don't have to in order to use this plugin.
|
64 |
|
65 |
Loco Translate allows you to work purely with PO files and keep them up to date with the source code without the interim step of maintaining a POT file.
|
66 |
|
67 |
|
68 |
+
= Why do I get errors when I try to save translations? =
|
69 |
|
70 |
+
To save PO files directly to your project, the files must be writable by the web server.
|
71 |
|
72 |
+
You shouldn't do this on a live server, only for developing your theme or plugin on a local server.
|
73 |
|
74 |
+
If you're unsure how to set file permission on your server, ask your system administrator.
|
75 |
|
76 |
|
77 |
= How do I create MO files? =
|
78 |
|
79 |
+
Every time you save a PO file, Loco tries to compile a MO file in the same location. As above, ensure that the web server is able to write to disk, otherwise MO compilation will fail.
|
80 |
|
81 |
+
If you have [Gettext](http://www.gnu.org/software/gettext/) installed on your server you can use this instead of Loco's built-in compiler.
|
82 |
+
You can configure the path to the `msgfmt` program in the Settings tab.
|
83 |
|
84 |
|
85 |
= Does it support Windows? =
|
97 |
|
98 |
== Changelog ==
|
99 |
|
100 |
+
= 1.4 =
|
101 |
+
* Added native MO compiler
|
102 |
+
* Added hash generation config option
|
103 |
+
* Added direct MO download from editor
|
104 |
+
* Fixed some translations and added German
|
105 |
+
|
106 |
= 1.3.1 =
|
107 |
* style tweak for wp 3.8
|
108 |
* suppressing exception when proc_open fails
|
152 |
|
153 |
== Upgrade Notice ==
|
154 |
|
155 |
+
= 1.4 =
|
156 |
* Bug fixes and improvements.
|
157 |
|
158 |
|
169 |
== Credits ==
|
170 |
|
171 |
* Dutch translations courtesy of [Niels Geryl](http://hetwittepaard.be)
|
172 |
+
* German translations courtesy of [Sebastian König](http://aykutmania.de)
|
tpl/admin-fscheck.tpl.php
CHANGED
@@ -38,7 +38,7 @@ $nav = array (
|
|
38 |
|
39 |
<p class="submit">
|
40 |
<a class="button-primary" href="<?php Loco::h( LocoAdmin::uri() )?>"><?php Loco::h( Loco::__('Back') )?></a>
|
41 |
-
<a class="button" href="http://wordpress.org/support/plugin/<?php echo Loco::NS?>" target="_blank"
|
42 |
</p>
|
43 |
|
44 |
|
38 |
|
39 |
<p class="submit">
|
40 |
<a class="button-primary" href="<?php Loco::h( LocoAdmin::uri() )?>"><?php Loco::h( Loco::__('Back') )?></a>
|
41 |
+
<a class="button" href="http://wordpress.org/support/plugin/<?php echo Loco::NS?>" target="_blank"><?php Loco::h( Loco::__('Get help') )?></a>
|
42 |
</p>
|
43 |
|
44 |
|
tpl/admin-list.tpl.php
CHANGED
@@ -35,7 +35,7 @@
|
|
35 |
<strong><?php Loco::h($name)?></strong>
|
36 |
</li>
|
37 |
<li><?php
|
38 |
-
Loco::h( _n( '1 language', '%u languages', $n ), $n )?>
|
39 |
</li><?php
|
40 |
if( $mtime ):?>
|
41 |
<li class="loco-mtime">
|
35 |
<strong><?php Loco::h($name)?></strong>
|
36 |
</li>
|
37 |
<li><?php
|
38 |
+
Loco::h( Loco::_n( '1 language', '%u languages', $n ), $n )?>
|
39 |
</li><?php
|
40 |
if( $mtime ):?>
|
41 |
<li class="loco-mtime">
|
tpl/admin-opts.tpl.php
CHANGED
@@ -21,17 +21,47 @@ $nav = array (
|
|
21 |
<?php isset($success) and LocoAdmin::success( $success )?>
|
22 |
|
23 |
<form action="" method="post">
|
24 |
-
<
|
25 |
-
<
|
26 |
-
<
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
<p class="submit">
|
33 |
<input type="submit" class="button-primary" value="<?php Loco::h( Loco::__('Save settings') )?>" />
|
34 |
-
<a class="button" href="http://wordpress.org/support/plugin/<?php echo Loco::NS?>" target="_blank"
|
35 |
</p>
|
36 |
</form>
|
37 |
|
21 |
<?php isset($success) and LocoAdmin::success( $success )?>
|
22 |
|
23 |
<form action="" method="post">
|
24 |
+
<table class="form-table">
|
25 |
+
<tbody>
|
26 |
+
<tr valign="top">
|
27 |
+
<th scope="row"><?php Loco::h( Loco::__('Compiling MO files') )?></th>
|
28 |
+
<td>
|
29 |
+
<fieldset>
|
30 |
+
<legend class="screen-reader-text">
|
31 |
+
<span><?php Loco::h( Loco::__('Compiling MO files') )?></span>
|
32 |
+
</legend>
|
33 |
+
<p>
|
34 |
+
<label for="loco--use-msgfmt-0">
|
35 |
+
<input type="radio" name="loco[use_msgfmt]" value="0" id="loco--use-msgfmt-0"<?php echo $use_msgfmt ? '' : ' checked';?> />
|
36 |
+
<?php Loco::h( Loco::__('Use built-in MO compiler.') )?>
|
37 |
+
</label>
|
38 |
+
</p>
|
39 |
+
<p>
|
40 |
+
<label for="loco--use-msgfmt-1">
|
41 |
+
<input type="radio" name="loco[use_msgfmt]" value="1" id="loco--use-msgfmt-1"<?php echo $use_msgfmt ? ' checked' : '';?> />
|
42 |
+
<?php Loco::h( Loco::__('Use external command:') )?>
|
43 |
+
</label>
|
44 |
+
<ul>
|
45 |
+
<li>
|
46 |
+
<input type="text" size="32" name="loco[which_msgfmt]" id="loco--which_msgfmt" value="<?php Loco::h($which_msgfmt)?>"
|
47 |
+
placeholder="<?php Loco::h( Loco::__('Enter path to msgfmt on server') ) ?>" />
|
48 |
+
</li>
|
49 |
+
</ul>
|
50 |
+
</p>
|
51 |
+
<p>
|
52 |
+
<label for="loco--gen-hash">
|
53 |
+
<input type="checkbox" name="loco[gen_hash]" value="1" id="loco--gen-hash"<?php echo $gen_hash ? ' checked' : '';?> />
|
54 |
+
<?php Loco::h( Loco::__('Generate hash tables') )?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
</fieldset>
|
58 |
+
</td>
|
59 |
+
</tr>
|
60 |
+
</tbody>
|
61 |
+
</table>
|
62 |
<p class="submit">
|
63 |
<input type="submit" class="button-primary" value="<?php Loco::h( Loco::__('Save settings') )?>" />
|
64 |
+
<a class="button" href="http://wordpress.org/support/plugin/<?php echo Loco::NS?>" target="_blank"><?php Loco::h( Loco::__('Get help') )?></a>
|
65 |
</p>
|
66 |
</form>
|
67 |
|
tpl/admin-poedit.tpl.php
CHANGED
@@ -87,13 +87,24 @@ $modified or $pofiles[] = $path;
|
|
87 |
<span><?php Loco::h( Loco::_x('Save','Editor button') )?></span>
|
88 |
</button>
|
89 |
</form>
|
90 |
-
<form action="<?php echo $phpbase?>/loco-
|
91 |
<input type="hidden" name="po" value="" />
|
|
|
92 |
<input type="hidden" name="path" value="<?php Loco::h($path)?>" />
|
93 |
-
<button class="button loco-download" data-loco="
|
94 |
-
<span><?php
|
95 |
</button>
|
96 |
-
</form
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
<form action="<?php echo $phpbase?>/loco-fail.php" method="post">
|
98 |
<input type="hidden" name="path" value="<?php Loco::h($path)?>" />
|
99 |
<input type="hidden" name="action" value="loco-posync" /><?php
|
87 |
<span><?php Loco::h( Loco::_x('Save','Editor button') )?></span>
|
88 |
</button>
|
89 |
</form>
|
90 |
+
<form action="<?php echo $phpbase?>/loco-fail.php" method="post">
|
91 |
<input type="hidden" name="po" value="" />
|
92 |
+
<input type="hidden" name="action" value="loco-download" />
|
93 |
<input type="hidden" name="path" value="<?php Loco::h($path)?>" />
|
94 |
+
<button class="button loco-download" data-loco="download_po" type="submit" disabled title="<?php Loco::h( Loco::_x('Download','Editor button') )?> PO">
|
95 |
+
<span><?php echo $locale ? 'PO' : 'POT' ?></span>
|
96 |
</button>
|
97 |
+
</form><?php
|
98 |
+
if( $locale ):?>
|
99 |
+
<form action="<?php echo $phpbase?>/loco-fail.php" method="post">
|
100 |
+
<input type="hidden" name="po" value="" />
|
101 |
+
<input type="hidden" name="action" value="loco-download" />
|
102 |
+
<input type="hidden" name="path" value="<?php Loco::h( preg_replace('/\.po$/','.mo',$path) )?>" />
|
103 |
+
<button class="button loco-download" data-loco="download_mo" type="submit" disabled title="<?php Loco::h( Loco::_x('Download','Editor button') )?> MO">
|
104 |
+
<span>MO</span>
|
105 |
+
</button>
|
106 |
+
</form><?php
|
107 |
+
endif?>
|
108 |
<form action="<?php echo $phpbase?>/loco-fail.php" method="post">
|
109 |
<input type="hidden" name="path" value="<?php Loco::h($path)?>" />
|
110 |
<input type="hidden" name="action" value="loco-posync" /><?php
|