umap-project 2.7.3__py3-none-any.whl → 2.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. umap/__init__.py +1 -1
  2. umap/forms.py +4 -14
  3. umap/locale/am_ET/LC_MESSAGES/django.mo +0 -0
  4. umap/locale/am_ET/LC_MESSAGES/django.po +278 -151
  5. umap/locale/ar/LC_MESSAGES/django.mo +0 -0
  6. umap/locale/ar/LC_MESSAGES/django.po +335 -141
  7. umap/locale/bg/LC_MESSAGES/django.mo +0 -0
  8. umap/locale/bg/LC_MESSAGES/django.po +279 -152
  9. umap/locale/br/LC_MESSAGES/django.mo +0 -0
  10. umap/locale/br/LC_MESSAGES/django.po +95 -79
  11. umap/locale/ca/LC_MESSAGES/django.mo +0 -0
  12. umap/locale/ca/LC_MESSAGES/django.po +85 -68
  13. umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  14. umap/locale/cs_CZ/LC_MESSAGES/django.po +78 -66
  15. umap/locale/da/LC_MESSAGES/django.mo +0 -0
  16. umap/locale/da/LC_MESSAGES/django.po +280 -153
  17. umap/locale/de/LC_MESSAGES/django.mo +0 -0
  18. umap/locale/de/LC_MESSAGES/django.po +80 -64
  19. umap/locale/el/LC_MESSAGES/django.mo +0 -0
  20. umap/locale/el/LC_MESSAGES/django.po +82 -66
  21. umap/locale/en/LC_MESSAGES/django.po +73 -61
  22. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  23. umap/locale/es/LC_MESSAGES/django.po +75 -63
  24. umap/locale/et/LC_MESSAGES/django.mo +0 -0
  25. umap/locale/et/LC_MESSAGES/django.po +280 -153
  26. umap/locale/eu/LC_MESSAGES/django.mo +0 -0
  27. umap/locale/eu/LC_MESSAGES/django.po +82 -66
  28. umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
  29. umap/locale/fa_IR/LC_MESSAGES/django.po +80 -64
  30. umap/locale/fi/LC_MESSAGES/django.mo +0 -0
  31. umap/locale/fi/LC_MESSAGES/django.po +278 -151
  32. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  33. umap/locale/fr/LC_MESSAGES/django.po +75 -63
  34. umap/locale/gl/LC_MESSAGES/django.mo +0 -0
  35. umap/locale/gl/LC_MESSAGES/django.po +280 -153
  36. umap/locale/he/LC_MESSAGES/django.mo +0 -0
  37. umap/locale/he/LC_MESSAGES/django.po +281 -154
  38. umap/locale/hu/LC_MESSAGES/django.mo +0 -0
  39. umap/locale/hu/LC_MESSAGES/django.po +80 -64
  40. umap/locale/is/LC_MESSAGES/django.mo +0 -0
  41. umap/locale/is/LC_MESSAGES/django.po +280 -153
  42. umap/locale/it/LC_MESSAGES/django.mo +0 -0
  43. umap/locale/it/LC_MESSAGES/django.po +82 -66
  44. umap/locale/ja/LC_MESSAGES/django.mo +0 -0
  45. umap/locale/ja/LC_MESSAGES/django.po +280 -153
  46. umap/locale/ko/LC_MESSAGES/django.mo +0 -0
  47. umap/locale/ko/LC_MESSAGES/django.po +280 -153
  48. umap/locale/lt/LC_MESSAGES/django.mo +0 -0
  49. umap/locale/lt/LC_MESSAGES/django.po +280 -153
  50. umap/locale/ms/LC_MESSAGES/django.mo +0 -0
  51. umap/locale/ms/LC_MESSAGES/django.po +82 -66
  52. umap/locale/nl/LC_MESSAGES/django.mo +0 -0
  53. umap/locale/nl/LC_MESSAGES/django.po +280 -153
  54. umap/locale/pl/LC_MESSAGES/django.mo +0 -0
  55. umap/locale/pl/LC_MESSAGES/django.po +82 -66
  56. umap/locale/pt/LC_MESSAGES/django.mo +0 -0
  57. umap/locale/pt/LC_MESSAGES/django.po +75 -63
  58. umap/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  59. umap/locale/pt_BR/LC_MESSAGES/django.po +280 -153
  60. umap/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  61. umap/locale/pt_PT/LC_MESSAGES/django.po +280 -153
  62. umap/locale/ru/LC_MESSAGES/django.mo +0 -0
  63. umap/locale/ru/LC_MESSAGES/django.po +280 -153
  64. umap/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  65. umap/locale/sk_SK/LC_MESSAGES/django.po +280 -153
  66. umap/locale/sl/LC_MESSAGES/django.mo +0 -0
  67. umap/locale/sl/LC_MESSAGES/django.po +280 -153
  68. umap/locale/sr/LC_MESSAGES/django.mo +0 -0
  69. umap/locale/sr/LC_MESSAGES/django.po +280 -153
  70. umap/locale/sv/LC_MESSAGES/django.mo +0 -0
  71. umap/locale/sv/LC_MESSAGES/django.po +81 -65
  72. umap/locale/th_TH/LC_MESSAGES/django.mo +0 -0
  73. umap/locale/th_TH/LC_MESSAGES/django.po +257 -185
  74. umap/locale/tr/LC_MESSAGES/django.mo +0 -0
  75. umap/locale/tr/LC_MESSAGES/django.po +280 -153
  76. umap/locale/uk_UA/LC_MESSAGES/django.mo +0 -0
  77. umap/locale/uk_UA/LC_MESSAGES/django.po +280 -153
  78. umap/locale/vi/LC_MESSAGES/django.mo +0 -0
  79. umap/locale/vi/LC_MESSAGES/django.po +278 -151
  80. umap/locale/zh/LC_MESSAGES/django.mo +0 -0
  81. umap/locale/zh/LC_MESSAGES/django.po +278 -151
  82. umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  83. umap/locale/zh_TW/LC_MESSAGES/django.po +97 -81
  84. umap/management/commands/empty_trash.py +35 -0
  85. umap/management/commands/migrate_to_S3.py +29 -0
  86. umap/migrations/0023_alter_datalayer_uuid.py +19 -0
  87. umap/migrations/0024_alter_map_share_status.py +30 -0
  88. umap/migrations/0025_alter_datalayer_geojson.py +24 -0
  89. umap/models.py +68 -116
  90. umap/settings/base.py +23 -3
  91. umap/settings/local_s3.py +45 -0
  92. umap/static/umap/base.css +3 -603
  93. umap/static/umap/content.css +5 -3
  94. umap/static/umap/css/bar.css +202 -0
  95. umap/static/umap/css/form.css +620 -0
  96. umap/static/umap/css/icon.css +21 -1
  97. umap/static/umap/css/popup.css +125 -0
  98. umap/static/umap/img/16-white.svg +16 -4
  99. umap/static/umap/img/16.svg +1 -1
  100. umap/static/umap/img/source/16-white.svg +46 -45
  101. umap/static/umap/img/source/16.svg +1 -753
  102. umap/static/umap/js/components/fragment.js +3 -1
  103. umap/static/umap/js/modules/browser.js +20 -19
  104. umap/static/umap/js/modules/caption.js +21 -22
  105. umap/static/umap/js/modules/data/features.js +120 -78
  106. umap/static/umap/js/modules/data/layer.js +195 -153
  107. umap/static/umap/js/modules/facets.js +9 -9
  108. umap/static/umap/js/modules/formatter.js +5 -5
  109. umap/static/umap/js/modules/global.js +4 -52
  110. umap/static/umap/js/modules/help.js +18 -21
  111. umap/static/umap/js/modules/importer.js +133 -56
  112. umap/static/umap/js/modules/importers/cadastrefr.js +4 -0
  113. umap/static/umap/js/modules/importers/geodatamine.js +3 -3
  114. umap/static/umap/js/modules/importers/overpass.js +5 -0
  115. umap/static/umap/js/modules/permissions.js +85 -87
  116. umap/static/umap/js/modules/rendering/icon.js +2 -1
  117. umap/static/umap/js/modules/rendering/layers/base.js +15 -15
  118. umap/static/umap/js/modules/rendering/layers/classified.js +1 -1
  119. umap/static/umap/js/modules/rendering/layers/cluster.js +1 -1
  120. umap/static/umap/js/modules/rendering/layers/heat.js +1 -1
  121. umap/static/umap/js/modules/rendering/map.js +390 -0
  122. umap/static/umap/js/modules/rendering/popup.js +19 -19
  123. umap/static/umap/js/modules/rendering/template.js +88 -21
  124. umap/static/umap/js/modules/rendering/ui.js +63 -14
  125. umap/static/umap/js/modules/request.js +2 -2
  126. umap/static/umap/js/modules/rules.js +22 -25
  127. umap/static/umap/js/modules/saving.js +47 -0
  128. umap/static/umap/js/modules/schema.js +6 -0
  129. umap/static/umap/js/modules/share.js +21 -24
  130. umap/static/umap/js/modules/slideshow.js +24 -20
  131. umap/static/umap/js/modules/sync/updaters.js +7 -9
  132. umap/static/umap/js/modules/tableeditor.js +20 -19
  133. umap/static/umap/js/modules/ui/bar.js +196 -0
  134. umap/static/umap/js/modules/ui/dialog.js +5 -0
  135. umap/static/umap/js/modules/ui/panel.js +10 -9
  136. umap/static/umap/js/modules/umap.js +1691 -0
  137. umap/static/umap/js/modules/urls.js +2 -2
  138. umap/static/umap/js/modules/utils.js +22 -6
  139. umap/static/umap/js/umap.controls.js +81 -305
  140. umap/static/umap/js/umap.core.js +29 -50
  141. umap/static/umap/js/umap.forms.js +78 -27
  142. umap/static/umap/keycloak.png +0 -0
  143. umap/static/umap/locale/am_ET.js +26 -10
  144. umap/static/umap/locale/am_ET.json +26 -10
  145. umap/static/umap/locale/ar.js +26 -10
  146. umap/static/umap/locale/ar.json +26 -10
  147. umap/static/umap/locale/ast.js +26 -10
  148. umap/static/umap/locale/ast.json +26 -10
  149. umap/static/umap/locale/bg.js +26 -10
  150. umap/static/umap/locale/bg.json +26 -10
  151. umap/static/umap/locale/br.js +27 -20
  152. umap/static/umap/locale/br.json +27 -20
  153. umap/static/umap/locale/ca.js +32 -29
  154. umap/static/umap/locale/ca.json +32 -29
  155. umap/static/umap/locale/cs_CZ.js +24 -17
  156. umap/static/umap/locale/cs_CZ.json +24 -17
  157. umap/static/umap/locale/da.js +26 -10
  158. umap/static/umap/locale/da.json +26 -10
  159. umap/static/umap/locale/de.js +21 -14
  160. umap/static/umap/locale/de.json +21 -14
  161. umap/static/umap/locale/el.js +28 -12
  162. umap/static/umap/locale/el.json +28 -12
  163. umap/static/umap/locale/en.js +14 -9
  164. umap/static/umap/locale/en.json +14 -9
  165. umap/static/umap/locale/en_US.json +26 -10
  166. umap/static/umap/locale/es.js +16 -13
  167. umap/static/umap/locale/es.json +16 -13
  168. umap/static/umap/locale/et.js +26 -10
  169. umap/static/umap/locale/et.json +26 -10
  170. umap/static/umap/locale/eu.js +16 -9
  171. umap/static/umap/locale/eu.json +16 -9
  172. umap/static/umap/locale/fa_IR.js +16 -9
  173. umap/static/umap/locale/fa_IR.json +16 -9
  174. umap/static/umap/locale/fi.js +26 -10
  175. umap/static/umap/locale/fi.json +26 -10
  176. umap/static/umap/locale/fr.js +14 -9
  177. umap/static/umap/locale/fr.json +14 -9
  178. umap/static/umap/locale/gl.js +26 -10
  179. umap/static/umap/locale/gl.json +26 -10
  180. umap/static/umap/locale/he.js +26 -10
  181. umap/static/umap/locale/he.json +26 -10
  182. umap/static/umap/locale/hr.js +26 -10
  183. umap/static/umap/locale/hr.json +26 -10
  184. umap/static/umap/locale/hu.js +16 -9
  185. umap/static/umap/locale/hu.json +16 -9
  186. umap/static/umap/locale/id.js +26 -10
  187. umap/static/umap/locale/id.json +26 -10
  188. umap/static/umap/locale/is.js +26 -10
  189. umap/static/umap/locale/is.json +26 -10
  190. umap/static/umap/locale/it.js +26 -10
  191. umap/static/umap/locale/it.json +26 -10
  192. umap/static/umap/locale/ja.js +26 -10
  193. umap/static/umap/locale/ja.json +26 -10
  194. umap/static/umap/locale/ko.js +26 -10
  195. umap/static/umap/locale/ko.json +26 -10
  196. umap/static/umap/locale/lt.js +26 -10
  197. umap/static/umap/locale/lt.json +26 -10
  198. umap/static/umap/locale/ms.js +28 -12
  199. umap/static/umap/locale/ms.json +28 -12
  200. umap/static/umap/locale/nl.js +28 -12
  201. umap/static/umap/locale/nl.json +28 -12
  202. umap/static/umap/locale/no.js +26 -10
  203. umap/static/umap/locale/no.json +26 -10
  204. umap/static/umap/locale/pl.js +28 -12
  205. umap/static/umap/locale/pl.json +28 -12
  206. umap/static/umap/locale/pl_PL.json +26 -10
  207. umap/static/umap/locale/pt.js +16 -9
  208. umap/static/umap/locale/pt.json +16 -9
  209. umap/static/umap/locale/pt_BR.js +26 -10
  210. umap/static/umap/locale/pt_BR.json +26 -10
  211. umap/static/umap/locale/pt_PT.js +16 -9
  212. umap/static/umap/locale/pt_PT.json +16 -9
  213. umap/static/umap/locale/ro.js +26 -10
  214. umap/static/umap/locale/ro.json +26 -10
  215. umap/static/umap/locale/ru.js +26 -10
  216. umap/static/umap/locale/ru.json +26 -10
  217. umap/static/umap/locale/si.js +7 -7
  218. umap/static/umap/locale/si.json +7 -7
  219. umap/static/umap/locale/sk_SK.js +26 -10
  220. umap/static/umap/locale/sk_SK.json +26 -10
  221. umap/static/umap/locale/sl.js +26 -10
  222. umap/static/umap/locale/sl.json +26 -10
  223. umap/static/umap/locale/sr.js +26 -10
  224. umap/static/umap/locale/sr.json +26 -10
  225. umap/static/umap/locale/sv.js +27 -11
  226. umap/static/umap/locale/sv.json +27 -11
  227. umap/static/umap/locale/th_TH.js +28 -12
  228. umap/static/umap/locale/th_TH.json +28 -12
  229. umap/static/umap/locale/tr.js +26 -10
  230. umap/static/umap/locale/tr.json +26 -10
  231. umap/static/umap/locale/uk_UA.js +26 -10
  232. umap/static/umap/locale/uk_UA.json +26 -10
  233. umap/static/umap/locale/vi.js +26 -10
  234. umap/static/umap/locale/vi.json +26 -10
  235. umap/static/umap/locale/vi_VN.json +26 -10
  236. umap/static/umap/locale/zh.js +26 -10
  237. umap/static/umap/locale/zh.json +26 -10
  238. umap/static/umap/locale/zh_CN.json +26 -10
  239. umap/static/umap/locale/zh_TW.Big5.json +26 -10
  240. umap/static/umap/locale/zh_TW.js +34 -27
  241. umap/static/umap/locale/zh_TW.json +34 -27
  242. umap/static/umap/map.css +39 -530
  243. umap/static/umap/unittests/URLs.js +15 -15
  244. umap/static/umap/unittests/utils.js +23 -1
  245. umap/static/umap/vars.css +2 -1
  246. umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +5 -1
  247. umap/storage/__init__.py +3 -0
  248. umap/storage/fs.py +101 -0
  249. umap/storage/s3.py +61 -0
  250. umap/templates/base.html +2 -0
  251. umap/templates/registration/login.html +7 -6
  252. umap/templates/umap/components/alerts/alert.html +4 -0
  253. umap/templates/umap/css.html +6 -0
  254. umap/templates/umap/js.html +3 -2
  255. umap/templates/umap/map_init.html +6 -5
  256. umap/templates/umap/user_dashboard.html +20 -19
  257. umap/tests/base.py +5 -1
  258. umap/tests/fixtures/test_upload_simple_marker.json +19 -0
  259. umap/tests/integration/conftest.py +2 -1
  260. umap/tests/integration/test_anonymous_owned_map.py +18 -10
  261. umap/tests/integration/test_browser.py +16 -1
  262. umap/tests/integration/test_dashboard.py +1 -1
  263. umap/tests/integration/test_edit_datalayer.py +29 -7
  264. umap/tests/integration/test_import.py +28 -6
  265. umap/tests/integration/test_optimistic_merge.py +31 -8
  266. umap/tests/integration/test_owned_map.py +22 -16
  267. umap/tests/integration/test_popup.py +44 -0
  268. umap/tests/integration/test_save.py +35 -0
  269. umap/tests/integration/test_view_marker.py +12 -0
  270. umap/tests/integration/test_view_polyline.py +257 -0
  271. umap/tests/integration/test_websocket_sync.py +81 -9
  272. umap/tests/test_dashboard.py +82 -0
  273. umap/tests/test_datalayer.py +6 -7
  274. umap/tests/test_datalayer_s3.py +135 -0
  275. umap/tests/test_datalayer_views.py +28 -10
  276. umap/tests/test_empty_trash.py +34 -0
  277. umap/tests/test_map.py +12 -3
  278. umap/tests/test_map_views.py +69 -37
  279. umap/tests/test_statics.py +1 -1
  280. umap/tests/test_team_views.py +35 -1
  281. umap/tests/test_views.py +31 -52
  282. umap/urls.py +3 -3
  283. umap/views.py +126 -90
  284. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/METADATA +16 -13
  285. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/RECORD +289 -269
  286. umap/management/commands/purge_purgatory.py +0 -28
  287. umap/static/umap/js/umap.js +0 -1903
  288. umap/tests/test_purge_purgatory.py +0 -25
  289. /umap/{storage.py → storage/staticfiles.py} +0 -0
  290. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/WHEEL +0 -0
  291. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/entry_points.txt +0 -0
  292. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/licenses/LICENSE +0 -0
