Loco Translate - Version 1.4.3

Version Description

  • Child themes use parent text domains
    • MO files parsed when PO files missing
    • Handle incorrect usage of PO files as templates
    • Nicer top-level menu with dashicons icon
    • Added IE<=8 warning
Download this release

Release Info

Developer timwhitlock
Plugin Icon 128x128 Loco Translate
Version 1.4.3
Comparing to
See all releases

Code changes from version 1.4.2 to 1.4.3

Files changed (43) hide show
  1. languages/loco-translate-de_DE.mo +0 -0
  2. languages/loco-translate-de_DE.po +70 -46
  3. languages/loco-translate-nl_BE.mo +0 -0
  4. languages/loco-translate-nl_BE.po +235 -197
  5. languages/loco-translate-nl_NL.mo +0 -0
  6. languages/loco-translate-nl_NL.po +235 -197
  7. languages/loco-translate-tr_TR.mo +0 -0
  8. languages/loco-translate-tr_TR.po +70 -46
  9. languages/loco-translate.pot +67 -43
  10. lib/build/gettext-compiled.php +3 -4
  11. lib/build/locales-compiled.php +3 -4
  12. lib/build/shell-compiled.php +2 -3
  13. lib/build/test.php +22 -0
  14. lib/loco-admin.php +163 -47
  15. lib/loco-locales.php +2 -2
  16. lib/loco-packages.php +204 -22
  17. loco.php +1 -1
  18. php/loco-posync.php +1 -1
  19. pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_import-poedit-lib.scssc +0 -0
  20. pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_import-poedit.scssc +0 -0
  21. pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_loco-admin-poedit-lib.scssc +0 -0
  22. pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/loco-admin-poedit-lib.scssc +0 -0
  23. pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/loco-admin.scssc +0 -0
  24. pub/.sass-cache/4ed6af75c0f3919286ece718623a9966a7c474a9/_import-poedit.scssc +0 -0
  25. pub/css/loco-admin.css +1 -1
  26. pub/css/loco-legacy.css +14 -0
  27. pub/img/wp/menu.png +0 -0
  28. pub/js/admin-poinit.js +0 -15
  29. pub/js/build/admin-common.js +1 -0
  30. pub/js/build/admin-poinit.js +1 -0
  31. pub/js/lang/dummy.php +7 -1
  32. pub/js/lang/loco-translate-de_DE.js +3 -3
  33. pub/js/lang/loco-translate-nl_BE.js +3 -3
  34. pub/js/lang/loco-translate-nl_NL.js +3 -3
  35. pub/js/lang/loco-translate-tr_TR.js +33 -0
  36. readme.txt +10 -3
  37. tpl/admin-fscheck.tpl.php +2 -2
  38. tpl/admin-list.tpl.php +7 -2
  39. tpl/admin-nav.tpl.php +18 -15
  40. tpl/admin-opts.tpl.php +1 -1
  41. tpl/admin-poedit.tpl.php +3 -3
  42. tpl/admin-poinit.tpl.php +1 -1
  43. tpl/admin-root.tpl.php +1 -1
languages/loco-translate-de_DE.mo CHANGED
Binary file
languages/loco-translate-de_DE.po CHANGED
@@ -3,11 +3,11 @@ 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: Mon Jan 20 2014 00:38:09 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"
@@ -38,31 +38,39 @@ 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"
@@ -70,85 +78,97 @@ 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
 
@@ -156,38 +176,38 @@ msgstr "Dateidownload ist fehlgeschlagen"
156
  msgid "Unknown language"
157
  msgstr "Unbekannte Sprache"
158
 
159
- #: ../lib/loco-packages.php:273 ../lib/loco-packages.php:279
160
  msgid "Some files not writable"
161
  msgstr "Einige Dateien nicht schreibbar"
162
 
163
- #: ../lib/loco-packages.php:282
164
  msgid "Some files missing"
165
  msgstr "Einige Dateien fehlen"
166
 
167
- #: ../lib/loco-packages.php:288
168
  msgid "\"%s\" folder not writable"
169
  msgstr "Ordner \"%s\" nicht schreibbar"
170
 
171
- #: ../lib/loco-packages.php:299
172
- msgid "Folder not writable"
173
- msgstr "Ordner nicht schreibbar"
174
-
175
- #: ../lib/loco-packages.php:301
176
  msgid "POT file not writable"
177
  msgstr "POT-Datei nicht schreibbar"
178
 
179
- #: ../lib/loco-packages.php:305
180
  msgid "PO file not writable"
181
  msgstr "PO-Datei nicht schreibbar"
182
 
183
- #: ../lib/loco-packages.php:307
184
  msgid "MO file not writable"
185
  msgstr "MO-Datei nicht schreibbar"
186
 
187
- #: ../lib/loco-packages.php:307
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"
@@ -295,6 +315,10 @@ msgstr[1] "%s veraltete Zeichenketten entfernt"
295
  msgid "Your changes will be lost if you continue without saving"
296
  msgstr "Deine Änderungen gehen verloren, wenn du fortsetzt ohne zu Speichern"
297
 
 
 
 
 
298
  #: ../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
299
  msgid "Packages"
300
  msgstr "Pakete"
@@ -335,18 +359,18 @@ msgctxt "Table header"
335
  msgid "File permissions"
336
  msgstr "Dateizugriffsrechte"
337
 
338
- #: ../tpl/admin-list.tpl.php:38
339
  msgid "1 language"
340
  msgid_plural "%u languages"
341
  msgstr[0] "1 Sprache"
342
  msgstr[1] "%u Sprachen"
343
 
344
- #: ../tpl/admin-list.tpl.php:43
345
  msgctxt "Modified time"
346
  msgid "Updated"
347
  msgstr "Aktualisiert"
348
 
349
- #: ../tpl/admin-list.tpl.php:93
350
  msgid "OK"
351
  msgstr "OK"
352
 
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: Sun Mar 09 2014 14:55:38 GMT+0000 (GMT)\n"
7
+ "Last-Translator: admin <r-admin@timwhitlock.info>\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"
38
  msgid "OK"
39
  msgstr "OK"
40
 
41
+ #: ../lib/loco-admin.php:42
42
+ msgid "Permission denied"
43
+ msgstr ""
44
+
45
+ #: ../lib/loco-admin.php:58
46
  msgid "Settings saved"
47
  msgstr "Einstellungen gespeichert"
48
 
49
+ #: ../lib/loco-admin.php:131
50
  msgid "New PO file"
51
  msgstr "Neue PO-Datei"
52
 
53
+ #: ../lib/loco-admin.php:242
54
  msgid "You must specify a valid locale for a new PO file"
55
  msgstr "Du musst einen gültigen Pfad für die PO-Datei angeben"
56
 
57
+ #: ../lib/loco-admin.php:268 ../lib/loco-admin.php:370
58
  msgid "No translatable strings found"
59
  msgstr "Keine übersetzbaren Zeichenketten gefunden"
60
 
61
+ #: ../lib/loco-admin.php:268
62
  msgid "Cannot create a PO file."
63
  msgstr "Erstellen der PO-Datei fehlgeschlagen."
64
 
65
+ #: ../lib/loco-admin.php:275
66
  msgid "PO file already exists with locale %s"
67
  msgstr "PO-Datei existiert schon unter %s"
68
 
69
+ #: ../lib/loco-admin.php:316
70
+ msgid "PO file used as template. This will be renamed to %s on first save"
71
+ msgstr ""
72
+
73
+ #: ../lib/loco-admin.php:340
74
  msgid ""
75
  "File cannot be created automatically. Fix the file permissions or use Download "
76
  "instead of Save"
78
  "Datei kann nicht automatisch erstellt werden. Setze die Datei-Zugriffsrechte "
79
  "oder benutze Download anstatt Speichern"
80
 
81
+ #: ../lib/loco-admin.php:349 ../lib/loco-admin.php:358
82
  msgid "%s file is empty"
83
  msgstr "Datei (%s) ist leer"
84
 
85
+ #: ../lib/loco-admin.php:350 ../lib/loco-admin.php:365
86
  msgid "Run Sync to update from source code"
87
  msgstr "Benutze Sync, um von der Quelle zu aktualisieren"
88
 
89
+ #: ../lib/loco-admin.php:354
90
  msgid "No strings could be extracted from source code"
91
  msgstr "Es konnten keine Zeichenketten vom Quellcode extrahiert werden"
92
 
93
+ #: ../lib/loco-admin.php:361
94
  msgid "Run Sync to update from %s"
95
  msgstr "Benutze Sync, um aus %s zu aktualisieren"
96
 
97
+ #: ../lib/loco-admin.php:380
98
  msgid "Source code has been modified, run Sync to update POT"
99
  msgstr "Quellcode wurde geändert, benutze Sync um POT zu aktualisieren"
100
 
101
+ #: ../lib/loco-admin.php:384
102
  msgid "POT has been modified since PO file was saved, run Sync to update"
103
  msgstr ""
104
  "POT wurde aktualisiert bevor die PO-Datei gespeichert wurde. Benutze Sync zum "
105
  "Aktualisieren."
106
 
107
+ #: ../lib/loco-admin.php:471
108
  msgid "Bad file path"
109
  msgstr "Falscher Dateipfad"
110
 
111
+ #: ../lib/loco-admin.php:685
112
+ msgid "Empty or invalid %s file"
113
+ msgstr ""
114
+
115
+ #: ../lib/loco-admin.php:689
116
+ msgid "%s file has no header"
117
+ msgstr ""
118
+
119
+ #: ../lib/loco-admin.php:820
120
  msgctxt "Add button"
121
  msgid "New template"
122
  msgstr "Neues Template"
123
 
124
+ #: ../lib/loco-admin.php:839
125
  msgctxt "Add button"
126
  msgid "New language"
127
  msgstr "Neue Sprache"
128
 
129
+ #: ../lib/loco-admin.php:878
130
  msgid "%s%% translated"
131
  msgstr "%s%% übersetzt"
132
 
133
+ #: ../lib/loco-admin.php:878
134
  msgid "1 string"
135
  msgid_plural "%s strings"
136
  msgstr[0] "1 Zeichenkette"
137
  msgstr[1] "%s Zeichenketten"
138
 
139
+ #: ../lib/loco-admin.php:881
140
  msgid "%s fuzzy"
141
  msgstr "%s undeutlich"
142
 
143
+ #: ../lib/loco-admin.php:884
144
  msgid "%s untranslated"
145
  msgstr "%s nicht übersetzt"
146
 
147
+ #: ../lib/loco-admin.php:926
148
  msgid "Failed to compile MO file with built-in compiler"
149
  msgstr "Kompilieren der MO-Datei mit dem internen Kompilierer fehlgeschlagen."
150
 
151
+ #: ../lib/loco-admin.php:965 ../tpl/admin-nav.tpl.php:21
152
  msgid "Loco, Translation Management"
153
  msgstr "Loco, Translation Management"
154
 
155
+ #: ../lib/loco-admin.php:966 ../lib/loco-admin.php:996
 
 
 
 
156
  msgid "Manage translations"
157
  msgstr "Übersetzungen verwalten"
158
 
159
+ #: ../lib/loco-admin.php:967
160
+ msgid "Translation options"
161
+ msgstr ""
162
+
163
+ #: ../lib/loco-admin.php:973
164
+ msgid "Loco Translate"
165
+ msgstr ""
166
+
167
+ #: ../lib/loco-admin.php:997 ../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
168
  msgid "Settings"
169
  msgstr "Einstellungen"
170
 
171
+ #: ../lib/loco-admin.php:1021
172
  msgid "File download failed"
173
  msgstr "Dateidownload ist fehlgeschlagen"
174
 
176
  msgid "Unknown language"
177
  msgstr "Unbekannte Sprache"
178
 
179
+ #: ../lib/loco-packages.php:374 ../lib/loco-packages.php:381
180
  msgid "Some files not writable"
181
  msgstr "Einige Dateien nicht schreibbar"
182
 
183
+ #: ../lib/loco-packages.php:384
184
  msgid "Some files missing"
185
  msgstr "Einige Dateien fehlen"
186
 
187
+ #: ../lib/loco-packages.php:390 ../lib/loco-packages.php:394
188
  msgid "\"%s\" folder not writable"
189
  msgstr "Ordner \"%s\" nicht schreibbar"
190
 
191
+ #: ../lib/loco-packages.php:408
 
 
 
 
192
  msgid "POT file not writable"
193
  msgstr "POT-Datei nicht schreibbar"
194
 
195
+ #: ../lib/loco-packages.php:413
196
  msgid "PO file not writable"
197
  msgstr "PO-Datei nicht schreibbar"
198
 
199
+ #: ../lib/loco-packages.php:415
200
  msgid "MO file not writable"
201
  msgstr "MO-Datei nicht schreibbar"
202
 
203
+ #: ../lib/loco-packages.php:415
204
  msgid "MO file not found"
205
  msgstr "MO-Datei nicht gefunden"
206
 
207
+ #: ../lib/loco-packages.php:426
208
+ msgid "Folder not writable"
209
+ msgstr "Ordner nicht schreibbar"
210
+
211
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
212
  msgid "User does not have permission to manage translations"
213
  msgstr "Benutzer hat keine Rechte die Übersetzungen zu verwalten"
315
  msgid "Your changes will be lost if you continue without saving"
316
  msgstr "Deine Änderungen gehen verloren, wenn du fortsetzt ohne zu Speichern"
317
 
318
+ #: ../pub/js/lang/dummy.php:23
319
+ msgid "Translation"
320
+ msgstr "Übersetzung"
321
+
322
  #: ../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
323
  msgid "Packages"
324
  msgstr "Pakete"
359
  msgid "File permissions"
360
  msgstr "Dateizugriffsrechte"
361
 
362
+ #: ../tpl/admin-list.tpl.php:43
363
  msgid "1 language"
364
  msgid_plural "%u languages"
365
  msgstr[0] "1 Sprache"
366
  msgstr[1] "%u Sprachen"
367
 
368
+ #: ../tpl/admin-list.tpl.php:48
369
  msgctxt "Modified time"
370
  msgid "Updated"
371
  msgstr "Aktualisiert"
372
 
373
+ #: ../tpl/admin-list.tpl.php:98
374
  msgid "OK"
375
  msgstr "OK"
376
 
languages/loco-translate-nl_BE.mo CHANGED
Binary file
languages/loco-translate-nl_BE.po CHANGED
@@ -3,11 +3,11 @@ 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: Mon Jan 20 2014 00:38:13 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"
11
  "MIME-Version: 1.0\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
@@ -22,172 +22,6 @@ msgstr ""
22
  "X-Poedit-Basepath: .\n"
23
  "X-Poedit-SearchPath-0: .."
24
 
25
- #: ../lib/loco-admin.php:47
26
- msgid "Settings saved"
27
- msgstr ""
28
-
29
- #: ../lib/loco-admin.php:838
30
- msgid "Failed to compile MO file with built-in compiler"
31
- msgstr ""
32
-
33
- #: ../lib/loco-admin.php:869
34
- msgid "Translation"
35
- msgstr ""
36
-
37
- #: ../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
38
- msgid "Settings"
39
- msgstr ""
40
-
41
- #: ../lib/loco-admin.php:908
42
- msgid "File download failed"
43
- msgstr ""
44
-
45
- #: ../lib/loco-packages.php:249
46
- msgid "Some files missing"
47
- msgstr ""
48
-
49
- #: ../lib/loco-packages.php:266
50
- msgid "Folder not writable"
51
- msgstr ""
52
-
53
- #: ../lib/loco-packages.php:268
54
- msgid "POT file not writable"
55
- msgstr ""
56
-
57
- #: ../lib/loco-packages.php:272
58
- msgid "PO file not writable"
59
- msgstr ""
60
-
61
- #: ../lib/loco-packages.php:274
62
- msgid "MO file not writable"
63
- msgstr ""
64
-
65
- #: ../lib/loco-packages.php:274
66
- msgid "MO file not found"
67
- msgstr ""
68
-
69
- #: ../php/loco-download.php:68 ../php/loco-posave.php:88
70
- msgid "Failed to compile MO file with %s, check your settings"
71
- msgstr ""
72
-
73
- #: ../php/loco-posave.php:23 ../php/loco-posync.php:22
74
- msgid "Package not found called %s"
75
- msgstr ""
76
-
77
- #: ../php/loco-posave.php:69
78
- msgid "Cannot create MO file"
79
- msgstr ""
80
-
81
- #: ../php/loco-posave.php:72
82
- msgid "Cannot overwrite MO file"
83
- msgstr ""
84
-
85
- #: ../php/loco-posave.php:98
86
- msgid "Failed to write MO file"
87
- msgstr ""
88
-
89
- #: ../pub/js/lang/dummy.php:8
90
- msgid "Unknown error"
91
- msgstr ""
92
-
93
- #: ../pub/js/lang/dummy.php:9
94
- msgid "PO file saved"
95
- msgstr ""
96
-
97
- #: ../pub/js/lang/dummy.php:10
98
- msgid "and MO file compiled"
99
- msgstr ""
100
-
101
- #: ../pub/js/lang/dummy.php:11
102
- msgid "Merged from %s"
103
- msgstr ""
104
-
105
- #: ../pub/js/lang/dummy.php:12
106
- msgid "Merged from source code"
107
- msgstr ""
108
-
109
- #: ../pub/js/lang/dummy.php:13
110
- msgid "Already up to date with %s"
111
- msgstr ""
112
-
113
- #: ../pub/js/lang/dummy.php:14
114
- msgid "Already up to date with source code"
115
- msgstr ""
116
-
117
- #: ../pub/js/lang/dummy.php:15
118
- msgid "1 new string added"
119
- msgid_plural "%s new strings added"
120
- msgstr[0] ""
121
- msgstr[1] ""
122
-
123
- #: ../pub/js/lang/dummy.php:16
124
- msgid "1 obsolete string removed"
125
- msgid_plural "%s obsolete strings removed"
126
- msgstr[0] ""
127
- msgstr[1] ""
128
-
129
- #: ../pub/js/lang/dummy.php:17
130
- msgid "Your changes will be lost if you continue without saving"
131
- msgstr ""
132
-
133
- #: ../tpl/admin-fscheck.tpl.php:8
134
- msgid "File check"
135
- msgstr ""
136
-
137
- #: ../tpl/admin-fscheck.tpl.php:17
138
- msgid "File system permissions for %s"
139
- msgstr ""
140
-
141
- #: ../tpl/admin-fscheck.tpl.php:40
142
- msgid "Back"
143
- msgstr ""
144
-
145
- #: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
146
- msgid "Get help"
147
- msgstr ""
148
-
149
- #: ../tpl/admin-list.tpl.php:93
150
- msgid "OK"
151
- msgstr ""
152
-
153
- #: ../tpl/admin-opts.tpl.php:18
154
- msgid "Configure Loco Translate"
155
- msgstr ""
156
-
157
- #: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
158
- msgid "Compiling MO files"
159
- msgstr ""
160
-
161
- #: ../tpl/admin-opts.tpl.php:36
162
- msgid "Use built-in MO compiler."
163
- msgstr ""
164
-
165
- #: ../tpl/admin-opts.tpl.php:42
166
- msgid "Use external command:"
167
- msgstr ""
168
-
169
- #: ../tpl/admin-opts.tpl.php:47
170
- msgid "Enter path to msgfmt on server"
171
- msgstr ""
172
-
173
- #: ../tpl/admin-opts.tpl.php:54
174
- msgid "Generate hash tables"
175
- msgstr ""
176
-
177
- #: ../tpl/admin-opts.tpl.php:63
178
- msgid "Save settings"
179
- msgstr ""
180
-
181
- #: ../tpl/admin-poedit.tpl.php:39
182
- msgctxt "Dropdown label"
183
- msgid "Switch to..."
184
- msgstr ""
185
-
186
- #: ../tpl/admin-root.tpl.php:66
187
- msgctxt "Package list header"
188
- msgid "Core"
189
- msgstr ""
190
-
191
  #. Translators: Bold text label in admin error messages
192
  #: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
193
  msgctxt "Message label"
@@ -204,27 +38,39 @@ msgctxt "Message label"
204
  msgid "OK"
205
  msgstr "OK"
206
 
207
- #: ../lib/loco-admin.php:120
 
 
 
 
 
 
 
 
208
  msgid "New PO file"
209
  msgstr "Nieuw PO-bestand"
210
 
211
- #: ../lib/loco-admin.php:230
212
  msgid "You must specify a valid locale for a new PO file"
213
  msgstr "Specifieer een geldige locale voor een nieuw PO-bestand"
214
 
215
- #: ../lib/loco-admin.php:252 ../lib/loco-admin.php:342
216
  msgid "No translatable strings found"
217
  msgstr "Geen vertaalbare teksten gevonden"
218
 
219
- #: ../lib/loco-admin.php:252
220
  msgid "Cannot create a PO file."
221
  msgstr "Kan geen PO-bestand aanmaken"
222
 
223
- #: ../lib/loco-admin.php:259
224
  msgid "PO file already exists with locale %s"
225
  msgstr "PO-bestand bestaat al in locale %s"
226
 
227
- #: ../lib/loco-admin.php:312
 
 
 
 
228
  msgid ""
229
  "File cannot be created automatically. Fix the file permissions or use Download "
230
  "instead of Save"
@@ -232,91 +78,157 @@ msgstr ""
232
  "Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik "
233
  "download en bewaar."
234
 
235
- #: ../lib/loco-admin.php:321 ../lib/loco-admin.php:330
236
  msgid "%s file is empty"
237
  msgstr "Het bestand %s is leeg"
238
 
239
- #: ../lib/loco-admin.php:322 ../lib/loco-admin.php:337
240
  msgid "Run Sync to update from source code"
241
  msgstr "Voer Sync uit om de broncode up te daten"
242
 
243
- #: ../lib/loco-admin.php:326
244
  msgid "No strings could be extracted from source code"
245
  msgstr "Er kon geen tekst uit de broncode gehaald worden"
246
 
247
- #: ../lib/loco-admin.php:333
248
  msgid "Run Sync to update from %s"
249
  msgstr "Gebruik Sync om vanuit %s up te daten"
250
 
251
- #: ../lib/loco-admin.php:352
252
  msgid "Source code has been modified, run Sync to update POT"
253
  msgstr "Broncode is veranderd. Gebruik Sync om POT up te daten"
254
 
255
- #: ../lib/loco-admin.php:356
256
  msgid "POT has been modified since PO file was saved, run Sync to update"
257
  msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten"
258
 
259
- #: ../lib/loco-admin.php:429
260
  msgid "Bad file path"
261
  msgstr "Foute bestandslocatie"
262
 
263
- #: ../lib/loco-admin.php:732
 
 
 
 
 
 
 
 
264
  msgctxt "Add button"
265
  msgid "New template"
266
  msgstr "Nieuw sjabloon"
267
 
268
- #: ../lib/loco-admin.php:751
269
  msgctxt "Add button"
270
  msgid "New language"
271
  msgstr "Nieuwe taal"
272
 
273
- #: ../lib/loco-admin.php:790
274
  msgid "%s%% translated"
275
  msgstr "%s%% vertaald"
276
 
277
- #: ../lib/loco-admin.php:790
278
  msgid "1 string"
279
  msgid_plural "%s strings"
280
  msgstr[0] "1 te vertalen tekst"
281
  msgstr[1] "%s te vertalen teksten"
282
 
283
- #: ../lib/loco-admin.php:793
284
  msgid "%s fuzzy"
285
  msgstr "%s onzeker"
286
 
287
- #: ../lib/loco-admin.php:796
288
  msgid "%s untranslated"
289
  msgstr "%s onvertaald"
290
 
291
- #: ../lib/loco-admin.php:867
 
 
 
 
292
  msgid "Loco, Translation Management"
293
  msgstr "Loco, vertalingsbeheer"
294
 
295
- #: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
296
  msgid "Manage translations"
297
  msgstr "Beheer vertalingen"
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  #: ../lib/loco-locales.php:70
300
  msgid "Unknown language"
301
  msgstr "Onbekende taal"
302
 
303
- #: ../lib/loco-packages.php:240 ../lib/loco-packages.php:246
304
  msgid "Some files not writable"
305
  msgstr "Sommige bestanden hebben geen schrijfrechten"
306
 