Binary file
@@ -15,7 +15,7 @@ msgid ""
15
15
  msgstr ""
16
16
  "Project-Id-Version: uMap\n"
17
17
  "Report-Msgid-Bugs-To: \n"
18
- "POT-Creation-Date: 2024-08-30 18:23+0000\n"
18
+ "POT-Creation-Date: 2024-12-11 17:05+0000\n"
19
19
  "PO-Revision-Date: 2013-11-22 14:00+0000\n"
20
20
  "Last-Translator: Supaplex <bejokeup@gmail.com>, 2019,2023-2024\n"
21
21
  "Language-Team: Chinese (Taiwan) (http://app.transifex.com/openstreetmap/umap/language/zh_TW/)\n"
@@ -25,127 +25,139 @@ msgstr ""
25
25
  "Language: zh_TW\n"
26
26
  "Plural-Forms: nplurals=1; plural=0;\n"
27
27
 
28
- #: forms.py:44 forms.py:70
29
- msgid "Only editable with secret edit link"
30
- msgstr "僅能由私密連結編輯"
31
-
32
- #: forms.py:45 forms.py:71
33
- msgid "Everyone can edit"
34
- msgstr "所有人皆可編輯"
35
-
36
- #: forms.py:69 models.py:423
37
- msgid "Inherit"
38
- msgstr "繼承"
28
+ #: admin.py:16
29
+ msgid "CSV Export"
30
+ msgstr "CSV 匯出"
39
31
 