307
- #: ../lib/loco-packages.php:255
 
 
 
 
308
  msgid "\"%s\" folder not writable"
309
  msgstr "Map \"%s\" heeft geen schrijfrechten"
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
312
  msgid "User does not have permission to manage translations"
313
  msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
314
 
 
 
 
 
315
  #: ../php/loco-posave.php:10 ../php/loco-posync.php:9
316
  msgid "Invalid data posted to server"
317
  msgstr "Ongeldige gegevens op server"
318
 
319
- #: ../php/loco-posave.php:37
 
 
 
 
 
 
 
 
 
 
320
  msgid ""
321
  "Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create "
322
  "it manually."
@@ -324,7 +236,7 @@ msgstr ""
324
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak "
325
  "het zelf aan."
326
 
327
- #: ../php/loco-posave.php:40
328
  msgid ""
329
  "Web server cannot create files in the \"%s\" directory. Fix file permissions or "
330
  "use the download function."
@@ -332,7 +244,7 @@ msgstr ""
332
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik "
333
  "de downloadfunctie."
334
 
335
- #: ../php/loco-posave.php:48
336
  msgid ""
337
  "%s file is not writable by the web server. Fix file permissions or download and "
338
  "copy to \"%s/%s\"."
@@ -340,14 +252,90 @@ msgstr ""
340
  "Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
341
  "schrijfrechten of download en kopieer naar \"%s/%s\"."
342
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  #: ../php/loco-posync.php:53
344
  msgid "No strings could be extracted from source files"
345
  msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  #: ../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
348
  msgid "Packages"
349
  msgstr "Pakketten"
350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  #: ../tpl/admin-list.tpl.php:11
352
  msgctxt "Table header"
353
  msgid "Package details"
@@ -368,25 +356,70 @@ msgctxt "Table header"
368
  msgid "File permissions"
369
  msgstr "Bestandsrechten"
370
 
371
- #: ../tpl/admin-list.tpl.php:38
372
  msgid "1 language"
373
  msgid_plural "%u languages"
374
  msgstr[0] "1 taal"
375
  msgstr[1] "%u talen"
376
 
377
- #: ../tpl/admin-list.tpl.php:43
378
  msgctxt "Modified time"
379
  msgid "Updated"
380
  msgstr "Geüpdated"
381
 
 
 
 
 
382
  #: ../tpl/admin-nav.tpl.php:20
383
  msgid "Powered by"
384
  msgstr "Ondersteund door"
385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  #: ../tpl/admin-poedit.tpl.php:31
387
  msgid "Template file"
388
  msgstr "Sjabloonbestand"
389
 
 
 
 
 
 
390
  #: ../tpl/admin-poedit.tpl.php:57
391
  msgid "Updated"
392
  msgstr "Geüpdated"
@@ -478,3 +511,8 @@ msgstr "Thema's"
478
  msgctxt "Package list header"
479
  msgid "Plugins"
480
  msgstr "Plug-ins"
 
 
 
 
 
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: Sun Mar 09 2014 14:55:43 GMT+0000 (GMT)\n"
7
+ "Last-Translator: admin <r-admin@timwhitlock.info>\n"
8
  "Language-Team: \n"
9
  "Language: Dutch (Belgium)\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"
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"
38
  msgid "OK"
39
  msgstr "OK"
40
 
41
+ #: ../lib/loco-admin.php:42
42
+ msgid "Permission denied"
43
+ msgstr ""
44
+
45
+ #: ../lib/loco-admin.php:58
46
+ msgid "Settings saved"
47
+ msgstr ""
48
+
49
+ #: ../lib/loco-admin.php:131
50
  msgid "New PO file"
51
  msgstr "Nieuw PO-bestand"
52
 
53
+ #: ../lib/loco-admin.php:242
54
  msgid "You must specify a valid locale for a new PO file"
55
  msgstr "Specifieer een geldige locale voor een nieuw PO-bestand"
56
 
57
+ #: ../lib/loco-admin.php:268 ../lib/loco-admin.php:370
58
  msgid "No translatable strings found"
59
  msgstr "Geen vertaalbare teksten gevonden"
60
 
61
+ #: ../lib/loco-admin.php:268
62
  msgid "Cannot create a PO file."
63
  msgstr "Kan geen PO-bestand aanmaken"
64
 
65
+ #: ../lib/loco-admin.php:275
66
  msgid "PO file already exists with locale %s"
67
  msgstr "PO-bestand bestaat al in locale %s"
68
 
69
+ #: ../lib/loco-admin.php:316
70
+ msgid "PO file used as template. This will be renamed to %s on first save"
71
+ msgstr ""
72
+
73
+ #: ../lib/loco-admin.php:340
74
  msgid ""
75
  "File cannot be created automatically. Fix the file permissions or use Download "
76
  "instead of Save"
78
  "Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik "
79
  "download en bewaar."
80
 
81
+ #: ../lib/loco-admin.php:349 ../lib/loco-admin.php:358
82
  msgid "%s file is empty"
83
  msgstr "Het bestand %s is leeg"
84
 
85
+ #: ../lib/loco-admin.php:350 ../lib/loco-admin.php:365
86
  msgid "Run Sync to update from source code"
87
  msgstr "Voer Sync uit om de broncode up te daten"
88
 
89
+ #: ../lib/loco-admin.php:354
90
  msgid "No strings could be extracted from source code"
91
  msgstr "Er kon geen tekst uit de broncode gehaald worden"
92
 
93
+ #: ../lib/loco-admin.php:361
94
  msgid "Run Sync to update from %s"
95
  msgstr "Gebruik Sync om vanuit %s up te daten"
96
 
97
+ #: ../lib/loco-admin.php:380
98
  msgid "Source code has been modified, run Sync to update POT"
99
  msgstr "Broncode is veranderd. Gebruik Sync om POT up te daten"
100
 
101
+ #: ../lib/loco-admin.php:384
102
  msgid "POT has been modified since PO file was saved, run Sync to update"
103
  msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten"
104
 
105
+ #: ../lib/loco-admin.php:471
106
  msgid "Bad file path"
107
  msgstr "Foute bestandslocatie"
108
 
109
+ #: ../lib/loco-admin.php:685
110
+ msgid "Empty or invalid %s file"
111
+ msgstr ""
112
+
113
+ #: ../lib/loco-admin.php:689
114
+ msgid "%s file has no header"
115
+ msgstr ""
116
+
117
+ #: ../lib/loco-admin.php:820
118
  msgctxt "Add button"
119
  msgid "New template"
120
  msgstr "Nieuw sjabloon"
121
 
122
+ #: ../lib/loco-admin.php:839
123
  msgctxt "Add button"
124
  msgid "New language"
125
  msgstr "Nieuwe taal"
126
 
127
+ #: ../lib/loco-admin.php:878
128
  msgid "%s%% translated"
129
  msgstr "%s%% vertaald"
130
 
131
+ #: ../lib/loco-admin.php:878
132
  msgid "1 string"
133
  msgid_plural "%s strings"
134
  msgstr[0] "1 te vertalen tekst"
135
  msgstr[1] "%s te vertalen teksten"
136
 
137
+ #: ../lib/loco-admin.php:881
138
  msgid "%s fuzzy"
139
  msgstr "%s onzeker"
140
 
141
+ #: ../lib/loco-admin.php:884
142
  msgid "%s untranslated"
143
  msgstr "%s onvertaald"
144
 
145
+ #: ../lib/loco-admin.php:926
146
+ msgid "Failed to compile MO file with built-in compiler"
147
+ msgstr ""
148
+
149
+ #: ../lib/loco-admin.php:965 ../tpl/admin-nav.tpl.php:21
150
  msgid "Loco, Translation Management"
151
  msgstr "Loco, vertalingsbeheer"
152
 
153
+ #: ../lib/loco-admin.php:966 ../lib/loco-admin.php:996
154
  msgid "Manage translations"
155
  msgstr "Beheer vertalingen"
156
 
157
+ #: ../lib/loco-admin.php:967
158
+ msgid "Translation options"
159
+ msgstr ""
160
+
161
+ #: ../lib/loco-admin.php:973
162
+ msgid "Loco Translate"
163
+ msgstr ""
164
+
165
+ #: ../lib/loco-admin.php:997 ../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
166
+ msgid "Settings"
167
+ msgstr ""
168
+
169
+ #: ../lib/loco-admin.php:1021
170
+ msgid "File download failed"
171
+ msgstr ""
172
+
173
  #: ../lib/loco-locales.php:70
174
  msgid "Unknown language"
175
  msgstr "Onbekende taal"
176
 
177
+ #: ../lib/loco-packages.php:374 ../lib/loco-packages.php:381
178
  msgid "Some files not writable"
179
  msgstr "Sommige bestanden hebben geen schrijfrechten"
180
 
181
+ #: ../lib/loco-packages.php:384
182
+ msgid "Some files missing"
183
+ msgstr ""
184
+
185
+ #: ../lib/loco-packages.php:390 ../lib/loco-packages.php:394
186
  msgid "\"%s\" folder not writable"
187
  msgstr "Map \"%s\" heeft geen schrijfrechten"
188
 
189
+ #: ../lib/loco-packages.php:408
190
+ msgid "POT file not writable"
191
+ msgstr ""
192
+
193
+ #: ../lib/loco-packages.php:413
194
+ msgid "PO file not writable"
195
+ msgstr ""
196
+
197
+ #: ../lib/loco-packages.php:415
198
+ msgid "MO file not writable"
199
+ msgstr ""
200
+
201
+ #: ../lib/loco-packages.php:415
202
+ msgid "MO file not found"
203
+ msgstr ""
204
+
205
+ #: ../lib/loco-packages.php:426
206
+ msgid "Folder not writable"
207
+ msgstr ""
208
+
209
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
210
  msgid "User does not have permission to manage translations"
211
  msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
212
 
213
+ #: ../php/loco-download.php:75 ../php/loco-posave.php:121
214
+ msgid "Failed to compile MO file with %s, check your settings"
215
+ msgstr ""
216
+
217
  #: ../php/loco-posave.php:10 ../php/loco-posync.php:9
218
  msgid "Invalid data posted to server"
219
  msgstr "Ongeldige gegevens op server"
220
 
221
+ #: ../php/loco-posave.php:23 ../php/loco-posync.php:22
222
+ msgid "Package not found called %s"
223
+ msgstr ""
224
+
225
+ #: ../php/loco-posave.php:58
226
+ msgid ""
227
+ "Web server cannot create backups in \"%s\". Fix file permissions or disable "
228
+ "backups in settings"
229
+ msgstr ""
230
+
231
+ #: ../php/loco-posave.php:66
232
  msgid ""
233
  "Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create "
234
  "it manually."
236
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak "
237
  "het zelf aan."
238
 
239
+ #: ../php/loco-posave.php:69
240
  msgid ""
241
  "Web server cannot create files in the \"%s\" directory. Fix file permissions or "
242
  "use the download function."
244
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik "
245
  "de downloadfunctie."
246
 
247
+ #: ../php/loco-posave.php:81
248
  msgid ""
249
  "%s file is not writable by the web server. Fix file permissions or download and "
250
  "copy to \"%s/%s\"."
252
  "Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
253
  "schrijfrechten of download en kopieer naar \"%s/%s\"."
254
 
255
+ #: ../php/loco-posave.php:102
256
+ msgid "Cannot create MO file"
257
+ msgstr ""
258
+
259
+ #: ../php/loco-posave.php:105
260
+ msgid "Cannot overwrite MO file"
261
+ msgstr ""
262
+
263
+ #: ../php/loco-posave.php:131
264
+ msgid "Failed to write MO file"
265
+ msgstr ""
266
+
267
  #: ../php/loco-posync.php:53
268
  msgid "No strings could be extracted from source files"
269
  msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
270
 
271
+ #: ../pub/js/lang/dummy.php:8
272
+ msgid "Unknown error"
273
+ msgstr ""
274
+
275
+ #: ../pub/js/lang/dummy.php:9
276
+ msgid "PO file saved"
277
+ msgstr ""
278
+
279
+ #: ../pub/js/lang/dummy.php:10
280
+ msgid "and MO file compiled"
281
+ msgstr ""
282
+
283
+ #: ../pub/js/lang/dummy.php:11
284
+ msgid "Merged from %s"
285
+ msgstr ""
286
+
287
+ #: ../pub/js/lang/dummy.php:12
288
+ msgid "Merged from source code"
289
+ msgstr ""
290
+
291
+ #: ../pub/js/lang/dummy.php:13
292
+ msgid "Already up to date with %s"
293
+ msgstr ""
294
+
295
+ #: ../pub/js/lang/dummy.php:14
296
+ msgid "Already up to date with source code"
297
+ msgstr ""
298
+
299
+ #: ../pub/js/lang/dummy.php:15
300
+ msgid "1 new string added"
301
+ msgid_plural "%s new strings added"
302
+ msgstr[0] ""
303
+ msgstr[1] ""
304
+
305
+ #: ../pub/js/lang/dummy.php:16
306
+ msgid "1 obsolete string removed"
307
+ msgid_plural "%s obsolete strings removed"
308
+ msgstr[0] ""
309
+ msgstr[1] ""
310
+
311
+ #: ../pub/js/lang/dummy.php:17
312
+ msgid "Your changes will be lost if you continue without saving"
313
+ msgstr ""
314
+
315
+ #: ../pub/js/lang/dummy.php:23
316
+ msgid "Translation"
317
+ msgstr ""
318
+
319
  #: ../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
320
  msgid "Packages"
321
  msgstr "Pakketten"
322
 
323
+ #: ../tpl/admin-fscheck.tpl.php:8
324
+ msgid "File check"
325
+ msgstr ""
326
+
327
+ #: ../tpl/admin-fscheck.tpl.php:17
328
+ msgid "File system permissions for %s"
329
+ msgstr ""
330
+
331
+ #: ../tpl/admin-fscheck.tpl.php:40
332
+ msgid "Back"
333
+ msgstr ""
334
+
335
+ #: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:80
336
+ msgid "Get help"
337
+ msgstr ""
338
+
339
  #: ../tpl/admin-list.tpl.php:11
340
  msgctxt "Table header"
341
  msgid "Package details"
356
  msgid "File permissions"
357
  msgstr "Bestandsrechten"
358
 
359
+ #: ../tpl/admin-list.tpl.php:43
360
  msgid "1 language"
361
  msgid_plural "%u languages"
362
  msgstr[0] "1 taal"
363
  msgstr[1] "%u talen"
364
 
365
+ #: ../tpl/admin-list.tpl.php:48
366
  msgctxt "Modified time"
367
  msgid "Updated"
368
  msgstr "Geüpdated"
369
 
370
+ #: ../tpl/admin-list.tpl.php:98
371
+ msgid "OK"
372
+ msgstr ""
373
+
374
  #: ../tpl/admin-nav.tpl.php:20
375
  msgid "Powered by"
376
  msgstr "Ondersteund door"
377
 
378
+ #: ../tpl/admin-opts.tpl.php:18
379
+ msgid "Configure Loco Translate"
380
+ msgstr ""
381
+
382
+ #: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
383
+ msgid "Compiling MO files"
384
+ msgstr ""
385
+
386
+ #: ../tpl/admin-opts.tpl.php:36
387
+ msgid "Use built-in MO compiler."
388
+ msgstr ""
389
+
390
+ #: ../tpl/admin-opts.tpl.php:42
391
+ msgid "Use external command:"
392
+ msgstr ""
393
+
394
+ #: ../tpl/admin-opts.tpl.php:47
395
+ msgid "Enter path to msgfmt on server"
396
+ msgstr ""
397
+
398
+ #: ../tpl/admin-opts.tpl.php:54
399
+ msgid "Generate hash tables"
400
+ msgstr ""
401
+
402
+ #: ../tpl/admin-opts.tpl.php:61 ../tpl/admin-opts.tpl.php:65
403
+ msgid "Backing up PO files"
404
+ msgstr ""
405
+
406
+ #: ../tpl/admin-opts.tpl.php:69
407
+ msgid "Number of backups to keep of each file:"
408
+ msgstr ""
409
+
410
+ #: ../tpl/admin-opts.tpl.php:79
411
+ msgid "Save settings"
412
+ msgstr ""
413
+
414
  #: ../tpl/admin-poedit.tpl.php:31
415
  msgid "Template file"
416
  msgstr "Sjabloonbestand"
417
 
418
+ #: ../tpl/admin-poedit.tpl.php:39
419
+ msgctxt "Dropdown label"
420
+ msgid "Switch to..."
421
+ msgstr ""
422
+
423
  #: ../tpl/admin-poedit.tpl.php:57
424
  msgid "Updated"
425
  msgstr "Geüpdated"
511
  msgctxt "Package list header"
512
  msgid "Plugins"
513
  msgstr "Plug-ins"
514
+
515
+ #: ../tpl/admin-root.tpl.php:66
516
+ msgctxt "Package list header"
517
+ msgid "Core"
518
+ msgstr ""
languages/loco-translate-nl_NL.mo CHANGED
Binary file
languages/loco-translate-nl_NL.po CHANGED
@@ -3,11 +3,11 @@ 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: Mon Jan 20 2014 00:38:19 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"
11
  "MIME-Version: 1.0\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
@@ -22,172 +22,6 @@ msgstr ""
22
  "X-Poedit-Basepath: .\n"
23
  "X-Poedit-SearchPath-0: .."
24
 
25
- #: ../lib/loco-admin.php:47
26
- msgid "Settings saved"
27
- msgstr ""
28
-
29
- #: ../lib/loco-admin.php:838
30
- msgid "Failed to compile MO file with built-in compiler"
31
- msgstr ""
32
-
33
- #: ../lib/loco-admin.php:869
34
- msgid "Translation"
35
- msgstr ""
36
-
37
- #: ../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
38
- msgid "Settings"
39
- msgstr ""
40
-
41
- #: ../lib/loco-admin.php:908
42
- msgid "File download failed"
43
- msgstr ""
44
-
45
- #: ../lib/loco-packages.php:249
46
- msgid "Some files missing"
47
- msgstr ""
48
-
49
- #: ../lib/loco-packages.php:266
50
- msgid "Folder not writable"
51
- msgstr ""
52
-
53
- #: ../lib/loco-packages.php:268
54
- msgid "POT file not writable"
55
- msgstr ""
56
-
57
- #: ../lib/loco-packages.php:272
58
- msgid "PO file not writable"
59
- msgstr ""
60
-
61
- #: ../lib/loco-packages.php:274
62
- msgid "MO file not writable"
63
- msgstr ""
64
-
65
- #: ../lib/loco-packages.php:274
66
- msgid "MO file not found"
67
- msgstr ""
68
-
69
- #: ../php/loco-download.php:68 ../php/loco-posave.php:88
70
- msgid "Failed to compile MO file with %s, check your settings"
71
- msgstr ""
72
-
73
- #: ../php/loco-posave.php:23 ../php/loco-posync.php:22
74
- msgid "Package not found called %s"
75
- msgstr ""
76
-
77
- #: ../php/loco-posave.php:69
78
- msgid "Cannot create MO file"
79
- msgstr ""
80
-
81
- #: ../php/loco-posave.php:72
82
- msgid "Cannot overwrite MO file"
83
- msgstr ""
84
-
85
- #: ../php/loco-posave.php:98
86
- msgid "Failed to write MO file"
87
- msgstr ""
88
-
89
- #: ../pub/js/lang/dummy.php:8
90
- msgid "Unknown error"
91
- msgstr ""
92
-
93
- #: ../pub/js/lang/dummy.php:9
94
- msgid "PO file saved"
95
- msgstr ""
96
-
97
- #: ../pub/js/lang/dummy.php:10
98
- msgid "and MO file compiled"
99
- msgstr ""
100
-
101
- #: ../pub/js/lang/dummy.php:11
102
- msgid "Merged from %s"
103
- msgstr ""
104
-
105
- #: ../pub/js/lang/dummy.php:12
106
- msgid "Merged from source code"
107
- msgstr ""
108
-
109
- #: ../pub/js/lang/dummy.php:13
110
- msgid "Already up to date with %s"
111
- msgstr ""
112
-
113
- #: ../pub/js/lang/dummy.php:14
114
- msgid "Already up to date with source code"
115
- msgstr ""
116
-
117
- #: ../pub/js/lang/dummy.php:15
118
- msgid "1 new string added"
119
- msgid_plural "%s new strings added"
120
- msgstr[0] ""
121
- msgstr[1] ""
122
-
123
- #: ../pub/js/lang/dummy.php:16
124
- msgid "1 obsolete string removed"
125
- msgid_plural "%s obsolete strings removed"
126
- msgstr[0] ""
127
- msgstr[1] ""
128
-
129
- #: ../pub/js/lang/dummy.php:17
130
- msgid "Your changes will be lost if you continue without saving"
131
- msgstr ""
132
-
133
- #: ../tpl/admin-fscheck.tpl.php:8
134
- msgid "File check"
135
- msgstr ""
136
-
137
- #: ../tpl/admin-fscheck.tpl.php:17
138
- msgid "File system permissions for %s"
139
- msgstr ""
140
-
141
- #: ../tpl/admin-fscheck.tpl.php:40
142
- msgid "Back"
143
- msgstr ""
144
-
145
- #: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:64
146
- msgid "Get help"
147
- msgstr ""
148
-
149
- #: ../tpl/admin-list.tpl.php:93
150
- msgid "OK"
151
- msgstr ""
152
-
153
- #: ../tpl/admin-opts.tpl.php:18
154
- msgid "Configure Loco Translate"
155
- msgstr ""
156
-
157
- #: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
158
- msgid "Compiling MO files"
159
- msgstr ""
160
-
161
- #: ../tpl/admin-opts.tpl.php:36
162
- msgid "Use built-in MO compiler."
163
- msgstr ""
164
-
165
- #: ../tpl/admin-opts.tpl.php:42
166
- msgid "Use external command:"
167
- msgstr ""
168
-
169
- #: ../tpl/admin-opts.tpl.php:47
170
- msgid "Enter path to msgfmt on server"
171
- msgstr ""
172
-
173
- #: ../tpl/admin-opts.tpl.php:54
174
- msgid "Generate hash tables"
175
- msgstr ""
176
-
177
- #: ../tpl/admin-opts.tpl.php:63
178
- msgid "Save settings"
179
- msgstr ""
180
-
181
- #: ../tpl/admin-poedit.tpl.php:39
182
- msgctxt "Dropdown label"
183
- msgid "Switch to..."
184
- msgstr ""
185
-
186
- #: ../tpl/admin-root.tpl.php:66
187
- msgctxt "Package list header"
188
- msgid "Core"
189
- msgstr ""
190
-
191
  #. Translators: Bold text label in admin error messages
192
  #: ../lib/loco-admin.php:15 ../pub/js/lang/dummy.php:7
193
  msgctxt "Message label"
@@ -204,27 +38,39 @@ msgctxt "Message label"
204
  msgid "OK"
205
  msgstr "OK"
206
 
207
- #: ../lib/loco-admin.php:120
 
 
 
 
 
 
 
 
208
  msgid "New PO file"
209
  msgstr "Nieuw PO-bestand"
210
 
211
- #: ../lib/loco-admin.php:230
212
  msgid "You must specify a valid locale for a new PO file"
213
  msgstr "Specifieer een geldige locale voor een nieuw PO-bestand"
214
 
215
- #: ../lib/loco-admin.php:252 ../lib/loco-admin.php:342
216
  msgid "No translatable strings found"
217
  msgstr "Geen vertaalbare teksten gevonden"
218
 
219
- #: ../lib/loco-admin.php:252
220
  msgid "Cannot create a PO file."
221
  msgstr "Kan geen PO-bestand aanmaken"
222
 
223
- #: ../lib/loco-admin.php:259
224
  msgid "PO file already exists with locale %s"
225
  msgstr "PO-bestand bestaat al in locale %s"
226
 
227
- #: ../lib/loco-admin.php:312
 
 
 
 
228
  msgid ""
229
  "File cannot be created automatically. Fix the file permissions or use Download "
230
  "instead of Save"
@@ -232,91 +78,157 @@ msgstr ""
232
  "Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik "
233
  "download en bewaar."
234
 
235
- #: ../lib/loco-admin.php:321 ../lib/loco-admin.php:330
236
  msgid "%s file is empty"
237
  msgstr "Het bestand %s is leeg"