40
32
  #: middleware.py:13
41
33
  msgid "Site is readonly for maintenance"
42
34
  msgstr "網站目前因維護中設定為唯讀狀態"
43
35
 
44
- #: models.py:54 models.py:73
36
+ #: models.py:60 models.py:79
45
37
  msgid "name"
46
38
  msgstr "名稱"
47
39
 
48
- #: models.py:56 models.py:433
40
+ #: models.py:62 models.py:475
49
41
  msgid "description"
50
42
  msgstr "描述"
51
43
 
52
- #: models.py:104
44
+ #: models.py:110
53
45
  msgid "details"
54
46
  msgstr "詳情"
55
47
 
56
- #: models.py:105
48
+ #: models.py:111
57
49
  msgid "Link to a page where the licence is detailed."
58
50
  msgstr "連結至授權條款說明網址"
59
51
 
60
- #: models.py:115
52
+ #: models.py:121
61
53
  msgid "URL template using OSM tile format"
62
54
  msgstr "URL 樣板,使用 OSM 地圖磚格式"
63
55
 
64
- #: models.py:121
56
+ #: models.py:127
65
57
  msgid "Order of the tilelayers in the edit box"
66
58
  msgstr "編輯方塊中地圖磚的圖層順序"
67
59
 
68
- #: models.py:167 models.py:424
60
+ #: models.py:175 models.py:469
61
+ msgid "Only editable with secret edit link"
62
+ msgstr "僅能由私密連結編輯"
63
+
64
+ #: models.py:176 models.py:470
65
+ msgid "Everyone can edit"
66
+ msgstr "所有人皆可編輯"
67
+
68
+ #: models.py:179 models.py:463
69
69
  msgid "Everyone"
70
70
  msgstr "所有人"
71
71
 
72
- #: models.py:168 models.py:174 models.py:425
72
+ #: models.py:180 models.py:189 models.py:464
73
73
  msgid "Editors and team only"
74
- msgstr ""
74
+ msgstr "只有編輯者與團隊"
75
75
 
76
- #: models.py:169 models.py:426
76
+ #: models.py:181 models.py:465
77
77
  msgid "Owner only"
78
78
  msgstr "只有擁有者"
79
79
 
80
- #: models.py:172
80
+ #: models.py:184
81
+ msgid "Draft (private)"
82
+ msgstr ""
83
+
84
+ #: models.py:185
81
85
  msgid "Everyone (public)"
82
86
  msgstr "所有人 (公開)"
83
87
 
84
- #: models.py:173
88
+ #: models.py:188
85
89
  msgid "Anyone with link"
86
90
  msgstr "任何有連結的人"
87
91
 
88
- #: models.py:175
92
+ #: models.py:190
89
93
  msgid "Blocked"
90
94
  msgstr "已經封銷了"
91
95
 
92
- #: models.py:178
96
+ #: models.py:191
97
+ msgid "Deleted"
98
+ msgstr ""
99
+
100
+ #: models.py:194
93
101
  msgid "center"
94
102
  msgstr "中心"