238
 
239
- #: ../lib/loco-admin.php:322 ../lib/loco-admin.php:337
240
  msgid "Run Sync to update from source code"
241
  msgstr "Voer Sync uit om de broncode up te daten"
242
 
243
- #: ../lib/loco-admin.php:326
244
  msgid "No strings could be extracted from source code"
245
  msgstr "Er kon geen tekst uit de broncode gehaald worden"
246
 
247
- #: ../lib/loco-admin.php:333
248
  msgid "Run Sync to update from %s"
249
  msgstr "Gebruik Sync om vanuit %s up te daten"
250
 
251
- #: ../lib/loco-admin.php:352
252
  msgid "Source code has been modified, run Sync to update POT"
253
  msgstr "Broncode is veranderd. Gebruik Sync om POT up te daten"
254
 
255
- #: ../lib/loco-admin.php:356
256
  msgid "POT has been modified since PO file was saved, run Sync to update"
257
  msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten"
258
 
259
- #: ../lib/loco-admin.php:429
260
  msgid "Bad file path"
261
  msgstr "Foute bestandslocatie"
262
 
263
- #: ../lib/loco-admin.php:732
 
 
 
 
 
 
 
 
264
  msgctxt "Add button"
265
  msgid "New template"
266
  msgstr "Nieuw sjabloon"
267
 
268
- #: ../lib/loco-admin.php:751
269
  msgctxt "Add button"
270
  msgid "New language"
271
  msgstr "Nieuwe taal"
272
 
273
- #: ../lib/loco-admin.php:790
274
  msgid "%s%% translated"
275
  msgstr "%s%% vertaald"
276
 
277
- #: ../lib/loco-admin.php:790
278
  msgid "1 string"
279
  msgid_plural "%s strings"
280
  msgstr[0] "1 te vertalen tekst"
281
  msgstr[1] "%s te vertalen teksten"
282
 
283
- #: ../lib/loco-admin.php:793
284
  msgid "%s fuzzy"
285
  msgstr "%s onzeker"
286
 
287
- #: ../lib/loco-admin.php:796
288
  msgid "%s untranslated"
289
  msgstr "%s onvertaald"
290
 
291
- #: ../lib/loco-admin.php:867
 
 
 
 
292
  msgid "Loco, Translation Management"
293
  msgstr "Loco, vertalingsbeheer"
294
 
295
- #: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
296
  msgid "Manage translations"
297
  msgstr "Beheer vertalingen"
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  #: ../lib/loco-locales.php:70
300
  msgid "Unknown language"
301
  msgstr "Onbekende taal"
302
 
303
- #: ../lib/loco-packages.php:240 ../lib/loco-packages.php:246
304
  msgid "Some files not writable"
305
  msgstr "Sommige bestanden hebben geen schrijfrechten"
306
 
307
- #: ../lib/loco-packages.php:255
 
 
 
 
308
  msgid "\"%s\" folder not writable"
309
  msgstr "Map \"%s\" heeft geen schrijfrechten"
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
312
  msgid "User does not have permission to manage translations"
313
  msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
314
 
 
 
 
 
315
  #: ../php/loco-posave.php:10 ../php/loco-posync.php:9
316
  msgid "Invalid data posted to server"
317
  msgstr "Ongeldige gegevens op server"
318
 
319
- #: ../php/loco-posave.php:37
 
 
 
 
 
 
 
 
 
 
320
  msgid ""
321
  "Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create "
322
  "it manually."
@@ -324,7 +236,7 @@ msgstr ""
324
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak "
325
  "het zelf aan."
326
 
327
- #: ../php/loco-posave.php:40
328
  msgid ""
329
  "Web server cannot create files in the \"%s\" directory. Fix file permissions or "
330
  "use the download function."
@@ -332,7 +244,7 @@ msgstr ""
332
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik "
333
  "de downloadfunctie."
334
 
335
- #: ../php/loco-posave.php:48
336
  msgid ""
337
  "%s file is not writable by the web server. Fix file permissions or download and "
338
  "copy to \"%s/%s\"."
@@ -340,14 +252,90 @@ msgstr ""
340
  "Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
341
  "schrijfrechten of download en kopieer naar \"%s/%s\"."
342
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  #: ../php/loco-posync.php:53
344
  msgid "No strings could be extracted from source files"
345
  msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  #: ../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
348
  msgid "Packages"
349
  msgstr "Pakketten"
350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  #: ../tpl/admin-list.tpl.php:11
352
  msgctxt "Table header"
353
  msgid "Package details"
@@ -368,25 +356,70 @@ msgctxt "Table header"
368
  msgid "File permissions"
369
  msgstr "Bestandsrechten"
370
 
371
- #: ../tpl/admin-list.tpl.php:38
372
  msgid "1 language"
373
  msgid_plural "%u languages"
374
  msgstr[0] "1 taal"
375
  msgstr[1] "%u talen"
376
 
377
- #: ../tpl/admin-list.tpl.php:43
378
  msgctxt "Modified time"
379
  msgid "Updated"
380
  msgstr "Geüpdated"
381
 
 
 
 
 
382
  #: ../tpl/admin-nav.tpl.php:20
383
  msgid "Powered by"
384
  msgstr "Ondersteund door"
385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  #: ../tpl/admin-poedit.tpl.php:31
387
  msgid "Template file"
388
  msgstr "Sjabloonbestand"
389
 
 
 
 
 
 
390
  #: ../tpl/admin-poedit.tpl.php:57
391
  msgid "Updated"
392
  msgstr "Geüpdated"
@@ -478,3 +511,8 @@ msgstr "Thema's"
478
  msgctxt "Package list header"
479
  msgid "Plugins"
480
  msgstr "Plug-ins"
 
 
 
 
 
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: Sun Mar 09 2014 14:55:48 GMT+0000 (GMT)\n"
7
+ "Last-Translator: admin <r-admin@timwhitlock.info>\n"
8
  "Language-Team: \n"
9
  "Language: Dutch\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"
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"
38
  msgid "OK"
39
  msgstr "OK"
40
 
41
+ #: ../lib/loco-admin.php:42
42
+ msgid "Permission denied"
43
+ msgstr ""
44
+
45
+ #: ../lib/loco-admin.php:58
46
+ msgid "Settings saved"
47
+ msgstr ""
48
+
49
+ #: ../lib/loco-admin.php:131
50
  msgid "New PO file"
51
  msgstr "Nieuw PO-bestand"
52
 
53
+ #: ../lib/loco-admin.php:242
54
  msgid "You must specify a valid locale for a new PO file"
55
  msgstr "Specifieer een geldige locale voor een nieuw PO-bestand"
56
 
57
+ #: ../lib/loco-admin.php:268 ../lib/loco-admin.php:370
58
  msgid "No translatable strings found"
59
  msgstr "Geen vertaalbare teksten gevonden"
60
 
61
+ #: ../lib/loco-admin.php:268
62
  msgid "Cannot create a PO file."
63
  msgstr "Kan geen PO-bestand aanmaken"
64
 
65
+ #: ../lib/loco-admin.php:275
66
  msgid "PO file already exists with locale %s"
67
  msgstr "PO-bestand bestaat al in locale %s"
68
 
69
+ #: ../lib/loco-admin.php:316
70
+ msgid "PO file used as template. This will be renamed to %s on first save"
71
+ msgstr ""
72
+
73
+ #: ../lib/loco-admin.php:340
74
  msgid ""
75
  "File cannot be created automatically. Fix the file permissions or use Download "
76
  "instead of Save"
78
  "Bestand kan niet automatisch aangemaakt worden. Verander de rechten of gebruik "
79
  "download en bewaar."
80
 
81
+ #: ../lib/loco-admin.php:349 ../lib/loco-admin.php:358
82
  msgid "%s file is empty"
83
  msgstr "Het bestand %s is leeg"
84
 
85
+ #: ../lib/loco-admin.php:350 ../lib/loco-admin.php:365
86
  msgid "Run Sync to update from source code"
87
  msgstr "Voer Sync uit om de broncode up te daten"
88
 
89
+ #: ../lib/loco-admin.php:354
90
  msgid "No strings could be extracted from source code"
91
  msgstr "Er kon geen tekst uit de broncode gehaald worden"
92
 
93
+ #: ../lib/loco-admin.php:361
94
  msgid "Run Sync to update from %s"
95
  msgstr "Gebruik Sync om vanuit %s up te daten"
96
 
97
+ #: ../lib/loco-admin.php:380
98
  msgid "Source code has been modified, run Sync to update POT"
99
  msgstr "Broncode is veranderd. Gebruik Sync om POT up te daten"
100
 
101
+ #: ../lib/loco-admin.php:384
102
  msgid "POT has been modified since PO file was saved, run Sync to update"
103
  msgstr "POT is veranderd sedert bewaren van het PO-bestand. Gebruik Sync om up te daten"
104
 
105
+ #: ../lib/loco-admin.php:471
106
  msgid "Bad file path"
107
  msgstr "Foute bestandslocatie"
108
 
109
+ #: ../lib/loco-admin.php:685
110
+ msgid "Empty or invalid %s file"
111
+ msgstr ""
112
+
113
+ #: ../lib/loco-admin.php:689
114
+ msgid "%s file has no header"
115
+ msgstr ""
116
+
117
+ #: ../lib/loco-admin.php:820
118
  msgctxt "Add button"
119
  msgid "New template"
120
  msgstr "Nieuw sjabloon"
121
 
122
+ #: ../lib/loco-admin.php:839
123
  msgctxt "Add button"
124
  msgid "New language"
125
  msgstr "Nieuwe taal"
126
 
127
+ #: ../lib/loco-admin.php:878
128
  msgid "%s%% translated"
129
  msgstr "%s%% vertaald"
130
 
131
+ #: ../lib/loco-admin.php:878
132
  msgid "1 string"
133
  msgid_plural "%s strings"
134
  msgstr[0] "1 te vertalen tekst"
135
  msgstr[1] "%s te vertalen teksten"
136
 
137
+ #: ../lib/loco-admin.php:881
138
  msgid "%s fuzzy"
139
  msgstr "%s onzeker"
140
 
141
+ #: ../lib/loco-admin.php:884
142
  msgid "%s untranslated"
143
  msgstr "%s onvertaald"
144
 
145
+ #: ../lib/loco-admin.php:926
146
+ msgid "Failed to compile MO file with built-in compiler"
147
+ msgstr ""
148
+
149
+ #: ../lib/loco-admin.php:965 ../tpl/admin-nav.tpl.php:21
150
  msgid "Loco, Translation Management"
151
  msgstr "Loco, vertalingsbeheer"
152
 
153
+ #: ../lib/loco-admin.php:966 ../lib/loco-admin.php:996
154
  msgid "Manage translations"
155
  msgstr "Beheer vertalingen"
156
 
157
+ #: ../lib/loco-admin.php:967
158
+ msgid "Translation options"
159
+ msgstr ""
160
+
161
+ #: ../lib/loco-admin.php:973
162
+ msgid "Loco Translate"
163
+ msgstr ""
164
+
165
+ #: ../lib/loco-admin.php:997 ../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
166
+ msgid "Settings"
167
+ msgstr ""
168
+
169
+ #: ../lib/loco-admin.php:1021
170
+ msgid "File download failed"
171
+ msgstr ""
172
+
173
  #: ../lib/loco-locales.php:70
174
  msgid "Unknown language"
175
  msgstr "Onbekende taal"
176
 
177
+ #: ../lib/loco-packages.php:374 ../lib/loco-packages.php:381
178
  msgid "Some files not writable"
179
  msgstr "Sommige bestanden hebben geen schrijfrechten"
180
 
181
+ #: ../lib/loco-packages.php:384
182
+ msgid "Some files missing"
183
+ msgstr ""
184
+
185
+ #: ../lib/loco-packages.php:390 ../lib/loco-packages.php:394
186
  msgid "\"%s\" folder not writable"
187
  msgstr "Map \"%s\" heeft geen schrijfrechten"
188
 
189
+ #: ../lib/loco-packages.php:408
190
+ msgid "POT file not writable"
191
+ msgstr ""
192
+
193
+ #: ../lib/loco-packages.php:413
194
+ msgid "PO file not writable"
195
+ msgstr ""
196
+
197
+ #: ../lib/loco-packages.php:415
198
+ msgid "MO file not writable"
199
+ msgstr ""
200
+
201
+ #: ../lib/loco-packages.php:415
202
+ msgid "MO file not found"
203
+ msgstr ""
204
+
205
+ #: ../lib/loco-packages.php:426
206
+ msgid "Folder not writable"
207
+ msgstr ""
208
+
209
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
210
  msgid "User does not have permission to manage translations"
211
  msgstr "Gebruik heeft geen rechten om vertalingen te beheren"
212
 
213
+ #: ../php/loco-download.php:75 ../php/loco-posave.php:121
214
+ msgid "Failed to compile MO file with %s, check your settings"
215
+ msgstr ""
216
+
217
  #: ../php/loco-posave.php:10 ../php/loco-posync.php:9
218
  msgid "Invalid data posted to server"
219
  msgstr "Ongeldige gegevens op server"
220
 
221
+ #: ../php/loco-posave.php:23 ../php/loco-posync.php:22
222
+ msgid "Package not found called %s"
223
+ msgstr ""
224
+
225
+ #: ../php/loco-posave.php:58
226
+ msgid ""
227
+ "Web server cannot create backups in \"%s\". Fix file permissions or disable "
228
+ "backups in settings"
229
+ msgstr ""
230
+
231
+ #: ../php/loco-posave.php:66
232
  msgid ""
233
  "Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create "
234
  "it manually."
236
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of maak "
237
  "het zelf aan."
238
 
239
+ #: ../php/loco-posave.php:69
240
  msgid ""
241
  "Web server cannot create files in the \"%s\" directory. Fix file permissions or "
242
  "use the download function."
244
  "Webserver kan map \"%s\" in \"%s\" niet aanmaken. Bewerk bestandsrechten of gebruik "
245
  "de downloadfunctie."
246
 
247
+ #: ../php/loco-posave.php:81
248
  msgid ""
249
  "%s file is not writable by the web server. Fix file permissions or download and "
250
  "copy to \"%s/%s\"."
252
  "Bestand %s kan niet beschreven worden door de webserver. Bewerk de "
253
  "schrijfrechten of download en kopieer naar \"%s/%s\"."
254
 
255
+ #: ../php/loco-posave.php:102
256
+ msgid "Cannot create MO file"
257
+ msgstr ""
258
+
259
+ #: ../php/loco-posave.php:105
260
+ msgid "Cannot overwrite MO file"
261
+ msgstr ""
262
+
263
+ #: ../php/loco-posave.php:131
264
+ msgid "Failed to write MO file"
265
+ msgstr ""
266
+
267
  #: ../php/loco-posync.php:53
268
  msgid "No strings could be extracted from source files"
269
  msgstr "Er konden geen te vertalen teksten uit de bronbestanden gehaald worden"
270
 
271
+ #: ../pub/js/lang/dummy.php:8
272
+ msgid "Unknown error"
273
+ msgstr ""
274
+
275
+ #: ../pub/js/lang/dummy.php:9
276
+ msgid "PO file saved"
277
+ msgstr ""
278
+
279
+ #: ../pub/js/lang/dummy.php:10
280
+ msgid "and MO file compiled"
281
+ msgstr ""
282
+
283
+ #: ../pub/js/lang/dummy.php:11
284
+ msgid "Merged from %s"
285
+ msgstr ""
286
+
287
+ #: ../pub/js/lang/dummy.php:12
288
+ msgid "Merged from source code"
289
+ msgstr ""
290
+
291
+ #: ../pub/js/lang/dummy.php:13
292
+ msgid "Already up to date with %s"
293
+ msgstr ""
294
+
295
+ #: ../pub/js/lang/dummy.php:14
296
+ msgid "Already up to date with source code"
297
+ msgstr ""
298
+
299
+ #: ../pub/js/lang/dummy.php:15
300
+ msgid "1 new string added"
301
+ msgid_plural "%s new strings added"
302
+ msgstr[0] ""
303
+ msgstr[1] ""
304
+
305
+ #: ../pub/js/lang/dummy.php:16
306
+ msgid "1 obsolete string removed"
307
+ msgid_plural "%s obsolete strings removed"
308
+ msgstr[0] ""
309
+ msgstr[1] ""
310
+
311
+ #: ../pub/js/lang/dummy.php:17
312
+ msgid "Your changes will be lost if you continue without saving"
313
+ msgstr ""
314
+
315
+ #: ../pub/js/lang/dummy.php:23
316
+ msgid "Translation"
317
+ msgstr ""
318
+
319
  #: ../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
320
  msgid "Packages"
321
  msgstr "Pakketten"
322
 
323
+ #: ../tpl/admin-fscheck.tpl.php:8
324
+ msgid "File check"
325
+ msgstr ""
326
+
327
+ #: ../tpl/admin-fscheck.tpl.php:17
328
+ msgid "File system permissions for %s"
329
+ msgstr ""
330
+
331
+ #: ../tpl/admin-fscheck.tpl.php:40
332
+ msgid "Back"
333
+ msgstr ""
334
+
335
+ #: ../tpl/admin-fscheck.tpl.php:41 ../tpl/admin-opts.tpl.php:80
336
+ msgid "Get help"
337
+ msgstr ""
338
+
339
  #: ../tpl/admin-list.tpl.php:11
340
  msgctxt "Table header"
341
  msgid "Package details"
356
  msgid "File permissions"
357
  msgstr "Bestandsrechten"
358
 
359
+ #: ../tpl/admin-list.tpl.php:43
360
  msgid "1 language"
361
  msgid_plural "%u languages"
362
  msgstr[0] "1 taal"
363
  msgstr[1] "%u talen"
364
 
365
+ #: ../tpl/admin-list.tpl.php:48
366
  msgctxt "Modified time"
367
  msgid "Updated"
368
  msgstr "Geüpdated"
369
 
370
+ #: ../tpl/admin-list.tpl.php:98
371
+ msgid "OK"
372
+ msgstr ""
373
+
374
  #: ../tpl/admin-nav.tpl.php:20
375
  msgid "Powered by"
376
  msgstr "Ondersteund door"
377
 
378
+ #: ../tpl/admin-opts.tpl.php:18
379
+ msgid "Configure Loco Translate"
380
+ msgstr ""
381
+
382
+ #: ../tpl/admin-opts.tpl.php:27 ../tpl/admin-opts.tpl.php:31
383
+ msgid "Compiling MO files"
384
+ msgstr ""
385
+
386
+ #: ../tpl/admin-opts.tpl.php:36
387
+ msgid "Use built-in MO compiler."
388
+ msgstr ""
389
+
390
+ #: ../tpl/admin-opts.tpl.php:42
391
+ msgid "Use external command:"
392
+ msgstr ""
393
+
394
+ #: ../tpl/admin-opts.tpl.php:47
395
+ msgid "Enter path to msgfmt on server"
396
+ msgstr ""
397
+
398
+ #: ../tpl/admin-opts.tpl.php:54
399
+ msgid "Generate hash tables"
400
+ msgstr ""
401
+
402
+ #: ../tpl/admin-opts.tpl.php:61 ../tpl/admin-opts.tpl.php:65
403
+ msgid "Backing up PO files"
404
+ msgstr ""
405
+
406
+ #: ../tpl/admin-opts.tpl.php:69
407
+ msgid "Number of backups to keep of each file:"
408
+ msgstr ""
409
+
410
+ #: ../tpl/admin-opts.tpl.php:79
411
+ msgid "Save settings"
412
+ msgstr ""
413
+
414
  #: ../tpl/admin-poedit.tpl.php:31
415
  msgid "Template file"
416
  msgstr "Sjabloonbestand"
417
 
418
+ #: ../tpl/admin-poedit.tpl.php:39
419
+ msgctxt "Dropdown label"
420
+ msgid "Switch to..."
421
+ msgstr ""
422
+
423
  #: ../tpl/admin-poedit.tpl.php:57
424
  msgid "Updated"
425
  msgstr "Geüpdated"
511
  msgctxt "Package list header"
512
  msgid "Plugins"
513
  msgstr "Plug-ins"
514
+
515
+ #: ../tpl/admin-root.tpl.php:66
516
+ msgctxt "Package list header"
517
+ msgid "Core"
518
+ msgstr ""
languages/loco-translate-tr_TR.mo CHANGED
Binary file
languages/loco-translate-tr_TR.po CHANGED
@@ -3,11 +3,11 @@ 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: Mon Mar 03 2014 12:28:24 GMT+0000 (GMT)\n"
7
- "Last-Translator: admin <animal@192.168.0.7.xip.io>\n"
8
  "Language-Team: \n"
9
  "Language: Turkish\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"
@@ -38,31 +38,39 @@ msgctxt "Message label"
38
  msgid "OK"
39
  msgstr "TAMAM"
40
 
41
- #: ../lib/loco-admin.php:47
 
 
 
 
42
  msgid "Settings saved"
43
  msgstr "Ayarlar saklandı"
44
 
45
- #: ../lib/loco-admin.php:120
46
  msgid "New PO file"
47
  msgstr "Yeni PO Dosyası"
48
 
49
- #: ../lib/loco-admin.php:230
50
  msgid "You must specify a valid locale for a new PO file"
51
  msgstr "Yeni PO dosyası için geçerli bir locale değeri belirtmek zorundasınız"
52
 
53
- #: ../lib/loco-admin.php:252 ../lib/loco-admin.php:342
54
  msgid "No translatable strings found"
55
  msgstr "Çevrilebilir cümle bulunamadı"
56
 
57
- #: ../lib/loco-admin.php:252
58
  msgid "Cannot create a PO file."
59
  msgstr "Bir PO dosyası oluşturulamıyor."
60
 
61
- #: ../lib/loco-admin.php:259
62
  msgid "PO file already exists with locale %s"
63
  msgstr "PO dosyası %s locale değeri ile zaten mevcut"
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"
@@ -70,85 +78,97 @@ msgstr ""
70
  "Dosya otomatik olarak oluşturulamıyor. Dosya izinlerini tamir edin ya da "
71
  "Saklama yerine İndirin."
72
 
73
- #: ../lib/loco-admin.php:321 ../lib/loco-admin.php:330
74
  msgid "%s file is empty"
75
  msgstr "%s dosyası boş"
76
 
77
- #: ../lib/loco-admin.php:322 ../lib/loco-admin.php:337
78
  msgid "Run Sync to update from source code"
79
  msgstr "Kaynak dosyasından güncelleme için Senkr. çalıştır"
80
 
81
- #: ../lib/loco-admin.php:326
82
  msgid "No strings could be extracted from source code"
83
  msgstr "Kaynak kodundan herhangi cümle çıkarılamadı"
84
 
85
- #: ../lib/loco-admin.php:333
86
  msgid "Run Sync to update from %s"
87
  msgstr "%s üzerinden güncelleme için Senkr. çalıştır"
88
 
89
- #: ../lib/loco-admin.php:352
90
  msgid "Source code has been modified, run Sync to update POT"
91
  msgstr "Kaynak dosyası değiştirilmiş, POT güncellemesi için Senkr. çalıştırın"
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
  "PO dosyası en son saklandığından beri POT değişikliğe uğramış, güncelleme için "
97
  "Senkr. çalıştırın."
98
 
99
- #: ../lib/loco-admin.php:429
100
  msgid "Bad file path"
101
  msgstr "Uygun olmayan dosya yolu"
102
 
103
- #: ../lib/loco-admin.php:732
 
 
 
 
 
 
 
 
104
  msgctxt "Add button"
105
  msgid "New template"
106
  msgstr "Yeni şablon"
107
 
108
- #: ../lib/loco-admin.php:751
109
  msgctxt "Add button"
110
  msgid "New language"
111
  msgstr "Yeni dil"
112
 
113
- #: ../lib/loco-admin.php:790
114
  msgid "%s%% translated"
115
  msgstr "%s%% çevrildi"
116
 
117
- #: ../lib/loco-admin.php:790
118
  msgid "1 string"
119
  msgid_plural "%s strings"
120
  msgstr[0] "1 cümle"
121
  msgstr[1] "%s cümle"
122
 
123
- #: ../lib/loco-admin.php:793
124
  msgid "%s fuzzy"
125
  msgstr "%s bulanık"
126
 