95
103
 
96
- #: models.py:179
104
+ #: models.py:195
97
105
  msgid "zoom"
98
106
  msgstr "縮放"
99
107
 
100
- #: models.py:181
108
+ #: models.py:197
101
109
  msgid "locate"
102
110
  msgstr "定位"
103
111
 
104
- #: models.py:181
112
+ #: models.py:197
105
113
  msgid "Locate user on load?"
106
114
  msgstr "載入時使用定位功能?"
107
115
 
108
- #: models.py:185
116
+ #: models.py:201
109
117
  msgid "Choose the map licence."
110
118
  msgstr "選擇地圖授權"
111
119
 
112
- #: models.py:186
120
+ #: models.py:202
113
121
  msgid "licence"
114
122
  msgstr "授權"
115
123
 
116
- #: models.py:197
124
+ #: models.py:213
117
125
  msgid "owner"
118
126
  msgstr "擁有者"
119
127
 
120
- #: models.py:201
128
+ #: models.py:217
121
129
  msgid "editors"
122
130
  msgstr "編輯者"
123
131
 
124
- #: models.py:207
132
+ #: models.py:223
125
133
  msgid "team"
126
- msgstr ""
134
+ msgstr "團隊"
127
135
 
128
- #: models.py:213 models.py:447
136
+ #: models.py:229 models.py:491
129
137
  msgid "edit status"