127
- #: ../lib/loco-admin.php:796
128
  msgid "%s untranslated"
129
  msgstr "%s çevrilmemiş"
130
 
131
- #: ../lib/loco-admin.php:838
132
  msgid "Failed to compile MO file with built-in compiler"
133
  msgstr "Dahili derleyici ile MO derlemesinde hata"
134
 
135
- #: ../lib/loco-admin.php:867
136
  msgid "Loco, Translation Management"
137
  msgstr "Loco, Çevri Yönetimi"
138
 
139
- #: ../lib/loco-admin.php:869
140
- msgid "Translation"
141
- msgstr "Çevri"
142
-
143
- #: ../lib/loco-admin.php:872 ../lib/loco-admin.php:883
144
  msgid "Manage translations"
145
  msgstr "Çevrileri Yönet"
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 "Ayarlar"
150
 
151
- #: ../lib/loco-admin.php:908
152
  msgid "File download failed"
153
  msgstr "Dosya indirme hatası"
154
 
@@ -156,38 +176,38 @@ msgstr "Dosya indirme hatası"
156
  msgid "Unknown language"
157
  msgstr "Bilinmeyen dil"
158
 
159
- #: ../lib/loco-packages.php:273 ../lib/loco-packages.php:279
160
  msgid "Some files not writable"
161
  msgstr "Bazı dosyalar yazılabilir değil"
162
 
163
- #: ../lib/loco-packages.php:282
164
  msgid "Some files missing"
165
  msgstr "Bazı dosyalar eksik"
166
 
167
- #: ../lib/loco-packages.php:288
168
  msgid "\"%s\" folder not writable"
169
  msgstr "\"%s\" dizini yazılabilir değil"
170
 
171
- #: ../lib/loco-packages.php:299
172
- msgid "Folder not writable"
173
- msgstr "Dizin yazılabilir değil"
174
-
175
- #: ../lib/loco-packages.php:301
176
  msgid "POT file not writable"
177
  msgstr "POT dosyası yazılabilir değil"
178
 
179
- #: ../lib/loco-packages.php:305
180
  msgid "PO file not writable"
181
  msgstr "PO dosyası yazılabilir değil"
182
 
183
- #: ../lib/loco-packages.php:307
184
  msgid "MO file not writable"
185
  msgstr "MO dosyası yazılabilir değil"
186
 
187
- #: ../lib/loco-packages.php:307
188
  msgid "MO file not found"
189
  msgstr "MO dosyası bulunamadı"
190
 
 
 
 
 
191
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
192
  msgid "User does not have permission to manage translations"
193
  msgstr "Kullanıcı çevrileri yönetmeye yetkili değil"
@@ -294,6 +314,10 @@ msgstr[1] "%s kullanımdışı cümle kaldırıldı"
294
  msgid "Your changes will be lost if you continue without saving"
295
  msgstr "Saklamadan devam ederseniz değişiklikleriniz kaybolacak"
296
 
 
 
 
 
297
  #: ../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
298
  msgid "Packages"
299
  msgstr "Paketler"
@@ -334,18 +358,18 @@ msgctxt "Table header"
334
  msgid "File permissions"
335
  msgstr "Dosya izinleri"
336
 
337
- #: ../tpl/admin-list.tpl.php:38
338
  msgid "1 language"
339
  msgid_plural "%u languages"
340
  msgstr[0] "1 dil"
341
  msgstr[1] "%u dil"
342
 
343
- #: ../tpl/admin-list.tpl.php:43
344
  msgctxt "Modified time"
345
  msgid "Updated"
346
  msgstr "Güncellenme"
347
 
348
- #: ../tpl/admin-list.tpl.php:93
349
  msgid "OK"
350
  msgstr "TAMAM"
351
 
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: Sun Mar 09 2014 14:56:01 GMT+0000 (GMT)\n"
7
+ "Last-Translator: admin <r-admin@timwhitlock.info>\n"
8
  "Language-Team: \n"
9
  "Language: Turkish\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"
38
  msgid "OK"
39
  msgstr "TAMAM"
40
 
41
+ #: ../lib/loco-admin.php:42
42
+ msgid "Permission denied"
43
+ msgstr ""
44
+
45
+ #: ../lib/loco-admin.php:58
46
  msgid "Settings saved"
47
  msgstr "Ayarlar saklandı"
48
 
49
+ #: ../lib/loco-admin.php:131
50
  msgid "New PO file"
51
  msgstr "Yeni PO Dosyası"
52
 
53
+ #: ../lib/loco-admin.php:242
54
  msgid "You must specify a valid locale for a new PO file"
55
  msgstr "Yeni PO dosyası için geçerli bir locale değeri belirtmek zorundasınız"
56
 
57
+ #: ../lib/loco-admin.php:268 ../lib/loco-admin.php:370
58
  msgid "No translatable strings found"
59
  msgstr "Çevrilebilir cümle bulunamadı"
60
 
61
+ #: ../lib/loco-admin.php:268
62
  msgid "Cannot create a PO file."
63
  msgstr "Bir PO dosyası oluşturulamıyor."
64
 
65
+ #: ../lib/loco-admin.php:275
66
  msgid "PO file already exists with locale %s"
67
  msgstr "PO dosyası %s locale değeri ile zaten mevcut"
68
 
69
+ #: ../lib/loco-admin.php:316
70
+ msgid "PO file used as template. This will be renamed to %s on first save"
71
+ msgstr ""
72
+
73
+ #: ../lib/loco-admin.php:340
74
  msgid ""
75
  "File cannot be created automatically. Fix the file permissions or use Download "
76
  "instead of Save"
78
  "Dosya otomatik olarak oluşturulamıyor. Dosya izinlerini tamir edin ya da "
79
  "Saklama yerine İndirin."
80
 
81
+ #: ../lib/loco-admin.php:349 ../lib/loco-admin.php:358
82
  msgid "%s file is empty"
83
  msgstr "%s dosyası boş"
84
 
85
+ #: ../lib/loco-admin.php:350 ../lib/loco-admin.php:365
86
  msgid "Run Sync to update from source code"
87
  msgstr "Kaynak dosyasından güncelleme için Senkr. çalıştır"
88
 
89
+ #: ../lib/loco-admin.php:354
90
  msgid "No strings could be extracted from source code"
91
  msgstr "Kaynak kodundan herhangi cümle çıkarılamadı"
92
 
93
+ #: ../lib/loco-admin.php:361
94
  msgid "Run Sync to update from %s"
95
  msgstr "%s üzerinden güncelleme için Senkr. çalıştır"
96
 
97
+ #: ../lib/loco-admin.php:380
98
  msgid "Source code has been modified, run Sync to update POT"
99
  msgstr "Kaynak dosyası değiştirilmiş, POT güncellemesi için Senkr. çalıştırın"
100
 
101
+ #: ../lib/loco-admin.php:384
102
  msgid "POT has been modified since PO file was saved, run Sync to update"
103
  msgstr ""
104
  "PO dosyası en son saklandığından beri POT değişikliğe uğramış, güncelleme için "
105
  "Senkr. çalıştırın."
106
 
107
+ #: ../lib/loco-admin.php:471
108
  msgid "Bad file path"
109
  msgstr "Uygun olmayan dosya yolu"
110
 
111
+ #: ../lib/loco-admin.php:685
112
+ msgid "Empty or invalid %s file"
113
+ msgstr ""
114
+
115
+ #: ../lib/loco-admin.php:689
116
+ msgid "%s file has no header"
117
+ msgstr ""
118
+
119
+ #: ../lib/loco-admin.php:820
120
  msgctxt "Add button"
121
  msgid "New template"
122
  msgstr "Yeni şablon"
123
 
124
+ #: ../lib/loco-admin.php:839
125
  msgctxt "Add button"
126
  msgid "New language"
127
  msgstr "Yeni dil"
128
 
129
+ #: ../lib/loco-admin.php:878
130
  msgid "%s%% translated"
131
  msgstr "%s%% çevrildi"
132
 
133
+ #: ../lib/loco-admin.php:878
134
  msgid "1 string"
135
  msgid_plural "%s strings"
136
  msgstr[0] "1 cümle"
137
  msgstr[1] "%s cümle"
138
 
139
+ #: ../lib/loco-admin.php:881
140
  msgid "%s fuzzy"
141
  msgstr "%s bulanık"
142
 
143
+ #: ../lib/loco-admin.php:884
144
  msgid "%s untranslated"
145
  msgstr "%s çevrilmemiş"
146
 
147
+ #: ../lib/loco-admin.php:926
148
  msgid "Failed to compile MO file with built-in compiler"
149
  msgstr "Dahili derleyici ile MO derlemesinde hata"
150
 
151
+ #: ../lib/loco-admin.php:965 ../tpl/admin-nav.tpl.php:21
152
  msgid "Loco, Translation Management"
153
  msgstr "Loco, Çevri Yönetimi"
154
 
155
+ #: ../lib/loco-admin.php:966 ../lib/loco-admin.php:996
 
 
 
 
156
  msgid "Manage translations"
157
  msgstr "Çevrileri Yönet"
158
 
159
+ #: ../lib/loco-admin.php:967
160
+ msgid "Translation options"
161
+ msgstr ""
162
+
163
+ #: ../lib/loco-admin.php:973
164
+ msgid "Loco Translate"
165
+ msgstr ""
166
+
167
+ #: ../lib/loco-admin.php:997 ../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
168
  msgid "Settings"
169
  msgstr "Ayarlar"
170
 
171
+ #: ../lib/loco-admin.php:1021
172
  msgid "File download failed"
173
  msgstr "Dosya indirme hatası"
174
 
176
  msgid "Unknown language"
177
  msgstr "Bilinmeyen dil"
178
 
179
+ #: ../lib/loco-packages.php:374 ../lib/loco-packages.php:381
180
  msgid "Some files not writable"
181
  msgstr "Bazı dosyalar yazılabilir değil"
182
 
183
+ #: ../lib/loco-packages.php:384
184
  msgid "Some files missing"
185
  msgstr "Bazı dosyalar eksik"
186
 
187
+ #: ../lib/loco-packages.php:390 ../lib/loco-packages.php:394
188
  msgid "\"%s\" folder not writable"
189
  msgstr "\"%s\" dizini yazılabilir değil"
190
 
191
+ #: ../lib/loco-packages.php:408
 
 
 
 
192
  msgid "POT file not writable"
193
  msgstr "POT dosyası yazılabilir değil"
194
 
195
+ #: ../lib/loco-packages.php:413
196
  msgid "PO file not writable"
197
  msgstr "PO dosyası yazılabilir değil"
198
 
199
+ #: ../lib/loco-packages.php:415
200
  msgid "MO file not writable"
201
  msgstr "MO dosyası yazılabilir değil"
202
 
203
+ #: ../lib/loco-packages.php:415
204
  msgid "MO file not found"
205
  msgstr "MO dosyası bulunamadı"
206
 
207
+ #: ../lib/loco-packages.php:426
208
+ msgid "Folder not writable"
209
+ msgstr "Dizin yazılabilir değil"
210
+
211
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
212
  msgid "User does not have permission to manage translations"
213
  msgstr "Kullanıcı çevrileri yönetmeye yetkili değil"
314
  msgid "Your changes will be lost if you continue without saving"
315
  msgstr "Saklamadan devam ederseniz değişiklikleriniz kaybolacak"
316
 
317
+ #: ../pub/js/lang/dummy.php:23
318
+ msgid "Translation"
319
+ msgstr "Çevri"
320
+
321
  #: ../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
322
  msgid "Packages"
323
  msgstr "Paketler"
358
  msgid "File permissions"
359
  msgstr "Dosya izinleri"
360
 
361
+ #: ../tpl/admin-list.tpl.php:43
362
  msgid "1 language"
363
  msgid_plural "%u languages"
364
  msgstr[0] "1 dil"
365
  msgstr[1] "%u dil"
366
 
367
+ #: ../tpl/admin-list.tpl.php:48
368
  msgctxt "Modified time"
369
  msgid "Updated"
370
  msgstr "Güncellenme"
371
 
372
+ #: ../tpl/admin-list.tpl.php:98
373
  msgid "OK"
374
  msgstr "TAMAM"
375
 
languages/loco-translate.pot CHANGED
@@ -5,7 +5,7 @@ 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: Mon Jan 20 2014 00:38:01 GMT+0000 (GMT)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
@@ -40,113 +40,133 @@ msgctxt "Message label"
40
  msgid "OK"
41
  msgstr ""
42
 
43
- #: ../lib/loco-admin.php:47
 
 
 
 
44
  msgid "Settings saved"
45
  msgstr ""
46
 
47
- #: ../lib/loco-admin.php:120
48
  msgid "New PO file"
49
  msgstr ""
50
 
51
- #: ../lib/loco-admin.php:230
52
  msgid "You must specify a valid locale for a new PO file"
53
  msgstr ""
54
 
55
- #: ../lib/loco-admin.php:252 ../lib/loco-admin.php:342
56
  msgid "No translatable strings found"
57
  msgstr ""
58
 
59
- #: ../lib/loco-admin.php:252
60
  msgid "Cannot create a PO file."
61
  msgstr ""
62
 
63
- #: ../lib/loco-admin.php:259
64
  msgid "PO file already exists with locale %s"
65
  msgstr ""
66
 
67
- #: ../lib/loco-admin.php:312
 
 
 
 
68
  msgid ""
69
  "File cannot be created automatically. Fix the file permissions or use Download "
70
  "instead of Save"
71
  msgstr ""
72
 
73
- #: ../lib/loco-admin.php:321 ../lib/loco-admin.php:330
74
  msgid "%s file is empty"
75
  msgstr ""
76
 
77
- #: ../lib/loco-admin.php:322 ../lib/loco-admin.php:337
78
  msgid "Run Sync to update from source code"
79
  msgstr ""
80
 
81
- #: ../lib/loco-admin.php:326
82
  msgid "No strings could be extracted from source code"
83
  msgstr ""
84
 
85
- #: ../lib/loco-admin.php:333
86
  msgid "Run Sync to update from %s"
87
  msgstr ""
88
 
89
- #: ../lib/loco-admin.php:352
90
  msgid "Source code has been modified, run Sync to update POT"
91
  msgstr ""
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
 
97
- #: ../lib/loco-admin.php:429
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
 
@@ -154,38 +174,38 @@ msgstr ""
154
  msgid "Unknown language"
155
  msgstr ""
156
 
157
- #: ../lib/loco-packages.php:273 ../lib/loco-packages.php:279
158
  msgid "Some files not writable"
159
  msgstr ""
160
 
161
- #: ../lib/loco-packages.php:282
162
  msgid "Some files missing"
163
  msgstr ""
164
 
165
- #: ../lib/loco-packages.php:288
166
  msgid "\"%s\" folder not writable"
167
  msgstr ""
168
 
169
- #: ../lib/loco-packages.php:299
170
- msgid "Folder not writable"
171
- msgstr ""
172
-
173
- #: ../lib/loco-packages.php:301
174
  msgid "POT file not writable"
175
  msgstr ""
176
 
177
- #: ../lib/loco-packages.php:305
178
  msgid "PO file not writable"
179
  msgstr ""
180
 
181
- #: ../lib/loco-packages.php:307
182
  msgid "MO file not writable"
183
  msgstr ""
184
 
185
- #: ../lib/loco-packages.php:307
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 ""
@@ -286,6 +306,10 @@ msgstr[1] ""
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 ""
@@ -326,18 +350,18 @@ msgctxt "Table header"
326
  msgid "File permissions"
327
  msgstr ""
328
 
329
- #: ../tpl/admin-list.tpl.php:38
330
  msgid "1 language"
331
  msgid_plural "%u languages"
332
  msgstr[0] ""
333
  msgstr[1] ""
334
 
335
- #: ../tpl/admin-list.tpl.php:43
336
  msgctxt "Modified time"
337
  msgid "Updated"
338
  msgstr ""
339
 
340
- #: ../tpl/admin-list.tpl.php:93
341
  msgid "OK"
342
  msgstr ""
343
 
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: Sun Mar 09 2014 14:55:31 GMT+0000 (GMT)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
40
  msgid "OK"
41
  msgstr ""
42
 
43
+ #: ../lib/loco-admin.php:42
44
+ msgid "Permission denied"
45
+ msgstr ""
46
+
47
+ #: ../lib/loco-admin.php:58
48
  msgid "Settings saved"
49
  msgstr ""
50
 
51
+ #: ../lib/loco-admin.php:131
52
  msgid "New PO file"
53
  msgstr ""
54
 
55
+ #: ../lib/loco-admin.php:242
56
  msgid "You must specify a valid locale for a new PO file"
57
  msgstr ""
58
 
59
+ #: ../lib/loco-admin.php:268 ../lib/loco-admin.php:370
60
  msgid "No translatable strings found"
61
  msgstr ""
62
 
63
+ #: ../lib/loco-admin.php:268
64
  msgid "Cannot create a PO file."
65
  msgstr ""
66
 
67
+ #: ../lib/loco-admin.php:275
68
  msgid "PO file already exists with locale %s"
69
  msgstr ""
70
 
71
+ #: ../lib/loco-admin.php:316
72
+ msgid "PO file used as template. This will be renamed to %s on first save"
73
+ msgstr ""
74
+
75
+ #: ../lib/loco-admin.php:340
76
  msgid ""
77
  "File cannot be created automatically. Fix the file permissions or use Download "
78
  "instead of Save"
79
  msgstr ""
80
 
81
+ #: ../lib/loco-admin.php:349 ../lib/loco-admin.php:358
82
  msgid "%s file is empty"
83
  msgstr ""
84
 
85
+ #: ../lib/loco-admin.php:350 ../lib/loco-admin.php:365
86
  msgid "Run Sync to update from source code"
87
  msgstr ""
88
 
89
+ #: ../lib/loco-admin.php:354
90
  msgid "No strings could be extracted from source code"
91
  msgstr ""
92
 
93
+ #: ../lib/loco-admin.php:361
94
  msgid "Run Sync to update from %s"
95
  msgstr ""
96
 
97
+ #: ../lib/loco-admin.php:380
98
  msgid "Source code has been modified, run Sync to update POT"
99
  msgstr ""
100
 
101
+ #: ../lib/loco-admin.php:384
102
  msgid "POT has been modified since PO file was saved, run Sync to update"
103
  msgstr ""
104
 
105
+ #: ../lib/loco-admin.php:471
106
  msgid "Bad file path"
107
  msgstr ""
108
 
109
+ #: ../lib/loco-admin.php:685
110
+ msgid "Empty or invalid %s file"
111
+ msgstr ""
112
+
113
+ #: ../lib/loco-admin.php:689
114
+ msgid "%s file has no header"
115
+ msgstr ""
116
+
117
+ #: ../lib/loco-admin.php:820
118
  msgctxt "Add button"
119
  msgid "New template"
120
  msgstr ""
121
 
122
+ #: ../lib/loco-admin.php:839
123
  msgctxt "Add button"
124
  msgid "New language"
125
  msgstr ""
126
 
127
+ #: ../lib/loco-admin.php:878
128
  msgid "%s%% translated"
129
  msgstr ""
130
 
131
+ #: ../lib/loco-admin.php:878
132
  msgid "1 string"
133
  msgid_plural "%s strings"
134
  msgstr[0] ""
135
  msgstr[1] ""
136
 
137
+ #: ../lib/loco-admin.php:881
138
  msgid "%s fuzzy"
139
  msgstr ""
140
 
141
+ #: ../lib/loco-admin.php:884
142
  msgid "%s untranslated"
143
  msgstr ""
144
 
145
+ #: ../lib/loco-admin.php:926
146
  msgid "Failed to compile MO file with built-in compiler"
147
  msgstr ""
148
 
149
+ #: ../lib/loco-admin.php:965 ../tpl/admin-nav.tpl.php:21
150
  msgid "Loco, Translation Management"
151
  msgstr ""
152
 
153
+ #: ../lib/loco-admin.php:966 ../lib/loco-admin.php:996
154
+ msgid "Manage translations"
155
  msgstr ""
156
 
157
+ #: ../lib/loco-admin.php:967
158
+ msgid "Translation options"
159
+ msgstr ""
160
+
161
+ #: ../lib/loco-admin.php:973
162
+ msgid "Loco Translate"
163
  msgstr ""
164
 
165
+ #: ../lib/loco-admin.php:997 ../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
166
  msgid "Settings"
167
  msgstr ""
168
 
169
+ #: ../lib/loco-admin.php:1021
170
  msgid "File download failed"
171
  msgstr ""
172
 
174
  msgid "Unknown language"
175
  msgstr ""
176
 
177
+ #: ../lib/loco-packages.php:374 ../lib/loco-packages.php:381
178
  msgid "Some files not writable"
179
  msgstr ""
180
 
181
+ #: ../lib/loco-packages.php:384
182
  msgid "Some files missing"
183
  msgstr ""
184
 
185
+ #: ../lib/loco-packages.php:390 ../lib/loco-packages.php:394
186
  msgid "\"%s\" folder not writable"
187
  msgstr ""
188
 
189
+ #: ../lib/loco-packages.php:408
 
 
 
 
190
  msgid "POT file not writable"
191
  msgstr ""
192
 
193
+ #: ../lib/loco-packages.php:413
194
  msgid "PO file not writable"
195
  msgstr ""
196
 
197
+ #: ../lib/loco-packages.php:415
198
  msgid "MO file not writable"
199
  msgstr ""
200
 
201
+ #: ../lib/loco-packages.php:415
202
  msgid "MO file not found"
203
  msgstr ""
204
 
205
+ #: ../lib/loco-packages.php:426
206
+ msgid "Folder not writable"
207
+ msgstr ""
208
+
209
  #: ../php/loco-ajax.php:17 ../php/loco-download.php:21
210
  msgid "User does not have permission to manage translations"
211
  msgstr ""
306
  msgid "Your changes will be lost if you continue without saving"
307
  msgstr ""
308
 
309
+ #: ../pub/js/lang/dummy.php:23
310
+ msgid "Translation"
311
+ msgstr ""
312
+
313
  #: ../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
314
  msgid "Packages"
315
  msgstr ""
350
  msgid "File permissions"
351
  msgstr ""
352
 
353
+ #: ../tpl/admin-list.tpl.php:43
354
  msgid "1 language"
355
  msgid_plural "%u languages"
356
  msgstr[0] ""
357
  msgstr[1] ""
358
 
359
+ #: ../tpl/admin-list.tpl.php:48
360
  msgctxt "Modified time"
361
  msgid "Updated"
362
  msgstr ""
363
 
364
+ #: ../tpl/admin-list.tpl.php:98
365
  msgid "OK"
366
  msgstr ""
367
 
lib/build/gettext-compiled.php CHANGED
@@ -1,7 +1,6 @@
1
  <?php
2
  /**
3
- * Compiled source code - DO NOT EDIT!
4
- * @author Tim Whitlock http://timwhitlock.info/
5
- * @date Mon, 20 Jan 2014 00:44:35 +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' => 'Loco', 'Language' => 'English', 'Plural-Forms' => 'nplurals=2; plural=(n!=1);', '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); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } 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'); }
1
  <?php
2
  /**
3
+ * Compiled source build from Loco core.
4
+ * Mon, 10 Mar 2014 11:48:38 +0000
 
5
  */