130
138
  msgstr "編輯狀態"
131
139
 
132
- #: models.py:218
140
+ #: models.py:234
133
141
  msgid "share status"
134
142
  msgstr "分享狀態"
135
143
 
136
- #: models.py:221 models.py:442
144
+ #: models.py:237 models.py:486
137
145
  msgid "settings"
138
146
  msgstr "設定"
139
147
 
140
- #: models.py:364
148
+ #: models.py:402
141
149
  msgid "Clone of"
142
150
  msgstr "複製"
143
151
 
144
- #: models.py:437
152
+ #: models.py:462 models.py:468
153
+ msgid "Inherit"
154
+ msgstr "繼承"
155
+
156
+ #: models.py:481
145
157
  msgid "display on load"
146
158
  msgstr "載入時顯示"
147
159
 
148
- #: models.py:438
160
+ #: models.py:482
149
161
  msgid "Display this layer on load."
150
162
  msgstr "載入此圖層時顯示"
151
163
 
@@ -197,25 +209,29 @@ msgid ""
197
209
  "them in your site."
198
210
  msgstr "uMap 允許你在數分鐘內創建有開放街圖的圖層的地圖,並且能內嵌到你的網站。"
199
211
 
200
- #: templates/registration/login.html:6 templates/registration/login.html:45
212
+ #: templates/registration/login.html:6 templates/registration/login.html:46
201
213
  msgid "Login"
202
214
  msgstr "登入"
203
215
 
204
- #: templates/registration/login.html:24
205
- msgid "Please log in with your account"
206
- msgstr "請先登入"
216
+ #: templates/registration/login.html:22
217
+ msgid "To save and easily find your maps, identify yourself."
218
+ msgstr ""
207
219
 
208
- #: templates/registration/login.html:41
220
+ #: templates/registration/login.html:25
221
+ msgid "Please log in with your account:"
222
+ msgstr ""
223
+
224
+ #: templates/registration/login.html:42
209
225
  msgid "Username"
210
226
  msgstr "使用者名稱"
211
227
 
212
- #: templates/registration/login.html:44
228
+ #: templates/registration/login.html:45
213
229
  msgid "Password"
214
230
  msgstr "密碼"
215
231
 
216
- #: templates/registration/login.html:51
217
- msgid "Please choose a provider"
218
- msgstr "選擇服務商"
232
+ #: templates/registration/login.html:52
233
+ msgid "Please choose a provider:"
234
+ msgstr ""
219
235
 
220
236
  #: templates/umap/about_summary.html:12
221
237
  #, python-format
@@ -329,19 +345,19 @@ msgstr "這是範例服務﹐提供測試與正式版發行前驗證使用。如
329
345
 
330
346
  #: templates/umap/content_footer.html:5
331
347
  msgid "An OpenStreetMap project"
332
- msgstr ""
348
+ msgstr "開放街圖的專案"
333
349
 
334
350
  #: templates/umap/content_footer.html:6
335
351
  msgid "version"
336
- msgstr ""
352
+ msgstr "版本"
337
353
 
338
354
  #: templates/umap/content_footer.html:7
339
355
  msgid "Hosted by"
340
- msgstr ""
356
+ msgstr "由架設"
341
357
 
342
358
  #: templates/umap/content_footer.html:8
343
359
  msgid "Contact"
344
- msgstr ""
360
+ msgstr "聯絡"
345
361
 
346
362
  #: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
347
363
  msgid "Help"
@@ -356,13 +372,13 @@ msgstr "我的地圖 (%(count)s)"
356
372
  msgid "My Maps"
357
373
  msgstr "我的地圖"
358
374
 
359
- #: templates/umap/dashboard_menu.html:11
375
+ #: templates/umap/dashboard_menu.html:12
360
376
  msgid "My profile"
361
377
  msgstr "我的個人檔案"
362
378
 
363
- #: templates/umap/dashboard_menu.html:13
379
+ #: templates/umap/dashboard_menu.html:15
364
380
  msgid "My teams"
365
- msgstr ""
381
+ msgstr "我的團隊"
366
382
 