6
+ 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; } class LocoMoParser { private $bin; private $be; private $n; private $o; private $t; private $v; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse(){ $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $r = array(); $p = array(); $i = 0; $offset = $sourceOffset; while( $offset < $targetOffset ){ $r[$i] = array( 'id' => '', 'source' => '', 'target' => '' ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false !== $eot ){ $r[$i]['context'] = substr($src, 0, $eot ); $src = substr( $src, $eot+1 ); } $nul = strpos( $src, "\0" ); if( false !== $nul ){ $p[$i][1] = array( 'id' => '', 'source' => substr($src, $nul+1 ), 'target' => '', 'parent' => $i, 'plural' => 1 ); $src = substr( $src, 0, $nul ); } $r[$i++]['source'] = $src; $offset += 8; } $t = $i; $offset = $targetOffset; for( $i = 0; $i < $t; $i++ ){ $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false !== strpos( $txt, "\0" ) ){ if( ! isset($p[$i][1]) ){ throw new Exception('Encountered translated plural without msgid_plural'); } $arr = explode( "\0", $txt ); $txt = array_shift( $arr ); foreach( $arr as $_i => $plural_txt ){ $plural_idx = $_i + 1; $p[$i][$plural_idx]['target'] = $plural_txt; } } $r[$i]['target'] = $txt; $offset += 8; } foreach( $p as $parent_id => $plurals ){ foreach( $plurals as $plural_idx => $msg ){ if( 1 < $plural_idx ){ $msg['source'] = $plurals[1]['source'].' (plural '.$plural_idx.')'; } $msg['parent'] = $parent_id; $msg['plural'] = $plural_idx; $r[] = $msg; } } return $r; } public function isBigendian(){ while( is_null($this->be) ){ $str = $this->words( 0, 2 ); $arr = unpack('V', $str); if( 0x950412de === $arr[1] ){ $this->be = false; break; } if( 0xde120495 === $arr[1] ){ $this->be = true; break; } throw new Exception('Invalid MO format'); } return $this->be; } public function version(){ if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } public function count(){ if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset(){ if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset(){ if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable(){ $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ){ return substr( $this->bin, $offset, $length ); } private function words( $offset, $length ){ return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ){ return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ){ $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Exception('Failed to read 32 bit integer at byte '.$offset); } return $arr[1]; } } function loco_parse_mo( $src ){ $mo = new LocoMoParser($src); return $mo->parse(); } final class PHPTokens implements Iterator { private $tokens; private $i; private $skip_tokens = array(); private $skip_strings = array(); private $literal_tokens = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function literal(){ foreach( func_get_args() as $t ){ $this->literal_tokens[ $t ] = 1; } return $this; } 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 export(){ $arr = array(); foreach( $this as $tok ){ $arr[] = $tok; } return $arr; } 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 if( isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } 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: 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' => 'Loco', 'Language' => 'English', 'Plural-Forms' => 'nplurals=2; plural=(n!=1);', '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); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } 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
@@ -1,7 +1,6 @@
1
  <?php
2
  /**
3
- * Compiled source code - DO NOT EDIT!
4
- * @author Tim Whitlock http://timwhitlock.info/
5
- * @date Mon, 20 Jan 2014 00:44:35 +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)";}');
1
  <?php
2
  /**
3
+ * Compiled source build from Loco core.
4
+ * Mon, 10 Mar 2014 11:48:38 +0000
 
5
  */
6
+ 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_TH";s:15:"Thai (Thailand)";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
@@ -1,7 +1,6 @@
1
  <?php
2
  /**
3
- * Compiled source code - DO NOT EDIT!
4
- * @author Tim Whitlock http://timwhitlock.info/
5
- * @date Mon, 20 Jan 2014 00:44:35 +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 ''; }
1
  <?php
2
  /**
3
+ * Compiled source build from Loco core.
4
+ * Mon, 10 Mar 2014 11:48:38 +0000
 
5
  */
6
  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 CHANGED
@@ -80,6 +80,28 @@ class LocoTest extends PHPUnit_Framework_TestCase {
80
 
81
 
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  }
84
 
85
 
80
 
81
 
82
 
83
+ /**
84
+ * Test plural forms
85
+ */
86
+ public function testPluralForms(){
87
+ // English - two forms
88
+ $locale = LocoLocale::init('en','GB');
89
+ extract( $locale->export() );
90
+ $this->assertEquals( 2, $nplurals );
91
+ // Chinese - one form
92
+ $locale = LocoLocale::init('zh','TW');
93
+ extract( $locale->export() );
94
+ $this->assertEquals( 1, $nplurals );
95
+ // Polish - three forms
96
+ $locale = LocoLocale::init('pl','PL');
97
+ extract( $locale->export() );
98
+ $this->assertEquals( 3, $nplurals );
99
+ // Arabic - six forms
100
+ $locale = LocoLocale::init('ar','AE');
101
+ extract( $locale->export() );
102
+ $this->assertEquals( 6, $nplurals );
103
+ }
104
+
105
  }
106
 
107
 
lib/loco-admin.php CHANGED
@@ -35,11 +35,22 @@ abstract class LocoAdmin {
35
  }
36
 
37
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  /**
40
  * Admin settings page render call
41
  */
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' );
@@ -54,6 +65,7 @@ abstract class LocoAdmin {
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
  }
59
 
@@ -63,13 +75,13 @@ abstract class LocoAdmin {
63
  * Admin tools page render call
64
  */
65
  public static function render_page_tools(){
 
66
  do {
67
  try {
68
 
69
  // libs required for all manage translation pages
70
  loco_require('loco-locales','loco-packages');
71
 
72
-
73
  // most actions except root listing define a single package by name and type
74
  $package = null;
75
  if( isset($_GET['name']) && isset($_GET['type']) ){
@@ -119,7 +131,7 @@ abstract class LocoAdmin {
119
  // else render msginit start screen
120
  $title = Loco::__('New PO file');
121
  $locales = loco_require('build/locales-compiled');
122
- Loco::enqueue_scripts('admin-poinit');
123
  Loco::render('admin-poinit', compact('package','domain','title','locales') );
124
  break;
125
  }
@@ -138,6 +150,7 @@ abstract class LocoAdmin {
138
  //
139
  if( isset($_GET['fscheck']) ){
140
  $meta = $package->meta();
 
141
  Loco::render('admin-fscheck', $meta + compact('package') );
142
  break;
143
  }
@@ -154,7 +167,8 @@ abstract class LocoAdmin {
154
  $themes = array();
155
  foreach( wp_get_themes( array( 'allowed' => true ) ) as $name => $theme ){
156
  $package = LocoPackage::get( $name, 'theme' ) and
157
- $themes[] = $package;
 
158
  }
159
  // @var array $plugin
160
  $plugins = array();
@@ -288,6 +302,23 @@ abstract class LocoAdmin {
288
  }
289
  // template file is developer-editable and has no locale
290
  $ispot = self::is_pot($path);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
  if( $ispot ){
292
  $pot = $data;
293
  $type = 'POT';
@@ -300,13 +331,8 @@ abstract class LocoAdmin {
300
  $domain = self::resolve_file_domain($path);
301
  $haspot = $package->get_pot( $domain );
302
  }
303
- // path may not exist if we're creating a new one
304
- if( file_exists($path) ){
305
- $modified = self::format_datetime( filemtime($path) );
306
- }
307
- else {
308
- $modified = 0;
309
- }
310
  // warn if new file can't be written
311
  $writable = self::is_writable( $path );
312
  if( ! $writable && ! $modified ){
@@ -403,6 +429,11 @@ abstract class LocoAdmin {
403
 
404
  // no longer need the full local paths
405
  $path = self::trim_path( $path );
 
 
 
 
 
406
 
407
  Loco::enqueue_scripts('build/admin-poedit');
408
  Loco::render('admin-poedit', compact('package','path','po','pot','locale','headers','name','type','modified','writable','warnings') );
@@ -420,6 +451,15 @@ abstract class LocoAdmin {
420
 
421
 
422
 
 
 
 
 
 
 
 
 
 
423
  /**
424
  * resolve file path that may be relative to wp-content
425
  */
@@ -497,6 +537,17 @@ abstract class LocoAdmin {
497
  public static function find_po( $dir ){
498
  return self::find( $dir, array('po','pot') );
499
  }
 
 
 
 
 
 
 
 
 
 
 
500
 
501
 
502
  /**
@@ -595,29 +646,48 @@ abstract class LocoAdmin {
595
  }
596
 
597
 
 
598
  /**
599
- * Parse PO or POT file
 
 
 
 
 
 
 
 
 
 
 
 
 
 
600
  */
601
  public static function parse_po( $path ){
602
  function_exists('loco_parse_po') or loco_require('build/gettext-compiled');
603
- $export = array();
604
- $source = file_get_contents($path) and
605
- $export = loco_parse_po( file_get_contents($path) );
606
- return $export;
 
 
607
  }
608
 
609
 
610
 
611
  /**
612
- * Parse PO or POT file, placing header object into argument
613
  */
614
  public static function parse_po_with_headers( $path, &$headers ){
615
  $export = self::parse_po( $path );
616
  if( ! isset($export[0]) ){
617
- throw new Exception('Empty or invalid PO file');
 
618
  }
619
  if( $export[0]['source'] !== '' ){
620
- throw new Exception('PO file has no header');
 
621
  }
622
  $headers = loco_parse_po_headers( $export[0]['target'] );
623
  $export[0] = array(); // <- avoid index errors as json
@@ -646,7 +716,7 @@ abstract class LocoAdmin {
646
  * @return LocoLocale
647
  */
648
  public static function resolve_file_locale( $path ){
649
- $stub = str_replace( '.po', '', basename($path) );
650
  $locale = loco_locale_resolve($stub);
651
  return $locale;
652
  }
@@ -654,15 +724,22 @@ abstract class LocoAdmin {
654
 
655
  /**
656
  * Resolve a PO file path or file name to TextDomain
657
- * @param string e.g. "blah/mytheme-fr_FR.po"
658
- * @return string e.fg. "mytheme"
659
  */
660
  public static function resolve_file_domain( $path ){
661
  extract( pathinfo($path) );
662
  if( ! isset($filename) ){
663
- $filename = str_replace('.', '', $basename ); // PHP < 5.2.0
 
 
 
664
  }
665
- return preg_replace('/-[a-z]{2}_[A-Z]{2}$/', '', $filename );
 
 
 
 
666
  }
667
 
668
 
@@ -681,26 +758,35 @@ abstract class LocoAdmin {
681
  /**
682
  * Generate an admin page URI with custom args
683
  */
684
- public static function uri( array $args = array() ){
685
- static $base_uri;
686
- if( ! isset($base_uri) ){
687
- $snip = 'page='.Loco::NS;
688
- $base_uri = current( explode($snip,$_SERVER['REQUEST_URI']) ).$snip;
689
- }
690
- if( ! $args ){
691
- return $base_uri;
692
  }
693
- return $base_uri.'&'.http_build_query( $args );
694
  }
695
 
696
 
697
 
698
  /**
699
  * Test if we're on our own admin page
 
 
700
  */
701
- public static function is_self(){
702
- static $bool;
703
- return isset($bool) ? $bool : ( $bool = false !== strpos($_SERVER['REQUEST_URI'], '?page='.Loco::NS ) );
 
 
 
 
 
 
 
 
704
  }
705
 
706
 
@@ -855,26 +941,56 @@ abstract class LocoAdmin {
855
  /**
856
  * Enqueue only admin styles we need
857
  */
858
- function _loco_hook__admin_print_styles(){
859
- if( LocoAdmin::is_self() ){
 
 
 
 
 
 
 
 
860
  Loco::enqueue_styles('loco-admin');
861
  }
862
  }
863
 
864
 
 
865
  /**
866
  * Admin menu registration callback
867
  */
868
  function _loco_hook__admin_menu() {
869
- // Settings menu
870
- $title = Loco::__('Loco, Translation Management');
871
- $page = array( 'LocoAdmin', 'render_page_options' );
872
- add_options_page( $title, Loco::__('Translation'), 'manage_options', Loco::NS, $page );
873
- // Tools menu
874
- $page = array( 'LocoAdmin', 'render_page_tools' );
875
- $hook = add_management_page( $title, Loco::__('Manage translations'), LOCO::CAPABILITY, Loco::NS, $page );
876
- add_action('admin_print_styles', '_loco_hook__admin_print_styles' );
877
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
878
  }
879
 
880
 
@@ -883,8 +999,8 @@ function _loco_hook__admin_menu() {
883
  */
884
  function _loco_hook__plugin_row_meta( $links, $file = '' ){
885
  if( false !== strpos($file,'/loco.php') ){
886
- $links[] = '<a href="tools.php?page='.Loco::NS.'"><strong>'.Loco::__('Manage translations').'</strong></a>';
887
- $links[] = '<a href="options-general.php?page='.Loco::NS.'"><strong>'.Loco::__('Settings').'</strong></a>';
888
  }
889
  return $links;
890
  }
35
  }
36
 
37
 
38
+ /**
39
+ * Exit forbidden
40
+ */
41
+ private static function forbid(){
42
+ wp_die( Loco::__('Permission denied'), 'Forbidden', array('response' => 403 ) );
43
+ trigger_error('wp_die failure', E_USER_ERROR );
44
+ exit();
45
+ }
46
+
47
+
48
 
49
  /**
50
  * Admin settings page render call
51
  */
52
  public static function render_page_options(){
53
+ current_user_can(Loco::CAPABILITY) or self::forbid();
54
  // update applicaion settings if posted
55
  if( isset($_POST['loco']) && is_array( $update = $_POST['loco'] ) ){
56
  $update += array( 'gen_hash' => '0' );
65
  function_exists('loco_find_executable') or loco_require('build/shell-compiled');
66
  $args['which_msgfmt'] = loco_find_executable('msgfmt');// and Loco::config( $args );
67
  }
68
+ Loco::enqueue_scripts('build/admin-common');
69
  Loco::render('admin-opts', $args );
70
  }
71
 
75
  * Admin tools page render call
76
  */
77
  public static function render_page_tools(){
78
+ current_user_can(Loco::CAPABILITY) or self::forbid();
79
  do {
80
  try {
81
 
82
  // libs required for all manage translation pages
83
  loco_require('loco-locales','loco-packages');
84
 
 
85
  // most actions except root listing define a single package by name and type
86
  $package = null;
87
  if( isset($_GET['name']) && isset($_GET['type']) ){
131
  // else render msginit start screen
132
  $title = Loco::__('New PO file');
133
  $locales = loco_require('build/locales-compiled');
134
+ Loco::enqueue_scripts( 'build/admin-common', 'build/admin-poinit');
135
  Loco::render('admin-poinit', compact('package','domain','title','locales') );
136
  break;
137
  }
150
  //
151
  if( isset($_GET['fscheck']) ){
152
  $meta = $package->meta();
153
+ Loco::enqueue_scripts('build/admin-common');
154
  Loco::render('admin-fscheck', $meta + compact('package') );
155
  break;
156
  }
167
  $themes = array();
168
  foreach( wp_get_themes( array( 'allowed' => true ) ) as $name => $theme ){
169
  $package = LocoPackage::get( $name, 'theme' ) and
170
+ $name = $package->get_name();
171
+ $themes[ $name ] = $package;
172
  }
173
  // @var array $plugin
174
  $plugins = array();
302
  }
303
  // template file is developer-editable and has no locale
304
  $ispot = self::is_pot($path);
305
+
306
+ // path may not exist if we're creating a new one
307
+ if( file_exists($path) ){
308
+ $modified = self::format_datetime( filemtime($path) );
309
+ }
310
+ else {
311
+ $modified = 0;
312
+ }
313
+
314
+ // support incorrect usage of template PO files
315
+ if( ! $ispot && $head && $modified && ! $head->Language && self::none_translated($data) ){
316
+ $path .= 't';
317
+ $warnings[] = sprintf( Loco::__('PO file used as template. This will be renamed to %s on first save'), basename($path) );
318
+ $ispot = true;
319
+ $modified = 0;
320
+ }
321
+
322
  if( $ispot ){
323
  $pot = $data;
324
  $type = 'POT';
331
  $domain = self::resolve_file_domain($path);
332
  $haspot = $package->get_pot( $domain );
333
  }
334
+
335
+
 
 
 
 
 
336
  // warn if new file can't be written
337
  $writable = self::is_writable( $path );
338
  if( ! $writable && ! $modified ){
429
 
430
  // no longer need the full local paths
431
  $path = self::trim_path( $path );
432
+
433
+ // If parsing MO file, from now on treat as PO
434
+ if( ! $ispot && self::is_mo($path) ){
435
+ $path = str_replace( '.mo', '.po', $path );
436
+ }
437
 
438
  Loco::enqueue_scripts('build/admin-poedit');
439
  Loco::render('admin-poedit', compact('package','path','po','pot','locale','headers','name','type','modified','writable','warnings') );
451
 
452
 
453
 
454
+ /**
455
+ * test if a file path is a MO (compiled) file
456
+ */
457
+ public static function is_mo( $path ){
458
+ return 'mo' === strtolower( pathinfo($path,PATHINFO_EXTENSION) );
459
+ }
460
+
461
+
462
+
463
  /**
464
  * resolve file path that may be relative to wp-content
465
  */
537
  public static function find_po( $dir ){
538
  return self::find( $dir, array('po','pot') );
539
  }
540
+
541
+
542
+
543
+ /**
544
+ * Recursively find all MO files anywhere under a directory
545
+ */
546
+ public static function find_mo( $dir ){
547
+ $files = self::find( $dir, array('mo') );
548
+ return $files['mo'];
549
+ }
550
+
551
 
552
 
553
  /**
646
  }
647
 
648
 
649
+
650
  /**
651
+ * Establish if translations are all empty
652
+ */
653
+ private static function none_translated( array $data ){
654
+ foreach( $data as $message ){
655
+ if( ! empty($message['target']) ){
656
+ return false;
657
+ }
658
+ }
659
+ return true;
660
+ }
661
+
662
+
663
+
664
+ /**
665
+ * Parse MO, PO or POT file
666
  */
667
  public static function parse_po( $path ){
668
  function_exists('loco_parse_po') or loco_require('build/gettext-compiled');
669
+ $source = trim( file_get_contents($path) );
670
+ if( ! $source ){
671
+ return array();
672
+ }
673
+ $parser = strpos($path,'.mo') ? 'loco_parse_mo' : 'loco_parse_po';
674
+ return call_user_func( $parser, $source );
675
  }
676
 
677
 
678
 
679
  /**
680
+ * Parse MO, PO or POT file, placing header object into argument
681
  */
682
  public static function parse_po_with_headers( $path, &$headers ){
683
  $export = self::parse_po( $path );
684
  if( ! isset($export[0]) ){
685
+ $ext = strtoupper( pathinfo($path,PATHINFO_EXTENSION) );
686
+ throw new Exception( sprintf( Loco::__('Empty or invalid %s file'), $ext ) );
687
  }
688
  if( $export[0]['source'] !== '' ){
689
+ $ext = strtoupper( pathinfo($path,PATHINFO_EXTENSION) );
690
+ throw new Exception( sprintf( Loco::__('%s file has no header'), $ext ) );
691
  }
692
  $headers = loco_parse_po_headers( $export[0]['target'] );
693
  $export[0] = array(); // <- avoid index errors as json
716
  * @return LocoLocale
717
  */
718
  public static function resolve_file_locale( $path ){
719
+ $stub = str_replace( array('.po','.mo'), array('',''), basename($path) );
720
  $locale = loco_locale_resolve($stub);
721
  return $locale;
722
  }
724
 
725
  /**
726
  * Resolve a PO file path or file name to TextDomain
727
+ * @param string e.g. "blah/mytheme-fr_FR.po" or "myplugin.pot"
728
+ * @return string e.g. "mytheme"
729
  */
730
  public static function resolve_file_domain( $path ){
731
  extract( pathinfo($path) );
732
  if( ! isset($filename) ){
733
+ $filename = str_replace( '.'.$extension, '', $basename ); // PHP < 5.2.0
734
+ }
735
+ if( 'pot' === $extension ){
736
+ return $filename;
737
  }
738
+ if( $domain = preg_replace('/[a-z]{2}(_[A-Z]{2})?$/', '', $filename ) ){
739
+ return ltrim( $domain, '-' );
740
+ }
741
+ // empty domain means file name is probably just a locale
742
+ return '';
743
  }
744
 
745
 
758
  /**
759
  * Generate an admin page URI with custom args
760
  */
761
+ public static function uri( array $args = array(), $suffix = '' ){
762
+ $base_uri = admin_url('admin.php');
763
+ if( ! isset($args['page']) ){
764
+ $args['page'] = Loco::NS;
765
+ if( $suffix ){
766
+ $args['page'].= '-'.$suffix;
767
+ }
 
768
  }
769
+ return $base_uri.'?'.http_build_query( $args );
770
  }
771
 
772
 
773
 
774
  /**
775
  * Test if we're on our own admin page
776
+ * @param string optionally specify exact slug including Loco::NS
777
+ * @return string current slug
778
  */
779
+ public static function is_self( $page = null ){
780
+ static $active;
781
+ if( ! isset($active) ){
782
+ $screen = get_current_screen();
783
+ $splode = explode( Loco::NS, $screen->base, 2 );
784
+ $active = isset($splode[1]) ? Loco::NS.$splode[1] : false;
785
+ }
786
+ if( false !== $active && ( is_null($page) || $page === $active ) ){
787
+ return $active;
788
+ }
789
+ return '';
790
  }
791
 
792
 
941
  /**
942
  * Enqueue only admin styles we need
943
  */
944
+ function _loco_hook__current_screen(){
945
+ if( $slug = LocoAdmin::is_self() ){
946
+ // redirect legacy links
947
+ if( $i = strpos( $slug,'-legacy') ){
948
+ $args = $_GET;
949
+ $args['page'] = substr_replace( $slug, '', $i );
950
+ $uri = LocoAdmin::uri( $args, $slug );
951
+ wp_redirect( $uri );
952
+ }
953
+ // add common resources for all Loco admin pages
954
  Loco::enqueue_styles('loco-admin');
955
  }
956
  }
957
 
958
 
959
+
960
  /**
961
  * Admin menu registration callback
962
  */
963
  function _loco_hook__admin_menu() {
964
+ $cap = LOCO::CAPABILITY;
965
+ if( current_user_can($cap) ){
966
+ // hook in legacy wordpress styles as menu will display
967
+ $wp_38 = version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) or
968
+ Loco::enqueue_styles('loco-legacy');
 
 
 
969
 
970
+ $page_title = Loco::__('Loco, Translation Management');
971
+ $tool_title = Loco::__('Manage translations');
972
+ $opts_title = Loco::__('Translation options');
973
+ // Loco main menu item
974
+ $slug = Loco::NS;
975
+ $title = $page_title.' - '.$tool_title;
976
+ $page = array( 'LocoAdmin', 'render_page_tools' );
977
+ // Dashicons were introduced in WP 3.8
978
+ $icon = $wp_38 ? 'dashicons-translation' : 'none';
979
+ add_menu_page( $title, Loco::__('Loco Translate'), $cap, $slug, $page, $icon );
980
+ // add main link under self with different name
981
+ add_submenu_page( $slug, $title, $tool_title, $cap, $slug, $page );
982
+ // also add under Tools menu (legacy)
983
+ add_management_page( $title, $tool_title, $cap, $slug.'-legacy', $page );
984
+ // Settings page
985
+ $slug = $slug.'-settings';
986
+ $title = $page_title.' - '.$opts_title;
987
+ $page = array( 'LocoAdmin', 'render_page_options' );
988
+ add_submenu_page( Loco::NS, $title, $opts_title, $cap, $slug, $page );
989
+ // also add under Settings menu (legacy)
990
+ add_options_page( $title, $opts_title, Loco::CAPABILITY, $slug.'-legacy', $page );
991
+ // Hook in page stuff as soon as screen is avaiable
992
+ add_action('current_screen', '_loco_hook__current_screen' );
993
+ }
994
  }
995
 
996
 
999
  */
1000
  function _loco_hook__plugin_row_meta( $links, $file = '' ){
1001
  if( false !== strpos($file,'/loco.php') ){
1002
+ $links[] = '<a href="'.Loco::html( LocoAdmin::uri( array(), '' ) ).'"><strong>'.Loco::__('Manage translations').'</strong></a>';
1003
+ $links[] = '<a href="'.Loco::html( LocoAdmin::uri( array(), 'settings') ).'"><strong>'.Loco::__('Settings').'</strong></a>';
1004
  }
1005
  return $links;
1006
  }
lib/loco-locales.php CHANGED
@@ -86,8 +86,8 @@ final class LocoLocale {
86
  */
87
  public static function init( $lc, $cc ){
88
  // pre-compiled locale data
89
- static $plurals = array ( '(n != 1)', 'n == 1 ? 0 : 1', '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)', '(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2', '(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)', '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 or n%100>=20) ? 1 : 2)', '(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3)', '(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)', '(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2)', '(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0)', 0, '(n > 1)', '(n%10!=1 || n%100==11)', 'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5', '(n>1)', '(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3', 'n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4', 'n!=0', '(n!=1)', 'n != 1', ),
90
- $locales = array ( 'en' => array ( 'GB' => array ( 'English (UK)', 2, 0, ), 'IE' => array ( 'English (Ireland)', 2, 0, ), 'US' => array ( 'English (USA)', 2, 0, ), 'CA' => array ( 'English (Canada)', 2, 0, ), 'AU' => array ( 'English (Australia)', 2, 0, ), 'NZ' => array ( 'English (New Zealand)', 2, 0, ), 'HK' => array ( 'English (Hong Kong)', 2, 0, ), 'SG' => array ( 'English (Singapore)', 2, 0, ), 'AE' => array ( 'English (United Arab Emirates)', 2, 0, ), 'ZA' => array ( 'English (South Africa)', 2, 0, ), 'IN' => array ( 'English (India)', 2, 0, ), ), 'fr' => array ( 'FR' => array ( 'French', 2, 1, ), 'CH' => array ( 'French (Switzerland)', 2, 1, ), 'BE' => array ( 'French (Belgium)', 2, 1, ), 'HT' => array ( 'French (Haiti)', 2, 1, ), 'CA' => array ( 'French (Canada)', 2, 1, ), ), 'it' => array ( 'IT' => array ( 'Italian', 2, 0, ), 'CH' => array ( 'Italian (Switzerland)', 2, 0, ), ), 'de' => array ( 'DE' => array ( 'German', 2, 0, ), 'CH' => array ( 'German (Switzerland)', 2, 0, ), 'AT' => array ( 'German (Austria)', 2, 0, ), ), 'es' => array ( 'ES' => array ( 'Spanish', 2, 0, ), 'MX' => array ( 'Spanish (Mexico)', 2, 0, ), 'AR' => array ( 'Spanish (Argentina)', 2, 0, ), 'BO' => array ( 'Spanish (Bolivia)', 2, 0, ), 'CL' => array ( 'Spanish (Chile)', 2, 0, ), 'CO' => array ( 'Spanish (Colombia)', 2, 0, ), 'CR' => array ( 'Spanish (Costa Rica)', 2, 0, ), 'CU' => array ( 'Spanish (Cuba)', 2, 0, ), 'DO' => array ( 'Spanish (Dominican Republic)', 2, 0, ), 'EC' => array ( 'Spanish (Ecuador)', 2, 0, ), 'SV' => array ( 'Spanish (El Salvador)', 2, 0, ), 'GT' => array ( 'Spanish (Guatemala)', 2, 0, ), 'HN' => array ( 'Spanish (Honduras)', 2, 0, ), 'NI' => array ( 'Spanish (Nicaragua)', 2, 0, ), 'PA' => array ( 'Spanish (Panama)', 2, 0, ), 'PY' => array ( 'Spanish (Paraguay)', 2, 0, ), 'PE' => array ( 'Spanish (Peru)', 2, 0, ), 'UY' => array ( 'Spanish (Uruguay)', 2, 0, ), 'VE' => array ( 'Spanish (Venezuela)', 2, 0, ), ), 'pt' => array ( 'PT' => array ( 'Portuguese', 2, 0, ), 'BR' => array ( 'Portuguese (Brazil)', 2, 0, ), ), 'ru' => array ( 'RU' => array ( 'Russian', 3, 2, ), 'UA' => array ( 'Russian (Ukraine)', 3, 2, ), ), 'sv' => array ( 'SE' => array ( 'Swedish', 2, 0, ), ), 'no' => array ( 'NO' => array ( 'Norwegian', 2, 0, ), ), 'da' => array ( 'DK' => array ( 'Danish', 2, 0, ), ), 'fi' => array ( 'FI' => array ( 'Finnish', 2, 1, ), ), 'bg' => array ( 'BG' => array ( 'Bulgarian', 2, 0, ), ), 'cs' => array ( 'CZ' => array ( 'Czech', 3, 3, ), ), 'et' => array ( 'EE' => array ( 'Estonian', 2, 0, ), ), 'el' => array ( 'GR' => array ( 'Greek', 2, 0, ), 'CY' => array ( 'Greek (Cyprus)', 2, 0, ), ), 'hu' => array ( 'HU' => array ( 'Hungarian', 2, 0, ), ), 'lv' => array ( 'LV' => array ( 'Latvian', 3, 4, ), ), 'lt' => array ( 'LT' => array ( 'Lithuanian', 3, 5, ), ), 'lb' => array ( 'LU' => array ( 'Luxembourgish', 2, 0, ), ), 'mt' => array ( 'MT' => array ( 'Maltese', 4, 6, ), ), 'nl' => array ( 'NL' => array ( 'Dutch', 2, 0, ), 'BE' => array ( 'Dutch (Belgium)', 2, 0, ), ), 'pl' => array ( 'PL' => array ( 'Polish', 3, 7, ), ), 'ro' => array ( 'RO' => array ( 'Romanian', 3, 8, ), ), 'sk' => array ( 'SK' => array ( 'Slovak', 3, 3, ), ), 'sl' => array ( 'SI' => array ( 'Slovenian', 4, 9, ), ), 'ht' => array ( 'HT' => array ( 'Haitian Creole', 2, 1, ), ), 'gn' => array ( 'PY' => array ( 'Guarani (Paraguay)', 2, 1, ), ), 'ja' => array ( 'JP' => array ( 'Japanese', 1, 10, ), ), 'zh' => array ( 'CN' => array ( 'Chinese', 2, 11, ), 'HK' => array ( 'Chinese (Hong Kong)', 2, 11, ), 'TW' => array ( 'Chinese (Taiwan)', 2, 11, ), ), 'af' => array ( 'ZA' => array ( 'Afrikaans (South Africa)', 2, 0, ), ), 'hr' => array ( 'HR' => array ( 'Croatian', 3, 2, ), ), 'is' => array ( 'IS' => array ( 'Icelandic', 2, 12, ), ), 'he' => array ( 'IL' => array ( 'Hebrew (Israel)', 2, 0, ), ), 'ar' => array ( 'IL' => array ( 'Arabic (Israel)', 6, 13, ), 'AE' => array ( 'Arabic (United Arab Emirates)', 6, 13, ), ), 'hi' => array ( 'IN' => array ( 'Hindi (India)', 2, 0, ), ), 'sr' => array ( 'RS' => array ( 'Serbian', 3, 2, ), ), 'tr' => array ( 'TR' => array ( 'Turkish', 2, 14, ), ), 'ko' => array ( 'KR' => array ( 'Korean', 1, 10, ), ), 'cy' => array ( 'GB' => array ( 'Welsh', 4, 15, ), ), 'ms' => array ( 'MY' => array ( 'Malay (Malaysia)', 1, 10, ), ), 'az' => array ( 'TR' => array ( 'Azerbaijani (Turkey)', 2, 0, ), ), 'bn' => array ( 'BD' => array ( 'Bengali (Bangladesh)', 2, 0, ), ), 'bs' => array ( 'BA' => array ( 'Bosnian (Bosnia & Herzegovina)', 3, 2, ), ), 'fa' => array ( 'AF' => array ( 'Persian (Afghanistan)', 2, 1, ), 'IR' => array ( 'Persian (Iran)', 2, 1, ), ), 'fo' => array ( 'FO' => array ( 'Faroese (Faroe Islands)', 2, 1, ), 'DK' => array ( 'Faroese (Denmark)', 2, 1, ), ), 'ga' => array ( 'IE' => array ( 'Irish (Ireland)', 5, 16, ), ), 'gl' => array ( 'ES' => array ( 'Galician (Spain)', 2, 0, ), ), 'hy' => array ( 'AM' => array ( 'Armenian', 2, 0, ), ), 'id' => array ( 'ID' => array ( 'Indonesian', 1, 10, ), ), 'jv' => array ( 'ID' => array ( 'Javanese (Indonesia)', 2, 17, ), ), 'ka' => array ( 'GE' => array ( 'Georgian', 1, 10, ), ), 'kk' => array ( 'KZ' => array ( 'Kazakh', 1, 10, ), ), 'kn' => array ( 'IN' => array ( 'Kannada (India)', 2, 18, ), ), 'li' => array ( 'NL' => array ( 'Limburgish (Netherlands)', 2, 1, ), ), 'lo' => array ( 'LA' => array ( 'Lao (Laos)', 1, 10, ), ), 'mg' => array ( 'MG' => array ( 'Malagasy (Madagascar)', 2, 11, ), ), 'my' => array ( 'MM' => array ( 'Burmese (Myanmar)', 1, 10, ), ), 'nb' => array ( 'NO' => array ( 'Bokmål', 2, 0, ), ), 'nn' => array ( 'NO' => array ( 'Nynorsk', 2, 0, ), ), 'ne' => array ( 'NP' => array ( 'Nepali', 2, 0, ), ), 'os' => array ( 'TR' => array ( 'Ossetian (Turkey)', 2, 1, ), 'RU' => array ( 'Ossetian (Russia)', 2, 1, ), 'GE' => array ( 'Ossetian (Georgia)', 2, 1, ), ), 'pa' => array ( 'IN' => array ( 'Punjabi (India)', 2, 0, ), ), 'uk' => array ( 'UA' => array ( 'Ukrainian (Ukraine)', 3, 2, ), ), 'sa' => array ( 'IN' => array ( 'Sanskrit (India)', 2, 1, ), ), 'sd' => array ( 'PK' => array ( 'Sindhi (Pakistan)', 2, 0, ), ), 'si' => array ( 'LK' => array ( 'Sinhala (Sri Lanka)', 2, 0, ), ), 'so' => array ( 'SO' => array ( 'Somali', 2, 19, ), ), 'sq' => array ( 'AL' => array ( 'Albanian (Albania)', 2, 0, ), ), 'sc' => array ( 'IT' => array ( 'Sardinian (Italy)', 2, 1, ), ), 'su' => array ( 'ID' => array ( 'Sundanese (Indonesia)', 1, 10, ), ), 'sw' => array ( 'KE' => array ( 'Swahili (Kenya)', 2, 0, ), 'UG' => array ( 'Swahili (Uganda)', 2, 0, ), 'TZ' => array ( 'Swahili (Tanzania)', 2, 0, ), 'KM' => array ( 'Swahili (Comoros)', 2, 0, ), ), 'ta' => array ( 'IN' => array ( 'Tamil (India)', 2, 0, ), 'LK' => array ( 'Tamil (Sri Lanka)', 2, 0, ), ), 'te' => array ( 'IN' => array ( 'Telugu (India)', 2, 0, ), ), 'th' => array ( 'TW' => array ( 'Thai (Taiwan)', 1, 10, ), ), 'tg' => array ( 'TJ' => array ( 'Tajik (Tajikistan)', 2, 11, ), ), 'ug' => array ( 'CN' => array ( 'Uyghur (China)', 1, 10, ), ), 'ur' => array ( 'IN' => array ( 'Urdu (India)', 2, 0, ), 'PK' => array ( 'Urdu (Pakistan)', 2, 0, ), ), 'uz' => array ( 'UZ' => array ( 'Uzbek (Uzbekistan)', 2, 11, ), ), 'vi' => array ( 'VN' => array ( 'Vietnamese', 1, 10, ), ), );
91
  // end pre-compiled locale data
92
  $locale = new LocoLocale( $lc, $cc );
93
  if( isset($locales[$lc]) ){
86
  */
87
  public static function init( $lc, $cc ){
88
  // pre-compiled locale data
89
+ static $plurals = array ( 'n != 1', 'n > 1', 'n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2', '( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : 2', 'n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? 1 : 2', 'n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2', 'n == 1 ? 0 : n == 0 || ( n % 100 > 1 && n % 100 < 11 ) ? 1 : ( n % 100 > 10 && n % 100 < 20 ) ? 2 : 3', 'n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2', 'n == 1 ? 0 : ( n == 0 || ( n % 100 > 0 && n % 100 < 20 ) ) ? 1 : 2', 'n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0', 0, 'n % 10 != 1 || n % 100 == 11', 'n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5', '( n == 1 ) ? 0 : ( n == 2 ) ? 1 : ( n != 8 && n != 11 ) ? 2 : 3', 'n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4', 'n != 0', ),
90
+ $locales = array ( 'en' => array ( 'GB' => array ( 'English (UK)', 2, 0, ), 'IE' => array ( 'English (Ireland)', 2, 0, ), 'US' => array ( 'English (USA)', 2, 0, ), 'CA' => array ( 'English (Canada)', 2, 0, ), 'AU' => array ( 'English (Australia)', 2, 0, ), 'NZ' => array ( 'English (New Zealand)', 2, 0, ), 'HK' => array ( 'English (Hong Kong)', 2, 0, ), 'SG' => array ( 'English (Singapore)', 2, 0, ), 'AE' => array ( 'English (United Arab Emirates)', 2, 0, ), 'ZA' => array ( 'English (South Africa)', 2, 0, ), 'IN' => array ( 'English (India)', 2, 0, ), ), 'fr' => array ( 'FR' => array ( 'French', 2, 1, ), 'CH' => array ( 'French (Switzerland)', 2, 1, ), 'BE' => array ( 'French (Belgium)', 2, 1, ), 'HT' => array ( 'French (Haiti)', 2, 1, ), 'CA' => array ( 'French (Canada)', 2, 1, ), ), 'it' => array ( 'IT' => array ( 'Italian', 2, 0, ), 'CH' => array ( 'Italian (Switzerland)', 2, 0, ), ), 'de' => array ( 'DE' => array ( 'German', 2, 0, ), 'CH' => array ( 'German (Switzerland)', 2, 0, ), 'AT' => array ( 'German (Austria)', 2, 0, ), ), 'es' => array ( 'ES' => array ( 'Spanish', 2, 0, ), 'MX' => array ( 'Spanish (Mexico)', 2, 0, ), 'AR' => array ( 'Spanish (Argentina)', 2, 0, ), 'BO' => array ( 'Spanish (Bolivia)', 2, 0, ), 'CL' => array ( 'Spanish (Chile)', 2, 0, ), 'CO' => array ( 'Spanish (Colombia)', 2, 0, ), 'CR' => array ( 'Spanish (Costa Rica)', 2, 0, ), 'CU' => array ( 'Spanish (Cuba)', 2, 0, ), 'DO' => array ( 'Spanish (Dominican Republic)', 2, 0, ), 'EC' => array ( 'Spanish (Ecuador)', 2, 0, ), 'SV' => array ( 'Spanish (El Salvador)', 2, 0, ), 'GT' => array ( 'Spanish (Guatemala)', 2, 0, ), 'HN' => array ( 'Spanish (Honduras)', 2, 0, ), 'NI' => array ( 'Spanish (Nicaragua)', 2, 0, ), 'PA' => array ( 'Spanish (Panama)', 2, 0, ), 'PY' => array ( 'Spanish (Paraguay)', 2, 0, ), 'PE' => array ( 'Spanish (Peru)', 2, 0, ), 'UY' => array ( 'Spanish (Uruguay)', 2, 0, ), 'VE' => array ( 'Spanish (Venezuela)', 2, 0, ), ), 'pt' => array ( 'PT' => array ( 'Portuguese', 2, 0, ), 'BR' => array ( 'Portuguese (Brazil)', 2, 0, ), ), 'ru' => array ( 'RU' => array ( 'Russian', 3, 2, ), 'UA' => array ( 'Russian (Ukraine)', 3, 2, ), ), 'sv' => array ( 'SE' => array ( 'Swedish', 2, 0, ), ), 'no' => array ( 'NO' => array ( 'Norwegian', 2, 0, ), ), 'da' => array ( 'DK' => array ( 'Danish', 2, 0, ), ), 'fi' => array ( 'FI' => array ( 'Finnish', 2, 0, ), ), 'bg' => array ( 'BG' => array ( 'Bulgarian', 2, 0, ), ), 'cs' => array ( 'CZ' => array ( 'Czech', 3, 3, ), ), 'et' => array ( 'EE' => array ( 'Estonian', 2, 0, ), ), 'el' => array ( 'GR' => array ( 'Greek', 2, 0, ), 'CY' => array ( 'Greek (Cyprus)', 2, 0, ), ), 'hu' => array ( 'HU' => array ( 'Hungarian', 2, 0, ), ), 'lv' => array ( 'LV' => array ( 'Latvian', 3, 4, ), ), 'lt' => array ( 'LT' => array ( 'Lithuanian', 3, 5, ), ), 'lb' => array ( 'LU' => array ( 'Luxembourgish', 2, 0, ), ), 'mt' => array ( 'MT' => array ( 'Maltese', 4, 6, ), ), 'nl' => array ( 'NL' => array ( 'Dutch', 2, 0, ), 'BE' => array ( 'Dutch (Belgium)', 2, 0, ), ), 'pl' => array ( 'PL' => array ( 'Polish', 3, 7, ), ), 'ro' => array ( 'RO' => array ( 'Romanian', 3, 8, ), ), 'sk' => array ( 'SK' => array ( 'Slovak', 3, 3, ), ), 'sl' => array ( 'SI' => array ( 'Slovenian', 4, 9, ), ), 'ht' => array ( 'HT' => array ( 'Haitian Creole', 2, 0, ), ), 'gn' => array ( 'PY' => array ( 'Guarani (Paraguay)', 2, 0, ), ), 'ja' => array ( 'JP' => array ( 'Japanese', 1, 10, ), ), 'zh' => array ( 'CN' => array ( 'Chinese', 1, 10, ), 'HK' => array ( 'Chinese (Hong Kong)', 1, 10, ), 'TW' => array ( 'Chinese (Taiwan)', 1, 10, ), ), 'af' => array ( 'ZA' => array ( 'Afrikaans (South Africa)', 2, 0, ), ), 'hr' => array ( 'HR' => array ( 'Croatian', 3, 2, ), ), 'is' => array ( 'IS' => array ( 'Icelandic', 2, 11, ), ), 'he' => array ( 'IL' => array ( 'Hebrew (Israel)', 2, 0, ), ), 'ar' => array ( 'IL' => array ( 'Arabic (Israel)', 6, 12, ), 'AE' => array ( 'Arabic (United Arab Emirates)', 6, 12, ), ), 'hi' => array ( 'IN' => array ( 'Hindi (India)', 2, 0, ), ), 'sr' => array ( 'RS' => array ( 'Serbian', 3, 2, ), ), 'tr' => array ( 'TR' => array ( 'Turkish', 2, 1, ), ), 'ko' => array ( 'KR' => array ( 'Korean', 1, 10, ), ), 'cy' => array ( 'GB' => array ( 'Welsh', 4, 13, ), ), 'ms' => array ( 'MY' => array ( 'Malay (Malaysia)', 1, 10, ), ), 'az' => array ( 'TR' => array ( 'Azerbaijani (Turkey)', 2, 0, ), ), 'bn' => array ( 'BD' => array ( 'Bengali (Bangladesh)', 2, 0, ), ), 'bs' => array ( 'BA' => array ( 'Bosnian (Bosnia & Herzegovina)', 3, 2, ), ), 'fa' => array ( 'AF' => array ( 'Persian (Afghanistan)', 1, 10, ), 'IR' => array ( 'Persian (Iran)', 1, 10, ), ), 'fo' => array ( 'FO' => array ( 'Faroese (Faroe Islands)', 2, 0, ), 'DK' => array ( 'Faroese (Denmark)', 2, 0, ), ), 'ga' => array ( 'IE' => array ( 'Irish (Ireland)', 5, 14, ), ), 'gl' => array ( 'ES' => array ( 'Galician (Spain)', 2, 0, ), ), 'hy' => array ( 'AM' => array ( 'Armenian', 2, 0, ), ), 'id' => array ( 'ID' => array ( 'Indonesian', 1, 10, ), ), 'jv' => array ( 'ID' => array ( 'Javanese (Indonesia)', 2, 15, ), ), 'ka' => array ( 'GE' => array ( 'Georgian', 1, 10, ), ), 'kk' => array ( 'KZ' => array ( 'Kazakh', 1, 10, ), ), 'kn' => array ( 'IN' => array ( 'Kannada (India)', 2, 0, ), ), 'li' => array ( 'NL' => array ( 'Limburgish (Netherlands)', 2, 0, ), ), 'lo' => array ( 'LA' => array ( 'Lao (Laos)', 1, 10, ), ), 'mg' => array ( 'MG' => array ( 'Malagasy (Madagascar)', 2, 1, ), ), 'my' => array ( 'MM' => array ( 'Burmese (Myanmar)', 1, 10, ), ), 'nb' => array ( 'NO' => array ( 'Bokmål', 2, 0, ), ), 'nn' => array ( 'NO' => array ( 'Nynorsk', 2, 0, ), ), 'ne' => array ( 'NP' => array ( 'Nepali', 2, 0, ), ), 'os' => array ( 'TR' => array ( 'Ossetian (Turkey)', 2, 0, ), 'RU' => array ( 'Ossetian (Russia)', 2, 0, ), 'GE' => array ( 'Ossetian (Georgia)', 2, 0, ), ), 'pa' => array ( 'IN' => array ( 'Punjabi (India)', 2, 0, ), ), 'uk' => array ( 'UA' => array ( 'Ukrainian (Ukraine)', 3, 2, ), ), 'sa' => array ( 'IN' => array ( 'Sanskrit (India)', 2, 0, ), ), 'sd' => array ( 'PK' => array ( 'Sindhi (Pakistan)', 2, 0, ), ), 'si' => array ( 'LK' => array ( 'Sinhala (Sri Lanka)', 2, 0, ), ), 'so' => array ( 'SO' => array ( 'Somali', 2, 0, ), ), 'sq' => array ( 'AL' => array ( 'Albanian (Albania)', 2, 0, ), ), 'sc' => array ( 'IT' => array ( 'Sardinian (Italy)', 2, 0, ), ), 'su' => array ( 'ID' => array ( 'Sundanese (Indonesia)', 1, 10, ), ), 'sw' => array ( 'KE' => array ( 'Swahili (Kenya)', 2, 0, ), 'UG' => array ( 'Swahili (Uganda)', 2, 0, ), 'TZ' => array ( 'Swahili (Tanzania)', 2, 0, ), 'KM' => array ( 'Swahili (Comoros)', 2, 0, ), ), 'ta' => array ( 'IN' => array ( 'Tamil (India)', 2, 0, ), 'LK' => array ( 'Tamil (Sri Lanka)', 2, 0, ), ), 'te' => array ( 'IN' => array ( 'Telugu (India)', 2, 0, ), ), 'th' => array ( 'TH' => array ( 'Thai (Thailand)', 1, 10, ), ), 'tg' => array ( 'TJ' => array ( 'Tajik (Tajikistan)', 2, 1, ), ), 'ug' => array ( 'CN' => array ( 'Uyghur (China)', 1, 10, ), ), 'ur' => array ( 'IN' => array ( 'Urdu (India)', 2, 0, ), 'PK' => array ( 'Urdu (Pakistan)', 2, 0, ), ), 'uz' => array ( 'UZ' => array ( 'Uzbek (Uzbekistan)', 2, 1, ), ), 'vi' => array ( 'VN' => array ( 'Vietnamese', 1, 10, ), ), );
91
  // end pre-compiled locale data
92
  $locale = new LocoLocale( $lc, $cc );
93
  if( isset($locales[$lc]) ){
lib/loco-packages.php CHANGED
@@ -106,12 +106,47 @@ class LocoPackage {
106
  }
107
 
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  /**
110
  * Get default text domain
111
  */
112
  public function get_domain(){
 
 
 
 
 
 
 
 
 
 
113
  return $this->domain;
114
  }
 
115
 
116
  /**
117
  * Get time most recent PO/POT file was updated
@@ -164,16 +199,16 @@ class LocoPackage {
164
  * Add multiple locations from found PO and POT files
165
  * @return LocoPackage
166
  */
167
- public function add_po( array $files, $domain = '' ){
168
  if( isset($files['pot']) && is_array($files['pot']) ){
169
  foreach( $files['pot'] as $path ){
170
- $domain or $domain = LocoAdmin::resolve_file_domain($path) or $domain = $this->domain;
171
  $this->add_file($path) and $this->pot[$domain] = $path;
172
  }
173
  }
174
  if( isset($files['po']) && is_array($files['po']) ){
175
  foreach( $files['po'] as $path ){
176
- $domain or $domain = LocoAdmin::resolve_file_domain($path) or $domain = $this->domain;
177
  $locale = LocoAdmin::resolve_file_locale($path);
178
  $code = $locale->get_code() or $code = 'xx_XX';
179
  $this->add_file($path) and $this->po[ $domain ][ $code ] = $path;
@@ -183,11 +218,32 @@ class LocoPackage {
183
  }
184
 
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  /**
187
  * Add a location under which there may be PHP source files for one or more of our domains
188
  * @return LocoPackage
189
  */
190
- public function add_source( $path ){
191
  $this->src[] = $path;
192
  return $this;
193
  }
@@ -198,6 +254,7 @@ class LocoPackage {
198
  */
199
  public function lang_dir( $domain = '' ){
200
  $dirs = array();
 
201
  foreach( $this->pot as $d => $path ){
202
  if( ! $domain || $d === $domain ){
203
  $path = dirname($path);
@@ -207,6 +264,7 @@ class LocoPackage {
207
  $dirs[] = $path;
208
  }
209
  }
 
210
  foreach( $this->po as $d => $paths ){
211
  if( ! $domain || $d === $domain ){
212
  foreach( $paths as $path ){
@@ -218,13 +276,23 @@ class LocoPackage {
218
  }
219
  }
220
  }
 
221
  foreach( $this->src as $path ){
222
- $path .= '/languages';
 
 
 
223
  if( is_writable($path) ){
224
  return $path;
225
  }
226
- $dirs[] = $path;
 
 
 
 
 
227
  }
 
228
  $path = $this->_lang_dir();
229
  if( is_writable($path) ){
230
  return $path;
@@ -240,15 +308,29 @@ class LocoPackage {
240
  */
241
  public function create_po_path( LocoLocale $locale, $domain = '' ){
242
  if( ! $domain ){
243
- $domain = $this->domain;
244
  }
245
  $dir = $this->lang_dir( $domain );
246
- $name = $locale->get_code().'.po';
247
  // only prefix with text domain for plugins and files in global lang directory
248
  if( 'plugin' === $this->get_type() || 0 === strpos( $dir, $this->_lang_dir() ) ){
249
- $name = $domain.'-'.$name;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  }
251
- return $dir.'/'.$name;
252
  }
253
 
254
 
@@ -285,13 +367,16 @@ class LocoPackage {
285
  * Called when generating root list view for simple error indicators.
286
  */
287
  public function check_permissions(){
 
288
  foreach( $this->pot as $path ){
 
289
  if( ! is_writable($path) ){
290
  throw new Exception( Loco::__('Some files not writable') );
291
  }
292
  }
293
  foreach( $this->po as $paths ){
294
  foreach( $paths as $path ){
 
295
  if( ! is_writable($path) ){
296
  throw new Exception( Loco::__('Some files not writable') );
297
  }
@@ -304,6 +389,11 @@ class LocoPackage {
304
  if( ! is_writable($dir) ){
305
  throw new Exception( sprintf( Loco::__('"%s" folder not writable'), basename($dir) ) );
306
  }
 
 
 
 
 
307
  }
308
 
309
 
@@ -311,19 +401,31 @@ class LocoPackage {
311
  * Get file permission for every important file path in package
312
  */
313
  public function get_permission_errors(){
 
314
  $paths = array();
315
- $dir = $this->lang_dir();
316
- $paths[$dir] = is_writable($dir) ? '' : Loco::__('Folder not writable');
317
  foreach( $this->pot as $path ){
 
318
  $paths[$path] = is_writable($path) ? '' : Loco::__('POT file not writable');
319
  }
320
  foreach( $this->po as $pos ){
321
  foreach( $pos as $path ){
 
322
  $paths[$path] = is_writable($path) ? '' : Loco::__('PO file not writable');
323
  $path = preg_replace('/\.po$/', '.mo', $path );
324
  $paths[$path] = file_exists($path) ? ( is_writeable($path) ? '' : Loco::__('MO file not writable') ) : Loco::__('MO file not found');
325
  }
326
  }
 
 
 
 
 
 
 
 
 
 
 
327
  return $paths;
328
  }
329
 
@@ -334,9 +436,23 @@ class LocoPackage {
334
  */
335
  public function get_pot( $domain = '' ){
336
  if( ! $domain ){
337
- $domain = $this->domain;
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  }
339
- return isset($this->pot[$domain]) ? $this->pot[$domain] : '';
 
340
  }
341
 
342
 
@@ -346,7 +462,7 @@ class LocoPackage {
346
  */
347
  public function get_po( $domain = '' ){
348
  if( ! $domain ){
349
- $domain = $this->domain;
350
  }
351
  return isset($this->po[$domain]) ? $this->po[$domain] : array();
352
  }
@@ -393,7 +509,9 @@ class LocoPackage {
393
  public function meta(){
394
  if( ! is_array($this->_meta) ){
395
  $pot = $po = array();
396
- foreach( $this->pot as $domain => $path ){
 
 
397
  $pot[] = compact('domain','path');
398
  }
399
  // get progress and locale for each PO file
@@ -405,7 +523,7 @@ class LocoPackage {
405
  $po[] = array (
406
  'path' => $path,
407
  'domain' => $domain,
408
- 'name' => str_replace( array('.po',$domain), array('',''), basename($path) ),
409
  'stats' => loco_po_stats( $export ),
410
  'length' => count( $export ),
411
  'locale' => loco_locale_resolve($code),
@@ -417,9 +535,9 @@ class LocoPackage {
417
  }
418
  }
419
  $this->_meta = compact('po','pot') + array(
420
- 'name' => $this->name,
421
  'root' => $this->get_root(),
422
- 'domain' => $this->domain,
423
  );
424
  }
425
  return $this->_meta;
@@ -459,16 +577,47 @@ class LocoPackage {
459
  private static function get_theme( $handle ){
460
  $theme = wp_get_theme( $handle );
461
  if( $theme && $theme->exists() ){
462
- $domain = $theme->get('TextDomain') or $domain = $handle;
463
- $package = new LocoThemePackage( $handle, $domain, $theme->get('Name') );
 
464
  $root = $theme->get_theme_root().'/'.$handle;
465
  $package->add_source( $root );
466
  // add PO and POT under theme root
467
  if( $files = LocoAdmin::find_po($root) ){
468
  $package->add_po( $files, $domain );
469
  }
470
- // find additional theme PO under WP_LANG_DIR/themes
 
 
 
 
471
  $package->add_lang_dir( WP_LANG_DIR.'/themes', $domain );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
  return $package;
473
  }
474
  }
@@ -490,6 +639,10 @@ class LocoPackage {
490
  if( $files = LocoAdmin::find_po($root) ){
491
  $package->add_po( $files, $domain );
492
  }
 
 
 
 
493
  // find additional plugin PO under WP_LANG_DIR/plugin
494
  $package->add_lang_dir( WP_LANG_DIR.'/plugins', $domain );
495
  return $package;
@@ -576,9 +729,38 @@ class LocoPackage {
576
  * Extended package class for themes
577
  */
578
  class LocoThemePackage extends LocoPackage {
 
579
  protected function _lang_dir(){
580
  return WP_LANG_DIR.'/themes';
581
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
582
  public function get_type(){
583
  return 'theme';
584
  }
106
  }
107
 
108
 
109
+ /**
110
+ * Get package handle used for retreiving theme or plugin via wordpress functions
111
+ */
112
+ public function get_handle(){
113
+ return $this->handle;
114
+ }
115
+
116
+
117
+ /**
118
+ * Get descriptive package name
119
+ */
120
+ public function get_name(){
121
+ return $this->name;
122
+ }
123
+
124
+
125
+ /**
126
+ * Get all text domains with PO or POT files.
127
+ */
128
+ private function get_domains(){
129
+ return array_unique( array_merge( array_keys($this->pot), array_keys($this->po) ) );
130
+ }
131
+
132
+
133
  /**
134
  * Get default text domain
135
  */
136
  public function get_domain(){
137
+ if( ! $this->domain ){
138
+ $this->domain = $this->handle;
139
+ }
140
+ if( $this->domain === $this->handle ){
141
+ // if text domain defaulted and existing files disagree, try to correct primary domain
142
+ $candidates = $this->get_domains();
143
+ if( $candidates && ! in_array( $this->domain, $candidates, true ) ){
144
+ $this->domain = $candidates[0];
145
+ }
146
+ }
147
  return $this->domain;
148
  }
149
+
150
 
151
  /**
152
  * Get time most recent PO/POT file was updated
199
  * Add multiple locations from found PO and POT files
200
  * @return LocoPackage
201
  */
202
+ private function add_po( array $files, $domain = '' ){
203
  if( isset($files['pot']) && is_array($files['pot']) ){
204
  foreach( $files['pot'] as $path ){
205
+ $domain or $domain = LocoAdmin::resolve_file_domain($path) or $domain = $this->get_domain();
206
  $this->add_file($path) and $this->pot[$domain] = $path;
207
  }
208
  }
209
  if( isset($files['po']) && is_array($files['po']) ){
210
  foreach( $files['po'] as $path ){
211
+ $domain or $domain = LocoAdmin::resolve_file_domain($path) or $domain = $this->get_domain();
212
  $locale = LocoAdmin::resolve_file_locale($path);
213
  $code = $locale->get_code() or $code = 'xx_XX';
214
  $this->add_file($path) and $this->po[ $domain ][ $code ] = $path;
218
  }
219
 
220
 
221
+
222
+ /**
223
+ * Add any MO files for which PO files are missing
224
+ */
225
+ private function add_mo( array $files, $domain = '' ){
226
+ foreach( $files as $mo_path ){
227
+ $domain or $domain = LocoAdmin::resolve_file_domain($mo_path) or $domain = $this->get_domain();
228
+ $locale = LocoAdmin::resolve_file_locale($mo_path);
229
+ $code = $locale->get_code() or $code = 'xx_XX';
230
+ if( isset($this->po[$domain][$code]) ){
231
+ // PO matched, ignore this MO
232
+ // @todo better matching as PO may not be in same location as MO
233
+ continue;
234
+ }
235
+ // add MO in place of PO
236
+ $this->add_file($mo_path) and $this->po[$domain][$code] = $mo_path;
237
+ }
238
+ }
239
+
240
+
241
+
242
  /**
243
  * Add a location under which there may be PHP source files for one or more of our domains
244
  * @return LocoPackage
245
  */
246
+ private function add_source( $path ){
247
  $this->src[] = $path;
248
  return $this;
249
  }
254
  */
255
  public function lang_dir( $domain = '' ){
256
  $dirs = array();
257
+ // check location of POT in domain
258
  foreach( $this->pot as $d => $path ){
259
  if( ! $domain || $d === $domain ){
260
  $path = dirname($path);
264
  $dirs[] = $path;
265
  }
266
  }
267
+ // check location of al PO files in domain
268
  foreach( $this->po as $d => $paths ){
269
  if( ! $domain || $d === $domain ){
270
  foreach( $paths as $path ){
276
  }
277
  }
278
  }
279
+ // check languages subfolder of all source file locations
280
  foreach( $this->src as $path ){
281
+ $pref = $path.'/languages';
282
+ if( is_writable($pref) ){
283
+ return $pref;
284
+ }
285
  if( is_writable($path) ){
286
  return $path;
287
  }
288
+ if( is_dir($pref) ){
289
+ $dirs[] = $pref;
290
+ }
291
+ else {
292
+ $dirs[] = $path;
293
+ }
294
  }
295
+ // check global languages location
296
  $path = $this->_lang_dir();
297
  if( is_writable($path) ){
298
  return $path;
308
  */
309
  public function create_po_path( LocoLocale $locale, $domain = '' ){
310
  if( ! $domain ){
311
+ $domain = $this->get_domain();
312
  }
313
  $dir = $this->lang_dir( $domain );
314
+ $name = $locale->get_code().'.po';
315
  // only prefix with text domain for plugins and files in global lang directory
316
  if( 'plugin' === $this->get_type() || 0 === strpos( $dir, $this->_lang_dir() ) ){
317
+ $prefix = $domain.'-';
318
+ }
319
+ else {
320
+ $prefix = '';
321
+ }
322
+ // if PO files exist, copy their naming format and use location if writable
323
+ if( ! empty($this->po[$domain]) ){
324
+ foreach( $this->po[$domain] as $code => $path ){
325
+ $info = pathinfo( $path );
326
+ $prefix = str_replace( $code.'.po', '', $info['basename'] );
327
+ if( is_writable($info['dirname']) ){
328
+ $dir = $info['dirname'];
329
+ break;
330
+ }
331
+ }
332
  }
333
+ return $dir.'/'.$prefix.$name;
334
  }
335
 
336
 
367
  * Called when generating root list view for simple error indicators.
368
  */
369
  public function check_permissions(){
370
+ $dirs = array();
371
  foreach( $this->pot as $path ){
372
+ $dirs[ dirname($path) ] = 1;
373
  if( ! is_writable($path) ){
374
  throw new Exception( Loco::__('Some files not writable') );
375
  }
376
  }
377
  foreach( $this->po as $paths ){
378
  foreach( $paths as $path ){
379
+ $dirs[ dirname($path) ] = 1;
380
  if( ! is_writable($path) ){
381
  throw new Exception( Loco::__('Some files not writable') );
382
  }
389
  if( ! is_writable($dir) ){
390
  throw new Exception( sprintf( Loco::__('"%s" folder not writable'), basename($dir) ) );
391
  }
392
+ foreach( array_keys($dirs) as $path ){
393
+ if( ! is_writable($path) ){
394
+ throw new Exception( sprintf( Loco::__('"%s" folder not writable'), basename($dir) ) );
395
+ }
396
+ }
397
  }
398
 
399
 
401
  * Get file permission for every important file path in package
402
  */
403
  public function get_permission_errors(){
404
+ $dirs = array();
405
  $paths = array();
 
 
406
  foreach( $this->pot as $path ){
407
+ $dirs[ dirname($path) ] = 1;
408
  $paths[$path] = is_writable($path) ? '' : Loco::__('POT file not writable');
409
  }
410
  foreach( $this->po as $pos ){
411
  foreach( $pos as $path ){
412
+ $dirs[ dirname($path) ] = 1;
413
  $paths[$path] = is_writable($path) ? '' : Loco::__('PO file not writable');
414
  $path = preg_replace('/\.po$/', '.mo', $path );
415
  $paths[$path] = file_exists($path) ? ( is_writeable($path) ? '' : Loco::__('MO file not writable') ) : Loco::__('MO file not found');
416
  }
417
  }
418
+ if( ! isset($path) ){
419
+ $base = $this->get_root();
420
+ $dirs[ $base ] = 1;
421
+ $dirs[ $base.'/languages' ] = 1;
422
+ }
423
+ $dirs[ $this->lang_dir() ] = 1;
424
+ $dirs[ $this->_lang_dir() ] = 1;
425
+ foreach( array_keys($dirs) as $dir ){
426
+ $paths[$dir] = is_writable($dir) ? '' : Loco::__('Folder not writable');
427
+ }
428
+ ksort( $paths );
429
  return $paths;
430
  }
431
 
436
  */
437
  public function get_pot( $domain = '' ){
438
  if( ! $domain ){
439
+ $domain = $this->get_domain();
440
+ }
441
+ if( ! empty($this->pot[$domain]) ){
442
+ return $this->pot[$domain];
443
+ }
444
+ // no POT, but some authors may use locale-less PO files incorrectly as a template
445
+ if( isset($this->po[$domain]) ){
446
+ foreach( array('','xx_XX','en_US','en_GB') as $try ){
447
+ if( isset($this->po[$domain][$try]) ){
448
+ $pot = $this->po[$domain][$try];
449
+ unset( $this->po[$domain][$try] );
450
+ return $this->pot[$domain] = $pot;
451
+ }
452
+ }
453
  }
454
+ // no template candidate
455
+ return '';
456
  }
457
 
458
 
462
  */
463
  public function get_po( $domain = '' ){
464
  if( ! $domain ){
465
+ $domain = $this->get_domain();
466
  }
467
  return isset($this->po[$domain]) ? $this->po[$domain] : array();
468
  }
509
  public function meta(){
510
  if( ! is_array($this->_meta) ){
511
  $pot = $po = array();
512
+ // get POT files for all domains, fixing incorrect PO usage
513
+ foreach( $this->get_domains() as $domain ){
514
+ $path = $this->get_pot( $domain ) and
515
  $pot[] = compact('domain','path');
516
  }
517
  // get progress and locale for each PO file
523
  $po[] = array (
524
  'path' => $path,
525
  'domain' => $domain,
526
+ 'name' => trim( str_replace( array('.po','.mo',$domain), array('','',''), basename($path) ), '-_'),
527
  'stats' => loco_po_stats( $export ),
528
  'length' => count( $export ),
529
  'locale' => loco_locale_resolve($code),
535
  }
536
  }
537
  $this->_meta = compact('po','pot') + array(
538
+ 'name' => $this->get_name(),
539
  'root' => $this->get_root(),
540
+ 'domain' => $this->get_domain(),
541
  );
542
  }
543
  return $this->_meta;
577
  private static function get_theme( $handle ){
578
  $theme = wp_get_theme( $handle );
579
  if( $theme && $theme->exists() ){
580
+ $name = $theme->get('Name');
581
+ $domain = $theme->get('TextDomain');
582
+ $package = new LocoThemePackage( $handle, $domain, $name );
583
  $root = $theme->get_theme_root().'/'.$handle;
584
  $package->add_source( $root );
585
  // add PO and POT under theme root
586
  if( $files = LocoAdmin::find_po($root) ){
587
  $package->add_po( $files, $domain );
588
  }
589
+ // pick up any MO files that have missing PO
590
+ if( $files = LocoAdmin::find_mo($root) ){
591
+ $package->add_mo( $files, $domain );
592
+ }
593
+ // find additional theme PO under WP_LANG_DIR/themes unless a child theme
594
  $package->add_lang_dir( WP_LANG_DIR.'/themes', $domain );
595
+ // child theme inherits parent template translations
596
+ while( $parent = $theme->get_template() ){
597
+ if( $parent === $handle ){
598
+ // circular reference
599
+ break;
600
+ }
601
+ $parent = LocoPackage::get( $parent, 'theme' );
602
+ if( ! $parent ){
603
+ // parent missing
604
+ break;
605
+ }
606
+ // indicate that theme is a child
607
+ $package->inherit( $parent );
608
+ if( $domain && $domain !== $parent->domain ){
609
+ // child specifies its own domain and will have to call load_child_theme_textdomain
610
+ }
611
+ else if( ! empty($package->po) || ! empty($package->pot) ){
612
+ // child has its own language files and domain will be picked up when get_domain called
613
+ $package->get_domain();
614
+ }
615
+ else {
616
+ // else should child inherit parent domain?
617
+ $package->domain = $parent->get_domain();
618
+ }
619
+ break;
620
+ }
621
  return $package;
622
  }
623
  }
639
  if( $files = LocoAdmin::find_po($root) ){
640
  $package->add_po( $files, $domain );
641
  }
642
+ // pick up any MO files that have missing PO
643
+ if( $files = LocoAdmin::find_mo($root) ){
644
+ $package->add_mo( $files, $domain );
645
+ }
646
  // find additional plugin PO under WP_LANG_DIR/plugin
647
  $package->add_lang_dir( WP_LANG_DIR.'/plugins', $domain );
648
  return $package;
729
  * Extended package class for themes
730
  */
731
  class LocoThemePackage extends LocoPackage {
732
+ private $parent;
733
  protected function _lang_dir(){
734
  return WP_LANG_DIR.'/themes';
735
  }
736
+ protected function inherit( LocoThemePackage $parent ){
737
+ $this->parent = $parent->get_handle();
738
+ }
739
+ protected function is_child(){
740
+ return ! empty($this->parent);
741
+ }
742
+ protected function get_parent(){
743
+ return $this->parent ? LocoPackage::get( $this->parent, 'theme' ) : null;
744
+ }
745
+ public function meta(){
746
+ $meta = parent::meta();
747
+ if( $parent = $this->get_parent() ){
748
+ $pmeta = $parent->meta();
749
+ $meta['parent'] = $parent->get_name();
750
+ // merge parent resources unless child has its own domain
751
+ if( $meta['domain'] === $pmeta['domain'] ){
752
+ $meta['po'] = array_merge( $meta['po'], $pmeta['po'] );
753
+ $meta['pot'] = array_merge( $meta['pot'], $pmeta['pot'] );
754
+ }
755
+ }
756
+ return $meta;
757
+ }
758
+ public function get_pot( $domain = '' ){
759
+ if( ( $parent = $this->get_parent() ) && ( $pot = $parent->get_pot($domain) ) ){
760
+ return $pot;
761
+ }
762
+ return parent::get_pot( $domain );
763
+ }
764
  public function get_type(){
765
  return 'theme';
766
  }
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.4.2
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.3
8
  Author URI: http://localise.biz/help/wordpress/translate-plugin
9
  */
10
 
php/loco-posync.php CHANGED
@@ -29,7 +29,7 @@
29
  if( ! LocoAdmin::is_pot($path) ){
30
 
31
  // if a POT file exists, sync from that
32
- $domain = LocoAdmin::resolve_file_domain($path);
33
  if( $pot_path = $package->get_pot($domain) ){
34
  $exp = LocoAdmin::parse_po( $pot_path );
35
  if( ! $exp || ( 1 === count($exp) && '' === $exp[0]['source'] ) ){
29
  if( ! LocoAdmin::is_pot($path) ){
30
 
31
  // if a POT file exists, sync from that
32
+ $domain = LocoAdmin::resolve_file_domain($path) or $domain = $package->get_domain();
33
  if( $pot_path = $package->get_pot($domain) ){
34
  $exp = LocoAdmin::parse_po( $pot_path );
35
  if( ! $exp || ( 1 === count($exp) && '' === $exp[0]['source'] ) ){
pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_import-poedit-lib.scssc DELETED
Binary file
pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_import-poedit.scssc DELETED
Binary file
pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/_loco-admin-poedit-lib.scssc DELETED
Binary file
pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/loco-admin-poedit-lib.scssc DELETED
Binary file
pub/.sass-cache/0a720c570290415a31724b9b3cae2fabb61bf165/loco-admin.scssc DELETED
Binary file
pub/.sass-cache/4ed6af75c0f3919286ece718623a9966a7c474a9/_import-poedit.scssc DELETED
Binary file
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 #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}
1
+ .wrap a.nav-tab-active{cursor:text}.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-error>*:before,.wrap .loco-warning>*: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-message p:before,.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-warning>*: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}.error a.dismiss:before,.updated a.dismiss:before{display:none}.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/css/loco-legacy.css ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* styles for versions of wordpress below 3.8 */
2
+
3
+ #adminmenu .toplevel_page_loco-translate .wp-menu-image {
4
+ background-image: url(../img/wp/menu.png);
5
+ background-position: 2px 0;
6
+ -webkit-background-size: 28px 56px; /* Safari 3.0 */
7
+ -moz-background-size: 28px 56px; /* Gecko 1.9.2 (Firefox 3.6) */
8
+ -o-background-size: 28px 56px; /* Opera 9.5 */
9
+ background-size: 28px 56px; /* Gecko 2.0 (Firefox 4.0) and other CSS3-compliant browsers */
10
+ }
11
+
12
+ #adminmenu .toplevel_page_loco-translate.wp-has-current-submenu .wp-menu-image {
13
+ background-position: 2px -28px;
14
+ }
pub/img/wp/menu.png ADDED
Binary file
pub/js/admin-poinit.js DELETED
@@ -1,15 +0,0 @@
1
-
2
-
3
- !function( w, d, $ ){
4
-
5
- var form = d.getElementById('loco-msginit'),
6
- sloc = form['common-locale'],
7
- tloc = form['custom-locale'];
8
-
9
- $(sloc).change( function(){
10
- tloc.value = $(this).val();
11
- return true;
12
- } );
13
-
14
-
15
- }( window, document, window.jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
pub/js/build/admin-common.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(k,l,a){function f(c,g){function e(){d();b=setTimeout(function(){a(c).fadeOut(1E3,g)},f)}function d(){b&&clearTimeout(b);b=null}var b,f=5E3;e();a(c).mouseenter(d).mouseleave(e)}function h(c,g){function e(d){a(c).remove();a(window).triggerHandler("resize");var b;if(b=d)d.stopPropagation(),d.preventDefault(),b=!1;return b}a('<a class="dismiss" href="#">&times;</a>').appendTo(c).click(e);g||f(c,e)}a("#wpbody-content").find("div.loco-message").each(function(c,a){h(a,!0)})}(window,document,window.jQuery);
pub/js/build/admin-poinit.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(a,c,b){a=c.getElementById("loco-msginit");var d=a["custom-locale"];b(a["common-locale"]).change(function(){d.value=b(this).val();return!0})}(window,document,window.jQuery);
pub/js/lang/dummy.php CHANGED
@@ -1,6 +1,6 @@
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');
@@ -15,3 +15,9 @@ __('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');
 
 
 
 
 
 
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');
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');
18
+
19
+
20
+ /**
21
+ * Legacy translations, removed from front end but don't want to lose in case reinstated
22
+ */
23
+ __('Translation');
pub/js/lang/loco-translate-de_DE.js CHANGED
@@ -3,7 +3,7 @@
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: de_DE, German
6
- * Exported at: Mon, 20 Jan 2014 00:44:43 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
@@ -12,7 +12,7 @@ loco = window.loco||{}, loco.t = function( pairs ){
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
@@ -29,5 +29,5 @@ loco = window.loco||{}, loco.t = function( pairs ){
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 backups in \"%s\". Fix file permissions or disable backups in settings":"","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":"Fehler beim Schreiben der MO-Datei","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":"Bereits auf dem aktuellen Stand mit %s","Already up to date with source code":"Bereits 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":"Erzeuge Hashtabellen","Backing up PO files":"","Number of backups to keep of each file:":"","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
  );
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: de_DE, German
6
+ * Exported at: Mon, 10 Mar 2014 12:31:13 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
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
29
  return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
30
  };
31
  }(
32
+ {"Error":"Fehler","Warning":"Warnung","OK":"OK","Permission denied":"","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","PO file used as template. This will be renamed to %s on first save":"","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","Empty or invalid %s file":"","%s file has no header":"","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","Manage translations":"\u00dcbersetzungen verwalten","Translation options":"","Loco Translate":"","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","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","Folder not writable":"Ordner nicht schreibbar","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 backups in \"%s\". Fix file permissions or disable backups in settings":"","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":"Fehler beim Schreiben der MO-Datei","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":"Bereits auf dem aktuellen Stand mit %s","Already up to date with source code":"Bereits 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","Translation":"\u00dcbersetzung","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":"Erzeuge Hashtabellen","Backing up PO files":"","Number of backups to keep of each file:":"","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 CHANGED
@@ -3,7 +3,7 @@
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: nl_BE, Dutch (Belgium)
6
- * Exported at: Mon, 20 Jan 2014 00:44:43 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
@@ -12,7 +12,7 @@ loco = window.loco||{}, loco.t = function( pairs ){
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
@@ -29,5 +29,5 @@ loco = window.loco||{}, loco.t = function( pairs ){
29
  return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
30
  };
31
  }(
32
- {"Settings saved":"","Failed to compile MO file with built-in compiler":"","Translation":"","Settings":"","File download failed":"","Some files missing":"","Folder not writable":"","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","Failed to compile MO file with %s, check your settings":"","Package not found called %s":"","Cannot create MO file":"","Cannot overwrite MO file":"","Failed to write MO file":"","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":"","File check":"","File system permissions for %s":"","Back":"","Get help":"","OK":"OK","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":"","Switch to...":"","Core":"","Error":"Fout","Warning":"Waarschuwing","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","Loco, Translation Management":"Loco, vertalingsbeheer","Manage translations":"Beheer vertalingen","Unknown language":"Onbekende taal","Some files not writable":"Sommige bestanden hebben geen schrijfrechten","\"%s\" folder not writable":"Map \"%s\" heeft geen schrijfrechten","User does not have permission to manage translations":"Gebruik heeft geen rechten om vertalingen te beheren","Invalid data posted to server":"Ongeldige gegevens op server","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\".","No strings could be extracted from source files":"Er konden geen te vertalen teksten uit de bronbestanden gehaald worden","Packages":"Pakketten","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","Template file":"Sjabloonbestand","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"}
33
  );
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: nl_BE, Dutch (Belgium)
6
+ * Exported at: Mon, 10 Mar 2014 12:31:13 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
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
29
  return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
30
  };
31
  }(
32
+ {"Error":"Fout","Warning":"Waarschuwing","OK":"","Permission denied":"","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","PO file used as template. This will be renamed to %s on first save":"","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","Empty or invalid %s file":"","%s file has no header":"","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","Manage translations":"Beheer vertalingen","Translation options":"","Loco Translate":"","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","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","Folder not writable":"","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 backups in \"%s\". Fix file permissions or disable backups in settings":"","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":"","Translation":"","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":"","Backing up PO files":"","Number of backups to keep of each file:":"","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 CHANGED
@@ -3,7 +3,7 @@
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: nl_NL, Dutch
6
- * Exported at: Mon, 20 Jan 2014 00:44:43 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
@@ -12,7 +12,7 @@ loco = window.loco||{}, loco.t = function( pairs ){
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
@@ -29,5 +29,5 @@ loco = window.loco||{}, loco.t = function( pairs ){
29
  return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
30
  };
31
  }(
32
- {"Settings saved":"","Failed to compile MO file with built-in compiler":"","Translation":"","Settings":"","File download failed":"","Some files missing":"","Folder not writable":"","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","Failed to compile MO file with %s, check your settings":"","Package not found called %s":"","Cannot create MO file":"","Cannot overwrite MO file":"","Failed to write MO file":"","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":"","File check":"","File system permissions for %s":"","Back":"","Get help":"","OK":"OK","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":"","Switch to...":"","Core":"","Error":"Fout","Warning":"Waarschuwing","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","Loco, Translation Management":"Loco, vertalingsbeheer","Manage translations":"Beheer vertalingen","Unknown language":"Onbekende taal","Some files not writable":"Sommige bestanden hebben geen schrijfrechten","\"%s\" folder not writable":"Map \"%s\" heeft geen schrijfrechten","User does not have permission to manage translations":"Gebruik heeft geen rechten om vertalingen te beheren","Invalid data posted to server":"Ongeldige gegevens op server","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\".","No strings could be extracted from source files":"Er konden geen te vertalen teksten uit de bronbestanden gehaald worden","Packages":"Pakketten","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","Template file":"Sjabloonbestand","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"}
33
  );
3
  * Project: loco.js conversion
4
  * Release: Working copy
5
  * Locale: nl_NL, Dutch
6
+ * Exported at: Mon, 10 Mar 2014 12:31:13 +0000
7
  */
8
  loco = window.loco||{}, loco.t = function( pairs ){
9
 
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
29
  return value || ( 1 === n ? msgid1 : msgid2 ) || msgid1 || '';
30
  };
31
  }(
32
+ {"Error":"Fout","Warning":"Waarschuwing","OK":"","Permission denied":"","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","PO file used as template. This will be renamed to %s on first save":"","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","Empty or invalid %s file":"","%s file has no header":"","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","Manage translations":"Beheer vertalingen","Translation options":"","Loco Translate":"","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","POT file not writable":"","PO file not writable":"","MO file not writable":"","MO file not found":"","Folder not writable":"","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 backups in \"%s\". Fix file permissions or disable backups in settings":"","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":"","Translation":"","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":"","Backing up PO files":"","Number of backups to keep of each file:":"","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-tr_TR.js ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Loco js export: JavaScript function
3
+ * Project: loco.js conversion
4
+ * Release: Working copy
5
+ * Locale: tr_TR, Turkish
6
+ * Exported at: Mon, 10 Mar 2014 12:31:13 +0000
7
+ */
8
+ loco = window.loco||{}, loco.t = function( pairs ){
9
+
10
+ // named plural forms according to Unicode
11
+ var pluralForms = ["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":"Hata","Warning":"Uyar\u0131","OK":"TAMAM","Permission denied":"","Settings saved":"Ayarlar sakland\u0131","New PO file":"Yeni PO Dosyas\u0131","You must specify a valid locale for a new PO file":"Yeni PO dosyas\u0131 i\u00e7in ge\u00e7erli bir locale de\u011feri belirtmek zorundas\u0131n\u0131z","No translatable strings found":"\u00c7evrilebilir c\u00fcmle bulunamad\u0131","Cannot create a PO file.":"Bir PO dosyas\u0131 olu\u015fturulam\u0131yor.","PO file already exists with locale %s":"PO dosyas\u0131 %s locale de\u011feri ile zaten mevcut","PO file used as template. This will be renamed to %s on first save":"","File cannot be created automatically. Fix the file permissions or use Download instead of Save":"Dosya otomatik olarak olu\u015fturulam\u0131yor. Dosya izinlerini tamir edin ya da Saklama yerine \u0130ndirin.","%s file is empty":"%s dosyas\u0131 bo\u015f","Run Sync to update from source code":"Kaynak dosyas\u0131ndan g\u00fcncelleme i\u00e7in Senkr. \u00e7al\u0131\u015ft\u0131r","No strings could be extracted from source code":"Kaynak kodundan herhangi c\u00fcmle \u00e7\u0131kar\u0131lamad\u0131","Run Sync to update from %s":"%s \u00fczerinden g\u00fcncelleme i\u00e7in Senkr. \u00e7al\u0131\u015ft\u0131r","Source code has been modified, run Sync to update POT":"Kaynak dosyas\u0131 de\u011fi\u015ftirilmi\u015f, POT g\u00fcncellemesi i\u00e7in Senkr. \u00e7al\u0131\u015ft\u0131r\u0131n","POT has been modified since PO file was saved, run Sync to update":"PO dosyas\u0131 en son sakland\u0131\u011f\u0131ndan beri POT de\u011fi\u015fikli\u011fe u\u011fram\u0131\u015f, g\u00fcncelleme i\u00e7in Senkr. \u00e7al\u0131\u015ft\u0131r\u0131n.","Bad file path":"Uygun olmayan dosya yolu","Empty or invalid %s file":"","%s file has no header":"","New template":"Yeni \u015fablon","New language":"Yeni dil","%s%% translated":"%s%% \u00e7evrildi","1 string":{"other":"1 c\u00fcmle"},"%s fuzzy":"%s bulan\u0131k","%s untranslated":"%s \u00e7evrilmemi\u015f","Failed to compile MO file with built-in compiler":"Dahili derleyici ile MO derlemesinde hata","Loco, Translation Management":"Loco, \u00c7evri Y\u00f6netimi","Manage translations":"\u00c7evrileri Y\u00f6net","Translation options":"","Loco Translate":"","Settings":"Ayarlar","File download failed":"Dosya indirme hatas\u0131","Unknown language":"Bilinmeyen dil","Some files not writable":"Baz\u0131 dosyalar yaz\u0131labilir de\u011fil","Some files missing":"Baz\u0131 dosyalar eksik","\"%s\" folder not writable":"\"%s\" dizini yaz\u0131labilir de\u011fil","POT file not writable":"POT dosyas\u0131 yaz\u0131labilir de\u011fil","PO file not writable":"PO dosyas\u0131 yaz\u0131labilir de\u011fil","MO file not writable":"MO dosyas\u0131 yaz\u0131labilir de\u011fil","MO file not found":"MO dosyas\u0131 bulunamad\u0131","Folder not writable":"Dizin yaz\u0131labilir de\u011fil","User does not have permission to manage translations":"Kullan\u0131c\u0131 \u00e7evrileri y\u00f6netmeye yetkili de\u011fil","Failed to compile MO file with %s, check your settings":"%s ile MO dosyas\u0131 derlemede hata, ayarlar\u0131n\u0131z\u0131 denetleyin","Invalid data posted to server":"Sunucuya g\u00f6nderili veri ge\u00e7ersiz","Package not found called %s":"%s isimli paket bulunamad\u0131","Web server cannot create backups in \"%s\". Fix file permissions or disable backups in settings":"","Web server cannot create \"%s\" directory in \"%s\". Fix file permissions or create it manually.":"Web sunucusu \"%s\" dizini olu\u015fturam\u0131yor \"%s\" i\u00e7inde. Dosya izinlerini tamir edin ya da elle olu\u015fturun.","Web server cannot create files in the \"%s\" directory. Fix file permissions or use the download function.":"Web sunucusu \"%s\" dizini i\u00e7inde dosya olu\u015fturam\u0131yor. Dosya izinlerini tamir edin ya da indirme fonksiyonunu kullan\u0131n.","%s file is not writable by the web server. Fix file permissions or download and copy to \"%s\/%s\".":"%s dosyas\u0131 web sunucu taraf\u0131ndan yaz\u0131lamaz durumda. Dosya izinlerini tamir edin ya da indirip \"%s\/%s\" yoluna kopyalay\u0131n.","Cannot create MO file":"MO dosyas\u0131 olu\u015fturulam\u0131yor","Cannot overwrite MO file":"MO dosyas\u0131 \u00fczerine yaz\u0131lam\u0131yor","Failed to write MO file":"MO dosyas\u0131 yazmada hata","No strings could be extracted from source files":"Kaynak dosyalar\u0131ndan herhangi c\u00fcmle \u00e7\u0131kart\u0131lamad\u0131","Unknown error":"Bilinmeyen hata","PO file saved":"PO dosyas\u0131 sakland\u0131","and MO file compiled":"ve MO dosyas\u0131 derlendi","Merged from %s":"%s \u00fczerinden birle\u015ftirildi","Merged from source code":"Kaynak kodtan birle\u015ftirildi","Already up to date with %s":"%s ile zaten g\u00fcncel","Already up to date with source code":"Kaynak kod ile zaten g\u00fcncel","1 new string added":{"other":"1 yeni c\u00fcmle eklendi"},"1 obsolete string removed":{"other":"1 kullan\u0131md\u0131\u015f\u0131 c\u00fcmle kald\u0131r\u0131ld\u0131"},"Your changes will be lost if you continue without saving":"Saklamadan devam ederseniz de\u011fi\u015fiklikleriniz kaybolacak","Translation":"\u00c7evri","Packages":"Paketler","File check":"Dosya denetimi","File system permissions for %s":"%s i\u00e7in dosya sistemi izinleri","Back":"Geri","Get help":"Yard\u0131m al","Package details":"Paket detaylar\u0131","Translations (PO)":"\u00c7evriler (PO)","Template (POT)":"\u015eablon (POT)","File permissions":"Dosya izinleri","1 language":{"other":"1 dil"},"Updated":"G\u00fcncel","Powered by":"Destekleyici:","Configure Loco Translate":"Loco Translate'i konfig\u00fcre et","Compiling MO files":"MO dosyalar\u0131 derleme","Use built-in MO compiler.":"Dahili MO derleyici kullan.","Use external command:":"Harici komut kullan:","Enter path to msgfmt on server":"Sunucudaki msgfmt'ye yol gir","Generate hash tables":"Hash tablolar\u0131 \u00fcret","Backing up PO files":"","Number of backups to keep of each file:":"","Save settings":"Ayarlar\u0131 sakla","Template file":"\u015eablon dosyas\u0131","Switch to...":"Ge\u00e7:","never":"asla","Save":"Sakla","Download":"\u0130ndir","Sync":"Senkr.","Revert":"S\u0131f\u0131rla","Add":"Ekle","Del":"Sil","Fuzzy":"Bulan\u0131k","Filter translations":"\u00c7evrileri filtrele","Help":"Yard\u0131m","Initialize new translations in %s":"%s i\u00e7in yeni \u00e7evriler ba\u015flat","Select from common languages":"Yayg\u0131n diller aras\u0131ndan se\u00e7","or enter any language code":"veya herhangi dil kodu gir","Start translating":"\u00c7evriye Ba\u015fla","New version available":"Yeni versiyon mevcut","Upgrade to version %s of Loco Translate":"Loco Translate'in %s versiyonuna y\u00fckselt","Select a plugin or theme to translate":"\u00c7evirisini yapmak i\u00e7in bir eklenti ya da tema se\u00e7","Themes":"Temalar","Plugins":"Eklentiler","Core":"\u00c7ekirdek"}
33
+ );
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  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.4.2
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -98,6 +98,13 @@ At the user end, yes you can access the interface on Windows using Internet Expl
98
  == Changelog ==
99
 
100
 
 
 
 
 
 
 
 
101
  = 1.4.2 =
102
  * Added backup feature
103
  * Removed utm domain
@@ -163,7 +170,7 @@ At the user end, yes you can access the interface on Windows using Internet Expl
163
 
164
  == Upgrade Notice ==
165
 
166
- = 1.4.2 =
167
  * Bug fixes and improvements.
168
 
169
 
2
  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.1
6
+ Stable tag: 1.4.3
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
98
  == Changelog ==
99
 
100
 
101
+ = 1.4.3 =
102
+ * Child themes use parent text domains
103
+ * MO files parsed when PO files missing
104
+ * Handle incorrect usage of PO files as templates
105
+ * Nicer top-level menu with dashicons icon
106
+ * Added IE<=8 warning
107
+
108
  = 1.4.2 =
109
  * Added backup feature
110
  * Removed utm domain
170
 
171
  == Upgrade Notice ==
172
 
173
+ = 1.4.3 =
174
  * Bug fixes and improvements.
175
 
176
 
tpl/admin-fscheck.tpl.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
- Loco::__('Settings') => str_replace( 'tools', 'options-general', LocoAdmin::uri() ),
8
  Loco::__('File check') => '',
9
  );
10
  ?>
@@ -24,7 +24,7 @@ $nav = array (
24
  <code><?php Loco::h( LocoAdmin::trim_path($path) )?></code>
25
  </li><?php
26
  if( $error ):?>
27
- <li class="loco-warn">
28
  <span><?php Loco::h($error)?></span>
29
  </li><?php
30
  else:?>
4
  */
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
+ Loco::__('Settings') => LocoAdmin::uri( array(), 'settings' ),
8
  Loco::__('File check') => '',
9
  );
10
  ?>
24
  <code><?php Loco::h( LocoAdmin::trim_path($path) )?></code>
25
  </li><?php
26
  if( $error ):?>
27
+ <li class="loco-warning">
28
  <span><?php Loco::h($error)?></span>
29
  </li><?php
30
  else:?>
tpl/admin-list.tpl.php CHANGED
@@ -33,7 +33,12 @@
33
  <ul class="loco-details">
34
  <li title="<?php Loco::h($domain)?>">
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
@@ -94,7 +99,7 @@
94
  </li><?php
95
  }
96
  catch( Exception $Ex ){?>
97
- <li class="loco-warn">
98
  <?php echo LocoAdmin::fscheck_link( $package, $domain, $Ex->getMessage() )?>
99
  </li><?php
100
  }?>
33
  <ul class="loco-details">
34
  <li title="<?php Loco::h($domain)?>">
35
  <strong><?php Loco::h($name)?></strong>
36
+ </li><?php
37
+ if( isset($parent) ):?>
38
+ <li>
39
+ Inherits: <?php Loco::h($parent)?>
40
+ </li><?php
41
+ endif?>
42
  <li><?php
43
  Loco::h( Loco::_n( '1 language', '%u languages', $n ), $n )?>
44
  </li><?php
99
  </li><?php
100
  }
101
  catch( Exception $Ex ){?>
102
+ <li class="loco-warning">
103
  <?php echo LocoAdmin::fscheck_link( $package, $domain, $Ex->getMessage() )?>
104
  </li><?php
105
  }?>
tpl/admin-nav.tpl.php CHANGED
@@ -4,21 +4,24 @@
4
  */
5
  ?>
6
 
7
- <h2 class="nav-tab-wrapper">
8
- <?php foreach( $nav as $label => $href ):?>
9
- <?php if( $href ):?>
10
  <a href="<?php echo Loco::html($href)?>" class="nav-tab">
11
- <?php echo Loco::html($label)?>
12
- </a>
13
- <?php else:?>
14
- <a href="" class="nav-tab nav-tab-active">
15
- <?php echo Loco::html($label)?>
16
- </a>
17
- <?php endif?>
18
- <?php endforeach?>
19
- <a href="https://localise.biz/about/gettext?<?php echo Loco::utm_query('nav')?>" class="nav-tab nav-tab-loco" target="_blank">
20
- <strong><?php echo Loco::html(Loco::__('Powered by'))?> Loco</strong>
21
- &ndash; Translation Management
22
  </a>
23
  </h2>
24
-
 
 
 
4
  */
5
  ?>
6
 
7
+ <h2 class="nav-tab-wrapper"><?php
8
+ foreach( $nav as $label => $href ):
9
+ if( $href ):?>
10
  <a href="<?php echo Loco::html($href)?>" class="nav-tab">
11
+ <?php echo Loco::html($label)?>
12
+ </a><?php
13
+ else:?>
14
+ <a href="#" class="nav-tab nav-tab-active">
15
+ <?php Loco::h($label)?>
16
+ </a><?php
17
+ endif;
18
+ endforeach?>
19
+ <a href="https://localise.biz/about/gettext?<?php Loco::h( Loco::utm_query('nav') )?>" class="nav-tab nav-tab-loco" target="_blank">
20
+ <?php Loco::h(Loco::__('Powered by'))?>
21
+ <?php Loco::h(Loco::__('Loco, Translation Management'))?>
22
  </a>
23
  </h2>
24
+
25
+ <!--[if lt IE 9]><?php
26
+ LocoAdmin::warning( __( $ignore = 'Your browser is out of date!').' '.Loco::html( Loco::__('Loco may not work as expected') ) );
27
+ ?><![endif]-->
tpl/admin-opts.tpl.php CHANGED
@@ -3,7 +3,7 @@
3
  * Admin options screen - changes loco plugin settings
4
  */
5
  $nav = array (
6
- Loco::__('Packages') => str_replace( 'options-general', 'tools', LocoAdmin::uri() ),
7
  Loco::__('Settings') => '',
8
  );
9
  ?>
3
  * Admin options screen - changes loco plugin settings
4
  */
5
  $nav = array (
6
+ Loco::__('Packages') => LocoAdmin::uri(),
7
  Loco::__('Settings') => '',
8
  );
9
  ?>
tpl/admin-poedit.tpl.php CHANGED
@@ -5,7 +5,7 @@
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
  $name => '',
8
- Loco::__('Settings') => str_replace( 'tools', 'options-general', LocoAdmin::uri() ),
9
  );
10
 
11
  $phpbase = Loco::html( Loco::baseurl() ).'/php';
@@ -39,9 +39,9 @@ $modified or $pofiles[] = $path;
39
  <?php Loco::h(Loco::_x('Switch to...','Dropdown label'))?>
40
  </option><?php
41
  // drop down of files in package
42
- $poname = basename( $path );
43
  foreach( $pofiles as $_path ):
44
- $label = basename($_path);
45
  $poedit = LocoAdmin::trim_path($_path);
46
  $url = LocoAdmin::uri( $package->get_query() + compact('poedit') );
47
  ?>
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
  $name => '',
8
+ Loco::__('Settings') => LocoAdmin::uri( array(), 'settings' ),
9
  );
10
 
11
  $phpbase = Loco::html( Loco::baseurl() ).'/php';
39
  <?php Loco::h(Loco::_x('Switch to...','Dropdown label'))?>
40
  </option><?php
41
  // drop down of files in package
42
+ $poname = str_replace( '.mo', '.po', basename( $path ) );
43
  foreach( $pofiles as $_path ):
44
+ $label = str_replace( '.mo', '.po', basename($_path) );
45
  $poedit = LocoAdmin::trim_path($_path);
46
  $url = LocoAdmin::uri( $package->get_query() + compact('poedit') );
47
  ?>
tpl/admin-poinit.tpl.php CHANGED
@@ -5,7 +5,7 @@
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
  $title => '',
8
- Loco::__('Settings') => str_replace( 'tools', 'options-general', LocoAdmin::uri() ),
9
  );
10
 
11
  /* @var $package LocoPackage */
5
  $nav = array (
6
  Loco::__('Packages') => LocoAdmin::uri(),
7
  $title => '',
8
+ Loco::__('Settings') => LocoAdmin::uri( array(), 'settings' ),
9
  );
10
 
11
  /* @var $package LocoPackage */
tpl/admin-root.tpl.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
  $nav = array (
6
  Loco::__('Packages') => '',
7
- Loco::__('Settings') => str_replace( 'tools', 'options-general', LocoAdmin::uri() ),
8
  );
9
  ?>
10
 
4
  */
5
  $nav = array (
6
  Loco::__('Packages') => '',
7
+ Loco::__('Settings') => LocoAdmin::uri( array(), 'settings' ),
8
  );
9
  ?>
10