367
383
  #: templates/umap/home.html:14
368
384
  msgid "Map of the uMaps"
@@ -376,11 +392,11 @@ msgstr "找點子,瀏覽其他地圖"
376
392
  msgid "You are logged in. Continuing..."
377
393
  msgstr "您已登入,繼續中..."
378
394
 
379
- #: templates/umap/map_list.html:10 views.py:433
395
+ #: templates/umap/map_list.html:11 views.py:433
380
396
  msgid "by"
381
397
  msgstr "由"
382
398
 
383
- #: templates/umap/map_list.html:18
399
+ #: templates/umap/map_list.html:20
384
400
  msgid "More"
385
401
  msgstr "更多"
386
402
 
@@ -555,20 +571,20 @@ msgstr "搜尋"
555
571
  #: templates/umap/team_detail.html:10
556
572
  #, python-format
557
573
  msgid "Browse %(current_team)s's maps"
558
- msgstr ""
574
+ msgstr "瀏覽%(current_team)s的地圖"
559
575
 
560
576
  #: templates/umap/team_detail.html:22
561
577
  #, python-format
562
578
  msgid "%(current_team)s has no public maps."
563
- msgstr ""
579
+ msgstr "%(current_team)s沒有公開地圖"
564
580
 
565
581
  #: templates/umap/team_form.html:24
566
582
  msgid "Delete this team"
567
- msgstr ""
583
+ msgstr "刪除這個團隊"
568
584
 
569
585
  #: templates/umap/team_form.html:47
570
586
  msgid "Add user"
571
- msgstr ""
587
+ msgstr "新增使用者"
572
588
 
573
589
  #: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
574
590
  msgid "Search my maps"
@@ -589,76 +605,76 @@ msgstr "你目前還沒有地圖。"
589
605
 
590
606
  #: templates/umap/user_teams.html:17
591
607
  msgid "Users"
592
- msgstr ""
608
+ msgstr "使用者"
593
609
 
594
610
  #: templates/umap/user_teams.html:48
595
611
  msgid "New team"
596
- msgstr ""
612
+ msgstr "新的團隊"
597
613
 
598
- #: views.py:235
614
+ #: views.py:234
599
615
  msgid "Cannot delete a team with more than one member"
600
- msgstr ""
616
+ msgstr "無法刪除超過一位成員的團隊"
601
617
 
602
- #: views.py:239
618
+ #: views.py:238
603
619
  #, python-format
604
620
  msgid "Team “%(name)s” has been deleted"
605
- msgstr ""
621
+ msgstr "已經刪除團隊 \"%(name)s\" "
606
622
 
607
623
  #: views.py:438
608
624
  msgid "View the map"
609
625
  msgstr "檢視地圖"
610
626
 
611
- #: views.py:824
627
+ #: views.py:820
612
628
  msgid "See full screen"
613
629
  msgstr "檢視全螢幕"
614
630
 
615
- #: views.py:953
631
+ #: views.py:963
616
632
  msgid "Map editors updated with success!"
617
633
  msgstr "地圖編輯者更新完成"
618
634
 
619
- #: views.py:989
635
+ #: views.py:999
620
636
  #, python-format
621
637
  msgid "The uMap edit link for your map: %(map_name)s"
622
638
  msgstr "你的地圖 uMap 編輯連結:%(map_name)s"
623
639
 
624
- #: views.py:992
640
+ #: views.py:1002
625
641
  #, python-format
626
642
  msgid "Here is your secret edit link: %(link)s"
627
643
  msgstr "這是你的祕密編輯連結:%(link)s"
628
644
 
629
- #: views.py:999
645
+ #: views.py:1009
630
646
  #, python-format
631
647
  msgid "Can't send email to %(email)s"
632
648
  msgstr "無法傳送電子郵件到%(email)s"
633
649
 
634
- #: views.py:1002
650
+ #: views.py:1012
635
651
  #, python-format
636
652
  msgid "Email sent to %(email)s"
637
653
  msgstr "電子郵件寄至 %(email)s"
638
654
 
639
- #: views.py:1013
655
+ #: views.py:1023
640
656
  msgid "Only its owner can delete the map."
641
657
  msgstr "只有擁有者可以刪除此地圖"
642
658
 
643
- #: views.py:1016
659
+ #: views.py:1026
644
660
  msgid "Map successfully deleted."
645
661
  msgstr "成功刪除地圖"
646
662
 
647
- #: views.py:1042
663
+ #: views.py:1052
648
664
  #, python-format
649
665
  msgid ""
650
666
  "Your map has been cloned! If you want to edit this map from another "
651
667
  "computer, please use this link: %(anonymous_url)s"
652
668
  msgstr "您的地圖已複製完成!如果您想在不同的機器編輯這個地圖,請使用這個連結:%(anonymous_url)s"
653
669
 
654
- #: views.py:1047
670
+ #: views.py:1057
655
671
  msgid "Congratulations, your map has been cloned!"
656
672
  msgstr "恭喜,您的地圖已被複製!"
657
673
 
658
- #: views.py:1282
674
+ #: views.py:1308
659
675
  msgid "Layer successfully deleted."
660
676
  msgstr "圖層已刪除"
661
677
 
662
- #: views.py:1304
678
+ #: views.py:1330
663
679
  msgid "Permissions updated with success!"
664
680
  msgstr "權限更新完成"
@@ -0,0 +1,35 @@
1
+ from datetime import datetime, timedelta
2
+
3
+ from django.core.management.base import BaseCommand
4
+
5
+ from umap.models import Map
6
+
7
+
8
+ class Command(BaseCommand):
9
+ help = "Remove maps in trash. Eg.: umap empty_trash --days 7"
10
+
11
+ def add_arguments(self, parser):
12
+ parser.add_argument(
13
+ "--days",
14
+ help="Number of days to consider maps for removal",
15
+ default=30,
16
+ type=int,
17
+ )
18
+ parser.add_argument(
19
+ "--dry-run",
20
+ help="Pretend to delete but just report",
21
+ action="store_true",
22
+ )
23
+
24
+ def handle(self, *args, **options):
25
+ days = options["days"]
26
+ since = (datetime.utcnow() - timedelta(days=days)).date()
27
+ print(f"Deleting map in trash since {since}")
28
+ maps = Map.objects.filter(share_status=Map.DELETED, modified_at__lt=since)
29
+ for map in maps:
30
+ map_id = map.id
31
+ map_name = map.name
32
+ trashed_at = map.modified_at.date()
33
+ if not options["dry_run"]:
34
+ map.delete()
35
+ print(f"Deleted map {map_name} ({map_id}), trashed at {trashed_at}")
@@ -0,0 +1,29 @@
1
+ from django.conf import settings
2
+ from django.core.management.base import BaseCommand
3
+
4
+ from umap.models import DataLayer
5
+ from umap.storage.fs import FSDataStorage
6
+
7
+
8
+ class Command(BaseCommand):
9
+ help = "Migrate latest datalayers from filesystem to S3."
10
+
11
+ def handle(self, *args, **options):
12
+ assert settings.UMAP_READONLY, "You must run that script with a read-only uMap."
13
+ assert (
14
+ settings.STORAGES["data"]["BACKEND"] == "umap.storage.s3.S3DataStorage"
15
+ ), "You must configure your storages to point to S3"
16
+ fs_storage = FSDataStorage()
17
+ for datalayer in DataLayer.objects.all():
18
+ geojson_fs_path = str(datalayer.geojson)
19
+ try:
20
+ datalayer.geojson.save(
21
+ datalayer.geojson.name, fs_storage.open(geojson_fs_path)
22
+ )
23
+ except FileNotFoundError as e:
24
+ print(e)
25
+ print(geojson_fs_path, "not found on disk")
26
+ continue
27
+ if options["verbosity"] > 1:
28
+ print("Migrated:", geojson_fs_path)
29
+ datalayer.save(force_update=True)
@@ -0,0 +1,19 @@
1
+ # Generated by Django 5.1.2 on 2024-11-15 11:03
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("umap", "0022_add_team"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterField(
13
+ model_name="datalayer",
14
+ name="uuid",
15
+ field=models.UUIDField(
16
+ editable=False, primary_key=True, serialize=False, unique=True
17
+ ),
18
+ ),
19
+ ]
@@ -0,0 +1,30 @@
1
+ # Generated by Django 5.1.2 on 2024-12-10 16:48
2
+
3
+ from django.db import migrations, models
4
+
5
+ import umap.models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("umap", "0023_alter_datalayer_uuid"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="map",
16
+ name="share_status",
17
+ field=models.SmallIntegerField(
18
+ choices=[
19
+ (0, "Draft (private)"),
20
+ (1, "Everyone (public)"),
21
+ (2, "Anyone with link"),
22
+ (3, "Editors and team only"),
23
+ (9, "Blocked"),
24
+ (99, "Deleted"),
25
+ ],
26
+ default=umap.models.get_default_share_status,
27
+ verbose_name="share status",
28
+ ),
29
+ ),
30
+ ]
@@ -0,0 +1,24 @@
1
+ # Generated by Django 5.1.2 on 2024-11-29 15:45
2
+
3
+ from django.db import migrations, models
4
+
5
+ import umap.models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("umap", "0024_alter_map_share_status"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="datalayer",
16
+ name="geojson",
17
+ field=models.FileField(
18
+ blank=True,
19
+ null=True,
20
+ storage=umap.models.set_storage,
21
+ upload_to=umap.models.upload_to,
22
+ ),
23
+ ),
24
+ ]